Ir para conteúdo

carvaroth

Membro
  • Registro em

  • Última visita

Solutions

  1. carvaroth's post in (Resolvido)EXP HIT NÃO RECONHECE MONSTROS. was marked as the answer   
    Alguém?
    EDITED 21/06/2022
    Senhores, futuramente, caso alguém precise, deixo a solução abaixo:
    Para que os monstros fossem reconhecidos, é necessário que o nome dele esteja igual em todas as partes do script monster.xml.
    Por exemplo, os monstros do sistema de WOE, possuiam uma abreviação de "pre1", "pre2", "emp", e os nomes deles no jogo eram Emperium.
    Basicamente o que fiz, foi alterar o script do WOE e mudar o nome dos monstros.
    Vou deixar abaixo um exemplo, pois explicando pode parecer confuso.
    Script antigo de um monstro do WOE:
    Script novo:

  2. carvaroth's post in EXP HIT NÃO RECONHECE TREINER was marked as the answer   
    Pessoal, boa noite.
    Instalei um Exp hit no meu servidor, porém ao atacar o treiner ele mostra esse erro na distro.
    Acredito que o exp hit não reconheça o monstro chamado Treiner Tibia, e por esse motivo retorna esse erro.
    Alguém conseguiria me ajudar com alguma função para que esse erro não surgisse na distro ao atacar o treiner ou qualquer outro tipo de monstro que tenha um nome diferente dos comuns?
    Agradeço.
    Qual servidor ou website você utiliza como base? 
    TFS 0.4
    Qual o motivo deste tópico? 
    DUVIDA COM SCRIPT
    Está surgindo algum erro? Se sim coloque-o aqui. 
     
    Você tem o código disponível? Se tiver publique-o aqui: 
    -- CONFIGURAÇÕES DE EXPERIENCIA --
    useStages = true -- Usar sistema de Stages , true/false
    premiumMultipliqueExp = 1 -- Players Premiums terão exp multiplicada, caso não querer deixe 1.
    rateExp = 50 -- Exp caso não for usar stages.

    local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA  REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.)
        ["1-50"] = 150,
        ["51-80"] = 100,
        ["81-100"] = 80,
        ["101-150"] = 70,
        ["151-180"] = 60,
        ["181-200"] = 50,
        ["201-230"] = 45,
        ["231-250"] = 40,
        ["251-280"] = 35,
        ["281-300"] = 30,    
        ["301-320"] = 25,    
        ["321-350"] = 20,    
        ["351-400"] = 15,    
    }
    ultimateExp = 10 -- exp que vai usar caso o level do player não tiver mais na tabela .
    -- CONFIGURAÇÕES DA PARTY
    partyPorcent = 40 -- Quantos Porcento da exp vai para os membros da party
    levelBlockParty = 1000 -- Diferença Maxima de Level permitida para membro da party ganhar exp.
    expShareRadiusX = 30 -- Distancia maxima permitida no eixo X para membro da party ganhar exp.
    expShareRadiusY = 30 -- Distancia maxima permitida no eixo Y para membro da party ganhar exp.
    expShareRadiusZ = 1 -- Distancia maxima permitida no eixo Z para membro da party ganhar exp.
    -- CONFIGURAÇÕES DE RINGS --
    local rings = { -- [ID DO ANEL] = EXP MULTIPLICADA POR X EXP.
        [3048] = 2,
        [3049] = 4,
        [3050] = 6,
    }
    -- FIM DAS CONFIGURAÇÕES --

    function CalculeExp(monsterhp, exptotal, hit)
        hit = hit <= monsterhp and math.ceil(exptotal * hit / monsterhp) or 0
        return hit < 0 and 0 or hit
    end
    function isSummon(cid)
    return getCreatureMaster(cid)
    end
    function onStatsChange(cid, attacker, type, combat, value)
        if isPlayer(attacker) and isMonster(cid) then
            if getCreatureStorage(cid, 50001) ~= 1 then
                doCreatureSetStorage(cid, 50002, getMonsterInfo(getCreatureName(cid)).experience * rateExp)
                doCreatureSetStorage(cid, 50001, 1)
            end
        end
        if type == STATSCHANGE_HEALTHLOSS then
            if isMonster(cid) then
                if isCreature(attacker) then
                    local _cid = isSummon(attacker) and getCreatureMaster(attacker) or attacker
                    if isPlayer(_cid) then
                        if useStages then
                            for strstage, experience in pairs(stages) do
                                tabstage = string.explode(strstage, "-")
                                if getPlayerLevel(_cid) >= tonumber(tabstage[1]) and getPlayerLevel(_cid) <= tonumber(tabstage[2]) then
                                    ultimateExp = experience
                                end
                            end
                            experienceRate = ultimateExp
                        else
                            experienceRate = rateExp
                        end
                        local expgain = CalculeExp(getCreatureMaxHealth(cid), getMonsterInfo(getCreatureName(cid)).experience * experienceRate, value)
                        if getCreatureStorage(cid, 50002) > 0 then
                            if getCreatureStorage(cid, 50002) - expgain < 0 then
                                expgain = getCreatureStorage(cid, 50002)
                            end
                            doCreatureSetStorage(cid, 50002, getCreatureStorage(cid, 50002) - expgain)
                            local ringexp = 1
                            for idring, expring in pairs(rings) do
                                if getPlayerSlotItem(_cid, 9).itemid == idring then
                                    ringexp = expring
                                    break
                                end
                            end
                            local premiumMultipliqueExp = isPremium(_cid) and premiumMultipliqueExp or 1
                            expgain = expgain * ringexp * premiumMultipliqueExp
                            local party = false
                            if isInParty(_cid) then
                                local partyMembers, expParty = getPartyMembers(getPartyLeader(_cid)), expgain / 100 * partyPorcent
                                for indice, partyMember in pairs(partyMembers) do
                                    attackerLevel, partyLevel = getPlayerLevel(_cid), getPlayerLevel(partyMember)
                                    attackerPos, partyPos = getThingPos(_cid), getThingPos(partyMember)
                                    x = false
                                    if math.abs(attackerLevel - partyLevel) > levelBlockParty then
                                        x = true
                                    elseif math.abs(attackerPos.x - partyPos.x) > expShareRadiusX then
                                        x = true
                                    elseif math.abs(attackerPos.y - partyPos.y) > expShareRadiusY then
                                        x = true
                                    elseif attackerPos.z ~= partyPos.z then
                                        x = true
                                    elseif _cid == partyMember then
                                        x = true
                                    end
                                    if x then
                                        partyMembers[indice] = nil
                                    end
                                end
                                if #partyMembers ~= 0 then
                                    expParty = math.ceil(expgain / 100 * partyPorcent)
                                    expmember = math.ceil(expParty / #partyMembers)
                                    for _, member in pairs(partyMembers) do
                                        if member ~= _cid then
                                            doPlayerSendTextMessage(member, 12, "You received "..expmember.." party exp.")
                                            doSendAnimatedText(getCreaturePosition(member), expmember, 215)
                                            doPlayerAddExp(member, expmember)
                                        end
                                    end
                                    doPlayerSendTextMessage(_cid, 12, "You gain "..expgain.." exp. (" ..partyPorcent.."% send to party)")
                                    doSendAnimatedText(_cid, expgain - expParty, 215)
                                    doPlayerAddExp(_cid, expgain - expParty)
                                    party = true
                                else
                                    party = false
                                end
                            end
                            if not party then
                                doPlayerAddExp(_cid, expgain)
                                doSendAnimatedText(getThingPos(_cid), expgain, 215)
                            end
                        end
                    end
                end
            end
        end
        return true
    end
    function onCombat(cid, target)
        if isMonster(target) and not isSummon(target) and not isPlayer(target) then
            registerCreatureEvent(target, "ExpGain")
        end
        return true
    end
     
    Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
     
    RESOLVIDO
    Vou deixar a solução abaixo caso alguém futuramente tenha o mesmo problema.
    Eu havia feito uma atualização no meu training monk, dessa forma, acusava o erro "(luaGetMonsterInfo) Monster not found".
    Simplesmente o que eu fiz foi editar o meu training monk.xml e adicionar ele no monster.xml com o nome de training monk.
    Vou deixar abaixo os dois arquivos.
     

Informação Importante

Confirmação de Termo