Jump to content

Tottin

Member
  • Content Count

    27
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by Tottin

  1. Isso não é o problema no executavel do client em si, mas sim conflito da source do servidor com o client, aparentemente 1 deles está extendido e o outro não
  2. Vai no arquivo.lua da magia, ao invés de setar a position do efeito antes de iniciar o for, define essa position dentro do for, então sempre que executar o for, ele vai pegar a posição atual do player e rodar o efeito nessa posição.
  3. @hiquezerah Abre o arquivo da lib, vai na linha 110, nela contém 1 caractere inesperado, deleta ele e esse erro vai estar resolvido.
  4. Sobre a limitação gerada por utilizar storage, sim de fato com o tempo pode ser tornar 1 problema. Porém sobre o bug de vender por X preço e recomprar mais barato, ele na verdade não existe, a não ser que o usuário cause esse bug. Basicamente, na tabela dos items é definido o preço base de compra e o preço de venda, o preço de compra nunca será aumentado, indiferente da quantidade desse item no estoque, ele vai apenas reduzir o preço, se o player vender 1000 unidades de 1 única vez, ele iria vender as 1000 unidades pelo preço 10, e quando fosse comprar, iria pagar 20 por cada unidade.
  5. O estoque não reseta com o server save, a única forma de alterar o estoque seria comprando os items que o npc tem disponível para venda. O tópico já foi criado na área de sistemas para tfs 0.x
  6. Explicação do Sistema Recentemente foi levantada uma ideia de Sistema no Discord da Academia de Programação: O sistema consiste em dar maior liberdade pro mercado e tirar a parte monótona dos NPCS que basicamente sempre vendem/compram tudo ao mesmo preço, assim ficando muito longe da realidade de 1 verdadeiro vendedor. A ideia é que o NPC venda produtos com base no que ele tenha em estoque, logo para ele vender 1 Blusa ele 1° irá precisar comprá-la de alguém. Exemplificando: O NPC só irá vender aquilo que comprar, se ele comprar 1 Blusa ele irá disponibilizar para vender 1
  7. Mano não é por nada, mas o tópico é de 2014, se tu tiver interesse em alguma alteração pra esse sistema, cria 1 novo tópico explicando o objetivo da script, ve se alguém faz pra você, ou então acessa o discord da academia e pede suporte por lá, até mesmo anuncia no classificados.
  8. Troca essa parte da script: if (isPlayer(target)) then doPlayerSendCancel(cid, "This spell can only be used in Player.") return false end por esta: ifnot (isPlayer(target)) then doPlayerSendCancel(cid, "This spell can only be used in Player.") return false end
  9. Deu editei lá denovo, e sim somente quem bater no boss vai receber a storage, mesmo que esteja perto ou na party, não irá receber se não atacar.
  10. Tenta denovo, editei ali, estava faltando o fechamento de um if.
  11. Resolvendo seu problema onde ao matar o monstro só quem fragava recebia o storage: local tps = { ["hyaena"] = {pos = {x=349, y=1103, z=15}, toPos = {x = 518, y = 840, z = 7}, time = 10, storage = 46000}, } local storage = 46000 local function removeTp(tp) local t = getTileItemById(tp.pos, 5023).uid return t > 0 and doRemoveItem(t) and doSendMagicEffect(tp.pos, CONST_ME_POFF) end function onDeath(cid, corpse, deathList, frompos, topos) local tp = tps[getCreatureName(cid)] if tp then doCreateTeleport(
  12. Mas se o evento onDeath só ativa em monstros cujo tiveram a tag da script registrada (me corrija se eu estiver errado), não seria 1 tanto quanto desnecessário adicionar uma checagem pra ver se o monstro morto deve ou não ativar a script de autoloot, sendo que bastaria não registrar a tag nos monstros que você não quer que ative a script. Claro que a situação mudaria se a função fosse de onKill.
  13. Isso tudo vai variar da forma com que você quer fazer seu script, sua dúvida principal era sobre como trabalhar em cima da defesa do shield. E isso como mencionei acima pode ser feito da seguinte forma, utilizando a função: getItemAttribute(uid,'defense') Pra checar se o item é 1 shield, você pode utilizar uma função que o mock disponibilizou já faz um bom tempo: local function isShield(uid) -- Function by Mock the bear. uid = uid or 0 if getItemWeaponType(uid) == 5 then return true end return false end Com isso você vai ter todas informações necessári
  14. Cara vou te passar um código que fiz pra 0.4, deve funcionar pra 0.36 também: código lua: local config = { itemid = 1451, itemid2 = 1451, itemid3 = 1451, pos = {x=718, y=1534, z=10}, pos2 = {x= 107, y=1507, z=8}, pos3 = {x= 111, y=1507, z=8}, chance = 50 } function onTime(interval) if config.chance >= math.random(1, 100) then doBroadcastMessage("Os items X Y Z foram spawnados!") --- Caso queira que mande uma mensagem pra todos players online, ja deixei pronto. doCreateItem(config.itemid, 1, config.pos)
  15. Vou te mandar a script que uso em meu servidor, com o texto adicionado já, possivelmente deve resolver seu problema, segue a script: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1.0, 0, 1.0, 0) function onUseWeapon(cid, var) local chance = 20 if chance <= math.random(1,100) then doCombat(cid, combat, var) else doCreatureSay(cid, "DOUBLE HIT",
  16. Exatamente, a primeira parte é pra "registrar as posições do efeito" (isso dentro da tabela), na segunda parte é onde a script vai trabalhar em cima dessas posições pra executar o efeito na posição desejada. Basta trocar esta linha do seu script: addEvent(doAreaCombatHealth, 100, cid, wx.dmg, getThingPos(target), 0, -min, -max, wx.ef) por estas duas: local pos = {x = getThingPos(target).x + (wx.posx), y = getThingPos(target).y + (wx.posy), z = getThingPos(target).z} -- Aqui vai trabalhar em cima das posições definidas la na tabela. addEvent(doAreaCombatHealth, 100, cid, wx.d
  17. Provavelmente ta dando erro pela versão de seu servidor. Se ainda tiver precisando disso, testa desta forma: Troca esta linha: target:say("!DOUBLEHIT", TALKTYPE_MONSTER_SAY) ,<<<<<<<<<<<<<<<<<<<<< por esta: doCreatureSay(target, "DOUBLE HIT", 19)
  18. Pra obter a defesa de 1 item você pode fazer da seguinte forma: 1º escolhe o slot a ser conferido. (Provalvemente mão direita/esquerda). 2º utiliza esta função: getItemAttribute(uid,'defense') pra obter a defesa do item. A forma que você vai aplicar isso dentro do script vai depender muito do que você deseja fazer nela. Mas em geral com isso você ja vai obter a defesa do seu shield.
  19. É, bem provável que eu esteja confundindo, são sistemas "bem similares" né, mas td bem.
  20. Meu querido, eu acabei de te mandar exatamente isso, ele vai enviar o loot pra quem fragou o monstro. Se o jogo te reconheceu como "dono do loot" então o loot vai ser enviado pra você, Vou ser gente boa e vou montar a função pra tu. Isso possivelmente vai resolver o seu problema, se não funcionar, então seu servidor reconhece o "dono do loot" de outra forma. Seria interessante descobrir qual. function onDeath(cid, corpse, lastHitKiller, mostDamageKiller) local killer = lastHitKiller[1]pos = getCreaturePosition(cid)addEvent(loot,1,killer,pos)return trueend
  21. Isso, a forma como você vai aplicar a script no jogo vai de sua imaginação, basta por 1 checagem de storage antes desta linha: if combat == COMBAT_PHYSICALDAMAGE then e sim é 1 creaturescript, a tag xml seria +ou- isto: <event type="statschange" name="Nomedoevento" event="script" value="nomedoarquivo.lua"/>
  22. Você pode fazer isso utilizando a função onStatsChange. Basicamente bastaria conferir se o dano recebido é de X elemento (fire, ice, etc), então multiplica esse dano por 0.95(exemplo, neste caso iria reduzir em 5% o dano recebido). Vou deixar 1 exemplo que você pode usar, caso deseje: function onStatsChange(cid, attacker, type, combat, value) if value >= 1 and (type == STATSCHANGE_HEALTHLOSS or (getCreatureCondition(cid, CONDITION_MANASHIELD) and type == STATSCHANGE_MANALOSS)) then if combat == COMBAT_PHYSICALDAMAGE then local damage = value * 0.95
  23. O problema ta justamente em você possuir + de 1 item que faz essa função. Se você sempre trabalhar com vida máxima, então digamos que: 1 player em nenhum item tem: 10.000 de vida. 1 player com 1 legs que aumente 2.000, tem: 10.000 + 2.000 de vida. Porém, quando o player equipar 1 segundo item de vida, é ai que o problema começa: 1 player com 1 legs que aumente 2k equipado, ao equipar 1 armor que aumente + 2k, vai ficar basicamente assim: 12k+2k = 14k, porém ao retirar, ele vai setar a "vida máxima" do player, em 12k, quando na vrdd deveria ser 10k de vida máxima e 2k de vida "extra".
  24. Basicamente tu pode adicionar na tabela as posições de cada efeito. "Como assim?" Simples, pra centralizar um efeito você vai precisar definir por exemplo: x + 1, y + 2, esses valores você pode adicionar direto na tabela de acordo com cada efeito.(Isso vai permitir que você adicione efeitos em posições diferentes, de acordo com o que você definir dentro da tabela). Vou deixar um exemplo de como você pode fazer isso e aplicar no script. local w = { [1] = {ef = 173, sh = 41, dmg = COMBAT_FIREDAMAGE, posx = 1, posy = 1}, -- Isto seria a aplicação dentro da tabela, bastaria replicar em cada
×
×
  • Create New...

Important Information

Confirmação de Termo