Kindred 38 Postado Agosto 21, 2011 Share Postado Agosto 21, 2011 Eae galerinha do XTibia beleza? dessa vez vim trazer um sistema de Reflelct Fisico. Bem, o script funciona de uma forma. Voce adiciona um item a uma pessoa, e adiciona uma porcentagem de reflexão e o numero de vezes qeu vai refletir. Só reflete dano fisico. Video: Voce pode adicionar em colares, armaduras, botas, escudos e ate mesmo armas. Instalando: Vá na pasta data/lib e crie um arquivo chamado de ReflectLib.lua e adicione isso dentro: function isHandedWeapon(itemuid) local typee = getItemWeaponType(itemuid) or 0 if typee >= 1 and typee <= 6 then return CONST_SLOT_RIGHT end return -1 end function getItemType(itemid) local slottypes = {"head", "body", "legs", "feet", "ring", "necklace"} local consts = { ["head"] = CONST_SLOT_HEAD, ["armor"] = CONST_SLOT_ARMOR, ["legs"] = CONST_SLOT_LEGS, ["feet"] = CONST_SLOT_FEET, ["ring"] = CONST_SLOT_RING, ["necklace"] = CONST_SLOT_NECKLACE } local arq = io.open("data/items/items.xml", "r"):read("*all") local attributes = arq:match('<item id="' .. itemid .. '".+name="' .. getItemNameById(itemid) ..'">(.-)</item>') local slot = "" for i,x in pairs(slottypes) do if attributes:find(x) then slot = x break end end if slot == "body" then slot = "armor" end return consts[slot] end function addReflectCharges(item, charges, reflectpercent) if charges ~= "inf" then charges = charges+1 doItemSetAttribute(item, "mcharges", charges) doItemSetAttribute(item, "charges", charges) doItemSetAttribute(item, "name", getItemNameById(getThing(item).itemid) .. " that is brand-new") else doItemSetAttribute(item, "charges", -1) doItemSetAttribute(item, "mcharges", "inf") end doItemSetAttribute(item, "reflect", reflectpercent) doItemSetAttribute(item, "description", "That item reflects " .. reflectpercent .. " percent of physical damage.") end function renewCharges(item) if getItemAttribute(item, "charges") and getItemAttribute(item, "mcharges") ~= "inf" then doItemSetAttribute(item, "charges", getItemAttribute(item, "mcharges")) doItemSetAttribute(item, "name", getItemNameById(getThing(item).itemid) .. " that is brand-new") end end Agora vá em data/creaturescripts/scripts e adicione o script reflectDamage.lua com esse script: Código: function onStatsChange(cid, attacker, type, combat, value) local slots = {CONST_SLOT_HEAD, CONST_SLOT_NECKLACE, CONST_SLOT_ARMOR, CONST_SLOT_RIGHT, CONST_SLOT_LEFT, CONST_SLOT_LEGS, CONST_SLOT_FEET, CONST_SLOT_RING} local reflectpercent = 0 local itens = {} for i = 1, #slots do if getPlayerSlotItem(cid, slots[i]).uid > 1 and (getItemType(getPlayerSlotItem(cid, slots[i]).itemid) == slots[i] or isInArray({CONST_SLOT_RIGHT, CONST_SLOT_LEFT}, isHandedWeapon(getPlayerSlotItem(cid, slots[i]).uid))) and getItemAttribute(getPlayerSlotItem(cid, slots[i]).uid, "mcharges") and (getItemAttribute(getPlayerSlotItem(cid, slots[i]).uid, "charges") > 1 or getItemAttribute(getPlayerSlotItem(cid, slots[i]).uid, "mcharges") == "inf") then reflectpercent = reflectpercent+getItemAttribute(getPlayerSlotItem( cid, slots[i]).uid, "reflect") table.insert(itens, getPlayerSlotItem(cid, slots[i])) end end if combat == 1 and reflectpercent > 0 then if math.ceil(-value*((100-reflectpercent)/100)) < 0 then doCreatureAddHealth(cid, math.ceil(-value*((100-reflectpercent)/100))) doSendAnimatedText(getCreaturePosition(cid), math.ceil(value*((100-reflectpercent)/100)), COLOR_RED) local a = doCreateItem(2019, 2, getCreaturePosition(cid)) doSendMagicEffect(getCreaturePosition(cid), 0) doDecayItem(a) else doSendMagicEffect(getCreaturePosition(cid), 3) end if math.ceil(-value*(reflectpercent/100)) < 0 then doCreatureAddHealth(attacker, math.ceil(-value*(reflectpercent/100))) doSendAnimatedText(getCreaturePosition(attacker), math.ceil(value*(reflectpercent/100)), COLOR_GREY) local a = doCreateItem(2019, 2, getCreaturePosition(attacker)) doSendMagicEffect(getCreaturePosition(attacker), 9) doDecayItem(a) end for i,x in pairs(itens) do if getItemAttribute(x.uid, "mcharges") ~= "inf" then doItemSetAttribute(x.uid, "charges", getItemAttribute(x.uid, "charges")-1) doItemSetAttribute(x.uid, "name", getItemNameById(x.itemid) .. " that has " .. getItemAttribute(x.uid, "charges")-1 .. " charge" .. (getItemAttribute(x.uid, "charges")-1 > 1 and "s" or "") .. " left") end end else return TRUE end end Agora na mesma pasta, procure por login.lua, e antes do ultimo return true, adicione essa linha: registerCreatureEvent(cid, "ReflectDamage") Agora vá em creaturescripts.xml e adicione esta tag: <event type="statschange" name="ReflectDamage" event="script" value="reflectDamage.lua"/> Pronto, o script esta pronto para uso. O script segue com tais funçoes para voce usar em outros scripts: addReflectCharges(item, charges, reflectpercent) Função: Ela é o coraçao do script, sem ela voce nao faz nada, voce usa ela pra adicionar cargas a um item qualquer, des de que seja equipavel. item - O uid do item que vai ser adicionado as cargas.charges - Numero de cargas, caso voce use "inf", assim mesmo com as aspas, o item tera infinitas cargas.reflectpercent - Porcentagem de reflexão que o item vai ter. renewCharges(item) Função: Recarregar as cargas de um item. item - O uid do item que vai ser recarregado. O script usado para adicionar o colar foi uma talkaction assim: function onSay(cid, words, param) local item = doPlayerAddItem(cid, 2125) addReflectCharges(item, 40, 75) return TRUE end Bom é isso pessoal espero que gostem, E se Gostarem deem REP + Vlw Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Couto 293 Postado Setembro 24, 2011 Share Postado Setembro 24, 2011 Movido para seção de scripting. Não foi aprovado como tutorial, pois é um Script. Link para o comentário Compartilhar em outros sites More sharing options...
WaldirJunior 4 Postado Setembro 25, 2011 Share Postado Setembro 25, 2011 seria legal para pokemon Link para o comentário Compartilhar em outros sites More sharing options...
meubk 257 Postado Setembro 25, 2011 Share Postado Setembro 25, 2011 da uma ajeitadinha nos codes, vc pois eles centralizados :S Link para o comentário Compartilhar em outros sites More sharing options...
AdmZenhow 39 Postado Setembro 25, 2011 Share Postado Setembro 25, 2011 Legalzin ^^ Link para o comentário Compartilhar em outros sites More sharing options...
zaton 0 Postado Outubro 1, 2011 Share Postado Outubro 1, 2011 function onSay(cid, words, param) local item = doPlayerAddItem(cid, 2125) addReflectCharges(item, 40, 75) return TRUE end Crio uma action, em actions.xml boto o id 2125 do item que é pra ser executada, quando vou testar não funfa como faz '-' ? Link para o comentário Compartilhar em outros sites More sharing options...
Riiicky 1 Postado Outubro 11, 2011 Share Postado Outubro 11, 2011 Olá na linha aonde está escrito doItemSetAttribute(item, "description", "That item reflects " .. reflectpercent .. " percent of physical damage.") Oque escreveria para refletir todos os attacks? ( fisico , fogo etc ..) Vllw.. Link para o comentário Compartilhar em outros sites More sharing options...
Tony 306 Postado Outubro 11, 2011 Share Postado Outubro 11, 2011 Cara tem um tempo que eu quero uma script assim Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados