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
Abaixo de:

elseif pokemon.spell == "StickSlash" then



doAreaCombatHealth(sumomdonego, element, getThingPos(getCreatureTarget(cid)), 0, -((num1)+(lvpokemon*(num3))), -((num2)+(lvpokemon*(num3))), 212)
return 0

coloque:


elseif pokemon.spell == "nome_da_spell" then
local Kecleon_config = {
{lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113},
{lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105},
{lookBody = xxx, lookHead = xxx, lookLegs = xxx, lookFeet = xxx},
--etc
}

if getCreatureName(sumomdonego) ~= "Kecleon" then
return false
end

local color = Kecleon_config[math.random(#Kecleon_config)]
color.lookType = getCreatureOutfit(sumomdonego).lookType
doSetCreatureOutfit(sumomdonego, color, -1)
return true

Link para o comentário
Compartilhar em outros sites

  • 0

Você quer fazer igual na PxG? Porque, pelo menos no caso deles, o que altera a cor do Kecleon não é a spell propriamente dita, e sim o elemento dela.

Ou me enganei e você quer apenas uma magia específica para isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Você quer fazer igual na PxG? Porque, pelo menos no caso deles, o que altera a cor do Kecleon não é a spell propriamente dita, e sim o elemento dela.

Ou me enganei e você quer apenas uma magia específica para isso?

sim zipter, exatamente como na pxg, esqueci de por isso no comentário, isso, pelo elemento.

Link para o comentário
Compartilhar em outros sites

  • 0

o texto não condiz em nada com o gif e com seu segundo comentário.

 

Se decide, vai ser aleatoriamente ou ele vai pegar o tipo de combat que ele é atacado e mudar de cor?

vai pelo tipo de combat que ele pegar

Link para o comentário
Compartilhar em outros sites

  • 0

A spell funciona assim. Se ele receber dano de fire, o pokémon mudar a cor para amarelo, e recebe menos dano do tipo fire.

sim, exatamente assim, sendo que quero para base do exaioros/ kpdo, e ela n contem source :(

Link para o comentário
Compartilhar em outros sites

  • 0

O sistema de vantagem/desvantagem é escrito em Lua ou C++? Se for a primeira opção, então é possível fazer isso com alterações apenas em uma arquivo (localizado em data/creaturescripts/scripts com callback onStatsChange). Caso encontre-o, por gentileza, poste-o aqui para podermos te ajudar.

Entretanto, se for escrito nas sources, lamento.

Link para o comentário
Compartilhar em outros sites

  • 0

O sistema de vantagem/desvantagem é escrito em Lua ou C++? Se for a primeira opção, então é possível fazer isso com alterações apenas em uma arquivo (localizado em data/creaturescripts/scripts com callback onStatsChange). Caso encontre-o, por gentileza, poste-o aqui para podermos te ajudar.

Entretanto, se for escrito nas sources, lamento.

eu achei esse " onStatsChange " em uma script chamada exp.lua no creaturescripts.

 

 

 

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
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

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

É, parece que o cálculo do dano baseado em vantagem e desvantagem é escrito nas sources. Neste arquivo seria possível alterar a cor do Kecleon, mas a resistência ao elemento não seria viável, visto que o elemento primário dele é levado em consideração na fórmula em C++.

A não ser que as funções getCombatByType e doMoveHealth façam mais do que o nome sugere. Sem o código delas, entretanto, não tenho como tirar conclusões.

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

  • 0

É, parece que o cálculo do dano baseado em vantagem e desvantagem é escrito nas sources. Neste arquivo seria possível alterar a cor do Kecleon, mas a resistência ao elemento não seria viável, visto que o elemento primário dele é levado em consideração na fórmula em C++.

A não ser que as funções getCombatByType e doMoveHealth façam mais do que o nome sugere. Sem o código delas, entretanto, não tenho como tirar conclusões.

zipter, n achei essas funções que vc citou, só achi nessa script do exp que postei, n precisa ter diferença de dano por tipo do combat n, só preciso que a spell seja que ele troque de cor de acordo com o tipo de combat, n precisa ter a diferença de dano n rs, já que n tem source o server.

Link para o comentário
Compartilhar em outros sites

  • 0

faz statsChange, uma tabela com cor de outfit e tipo de combat (dá pra extrair o combat pela statschange).

Se a cor do outfit for a cor da resistencia, dá return false e cria outro combat mais fraco (cuidado com stackoverflow aqui pq ele vai tentar fazer isso tendendo a infinito). Do contrário, seta a cor do outfit como sendo a referente ao combat. Fim.

Link para o comentário
Compartilhar em outros sites

  • 0

Sem acesso ao sistema de vantagem e desvantagem é simplesmente impossível aplicar esta resistência de elementos do Kecleon.

Entretanto, a troca da cor da outfit é bem simples e consiste num pequeno bloco de código.

Tabela de configuração:

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

Recomendo colocá-la fora do callback.

Depois, abaixo de:

if not x then
    return false
end

coloque:

if nickshiny == "Kecleon" then
    local color = Kecleon_config[combatee]
    
    if color then
        color.lookType = getCreatureOutfit(cid).lookType
        doSetCreatureOutfit(cid, color, -1)
    end
end
Link para o comentário
Compartilhar em outros sites

  • 0

 

Sem acesso ao sistema de vantagem e desvantagem é simplesmente impossível aplicar esta resistência de elementos do Kecleon.

Entretanto, a troca da cor da outfit é bem simples e consiste num pequeno bloco de código.

Tabela de configuração:

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

Recomendo colocá-la fora do callback.

Depois, abaixo de:

if not x then
    return false
end

coloque:

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

em qual script eu colocaria esses códigos ?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...