[Resolvido] Chance de critico em ataque básico por vocação

fefuxd
Por fefuxd
em Resolvidos

fefuxd

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/01/17Posts: 28Gênero: Masculino

 

ola pessoal .. eu gostaria de implementar no meu otserver um sistema de ataque critico por vocação por exemplo..

 

 

knight tem 30% de chance de dar um dano critico (2x maior)

 

 

paladin 40% .. e por ai vai.. 

 

 

somente nos ataques basicos de armas.. wands/rods .. alguem pode me ajudar?

 

 

Leoxtibia

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/06/08Posts: 489Gênero: Masculino

Esse ataque crítico é somente para players, certo?

sergiped.gif

fefuxd

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/01/17Posts: 28Gênero: Masculino
2 horas atrás, Leoxtibia disse:

Esse ataque crítico é somente para players, certo?

@Leoxtibia a idéia é que funcionasse tanto para pvp quanto com monster.. mas se não foi possivel fazer servir para os 2 só pra player já fica interessante também..

 

ou vc quis dizer que se o Monster tbm vai atacar critico? se for essa a pergunta dai é não.. 

Leoxtibia

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/06/08Posts: 489Gênero: Masculino

Para players. Não testado.

 

Em creaturescripts/scripts:

 

CriticalVocs.lua

 

local hit = {mage = 1.2, knight = 2.0, paladin = 1.4} -- porcentagem de aumento do hit, 1.2 = 20%, 2.0 = 100%, 1.4 = 40% e por aí vai...function onStatsChange(cid, attacker, type, combat, value)    if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS and isCreature(attacker) then        if (getPlayerStorageValue(attacker, 19830)) >= math.random (0,100) then            if isSorcerer(cid) or isDruid(cid) then                critical = math.ceil(value*hit.mage)            elseif isKnight(cid) then                critical = math.ceil(value*hit.knight)            elseif isPaladin(cid) then                critical = math.ceil(value*hit.paladin)            end            doTargetCombatHealth(attacker, cid, combat, -critical, -critical, 255)            doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144)            doSendMagicEffect(getCreaturePos(cid), 9)            return false        end    endreturn trueend

 

No login.lua:

 

local chance = {mage = 20, knight = 10, paladin = 30} -- a chance de cada vocação para que aconteça um hit críticoregisterCreatureEvent(cid, "CriticalHit")if getPlayerStorageValue(cid, 19830) == -1 then    if isSorcerer(cid) or isDruid(cid) then        setPlayerStorageValue(cid, 19830, chance.mage)    elseif isKnight(cid) then        setPlayerStorageValue(cid, 19830, chance.knight)    elseif isPaladin(cid) then        setPlayerStorageValue(cid, 19830, chance.paladin)    endend

 

Em creaturescripts.xml:

 

<event type="statschange" name="CriticalHit" event="script" value="CriticalVocs.lua"/>

sergiped.gif

fefuxd

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/01/17Posts: 28Gênero: Masculino
6 horas atrás, Leoxtibia disse:

Para players. Não testado.

 

Em creaturescripts/scripts:

 

CriticalVocs.lua

 

local hit = {mage = 1.2, knight = 2.0, paladin = 1.4} -- porcentagem de aumento do hit, 1.2 = 20%, 2.0 = 100%, 1.4 = 40% e por aí vai...

function onStatsChange(cid, attacker, type, combat, value)
    if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS and isCreature(attacker) then
        if (getPlayerStorageValue(attacker, 19830)) >= math.random (0,100) then
            if isSorcerer(cid) or isDruid(cid) then
                critical = math.ceil(value*hit.mage)
            elseif isKnight(cid) then
                critical = math.ceil(value*hit.knight)
            elseif isPaladin(cid) then
                critical = math.ceil(value*hit.paladin)
            end
            doTargetCombatHealth(attacker, cid, combat, -critical, -critical, 255)
            doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144)
            doSendMagicEffect(getCreaturePos(cid), 9)
            return false
        end
    end
return true
end

 

No login.lua:

 

local chance = {mage = 20, knight = 10, paladin = 30} -- a chance de cada vocação para que aconteça um hit crítico


registerCreatureEvent(cid, "CriticalHit")

if getPlayerStorageValue(cid, 19830) == -1 then
    if isSorcerer(cid) or isDruid(cid) then
        setPlayerStorageValue(cid, 19830, chance.mage)
    elseif isKnight(cid) then
        setPlayerStorageValue(cid, 19830, chance.knight)
    elseif isPaladin(cid) then
        setPlayerStorageValue(cid, 19830, chance.paladin)
    end
end

 

Em creaturescripts.xml:

 

<event type="statschange" name="CriticalHit" event="script" value="CriticalVocs.

 

@Leoxtibia assim que eu chegar em casa umas 15hs vou testar.. quanto ao Critico que da pra configurar pelo config.lua eu preciso desativar o de la?

Leoxtibia

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/06/08Posts: 489Gênero: Masculino
1 hora atrás, fefuxd disse:

 

@Leoxtibia assim que eu chegar em casa umas 15hs vou testar.. quanto ao Critico que da pra configurar pelo config.lua eu preciso desativar o de la?

 

Não

sergiped.gif

fefuxd

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/01/17Posts: 28Gênero: Masculino

@Leoxtibia ta dando um erro loco aqui.. mas o server nao crasha.. mas tbm nao ta funcionando o critico

olha a imagem:

 

 

Screenshot_3.png
41.69 KB12 downloads

 

eu reabri o server o erro parou de aparecer.. sinceramente não sei exatamente em que momento que o erro apareceu.. mas de qualquer forma o critico nao esta funcionando :[

 

 

esquece.. eu estava vacilando.. estava testando em Monster..mas só ta funcionando em players.. é possivel deixar nos 2? o erro da imagem acima nao aconteceu mais.. 

Screenshot_3.png.3dd778e58085f3cea10a563c6502006e.png

Leoxtibia

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/06/08Posts: 489Gênero: Masculino

@Edit

Bom, com relação a esse erro que você tá falando, não sei qual o problema, se você colocou como eu disse acima, deveria funcionar. Testei aqui no tfs 0.4 e funcionou. No entanto, ao testar percebi outras coisas. Tenta com esse aqui, @fefuxd


 

Spoiler
local hit = {mage = 1.2, knight = 2.0, paladin = 1.4} -- porcentagem de aumento do hit, 1.2 = 20%, 2.0 = 100%, 1.4 = 40% e aí vai...
local protect = {}
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, 19830)) >= math.random (0,100) then
            if protect[attacker] then
                protect[attacker] = nil
                return true
            end
            if isSorcerer(cid) or isDruid(cid) then
                critical = math.ceil(value*hit.mage)
            elseif isKnight(cid) then
                critical = math.ceil(value*hit.knight)
            elseif isPaladin(cid) then
                critical = math.ceil(value*hit.paladin)
            end
            protect[attacker] = true
            doTargetCombatHealth(attacker, cid, combat, -critical, -critical, 255)
            doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144)
            doSendMagicEffect(getCreaturePos(cid), 9)
            return false
        end
    end
return true
end

 

 

Confira se você colocou certinho no login.lua.

 

sergiped.gif

fefuxd

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/01/17Posts: 28Gênero: Masculino
1 hora atrás, Leoxtibia disse:

@Edit

Bom, com relação a esse erro que você tá falando, não sei qual o problema, se você colocou como eu disse acima, deveria funcionar. Testei aqui no tfs 0.4 e funcionou. No entanto, ao testar percebi outras coisas. Tenta com esse aqui, @fefuxd


 

  Mostrar conteúdo oculto

local hit = {mage = 1.2, knight = 2.0, paladin = 1.4} -- porcentagem de aumento do hit, 1.2 = 20%, 2.0 = 100%, 1.4 = 40% e aí vai...
local protect = {}
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, 19830)) >= math.random (0,100) then
            if protect[attacker] then
                protect[attacker] = nil
                return true
            end
            if isSorcerer(cid) or isDruid(cid) then
                critical = math.ceil(value*hit.mage)
            elseif isKnight(cid) then
                critical = math.ceil(value*hit.knight)
            elseif isPaladin(cid) then
                critical = math.ceil(value*hit.paladin)
            end
            protect[attacker] = true
            doTargetCombatHealth(attacker, cid, combat, -critical, -critical, 255)
            doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144)
            doSendMagicEffect(getCreaturePos(cid), 9)
            return false
        end
    end
return true
end

 

 

Confira se você colocou certinho no login.lua.

 

 

coloquei.. nao notei diferença do primeiro.. o que mudou? eu deixei o critico do config.lua ligado junto com esse que vc me passou... soh assim pra funcionar tanto em monster qto em pvp.. só que se juntar os 2 criticos de uma vez no player vai dar um dano absurdo imagino

Leoxtibia

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/06/08Posts: 489Gênero: Masculino

Como assim "o que mudou?". Só é você olhar as linhas que foram adicionadas.

Sobre o config.lua, eu deixei o meu assim: 

criticalHitChance = 7
criticalHitMultiplier = 1
displayCriticalHitNotify = false

 

Aquele erro ainda aparece? Testei aqui e tá funcionando. Se outro erro estiver aparecendo, fale qual é.

 

 

sergiped.gif

fefuxd

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/01/17Posts: 28Gênero: Masculino

desculpe a minha ignorância.. é que eu não entendo muito de lua.. 

quanto ao erro nao apareceu mais.. não sei se foi alguma ação de algum player que ocasionou aquele erro.. mas faz uns 30 minutos que esta rodando e esta limpo de erros.. eu tive que colocar 6.0 de critico.. pra notar diferença... pois coloquei 2.0 o critico parecia mais fraco do que o ataque normal kk .. mas ficou bacana.. pena que não serve pra monstros tbm.. valeu pela força

Leoxtibia

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/06/08Posts: 489Gênero: Masculino
5 horas atrás, fefuxd disse:

desculpe a minha ignorância.. é que eu não entendo muito de lua.. 

quanto ao erro nao apareceu mais.. não sei se foi alguma ação de algum player que ocasionou aquele erro.. mas faz uns 30 minutos que esta rodando e esta limpo de erros.. eu tive que colocar 6.0 de critico.. pra notar diferença... pois coloquei 2.0 o critico parecia mais fraco do que o ataque normal kk .. mas ficou bacana.. pena que não serve pra monstros tbm.. valeu pela força

 

@fefuxd Vou ver essa questão de ter que colocar um valor tão alto pra notar a diferença. 

Tinha feito esse daí sem testar e às pressas, então tem alguns erros.

Postei lá: 

 

Não tem erros. Dá uma conferida.

 

sergiped.gif

fefuxd

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/01/17Posts: 28Gênero: Masculino

@Leoxtibia testado e aprovado o código.. valeu pela força =D

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

O pedido neste tópico de foi atendido e/ou o autor do tópico resolveu sua duvida. Este tópico está fechado e foi movido para Pedidos - Resolvidos. Se você tiver outros pedidos, crie um novo tópico.

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."