Tudo que FeeTads postou
-
(Resolvido)exp potion de acordo com posição do rank
tira o break desse segundo kkkkkk coloca assim: if NaoEstaCinco == 0 then if item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, expOutros) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) return true end end
-
(Resolvido)exp potion de acordo com posição do rank
e pq o else vai contrariar tudo do if kkkkk, tenta tipo assim local name = getNameTopServer() local exp = {5, 4, 3, 2, 1} local NaoEstaCinco = 0 local expOutros = 1 for j=1, 5 do print(name[j]) if name[j] == getPlayerName(cid) and item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, exp[j]) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) NaoEstaCinco = 1 break return true end end if NaoEstaCinco == 0 then if item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, expOutros) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) NaoEstaCinco = 1 break return true end end alias, pode tirar o "print(name[j])"
-
(Resolvido)exp potion de acordo com posição do rank
cara o doPlayerSave(cid, true) é perfeito sim, eu uso no meu server, e não laga nada, porém eu tenho uma estrutura muito boa, se vc tiver muita gente e uma VPS fraca, pode ser que lague, pq ele sempre vai ta executando um save na DB. vc pode sim usar o doPlayerSave(cid, true) porém eu indico vc usar SEMPRE que o player upar, CASO vc tenha uma VPS boa, se não, coloca o doPlayerSave(cid, true) no script mesmo, vai funcionar perfeitamente. caso queira usar o sempre que o player upar (necessário estrutura boa) eu uso esse script: creaturescripts > scripts > advancedSave.lua function onAdvance(cid, skill, oldLevel, newLevel) if(skill == SKILL__EXPERIENCE) then return true end if(skill == SKILL__LEVEL) then --sempre que upar level doPlayerSave(cid, true) -- salva o player (isso da update na DB pode lagar maquina fraca) end return true end creaturescripts > creaturescripts.xml <event type="advance" name="AdvanceSave" event="script" value="advancesave.lua"/> e no creaturescripts > scripts > login.lua procure por "registerCreatureEvents(........)" e adiciona abaixo de qualquer um: registerCreatureEvent(cid, "AdvanceSave") ai da reload no creature, e sempre vai salvar quando upar e lógicamente, vc precisa dar o save no player, logo após o onUse pra ficar tipo salva o player > atualiza na DB > roda o scripts pra saber a pos dele no rank
-
(Resolvido)exp potion de acordo com posição do rank
tenta trocar a função do top pra essa: function getNameTopServer() -- eu alteraria pra getNameTopCinco local i = 1 local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {} if (query:getID() ~= -1) then while(true) do name[i] = query:getDataString("name") i = i + 1 if not(query:next()) then break end end end return name end e troca a outra por essa, vou colocar pra printar, me manda o que aparece no console quando tenta usar local name = getNameTopServer() local exp = {5, 4, 3, 2, 1} local NaoEstaCinco = 0 local expOutros = 1 for j=1, 5 do if name[j] == getPlayerName(cid) and item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, exp[j]) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) NaoEstaCinco = 1 break return true end end if NaoEstaCinco == 0 then if item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, expOutros) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) end end
-
(Resolvido)exp potion de acordo com posição do rank
transforma em table function getNameTopServer() -- eu alteraria pra getNameTopCinco local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {} if (query:getID() ~= -1) then for i=1, 5 do name[i] = query:getDataString("name") end end return name end ai faz um script pra ler os names de 1 a 5 tipo local name = getNameTopServer() local exp = {0.5, 0.25, 0.20, 0.15, 0.10} for j=1, 5 do if name[j] == getPlayerName(cid) and item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, exp[j]) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) return true end end
-
(Resolvido)Como criar itens VIP
1º passo: vc vai baixar no seu PC o itemEditor, ai vc vai pegar do servidor o "items.otb" 2º passo: vc vai abrir o itemEditor, e selecionar a pasta de caminho do seu OT, que contem as sprites dele 3º passo: vc vai procurar o item que vc quer duplicar, ex: demon legs, pra fazer isso vc precisa do ID dela (dano look no jogo), e apertando CTRL e colocando o ID e dando find. 4º feito isso vc vai clicar nesse botão: esse botão duplica o item, o botão da esquerda dele, cria um novo sem atributos, então mt cuidado. fazendo isso, vc salva (CTRL + S) ou salvando por: File > save exclui ou edita o nome do items.otb do seu servidor (indico fortemente você alterar o items.otb existente pra tipo "items1.otb") NUNCA EXCLUIR NA HORA, ou substituir, pois ele vai servir como backup caso algo tenha dado errado. após colocar o items.otb que vc duplicou o item ja no seu servidor vá até o "items.xml" abra copie todo o xml do item que vc duplicou ex: da demon legs, você vai duplicar também (pode ser em qualquer lugar do items.xml, mas eu indico sempre abaixo do ultimo) após duplicar no items.xml, vc vai alterar o ID praquele ID ali, por exemplo na print "12782" ficaria +/- assim o novo item: <item id="12782" name="studded legs VIP"> <!-- o name vc pode por o que quiser, PORÉM o id tem que ser EXATAMENTE o mesmo que foi duplicado --> <attribute key="weight" value="2600" /> <!-- aqui são os atributos ai vc coloca quantos quiser --> <attribute key="armor" value="2" /> <attribute key="slotType" value="legs" /> </item> ai reabre o servidor (NÃO EXISTE /reload items) pra funcionar tem que reabrir o server. e pronto criar seu item novo no jogo da forma que quiser. pra testar pode usar: /i 12782 irá criar o item *** o seu item não será o 12782 terá que ser conforme o teu items.otb ***
-
ERROR no script CRITICAL
não po se vc tiver apanhando na mana, ele vai tirar dano da mana, porém o dano vai ser "-1000" em vermelho pra todos os casos. caso queira que se tiver apanhando em mana, mostrar o dano do critical em azul, só colocar o type, pra ele checar tbm ex: local lvlcrit = 98798645 local multiplier = 2 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if (getPlayerStorageValue(attacker, lvlcrit)*1) >= math.random (1,1000) then --Fix* chance de 1 a 1000 evita bug dano = math.ceil(value*multiplier) if isCreature(cid) then if type == STATSCHANGE_HEALTHLOSS then doCreatureAddHealth(cid, -dano) elseif type == STATSCHANGE_MANALOSS then doCreatureAddMana(cid, -dano) end end addEvent(function() if isCreature(cid) then if type == STATSCHANGE_HEALTHLOSS then doSendAnimatedText(getCreaturePos(cid), "-"..dano, 180) elseif type == STATSCHANGE_MANALOSS then doSendAnimatedText(getCreaturePos(cid), "-"..dano, 30) end end end, 100) if isCreature(attacker) then doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) end end end return true end
-
ERROR no script CRITICAL
só modificar o type pra reconhecer local lvlcrit = 98798645 local multiplier = 2 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if (getPlayerStorageValue(attacker, lvlcrit)*1) >= math.random (1,1000) then --Fix* chance de 1 a 1000 evita bug dano = math.ceil(value*multiplier) if isCreature(cid) then if type == STATSCHANGE_HEALTHLOSS then doCreatureAddHealth(cid, -dano) elseif type == STATSCHANGE_MANALOSS then doCreatureAddMana(cid, -dano) end end addEvent(function() if isCreature(cid) then doSendAnimatedText(getCreaturePos(cid), "-"..dano, 180) end end, 100) if isCreature(attacker) then doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) end end end return true end nesse caso ai que é o meu critical, vai acontecer assim por exemplo: hit hit hit critical > script critical > script tirando 2*hit > dano total = hit + 2*hit (ou seja 3 hits)
-
ERROR no script CRITICAL
essa função eh uma merreca, ela puxa da source, e ela "duplica" pq ela eh um "statsChange" então vc chama ela de novo no script eu indico usar assim: local lvlcrit = 98798645 local multiplier = 2 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if (getPlayerStorageValue(attacker, lvlcrit)*1) >= math.random (1,1000) then --Fix* chance de 1 a 1000 evita bug dano = math.ceil(value*multiplier) if isCreature(cid) then doCreatureAddHealth(cid, -dano) end addEvent(function() if isCreature(cid) then doSendAnimatedText(getCreaturePos(cid), "-"..dano, 180) end end, 100) if isCreature(attacker) then doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) end end end return true end
-
Tornar objeto impossivel de se mover!
não po, tu vai no RME, e bota o brilinho em cima do item que vc não quer que seja movido. ai vc vai no teu items.xml e cria o item com o id 8046 que não existe, por isso ta dando o "report to gamemaster" pq esse item não existe no teu ot EXEMPLO: <item id="8046" article="a" name="NOME-ITEM"> <attribute key="description" value="descricao." /> </item>
-
Tornar objeto impossivel de se mover!
isso mesmo que eu falei, não existe o item 8046 no teu items.xml cria ele conforme oq ele é, se for uma legs, procura por um item de legs, copia e cola e bota o id de 8046, o brilinho ta funcionando normal de não poder mover o item.
-
Tornar objeto impossivel de se mover!
isso ai é pq o item embaixo do brilho não existe no teu items.xml posta teu items.xml em spoiler pf
-
Tornar objeto impossivel de se mover!
como fica o look do item quando ta com o brilinho em cima no seu ot?
-
Script 8.60 não healar os monstros
TFS 0.4 e OTX 2 utilizam o mesmo tipo de script, e TFS0.4 é considerada desatualizada, o certo seria vc modificar sua source, pra OTX2 ou pra TFS1.3, que provavelmente funcionaria, o script está funcionando normalmente, não sei o motivo de não ter funcionado pra você, e provavelmente esse motivo deve ser pela source ser antiga.
-
Script 8.60 não healar os monstros
creio que pode ser sua source então, uso a OTX 2 do mattyx https://github.com/mattyx14/otxserver/tree/otxserv2 caso queira dar uma olhada na source, aqui funcionou normal.
-
Script 8.60 não healar os monstros
de dano ao monstro, isso pode ser sua source mostrando a magia de cura apenas, deixe o monstro na vida amarela, e veja se ele esta curando o monstro realmente
-
Script 8.60 não healar os monstros
testei aqui e não está curando monstro, caso ainda esteja verifique se salvou o arquivo e esta tudo certo.
-
Script 8.60 não healar os monstros
alterei de novo ali, da F5 na pagina, copia o ultimo script que mandei, coloca no seu ot e reabre ele, testei aki e não esta curando monstro, pode ser que precise reabrir pra funcionar.
-
Script 8.60 não healar os monstros
Copia o ultimo script que fiz ai, alterei ali mesmo
-
Script 8.60 não healar os monstros
coloca assim então: local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat1, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat1, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function onGetFormulaValues(cid, level, maglevel) min = (level * 2 + maglevel * 4) * 1.4 max = (level * 2 + maglevel * 4) * 1.6 return min, max end setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") local area1 = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat1, area1) local voc = {1, 2, 3, 4, 5, 6, 7, 8} --vocations que recebem a cura local area = createCombatArea(AREA_CIRCLE1X1) local combat = createCombatObject() setCombatArea(combat, area) function onTargetTile(cid, pos) local creatureTable = {} local n, i = getTileInfo({x=pos.x, y=pos.y, z=pos.z}).creatures, 1 if n ~= 0 then local v = getThingfromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=i}).uid while v ~= 0 do if isPlayer(v) == true then table.insert(creatureTable, v) if n == #creatureTable then break end end i = i + 1 v = getThingfromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=i}).uid end end if #creatureTable ~= nil and #creatureTable > 0 then for r = 1, #creatureTable do if creatureTable[r] ~= nil then if isPlayer(creatureTable[r]) == true and isInArray(voc, getPlayerVocation(creatureTable[r])) == true then return doCombat(cid, combat1, positionToVariant(getCreaturePosition(cid))) end end end end return true end setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) doCombat(cid, combat, positionToVariant(getCreaturePosition(cid))) return true end obs: do jeito que eu fiz ai, caso não tenha player no alcance, não sairá o efeito da magia. caso queira que o efeito saia independente de ter player pra receber, só modificar essa linha: pra: if creatureTable[r] ~= nil then
-
Script 8.60 não healar os monstros
tenta esse script: local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat1, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat1, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function onGetFormulaValues(cid, level, maglevel) min = (level * 2 + maglevel * 4) * 1.4 max = (level * 2 + maglevel * 4) * 1.6 return min, max end setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") local area1 = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat1, area1) local voc = {1, 2, 3, 4, 5, 6, 7, 8} --vocations que recebem a cura local area = createCombatArea(AREA_CIRCLE1X1) local combat = createCombatObject() setCombatArea(combat, area) function onTargetTile(cid, pos) local creatureTable = {} local n, i = getTileInfo({x=pos.x, y=pos.y, z=pos.z}).creatures, 1 if n ~= 0 then local v = getThingfromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=i}).uid while v ~= 0 do if isPlayer(v) == true then table.insert(creatureTable, v) if n == #creatureTable then break end end i = i + 1 v = getThingfromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=i}).uid end end if #creatureTable ~= nil and #creatureTable > 0 then for r = 1, #creatureTable do if creatureTable[r] ~= nil then if isPlayer(creatureTable[r]) == true and isInArray(voc, getPlayerVocation(creatureTable[r])) == true then return doCombat(cid, combat1, positionToVariant(getCreaturePosition(cid))) end end end end return true end setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) doCombat(cid, combat, positionToVariant(getCreaturePosition(cid))) return true end
-
System 8.60 perder x skill a cada morte
tenta assim: function onDeath(cid) if not isPlayer(cid) then return true end for i=1, 7 do -- de 1 a 7 = de club até ML if i ~= 6 then --se for diferente de 6 (6 é fishing) local skills = getPlayerSkill(cid, i) if skills >= 12 then -- se for maior que 12 (só cai até 10, pra proteção de bug) doPlayerAddSkill(cid, i, -2, true) end end end return true end
-
Tornar objeto impossivel de se mover!
tem 2 maneiras de fazer isso, pelo RME, ou por script. pelo RME, vc vai adicionar o "brilinho" em cima do item, o brilinho não eh movivel e nao interfere no look do item. ex: ou vc pode criar um script de creatureScripts, onMoveItem ou onThrow que impossibilite do item ser movido. em grande escala, o brilinho eh mais util, pois vc escolhe qual item pelo RME não será movido. por script *TODOS* os items com aquele ID, não serão movidos, então necessário tomar cuidado. data > creaturescripts > scripts > noMoveItems.lua necessário conter na source a função "onMoveItem" local itemBlock = {12742, 12743} function onMoveItem(item, frompos, pos, cid) if isInArray(itemBlock, item.itemid) then return false end return true end data > creaturescripts > creaturescripts.xml <event type="moveitem" name="NoMoveItems" event="script" value="NoMoveItems.lua"/> OU usar o onThrow (esse possivelmente ja existe na sua source) local itemBlock = {12742, 12743} function onThrow(cid, item, fromPosition, toPosition) if isInArray(itemBlock, item.itemid) then return false end return true end data > creaturescripts > creaturescripts.xml <event type="throw" name="NoMoveItems" event="script" value="NoMoveItems.lua"/> necessário registrar o evento pra qualquer uma que usar. data > creaturescripts > scripts > login.lua procurar por qualquer RegisterCreatureEvent e coloca abaixo registerCreatureEvent(cid, "NoMoveItems")
-
(Resolvido)criei um item que é de encantamento.
coloca no movement o move do 44745 também, coloca os 2, provavelmente vc colocou só 1 <movevent type="Equip" itemid="44745" slot="necklace" level="100" event="function" value="onEquipItem"> <vocation id="3"/> <!-- vocation que usa esse item, excluir a tag pra liberar pra todos --> </movevent> <movevent type="DeEquip" itemid="44745" slot="necklace" event="function" value="onDeEquipItem"/>
-
(Resolvido)Nascer monstro a cada x tempo [ 8.60 ]
sim, pasta world, vai no teu spawn.xml, procura pelo monster e altera pelo time de horas que vc quiser.