Tudo que Tottin postou
-
[OTC] Tela buga ao usar DistanceEffect enquanto anda
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
-
coom consertar esse "bug" o efeito não acompanha o player
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.
-
Task Lib
@hiquezerah Abre o arquivo da lib, vai na linha 110, nela contém 1 caractere inesperado, deleta ele e esse erro vai estar resolvido.
-
Sistema de Estoque para NPC's.
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. Então, a não ser que a pessoa defina o preço de compra superior ao preço de venda, esse bug eu acredito que não iria acontecer. Mas em geral, obrigado pelo feedback.
-
Sistema de Estoque para NPC's.
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
-
Sistema de Estoque para NPC's.
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 Blusa, se ele comprar 7 Blusas, ele irá disponibilizar pra vender 7 Blusas, ao acabar elas, o seu estoque fica vazio e ele deixa de vender até comprar mais. O preço que o NPC paga pelo seus produtos é baseado na quantidade de seu estoque, e o valor que ele cobra ao vender os produtos é definido previamente em 1 configuração. Exemplo: Quanto + item do mesmo produto o NPC tiver, + barato ele irá pagar nos mesmos, visto que ele já possui 1 estoque grande e na teoria esse produto não é um produto que possui 1 saída muito fácil. Ao mesmo tempo, quanto menor a quantidade de 1 mesmo produto em seu estoque, mais caro ele irá pagar, já que seu estoque sobre aquele produto é pequeno, o que indica que: Ou ele é muito raro, ou ele vende muito fácil, por isso o NPC irá demonstrar + interesse por ele. O preço que o NPC cobra é definido previamente e pode ser alterado sempre que desejar. Abaixo, o preço de 1 Pearl Shield que o NPC não possui em estoque: E agora, após o NPC ter comprado 10 Shields do mesmo: Enfim, agora que o sistema já foi previamente explicado, vamos a instalação: 1º Vá para data/lib/ e crie 1 arquivo chamado npc_system.lua, nele você irá adicionar o seguinte código: 2º Agora vá para data/npcs, crie 1 arquivo chamado: negociante.xml, nele você irá adicionar o seguinte código: 3º Agora vá para data/npcs/scripts, crie 1 arquivo chamado: negociante.lua, nele você irá adicionar o seguinte código: Instalação finalizada, as áreas configuráveis do sistema estão informadas na lib. Créditos: Academia de Programação: Por ter levantado a ideia do sistema. @Endless: Por ter ajudado em uma questão de lógica. E a mim por ter feito. (Eu acho). Informações adicionais: -> O sistema foi testado e não apresentou problemas, porém se vierem a encontrar falhas, favor reportar para que eu possa manter o tópico atualizado/corrigido. -> Eu faço correções no sistema caso esteja errado, mas não faço adaptações pro seu servidor. Caso queira variações do sistema, favor enviar seu pedido no discord da Academia de Programação, ou em meu privado: Admin#9865.
- Voodoo
-
(Resolvido)[Pedido] Script Dimensão
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
-
(Resolvido)Setar storage para todos em uma determinada área
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.
-
(Resolvido)Setar storage para todos em uma determinada área
Testa agora
-
(Resolvido)Setar storage para todos em uma determinada área
Tenta denovo, editei ali, estava faltando o fechamento de um if.
-
(Resolvido)Setar storage para todos em uma determinada área
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(5023, tp.toPos, tp.pos) doCreatureSay(cid, "O teleport irá sumir em "..tp.time.." segundos.", TALKTYPE_ORANGE_1) addEvent(removeTp, tp.time*1000, tp) for _, check in pairs(deathList) do if isPlayer(check) then setPlayerStorageValue(check, tp.storage, 5) end end end return true end registra no creaturescripts: <event type="death" name="Storage" event="script" value="seuarquivo.lua"/> registra no arquivo.xml do boss: <script> <event name="Storage"/> </script>
-
[Ajuda] função onDeath
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.
-
(Resolvido)Spell de dano baseado no shield
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árias pra fazer seu script trabalhar em cima da defesa do shield que estiver equipado, e claro vai poder checar se o item que você está "pegando" a defesa, é de fato um shield ou não.
-
(Resolvido)GlobalEvent criar item no mapa
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) doCreateItem(config.itemid1, 1, config.pos2) doCreateItem(config.itemid2, 1, config.pos3) end return true end tag no xml: <globalevent name="nomedoevento" time="04:05:00" event="script" value="nomedoarquivo.lua"/>
-
script para arma double hit
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", 19) doCombat(cid, combat, var) addEvent(doCombat, 500, cid, combat, var) end return true end
-
preciso de ajuda com um script que tenho
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.dmg, pos, 0, -min, -max, wx.ef) -- E aqui vai aplicar o efeito na posição final.
-
script para arma double hit
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)
-
(Resolvido)Spell de dano baseado no shield
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.
-
[Ajuda] função onDeath
É, bem provável que eu esteja confundindo, são sistemas "bem similares" né, mas td bem.
-
[Ajuda] função onDeath
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
-
Resistencia temporaria
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"/>
-
Resistencia temporaria
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 doTargetCombatHealth(cid, attacker, combat, -damage, -damage, 0) return false end end return true end
-
script sendo chamado várias vezes (eu acho)
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". Eu recomendo você fazer essas scripts trabalhando com condições e não setando vida máxima.
-
preciso de ajuda com um script que tenho
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 linha adicionada. Agora para fazer a script reconhecer essas posições definidas basta fazer o seguinte: 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.dmg, pos, 0, -min, -max, wx.ef) -- E aqui vai aplicar o efeito na posição final. Espero ter ajudado. Se ficar alguma dúvida só falar.