Pesquisar na Comunidade
Mostrando resultados para as tags ''sistema de durabilidade''.
Encontrado 1 registro
-
Olá XTibianos, vim trazer um novo sistema que criei nomeado por min como: Sistema de Durabilidade! Qual a funcionalidade desse sistema: Esse sistema tem a função de atribuir pontos de durabilidade em diversos tipos de itens, trazendo assim um pouco mais de realidade ao mundo do tibia, simulando batalhas onde os seus itens vão se desgastando até virarem inuteis. Quais tipos de itens que podem ser adicionados esses pontos: Weapons Shields Armors Legs Helmet Boots Como esses pontos diminuem: Conforme o player vai batalhando, os pontos de durabilidade de todos os itens que estão sendo usados vão diminuindo até chegar a 0. Oque acontese se os pontos chegarem a 0: Se os pontos da sua weapon chegarem a 0, você não consiguira mais atacar o monstro. Ja se o pontos do seu shield chegarem a 0, a defesa dele é setada para def=0. E os outros itens do seu set que tiverem os pontos de durabilidades zerados, receberam arm=0. E com isso você tem necessidade de reparar esses itens para voltar ao normal. Como reparar esses itens: Eu irei postar duas formas de reparação de itens, um npc e uma talkaction. Vocês devem usar a que acharem de melhor adaptação em seu otserv. O itens podem ser reparados mesmo sem estar com os pontos iguais a 0, sera cobrado uma taxa por cada ponto de durabilidade reparado dos itens, esse preço é configuravel no scripts. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Vamos aos primeiros scripts do sistema: Primeiramente vai na pasta data/creaturescripts/scripts, duplica um arquivo e nomeia para "durWeapons" sem as apas e nele cole: function onStatsChange(cid, attacker, type, combat, value) chance = 970 if type == STATSCHANGE_HEALTHLOSS then if isPlayer(attacker) then local slotWeapon = nil if weapons[getPlayerSlotItem(attacker, CONST_SLOT_RIGHT).itemid] then slotWeapon = CONST_SLOT_RIGHT elseif weapons[getPlayerSlotItem(attacker, CONST_SLOT_LEFT).itemid] then slotWeapon = CONST_SLOT_LEFT end if slotWeapon == nil then return true end if (getItemAttribute(getPlayerSlotItem(attacker, slotWeapon).uid, "Charges") == "Broken") then doPlayerSendTextMessage(attacker, 22, "Sua weapon esta quebrada.") return false elseif (math.random(1,1000) > chance) then setDurabilidade(attacker, slotWeapon, weapons) end end elseif type == STATSCHANGE_HEALTHGAIN then return false end return true end function onCombat(cid, target) registerCreatureEvent(target, "DurGain") return true end Agora duplique outro arquivo nessa mesma pasta e nomeie para "durItens" sem as aspas e nele cole: local slotShield = nil local slotArmor = nil local slotLegs = nil local slotHelmet = nil local slotBoots = nil local slots = { [1] = {slot=slotHelmet, lib=helmets}, [4] = {slot=slotArmor, lib=armors}, [5] = {slot=slotShield, lib=shields}, [6] = {slot=slotShield, lib=shields}, [7] = {slot=slotLegs, lib=legs}, [8] = {slot=slotBoots, lib=boots} } function onThink(cid, interval) if (isPlayer(cid)) then for i=1, 8 do if slots[i] ~= nil then if slots[i].lib[getPlayerSlotItem(cid, i).itemid] then slots[i].slot = i if setDurMaxHit(cid, slots[i].slot, slots[i].lib) then return true end end end end local slotWeapon = nil if weapons[getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid] then slotWeapon = CONST_SLOT_RIGHT elseif weapons[getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid] then slotWeapon = CONST_SLOT_LEFT end if slotWeapon ~= nil then if setDurMaxHit(cid, slotWeapon, weapons) then return true end end if getPlayerStorageValue(cid, 456431) < 0 then chance = math.random(15,30) setPlayerStorageValue(cid, 456432, chance) end chance = getPlayerStorageValue(cid, 456432) if(getCreatureCondition(cid, CONDITION_INFIGHT)) and getPlayerStorageValue(cid, 456431) < chance then local health = getCreatureHealth(cid) setPlayerStorageValue(cid, 456431, getPlayerStorageValue(cid, 456431)+1) if getPlayerStorageValue(cid, 456431) == chance-1 then addEvent(verificaLife, 1000, health, cid) setPlayerStorageValue(cid, 456431, -1) end end end end function verificaLife(health, cid) if (isPlayer(cid)) then if getCreatureHealth(cid) < health then for i=1, 8 do if slots[i] ~= nil then if slots[i].lib[getPlayerSlotItem(cid, i).itemid] then slots[i].slot = i addEvent(setDurabilidade, math.random(10000,60000), cid, slots[i].slot, slots[i].lib) end end end end end end Depois disso, abra o arquivo creaturescripts.xml que fica na pasta data/creaturescripts e nele cole essas três tags: <event type="think" name="DurabTime" event="script" value="durItens.lua"/> <event type="statschange" name="DurGain" event="script" value="durWeapons.lua"/> <event type="combat" name="Durab" event="script" value="durWeapons.lua"/> E para terminar a parte de creaturescripts, vai na pasta data/creaturescripts/scripts, abre a arquivo login.lua e antes do último return true cole: registerCreatureEvent(cid, "Durab") registerCreatureEvent(cid, "DurabTime") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Agora vamos pra parte de configuração do script, nesse script você deve configurar os itens que terão pontos de durabilidade, quantos pontos eles terão, se for shield você deve por qual sua "def" normal e se for outros itens do set deve por a sua "arm" normal. Vai na pasta data/lib, duplica um arquivo, nomeie para "039-durabilidade" sem as aspas e nele cole: weapons = { [2421] = {charge=100}, [2415] = {charge=50}, [2404] = {charge=50} } shields = { [2516] = {charge=50, def=31}, -- dragon shield [2520] = {charge=50, def=35} -- demon shield } armors = { [2486] = {charge=50, arm=15} } legs = { [7894] = {charge=50, arm=8} } helmets = { [2501] = {charge=50, arm=7} } boots = { [11113] = {charge=50, arm=3} } -- Não configurar daqui para baixo -- function isWeapon(uid) -- Function by Mock the bear. uid = uid or 0 local f = getItemWeaponType(uid) if f == 1 or f == 2 or f == 3 then return TRUE end return FALSE end function isShield(uid) -- Function by Mock the bear. uid = uid or 0 if getItemWeaponType(uid) == 4 then return TRUE end return FALSE end function setItemName(uid,name) -- Function by Mock the bear. return doItemSetAttribute(uid,'name',name) end function setItemDefense(uid,name) -- Function by Mock the bear. return doItemSetAttribute(uid,'defense',name) end function setItemArmor(uid,name) -- Function by Mock the bear. return doItemSetAttribute(uid,'armor',name) end function setDurabilidade(cid, slot, lib) if (isPlayer(cid)) then if getPlayerSlotItem(cid, slot).uid > 0 then if (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) ~= "Broken" then doItemSetAttribute(getPlayerSlotItem(cid, slot).uid, "Charges", (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) - 1) setItemName(getPlayerSlotItem(cid, slot).uid, getItemNameById(getPlayerSlotItem(cid, slot).itemid)..' [Dur: '.. (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) ..'/'.. lib[getPlayerSlotItem(cid, slot).itemid].charge ..']') if getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges") <= 0 then doPlayerSendTextMessage(cid, 22, "Your item has broken.") if (isShield(getPlayerSlotItem(cid, slot).uid)) then setItemDefense(getPlayerSlotItem(cid, slot).uid, 0) end if (not isShield(getPlayerSlotItem(cid, slot).uid) and not isWeapon(getPlayerSlotItem(cid, slot).uid)) then setItemArmor(getPlayerSlotItem(cid, slot).uid, 0) end doSendMagicEffect(getPlayerPosition(cid), 2) doItemSetAttribute(getPlayerSlotItem(cid, slot).uid, "Charges", "Broken") return true end else doSendMagicEffect(getPlayerPosition(cid), 2) return false end end end end function setDurMaxHit(cid, slot, lib) if (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) ~= "Broken" then if (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges") == nil or getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges") == 0 and slot ~= nil) then doItemSetAttribute(getPlayerSlotItem(cid, slot).uid, "Charges", lib[getPlayerSlotItem(cid, slot).itemid].charge) setItemName(getPlayerSlotItem(cid, slot).uid, getItemNameById(getPlayerSlotItem(cid, slot).itemid)..' [Dur: '.. (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) ..'/'.. lib[getPlayerSlotItem(cid, slot).itemid].charge ..']') return true end end return false end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Por fim, vamos criar a talkaction e o npc reparadores. TalkAction: Essa talkaction vai funcionar da seguinte maneira, se você falar "!reparar" irá reparar todos os seus itens. Caso você fale !reparar weapon, !reparar shield, !reparar helmet, !reparar armor, !reparar legs ou !reparar boots, então reparara um item especifico. E será gasto gps por essa reparação, a quantidade de gps por pontos reparados esta configuravel na segunda linha do script. Primeiro vai em data/talkactions/scripts, duplica um arquivo e nomeia para "reparar" sem as aspas e nele cole: Depois vai em data/talkactions/talkactions.xml e cole a tag: <talkaction words="!reparar" event="script" value="reparar.lua"/> NPC: O npc vai funcionar praticamente igual ao talkaction só que é necessario falar os comando ao npc. O preço por pontos é configurado na quinta linha. Primeiro vai em data/npc, duplica um arquivo e nomeia para "Reparador" sem as aspas e nele cole: <?xml version="1.0" encoding="UTF-8"?> <npc name="Reparador" script="reparador.lua" walkinterval="2000" floorchange="0"> <health now="150" max="150"/> <look type="139" corpse="2212"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. Voce deseja {reparar todos} seus itens?"/> </parameters> </npc> Depois vai em data/npc/scripts, duplica um arquivo e nomeia para "reparador", sem as aspas e nele cole: Pronto o sisteminha, agora é só usar e apreciar! Imagens do Sistema:
- 14 respostas
-
- sistema de durabilidade
- durabilidade
- (e 5 mais)