DE
poketibia

Spell Que Faz Monstro Trocar Cor Da Outfit Aleatoriamente.

Por Developer Berg, 22 de dez. de 2015 em Scripts

resolvido
script
44
6.5k
Developer BergD
22 de dezembro de 2015 às 23:12

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

zipter98Z
23 de dezembro de 2015 às 00:58

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?

Developer BergD
23 de dezembro de 2015 às 01:11

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.

Night WolfN
23 de dezembro de 2015 às 15:22

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?

Developer BergD
23 de dezembro de 2015 às 15:31

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

DeadpoolD
23 de dezembro de 2015 às 15:34

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.

Developer BergD
23 de dezembro de 2015 às 15:37

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

zipter98Z
23 de dezembro de 2015 às 16:33

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.

DeadpoolD
23 de dezembro de 2015 às 16:36

Kpdo é em lua. (Lib) vários arquivos, e o creaurescript.

Developer BergD
23 de dezembro de 2015 às 16:46

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

 

 

zipter98Z
23 de dezembro de 2015 às 19:38

É, 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 Dezembro 23 por zipter98

Developer BergD
23 de dezembro de 2015 às 19:44

É, 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.

Night WolfN
23 de dezembro de 2015 às 20:03

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.

zipter98Z
23 de dezembro de 2015 às 20:25

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
Developer BergD
23 de dezembro de 2015 às 20:32

 

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 ?