Ir para conteúdo
  • 0

Spell Que Faz Monstro Trocar Cor Da Outfit Aleatoriamente.


Developer Berg

Pergunta

Olá Galerinha Do Xtibia.

queria pedir a ajuda de vcs, para criar uma script de spell para meu poketibia.

a spell funciona assim, queria que ao usar essa spell, o meu pokemon mudasse a cor da outfit aleatoriamente, a sprite já esta configurada e sem cor para mudar de cor qual quer hora que quiser, só falta a script da spell para mudar quando usar a spell.

o motivo deu querer essa spell é pq tem um pokemon chamado " kecleon " ele é um pokemon camaleão.

 

A Base Que Estou Usando É A Base Do Exaioros/Kpdo.

 

 

post-381687-0-73955400-1450833081.gif

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

No que você mandou, ué.

coloquei, ficou assim

 

 

 

local expcond = createConditionObject(CONDITION_INFIGHT)
setConditionParam(expcond, CONDITION_PARAM_TICKS, 4500)


function isPlayerSummon(cid, uid)
    if getCreatureMaster(uid) == cid then
        return TRUE
    end
return FALSE
end


function onStatsChange(cid, attacker, enps, combatee, value)
if enps == STATSCHANGE_HEALTHGAIN then
if isCreature(attacker) then
return false
end
return true
end
if not isCreature(attacker) then
return true
end
if enps == STATSCHANGE_HEALTHLOSS then
if getPlayerStorageValue(cid, 34) >= 1 then
if combatee ~= COMBAT_PHYSICALDAMAGE then
if isCreature(attacker) then
doSendMagicEffect(getThingPos(cid), 135)
doSendMagicEffect(getThingPos(attacker), 3)
doSendAnimatedText(getThingPos(cid), "REFLECT", 215)
setPlayerStorageValue(cid, 34, 0)
doSendAnimatedText(getThingPos(attacker), -value, 191)
doCreatureAddHealth(attacker, -value)
return false
end
end
end
if not isSummon(attacker) then
return false
end
if getPlayerStorageValue(cid, 17) >= 4 then
local dono = getCreatureMaster(attacker)
if not string.find(getPlayerStorageValue(cid,200), getCreatureName(dono)) then
setPlayerStorageValue(cid, 200, getPlayerStorageValue(cid, 200)..""..getCreatureName(dono)..", ")
end
doMonsterSetTarget(cid, attacker)
end
if getPlayerStorageValue(attacker, 8) >= 1 and combatee == COMBAT_PHYSICALDAMAGE then
return false
end
local nickshiny = getCreatureName(cid)
if isShiny(nickshiny) then
nickshiny = nickshiny:gsub("Shiny ", "")
end
if isStrong(nickshiny) then
nickshiny = nickshiny:gsub("Strong ", "")
end
local x = getCombatByType(nickshiny,combatee)
if not x then
return false
end
if nickshiny == "Kecleon" then
    local color = Kecleon_config[combatee]
    
    if color then
        color.lookType = getCreatureOutfit(cid).lookType
        doSetCreatureOutfit(cid, color, -1)
    end
end
local cor = COLOR_PSYCHIC
if combatee == PSYCHICDAMAGE then
cor = COLOR_PSYCHIC
elseif combatee == GRASSDAMAGE then
cor = COLOR_GRASS
elseif combatee == FIREDAMAGE then
cor = COLOR_FIRE2
elseif combatee == WATERDAMAGE then
cor = COLOR_WATER
elseif combatee == ICEDAMAGE then
cor = COLOR_ICE
elseif combatee == NORMALDAMAGE then
cor = COLOR_NORMAL
elseif combatee == FLYDAMAGE then
cor = COLOR_FLYING
elseif combatee == GHOSTDAMAGE then
cor = COLOR_GHOST
elseif combatee == GROUNDDAMAGE then
cor = COLOR_GROUND
elseif combatee == ELECTRICDAMAGE then
cor = COLOR_ELECTRIC
elseif combatee == ROCKDAMAGE then
cor = COLOR_ROCK
elseif combatee == BUGDAMAGE then
cor = COLOR_BUG
elseif combatee == FIGHTDAMAGE then
cor = COLOR_FIGHTING
elseif combatee == DRAGONDAMAGE then
cor = COLOR_DRAGON
elseif combatee == POISONDAMAGE then
cor = COLOR_POISON
elseif combatee == DARKDAMAGE then
cor = COLOR_DARK
elseif combatee == STEELDAMAGE then
cor = COLOR_STEEL
else
cor = getPokemonRace(cid)
end
if isSummon(attacker) then
local fisico = getPlayerStorageValue(attacker,3499)
if getPlayerStorageValue(cid, 4) >= 1 or isStrong(getCreatureName(cid)) then
local finalista = math.floor((value/2)*x)+fisico
doSendAnimatedText(getThingPos(cid),finalista,cor)
doMoveHealth(getCreatureMaster(attacker),finalista,cid)
return false
else
local finalista = math.floor(value*x)+fisico
doSendAnimatedText(getThingPos(cid),finalista,cor)
doMoveHealth(getCreatureMaster(attacker),finalista,cid)
return false
end
end
end
end

 

 

 

n deu erro na distro, mas n pegou, o kecleon ficou normal, e n sei onde coloco aquela tabela de configuração e como configurar kk.

 

local Kecleon_config = {

--[combat] = {lookBody = xxx, lookHead = xxx, lookLegs = xxx, lookFeet = xxx},

}

Link para o comentário
Compartilhar em outros sites

  • 0

Acima de:

function onStatsChange(cid, attacker, enps, combatee, value)

coloque:

local Kecleon_config = {
    --[combat] = {lookBody = xxx, lookHead = xxx, lookLegs = xxx, lookFeet = xxx},
}

combat - tipo de combate correspondente ao elemento. Exemplos: GRASSDAMAGE, FIREDAMAGE, WATERDAMAGE, ICEDAMAGE, etc.

lookBody, lookHead, lookLegs e lookFeet - responsáveis pela coloração da outfit. Como os nomes sugerem, lookBody é a coloração do corpo, lookHead da cabeça, etc.

Link para o comentário
Compartilhar em outros sites

  • 0

Acima de:

function onStatsChange(cid, attacker, enps, combatee, value)

coloque:

local Kecleon_config = {
    --[combat] = {lookBody = xxx, lookHead = xxx, lookLegs = xxx, lookFeet = xxx},
}

combat - tipo de combate correspondente ao elemento. Exemplos: GRASSDAMAGE, FIREDAMAGE, WATERDAMAGE, ICEDAMAGE, etc.

lookBody, lookHead, lookLegs e lookFeet - responsáveis pela coloração da outfit. Como os nomes sugerem, lookBody é a coloração do corpo, lookHead da cabeça, etc.

tipo, com essas configurações ai, ele só vai mudar pra 1 cor só ? ou pra várias aleatoriamente ? tipo, se eu configurar para grassdamage, ai eu ataco um tipo grass, ai ele vai mudar para a cor que eu configurar ai, mas se eu tacar outro tipo, ele muda pra outra cor ? da pra colocar mas configurações nessa tabela ?

Editado por ricardoberg
Link para o comentário
Compartilhar em outros sites

  • 0

Não vai mudar para nada aleatoriamente. Usando valores numéricos, você configura as cores de cada parte do corpo do Kecleon na tabela.

Você pode colocar quantas indexes quiser nesta tabela, entretanto só vão funcionar aquelas que tiverem combates existentes no servidor.

Ex.:

local Kecleon_config = {
    [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113},
    [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105},
    --etc
}
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

 

Não vai mudar para nada aleatoriamente. Usando valores numéricos, você configura as cores de cada parte do corpo do Kecleon na tabela.

Você pode colocar quantas indexes quiser nesta tabela, entretanto só vão funcionar aquelas que tiverem combates existentes no servidor.

Ex.:

local Kecleon_config = {
    [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113},
    [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105},
    --etc
}

zipter, n pegou, ele n mudou de cor, pensei até que fosse a outfit, mas tirei a outfit do kecleon e coloquei de um npc que é mudável a cor, mas n mudou, olha como o código ficou.

 

 

 

local expcond = createConditionObject(CONDITION_INFIGHT)
setConditionParam(expcond, CONDITION_PARAM_TICKS, 4500)


function isPlayerSummon(cid, uid)
    if getCreatureMaster(uid) == cid then
        return TRUE
    end
return FALSE
end

local Kecleon_config = {
    [PSYCHICDAMAGE] = {lookBody = 128, lookHead = 128, lookLegs = 128, lookFeet = 128},
}

function onStatsChange(cid, attacker, enps, combatee, value)
if enps == STATSCHANGE_HEALTHGAIN then
if isCreature(attacker) then
return false
end
return true
end
if not isCreature(attacker) then
return true
end
if enps == STATSCHANGE_HEALTHLOSS then
if getPlayerStorageValue(cid, 34) >= 1 then
if combatee ~= COMBAT_PHYSICALDAMAGE then
if isCreature(attacker) then
doSendMagicEffect(getThingPos(cid), 135)
doSendMagicEffect(getThingPos(attacker), 3)
doSendAnimatedText(getThingPos(cid), "REFLECT", 215)
setPlayerStorageValue(cid, 34, 0)
doSendAnimatedText(getThingPos(attacker), -value, 191)
doCreatureAddHealth(attacker, -value)
return false
end
end
end
if not isSummon(attacker) then
return false
end
if getPlayerStorageValue(cid, 17) >= 4 then
local dono = getCreatureMaster(attacker)
if not string.find(getPlayerStorageValue(cid,200), getCreatureName(dono)) then
setPlayerStorageValue(cid, 200, getPlayerStorageValue(cid, 200)..""..getCreatureName(dono)..", ")
end
doMonsterSetTarget(cid, attacker)
end
if getPlayerStorageValue(attacker, 8) >= 1 and combatee == COMBAT_PHYSICALDAMAGE then
return false
end
local nickshiny = getCreatureName(cid)
if isShiny(nickshiny) then
nickshiny = nickshiny:gsub("Shiny ", "")
end
if isStrong(nickshiny) then
nickshiny = nickshiny:gsub("Strong ", "")
end
local x = getCombatByType(nickshiny,combatee)
if not x then
return false
end
if nickshiny == "Kecleon" then
    local color = Kecleon_config[combatee]
    
    if color then
        color.lookType = getCreatureOutfit(cid).lookType
        doSetCreatureOutfit(cid, color, -1)
    end
end
local cor = COLOR_PSYCHIC
if combatee == PSYCHICDAMAGE then
cor = COLOR_PSYCHIC
elseif combatee == GRASSDAMAGE then
cor = COLOR_GRASS
elseif combatee == FIREDAMAGE then
cor = COLOR_FIRE2
elseif combatee == WATERDAMAGE then
cor = COLOR_WATER
elseif combatee == ICEDAMAGE then
cor = COLOR_ICE
elseif combatee == NORMALDAMAGE then
cor = COLOR_NORMAL
elseif combatee == FLYDAMAGE then
cor = COLOR_FLYING
elseif combatee == GHOSTDAMAGE then
cor = COLOR_GHOST
elseif combatee == GROUNDDAMAGE then
cor = COLOR_GROUND
elseif combatee == ELECTRICDAMAGE then
cor = COLOR_ELECTRIC
elseif combatee == ROCKDAMAGE then
cor = COLOR_ROCK
elseif combatee == BUGDAMAGE then
cor = COLOR_BUG
elseif combatee == FIGHTDAMAGE then
cor = COLOR_FIGHTING
elseif combatee == DRAGONDAMAGE then
cor = COLOR_DRAGON
elseif combatee == POISONDAMAGE then
cor = COLOR_POISON
elseif combatee == DARKDAMAGE then
cor = COLOR_DARK
elseif combatee == STEELDAMAGE then
cor = COLOR_STEEL
else
cor = getPokemonRace(cid)
end
if isSummon(attacker) then
local fisico = getPlayerStorageValue(attacker,3499)
if getPlayerStorageValue(cid, 4) >= 1 or isStrong(getCreatureName(cid)) then
local finalista = math.floor((value/2)*x)+fisico
doSendAnimatedText(getThingPos(cid),finalista,cor)
doMoveHealth(getCreatureMaster(attacker),finalista,cid)
return false
else
local finalista = math.floor(value*x)+fisico
doSendAnimatedText(getThingPos(cid),finalista,cor)
doMoveHealth(getCreatureMaster(attacker),finalista,cid)
return false
end
end
end
end

 

 

 

 

caso vc queira, já que minha base n tem source, então poderia ser mesmo uma spell que quando a pessoa usa-se ela, ele mudaria de cor aleatoriamente.

Link para o comentário
Compartilhar em outros sites

  • 0

Você usou uma spell do elemento psíquico no Kecleon? Como é o único combate configurado na tabela, é o único que funcionará.

Para todo caso, troque:

if nickshiny == "Kecleon" then
    local color = Kecleon_config[combatee]
    
    if color then
        color.lookType = getCreatureOutfit(cid).lookType
        doSetCreatureOutfit(cid, color, -1)
    end
end

por:

if nickshiny == "Kecleon" then
    print(1)
    local color = Kecleon_config[combatee]
    
    if color then
        print(2)
        color.lookType = getCreatureOutfit(cid).lookType
        doSetCreatureOutfit(cid, color, -1)
    end
end

E informe o que for imprimido no console.

Link para o comentário
Compartilhar em outros sites

  • 0

Você usou uma spell do elemento psíquico no Kecleon? Como é o único combate configurado na tabela, é o único que funcionará.

Para todo caso, troque:

if nickshiny == "Kecleon" then
    local color = Kecleon_config[combatee]
    
    if color then
        color.lookType = getCreatureOutfit(cid).lookType
        doSetCreatureOutfit(cid, color, -1)
    end
end

por:

if nickshiny == "Kecleon" then
    print(1)
    local color = Kecleon_config[combatee]
    
    if color then
        print(2)
        color.lookType = getCreatureOutfit(cid).lookType
        doSetCreatureOutfit(cid, color, -1)
    end
end

E informe o que for imprimido no console.

zipter n apareceu nada no console, to achando que essa n é a script certa onde deve colocar os códigos ou sei lá, olha.

post-381687-0-62853300-1450923359_thumb.png

Link para o comentário
Compartilhar em outros sites

  • 0

Hm, esse evento foi registrado? De qualquer maneira, podemos fazer um script separado com o intuito de apenas mudar a coloração do Kecleon. O registro é normal, logo suponho que você saiba fazer.

local Kecleon_config = {
    [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113},
    [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105},
    --etc
}

function onStatsChange(cid, attacker, type, combat, value)
    if getCreatureName(cid) == "Kecleon" then
        local color = Kecleon_config[combat]
        
        if color then
            color.lookType = getCreatureOutfit(cid).lookType
            doSetCreatureOutfit(cid, color, -1)
        end
    end
    return true
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

 

Hm, esse evento foi registrado? De qualquer maneira, podemos fazer um script separado com o intuito de apenas mudar a coloração do Kecleon. O registro é normal, logo suponho que você saiba fazer.

local Kecleon_config = {
    [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113},
    [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105},
    --etc
}

function onStatsChange(cid, attacker, type, combat, value)
    if getCreatureName(cid) == "Kecleon" then
        local color = Kecleon_config[combat]
        
        if color then
            color.lookType = getCreatureOutfit(cid).lookType
            doSetCreatureOutfit(cid, color, -1)
        end
    end
    return true
end

coloquei e n pegou rs, n apareceu nada na distro também, eu registrei assim, talvez tem que registar algo no login.lua

 

<event type="statschange" name="login" event="script" value="Kecleon.lua"/>

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, tem que registrar em login.lua. E, por precaução, também registre no arquivo .xml do Kecleon (data/monsters).

zipter, desculpa ta te incomodando assim kk, ainda n pegou rs, registrei assim.

 

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

 

registerCreatureEvent(cid, "Kecleon")

 

event name="Kecleon"/>

 

respectivamente, tag da xml., registro do login.lua, e registro do xml do kecleon.

Link para o comentário
Compartilhar em outros sites

  • 0

OK, troque por este código e veja se alguma coisa é imprimida no console:

local Kecleon_config = {
    [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113},
    [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105},
    --etc
}
print(0)

function onStatsChange(cid, attacker, type, combat, value)
    print(1)
    if getCreatureName(cid) == "Kecleon" then
        print(2)
        local color = Kecleon_config[combat]
        
        if color then
            print(3)
            color.lookType = getCreatureOutfit(cid).lookType
            doSetCreatureOutfit(cid, color, -1)
        end
    end
    return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

 

OK, troque por este código e veja se alguma coisa é imprimida no console:

local Kecleon_config = {
    [FIREDAMAGE] = {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113},
    [WATERDAMAGE] = {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105},
    --etc
}
print(0)

function onStatsChange(cid, attacker, type, combat, value)
    print(1)
    if getCreatureName(cid) == "Kecleon" then
        print(2)
        local color = Kecleon_config[combat]
        
        if color then
            print(3)
            color.lookType = getCreatureOutfit(cid).lookType
            doSetCreatureOutfit(cid, color, -1)
        end
    end
    return true
end

zipter, n apareceu nada no console.

Link para o comentário
Compartilhar em outros sites

  • 0

Levando em consideração o fato do código não apresentar erros que o impedissem de ser executado, além da configuração estar correta, o que nos resta é um problema no próprio servidor. Entretanto, sem as sources, infelizmente não temos descobrir. Como esta base do KPDO veio com muitos bugs, se eu estiver correto não será nenhuma surpresa.

Link para o comentário
Compartilhar em outros sites

  • 0

Levando em consideração o fato do código não apresentar erros que o impedissem de ser executado, além da configuração estar correta, o que nos resta é um problema no próprio servidor. Entretanto, sem as sources, infelizmente não temos descobrir. Como esta base do KPDO veio com muitos bugs, se eu estiver correto não será nenhuma surpresa.

zipter, teria como então criar só a spell mesmo ? sem o tipo de combat ? tipo uma spell que vc usa, e ele muda para uma cor aleatória ?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...