Ir para conteúdo
  • Cadastre-se

(Resolvido)Item que ao usar em outro, da reflect.


Ir para solução Resolvido por zipter98,

Posts Recomendados

Já vi por ai alguns scripts de reflect, mas não do jeito que eu gostaria. Gostaria de um item que ao usar em outro, desse o bônus de reflect. Seria mais ou menos assim: O item daria 2% de bônus de reflect e só poderia ser usado uma vez em cada item, tendo chance de falhar. O item poderia ser usado em qualquer equipament (colar, helmet, armor, legs, shield e boots), mas armas(axe, sword, club, bow/crossbow) e wands e rods, não poderiam receber o item.

 

Se alguém puder ajudar, agradeço.

Link para o post
Compartilhar em outros sites

Já vi por ai alguns scripts de reflect, mas não do jeito que eu gostaria. Gostaria de um item que ao usar em outro, desse o bônus de reflect. Seria mais ou menos assim: O item daria 2% de bônus de reflect e só poderia ser usado uma vez em cada item, tendo chance de falhar. O item poderia ser usado em qualquer equipament (colar, helmet, armor, legs, shield e boots), mas armas(axe, sword, club, bow/crossbow) e wands e rods, não poderiam receber o item.

 

Se alguém puder ajudar, agradeço.

Achei super interessante a ideia, e caso consiga, passe para mim huashuasu

Venha para a evolução do mapa HEROSERV -- Versão 8.60 -

Faça parte dessa família: http://kaiakserv.com

 

Link para o post
Compartilhar em outros sites

O bônus de reflect seria acumulativo? Qual seria a fórmula do dano refletido?

 

No caso, seria acumulativo caso mais itens que o player usasse no momento também tivesse o bônus. Ex: Usando uma armadura e shield, cada um com 2% de reflet, ficando assim com 4% de reflet ao total.

A formula seria, 100% de chance de refletir 2% do dano sofrido, caso tivesse usando mais itens com esse bônus de reflet, aconteceria como eu disse a cima.

 

Só pra enfatizar mesmo, o item que dará o bônus só poderá ser usado uma vez em cada equipamento, caso o equipamento adquira o bônus além de ter chance de falhar.

 

Não sei se consegui explicar direito.

up

Editado por gabriel28 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Mesmo falhando o bônus no equipamento, o jogador ainda poderá usar o item nele (para tentar obter o bônus)?

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Mesmo falhando o bônus no equipamento, o jogador ainda poderá usar o item nele (para tentar obter o bônus)?

 

Sim, quando falei que só poderia usar uma vez no item, me referia que, caso tivesse sucesso em adicionar o bônus no item, não poderia adicionar mais, mas se falhasse em por o bônus, poderia continuar tentando. É que não consegui explicar direito. ^^

Link para o post
Compartilhar em outros sites
  • Solução

Action:

local config = {
    reflectBonus = 2,               --Bônus de reflect, em %.
    failChance = 50,                --Chance de falhar, em porcentagem.
    types = {"armor", "legs", "helmet", "boots"},
    noReflect = {1, 2, 3, 5, 6}     --Tipos de armamento bloqueados (valores podem ser conferidos em 000-constant.lua, data/lib)
}
function onUse(cid, item, fromPos, itemEx, toPos)
    if itemEx.itemid < 100 then
        return doPlayerSendCancel(cid, "Use this in valid itens.")
    elseif isInArray(config.noReflect, getItemWeaponType(itemEx.uid)) then
        return doPlayerSendCancel(cid, "Use this in valid itens.")
    elseif getItemAttribute(itemEx.uid, "reflect") then
        return doPlayerSendCancel(cid, "This item has already a reflect bonus.")
    elseif math.random(1, 100) > config.failChance then
        return doPlayerSendTextMessage(cid, 27, "Sorry, your item didn't get a reflect bonus. Good luck at the next try! =]"), doRemoveItem(item.uid, 1)
    end
    local checkItemName
    for i = 1, #config.types do
        if getItemNameById(itemEx.itemid):find(config.types[i]) then
            checkItemName = true
            break
        end
    end
    if not checkItemName then
        return doPlayerSendCancel(cid, "Use this in valid itens.")
    end
    doPlayerSendTextMessage(cid, 27, "Congratulations, now your item has a reflect bonus of "..config.reflectBonus.."%!")
    doItemSetAttribute(itemEx.uid, "reflect", config.reflectBonus)
    doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).." ref "..config.reflectBonus.."%")
    doRemoveItem(item.uid, 1)
    return true
end

Creaturescript (não se esqueça de registrar o evento em login.lua):

function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) and isCreature(attacker) and type == STATSCHANGE_HEALTHLOSS then
        local bonusReflect = 0
        for i = 1, 10 do
            local item = getPlayerSlotItem(cid, i).uid
            if item > 0 and getItemAttribute(item, "reflect") then
                bonusReflect = bonusReflect + getItemAttribute(item, "reflect")
            end
        end
        if bonusReflect > 0 then
            local damage = value * bonusReflect / 100
            doSendAnimatedText(getThingPos(attacker), -damage, COLOR_RED)
            doCreatureAddHealth(attacker, -damage)
        end
    end
    return true
end
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Aki esta dando esse erro :onStatsChange

<LuaInteface::LuaGetThingPosition> Thing not found

Link para o post
Compartilhar em outros sites

Não está funcionando (não está refletindo o dano) e deu o erro >Event onLogin not found, relacionado com o creaturescript (vi agora), talvez eu tenha feito algo errado.

Aqui vai as tags:

 

creaturescript: <event type="login" name="reflect" event="script" value="reflect.lua"/>

login.lua: registerCreatureEvent(cid, "reflect")

action: <action itemid="8303" event="script" value="reflect.lua"/>

 

E se pudesse, gostaria que aparecesse nos itens. Ex: You see a demon helmet (def: 10) ref 2%.....

 

Ah e outra coisa que me esqueci; mesmo a mao direita e esquerda (5 e 6) estando bloqueada, pode-se usar o item, e armor, legs e boots também estão bloqueados mesmo não estando bloqueados no script.

 

Esse é meu const:

 

CONST_SLOT_FIRST = 1
CONST_SLOT_HEAD = CONST_SLOT_FIRST
CONST_SLOT_NECKLACE = 2
CONST_SLOT_BACKPACK = 3
CONST_SLOT_ARMOR = 4
CONST_SLOT_RIGHT = 5
CONST_SLOT_LEFT = 6
CONST_SLOT_LEGS = 7
CONST_SLOT_FEET = 8
CONST_SLOT_RING = 9
CONST_SLOT_AMMO = 10
CONST_SLOT_LAST = CONST_SLOT_AMMO
 
Gostaria que os bloqueados fossem o 2, 3, 9 e 10.
Editado por gabriel28 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

O evento é onStatsChange, não onLogin.

Tag:

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

O creatureevent foi alterado e foram colocadas algumas proteções para evitar o erro que aconteceu com o 574747. Também corrigi uma bobeira na action (aproveitei e coloquei o que você pediu - o nome do item ser modificado).

Os valores da tabela noReflect são esses:

WEAPON_NONE = 0
WEAPON_SWORD = 1
WEAPON_CLUB = 2
WEAPON_AXE = 3
WEAPON_SHIELD = 4
WEAPON_DIST = 5
WEAPON_WAND = 6
WEAPON_AMMO = 7
WEAPON_FIST = 8
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Funcionando man, o ´´unico problema é que os equipaments (armor, legs, helmet, boots) não estão podendo usar os itens, ta dando um erro no onStatChange do script do creaturescript, e não ta aparecendo no item que ele tem o bônus de reflect.

 

~Vou ter reputar, lá também.

Editado por gabriel28 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Qual o erro do statschange?

Modifiquei a action para aceitar boots, helmets e etc.

Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

esse erro e nessa parte.

 

local item = getPlayerSlotItem(cid, i).uid

if getItemAttribute(item, "reflect") then
bonusReflect = bonusReflect + getItemAttribute(item, "reflect")
            end

Link para o post
Compartilhar em outros sites

Perfeito mano, muito obrigado!


Só uma coisa man, meu server teu upgrade sistem, onde os equipamentos ficam +1 +2 etc, dai quando ganha o b^nus reflect, a informação que o item ta +1 some, e vice verça.

Link para o post
Compartilhar em outros sites

ae zipter98, agora estou com um erro ou eu acho que e um erro.

tipo se o player usa 2 amuleto um no neck e outro na hand o atributo vai se muiltiplica

entao oque eu queria e que so pode-se usa x item em seu devido lugar tendeu?

 

Tipo shield na Right-hand

Sword na left hand....

 

to precisando muito.

Link para o post
Compartilhar em outros sites

Isso se não me engano é configurado em items.xml.

Se não for incomodo, tem como me ajudar numa coisa?

Essa linha >doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).." ref "..config.reflectBonus.."%"), que poem o nome "ref 2%" no item, conflita com a do script de upgrade item que tenho aqui, que poem o nome "+1" no item, dai quando poem um, o outro some.

Link para o post
Compartilhar em outros sites

mas tipo ziper, ta tudo certinho <attribute key="slotType" value="necklace" />

 

mas quando eu coloco o amulet na left hand ele ganha o atributo= reflect.

 

entao pensei que isso seria algum movementscript tlg?

 

 

ae gabriel28 usa esse script na lib.

 

function getItemReflectPercent(itemuid)
return getItemAttribute(itemuid, "reflect")
end
function doPlayerAddReflectedItem(cid, itemid, percent)
local item = doPlayerAddItem(cid, itemid)
doItemSetAttribute(item, "description", "[Reflect: "..percent.."%]")
doItemSetAttribute(item, "reflect", percent)
end
Editado por 574747 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo