Jump to content
Close

jefersonzc

Member
  • Content Count

    27
  • Joined

  • Last visited

About jefersonzc

  • Rank
    Craftsman

Profile Information

  • Gender
    Masculino
  • I am
    Tibiano

Recent Profile Visitors

1972 profile views
  1. Mano, dá uma olhada no meu post. Eu precisava de uma parada parecida e tive que fazer do zero. Você vai ter modificar algumas coisas a seu gosto, mas basicamente, vc precisa checar se o ip do char é igual a 0. E cuidado com isso pq se o cara der quit durante uma batalha pvp, ele seria kickado tbm, por isso eu julguei importante definir a room onde o char levará o kick. Em qualquer outro lugar do mapa ele não tomaria esse kick.
  2. Galera, não tenho certeza se esse tópico se encaixa em scriping ou em programação, então desculpa se errei. Enfim, estou usando o TFS 1.3 do Mark Samman, nele já vem configurado na source as opções de mana leech, life leech e de critical, basta você relacionar esses atributos dentro dos itens. <attribute key="manapointsleechchance" value="25" /> <attribute key="manapointsleechamount" value="5" /> <attribute key="hitpointsleechchance" value="25" /> <attribute key="hitpointsleechamount" value="5" /> <attribute key="criticalhitchance" value="10" /> <attribute key="criticalhitamount" value="50" /> Pois bem, o mana leech e o life leech aparentam estar funcionando de boas, não precisei configurar nada, só chamar os atributos mesmo. O problema ta no critical, ele aparenta funcionar, mas só aparenta mesmo. Ele exibe a animação de critical no jogo, mas nao faz nenhuma diferença no dano causado nos mob. Já fiz vários testes com porcentagens diferentes, já coloquei 1% e 300%no criticalhitamount, mas não muda nada no dano que a criatura leva. dei uma fuçada nos arquivos do servidor e não achei nenhum lua que se refira às opções de leech e critical, ao que tudo indica, isso seria algo da source (acho eu). Alguém poderia me dar uma luz? Não sei se estou fazendo algo errado ou não, se esqueci alguma coisa....
  3. Depois de muito bater cabeça eu consegui achar uma solução quase perfeita para o problema. Então vou compartilhar aqui a solução, vai que ajuda outros... Bom, primeiramente em items.xml precisamos configurar as skills do item, o tempo, etc. Como a ideia é que o item desapareça depois de algum tempo, vou por um decayTo 0. <item id="25971" article="a" name="Chopper of Corruptedheart"> <attribute key="weight" value="5000" /> <attribute key="defense" value="35" /> <attribute key="attack" value="56" /> <attribute key="skillAxe" value="3" /> <attribute key="weaponType" value="axe" /> <attribute key="decayTo" value="0" /> <!--faz o item sumir depois que seu tempo expira--> <attribute key="duration" value="360000" /> <attribute key="showduration" value="1" /> <attribute key="slotType" value="two-handed" /> </item> Reparem que não configurei o transformEquipTo e o transformDeEquipTo, pois meu item não tem duas sprites (como no caso dos rings e da soft) Agora em movements.xml eu preciso configurar quem pode ou não usar o item. <movevent event="Equip" itemid="25971" slot="hand" level="0" function="onEquipItem"> <vocation name="Knight" /> <vocation name="Elite Knight" showInDescription="0" /> </movevent> <movevent event="DeEquip" itemid="25971" slot="hand" function="onDeEquipItem" />< Por se tratar de uma arma, vou precisar configurar tbm o weapons.xml (se fosse um helmet, um ring ou algo do gênero, eu poderia pular essa etapa). <melee id="25971" unproperly="1"> <vocation name="Knight" /> <vocation name="Elite Knight" showInDescription="0" /> </melee> Blz, até aqui nada de novo, tudo isso a gente já precisa fazer quando vai criar qualquer item novo, certo? Mas é agora que vem o pulo do gato (o gato que no caso sou eu 😎, rsrs). Em data/events/scripts/events.xml vamos habilitar o onMoveItem. <event class="Player" method="onMoveItem" enabled="1" /> E em data/events/scripts/player.lua, vamos configurar a função onMoveItens. function Player:onMoveItem(item, count, fromPosition, toPosition, fromCylinder, toCylinder) local itensVIP = {25187,25175,25185,25429,25946,25915,25971} --todos os itens que eu preciso configurar for i = 1, #itensVIP do if item.itemid == itensVIP[i] then item:decay() --toda vez que um item for movido, ele checa se faz parte dos itensVIP e starta o decay. end end return true end Resumidamente o resultado vai ser: 1. O tempo do item não para de decair, independente dele estar no slot, na bp, na casa, no dp, etc. Ok 2. Com o char deslogado, o tempo para de contar. Ok 3. Se o player deixar o item no DP e relogar o char, o tempo do item fica pausa, mas volta cair quando ele der move no item. Ok 4. O meu site possui um sistema de compra de itens que adiciona tal item no char. Quando o player compra o item que configuramos, o tempo dele vem pausado e se tal item cair dentro do seu respectivo slot (exemplo: o char compra uma sword e ele nao tem nenhuma sword na mão, logo, o a sword vai cair direto no slot dela), o tempo permanecerá pausado até que o char mova essa sword para a bp ou relogue. Bom, não era exatamente isso que eu queria, mas acho que posso considerar esse um bug pequeno e que não trará nenhum efeito colateral negativo, posto que cedo ou tarde esse char terá que relogar, no máximo ele irá conseguir umas horas há mais com o item, então, acho que ok.
  4. Se essa for a seção errada, desculpa. Bom, criei uns itens vips que dão atributo para os players, mas esses itens possuem tempo, e somem quando o tempo acaba. (decayTo O). Não usei as funções onEquipe e onDeEquipe por duas razões: 1. Não tenho IDs com sprites repetidos para esses itens e não quero mexer no meu OTB pq já deu ruim outras vezes. 2. A intenção era que o tempo continuasse contando mesmo com o item dentro da mochila, ou seja, não adianta desequipar o item que O Tempo Não Para (já dizia Cazuza, rsrs). Até aí tudo bem. Mas acabei descobrindo um bug... se o player guardar o item no depot e depois deslogar, quando ele relogar e pegar o item do depot outra vez, o tempo buga e fica parado. E só volta a ser contato caso ele relogue com o item no char outra vez. Ou seja, se o cara for malando, ele fica com o item pra sempre, pq basta ficar guardando ele no dp sempre que for deslogar. Preciso resolver isso de alguma forma, aceito sugestões. Alguém poderia me ajudar? PS.: Uso TFS 1.3
  5. Opa, bom saber dessa segunda saída. Poderá ser útil ainda. Obrigado.
  6. Não precisa ser exatamente Pagseguro, queria qualquer sistema de compra de pontos automática. Pode ser paypal ou outro, desde que funcione e seja algo mais simples de implementar
  7. Olá, não sei se estou postando na área correta, então já peço desculpas de antemão Bom, uso o Znote AAC no meu servidor (que roda em um Raspberry). Por diversas razões eu achei o Znote muito melhor e mais simples do que o Gesior e por tanto não tenho planos de migrar. Enfim, a questão é que estou tendo muita dificuldade em encontrar um sistema de pontos automático que funcione no Znote. Todos os que eu pesquisei não funcionaram, pois são sistemas antigos, de alguns anos atrás. O Pagseguro, por exemplo, já mudou sua API, o Paypal também já sofreu alterações, então, tudo que funcionava há alguns anos, parece não funcionar mais. Até o próprio sistema que já vem pré-configurado no Znote não parece funcionar. Eu não manjo dessa parte de integrações, alguém poderia me ajudar com algum sistema de pontos que seja simples e funcional? Desde já agradeço.
  8. Bom, resolvi desenvolver eu mesmo uma solução, me baseando nos scripts que encontrei pelo caminho Segue abaixo. 1. Em data/creaturescripts/scripts/login.lua, acrescente: player:registerEvent("Idle") 2. Em data/creaturescripts/creaturescripts.xml, acrescente: <event type="think" name="Idle" script="idle.lua"/> 3. Na pasta data/creaturescripts/scripts, crie o arquivo idle.lua, com o seguinte código: local room = { x1 = 1542, x2 = 1608, y1 = 1528, y2 = 1556, z1 = 8, z2 = 8 } function onThink(player, interval) local target = player:getTarget() if (player:getIp() > 0) then return true else local pos = player:getPosition() if ((pos.x >= room.x1 and pos.x <= room.x2) and (pos.y >= room.y1 and pos.y <= room.y2) and (pos.z >= room.z1 and pos.z <= room.z2)) then doRemoveCreature(player) end end return true end Depois é só configurar o script com as coordenadas da sua room (onde ficam os trainers). Pronto, qualquer player que der quit ali dentro, esteja ele atacando os trainers ou não, vai levar kick alguns segundos depois. Podem fechar como resolvido
  9. TFS 1.3 - Mark Samman Olá a todos, Estou com esse problema e não consigo resolver: Quando o player dá exit nos trainers ele não leva kick. Já fiz várias pesquisas aqui e em outros fóruns, mas nenhuma das possibilidades apresentadas me serviu. Tentei esse script: Mas não funcionou porque aparentemente o meu TFS não possui a função getCreatureNoMove(cid). Tentei também através do config.lua, mas ele não tem nenhuma dessas funções: idleWarningTime idleKickTime stopAttackingAtExit Tentei adicioná-las mas elas não funcionam. Bom, tenho algumas ideias para resolver o problema, mas não sei por onde começar. 1- A melhor opção seria se eu de fato conseguisse fazer o char parar de atacar quando desse exit. Mas já que não consigo configurar isso pelo confi.lua, como poderia fazer? 2- Posso criar uma rotina que checa se o player está "dançando", mas como verifico se ele mudou de direção? Existe alguma função que verifica o movimento do char no mesmo sqm? 3- Aceito ideias que não sejam complexas demais (rsrs).
  10. Não, não estava. Acho que sem querer substituí esse bendito arquivo pelo antigo. Parece que resolveu, muito obrigado fera
  11. Oi Bruno, posso ter me confundido na versão, creio que seja 1.3 mesmo, eu peguei do Git oficial do forgottenserver. O tfs foi compilado ontem, e não foi feita nenhuma alteração nos arquivos que postei. Mas vou testar esse que vc passou e posto o resultado.
  12. Estou com o seguinte erro: Lua Script Error: [Spell Interface] in callback: data/spells/scripts/monster/betrayed_wraith_skill_reducer.lua:onTargetCreature (Unknown scriptfile) ...spells/scripts/monster/betrayed_wraith_skill_reducer.lua:11: attempt to call method 'addAttributeCondition' (a nil value) Já revirei a internet buscando a solução mas não encontrei. Uso TFS 1.2 (forgottenserver by Marksamman). O código do spell é esse: local combat = Combat() combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_YELLOW_RINGS) combat:setArea(createCombatArea(AREA_SQUAREWAVE5)) local parameters = { {key = CONDITION_PARAM_TICKS, value = 5 * 1000}, {key = CONDITION_PARAM_SKILL_DISTANCEPERCENT, value = 80} } function onTargetCreature(creature, target) target:addAttributeCondition(parameters) end combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") function onCastSpell(creature, variant) return combat:execute(creature, variant) end E o do monster não tem nada de mais, apenas a chamada da função: <attacks> <attack name="melee" interval="2000" min="0" max="-450" /> <attack name="betrayed wraith skill reducer" chance="10" /> <attack name="speed" interval="2000" chance="20" range="7" target="1" speedchange="-600" duration="3000"> <attribute key="shootEffect" value="suddendeath" /> <attribute key="areaEffect" value="mortarea" /> <attribute key="areaEffect" value="smallclouds" /> </attack> </attacks> Imagino que seja falta de alguma lib, mas não sei qual, alguém poderia ajudar?
  13. Creio que você não entendeu bem. Eu coloquei chance="0" justamente para testar se a raid não iria acontecer, e mesmo assim ela aconteceu. Ou seja, independente do número que eu coloque no chance, a raid SEMPRE acontece. Mas tudo bem, fiz uma gambiarra que deu certo, vou postar aqui para futuras pessoas com o mesmo problema. ------------------------------------------ SOLUÇÃO -------------------------------------------- Bom, aqui vai a gambiarra solução: Já que o servidor em questão dá SS uma vez por dia, vou colocar um tempo e uma margem alta o suficiente no meu arquivo raids.xml (maior que 1 dia), de forma que as raids NUNCA aconteçam através dele. <?xml version="1.0" encoding="UTF-8"?> <raids> <raid name="Orcs" file="normal/Orcs.xml" chance="0" interval2="99999" margin="99999" /> <raid name="Pirates" file="normal/Pirates.xml" chance="0" interval2="99999" margin="99999" /> </raids> Agora em globalevents.xml vou inserir a seguinte linha: <globalevent name="Raids" interval="3600000" script="raids.lua"/> OBS 1.: interval="3600000" equivale à 1h, ou seja, de hora em hora o arquivo vai tentar executar as raids Então criei um raids.lua dentro de /data/globalevents/scripts local RAIDS = { [1] = {name = "Orcs", chance = 1}, -- nome da raid e chance em % [2] = {name = "Pirates", chance = 1}, -- nome da raid e chance em % } function onThink(interval, lastExecution) for i = 1,#RAIDS do local x = math.random(1, 100) if x <= RAIDS[i].chance then executeRaid(RAIDS[i].name) end end return true end OBS 2.: O nome da raid nesse arquivo tem que ser igual ao nome da raid em raids.xml OBS 3.: Não cheguei a testar, mas acho que quando uma raid acontece, outra não pode acontecer imediatamente em seguida. Para manter um melhor equilíbrio, aconselho a deixar as raids em ordem crescente de chances

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!

×
×
  • Create New...