Ir para conteúdo
Entre para seguir isso  
iuniX

Durability System Versão 1.0

Recommended Posts

iuniX    4
iuniX

Nome: Durability System V: 1.0

Autor: iuniX and dalvorsn

Testado em: TFS 0.4 DEV

  • Explicação:

É um sistema de Durabilidade do item, basicamente igual a do diablo 2 e do Mu online.

Os itens vão "desgastando" durante o uso e se você não for ao ferreiro, o item quebrará e você perderá ele :B

 

  • Scripts:

 

Vá em creaturescripts/scripts e crie um arquivo chamado durability.lua e coloque isso nele:

[color=lime]local chance = 1 [/color]        
function getItemsBody(cid)
       local items = {}
       for i=1,8 do
           if(isPlayer(cid) and getPlayerSlotItem(cid, i).uid ~= (nil or 0) and i ~= (3 and 2))then
           table.insert(items, getPlayerSlotItem(cid, i))
           end
       end
   return items
end
function getItemArmor(uid)
          if type(uid) == 'number' then
                 return getItemAttribute(uid,'armor')
          else
                 return getItemInfo(uid.itemid).armor
          end
       end
function isArmor(uid)
        if (getItemArmor(uid) and getItemArmor(uid) ~= 0 and not getItemInfo(uid.itemid,'attack') and not getItemInfo(uid.itemid,'defense') and getItemWeaponType(uid.uid) == 0) then
           return true
        end
        return false
end
function isWeapon(uid)
        uid = uid or 0
        local f = getItemWeaponType(uid)
        if f == 1 or f == 2 or f == 3 or f == 5 then
            return true
        end
        return false
end

function onCombat(cid, target, item, words, param)
for i,v in pairs(getItemsBody(cid)) do
           local z = getItemAttribute(v.uid, "Durability")
           if isArmor(v) == true or isWeapon(v.uid) == true then
           if z == nil then
               doItemSetAttribute(v.uid, "Durability", "Durability: 10/10")
               return true
           else
         if math.random(1,100) <= chance then
               local c = string.match(z, "Durability: (.+)/10")
                              if (z == "Durability: 10/10") then
               local c = 9
                   doItemSetAttribute(v.uid, "Durability", "Durability: "..c.."/10")
                   doSendMagicEffect(getCreaturePosition(cid), 34)
               elseif (z == "Durability: 0/10")then
               doItemSetAttribute(v.uid, "name", getItemNameById(v.itemid))
                   doTransformItem(v.uid,2256)                    
               else
               local c = c-1
                   doSendMagicEffect(getCreaturePosition(cid), 34)                
                   doItemSetAttribute(v.uid, "Durability", "Durability: "..c.."/10")
                     local b = getItemAttribute(v.uid, "Durability")    
                   local name = getItemNameById(v.itemid)
                   doItemSetAttribute(v.uid , "name", name.." ("..b..")")
                 end     
               end
           end
           end
 end 
return true
end

function onLogin(cid)
       registerCreatureEvent(cid, "Durability")
       return true
end

Verde: Coloque as chances de diminuir a durabilidade (aconselho deixar em 1)

 

Agora crie um xml na pasta data/npcs e coloque o nome de blacksmith e bote isso nele:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="The Blacksmith" script="blachsmith.lua" walkinterval="2000" floorchange="0">
   <health now="150" max="150"/>
   <look type="160" head="140" body="64" legs="121" feet="76" addons="3" corpse="2212"/>
</npc>

Agora crie um .lua na pasta data/npcs/scripts e coloque o nome de blacksmith e bote isso nele:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid)                npcHandler:onCreatureAppear(cid)            end
function onCreatureDisappear(cid)            npcHandler:onCreatureDisappear(cid)            end
function onCreatureSay(cid, type, msg)            npcHandler:onCreatureSay(cid, type, msg)        end
function onThink()                    npcHandler:onThink()                    end

function creatureSayCallback(cid, type, msg, words, param)
   if(not npcHandler:isFocused(cid)) then
       return false
   end
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

   function getItemsBody(cid)
       local items = {}
       for i=1,8 do
           if(isPlayer(cid) and getPlayerSlotItem(cid, i).uid ~= (nil or 0) and i ~= (3 and 2))then
               table.insert(items, getPlayerSlotItem(cid, i))
           end
       end
   return items
end

local price = 10000

function getItemArmor(uid)
          if type(uid) == 'number' then
                 return getItemAttribute(uid,'armor')
          else
                 return getItemInfo(uid.itemid).armor
          end
       end
function isArmor(uid)
        if (getItemArmor(uid) and getItemArmor(uid) ~= 0 and not getItemInfo(uid.itemid,'attack') and not getItemInfo(uid.itemid,'defense') and getItemWeaponType(uid.uid) == 0) then
           return true
        end
        return false
end
function isWeapon(uid)
        uid = uid or 0
        local f = getItemWeaponType(uid)
        if f == 1 or f == 2 or f == 3 or f == 5 then
            return true
        end
        return false
end

   if(msgcontains(msg, 'repair')) then
       selfSay('Do you want to repair your set for '..price..' gold coins?', cid)
       talkState[talkUser] = 1
   elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
           if(doPlayerRemoveMoney(cid, price)) then
                for i,v in pairs(getItemsBody(cid)) do
                if isArmor(v) == true or isWeapon(v.uid) == true then
                local z = getItemAttribute(v.uid, "Durability")
                doItemSetAttribute(v.uid, "Durability", "Durability: 10/10")
                doSendMagicEffect(getCreaturePosition(cid), 34)
                local b = getItemAttribute(v.uid, "Durability")    
                local name = getItemNameById(v.itemid)
                doItemSetAttribute(v.uid, "name", name.." ("..b..")")
                end
                end
                selfSay('Here you are.', cid)
           else
               selfSay('Sorry, you don\'t have enough gold.', cid)
            end
end
       talkState[talkUser] = 0

   elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser])) then
       talkState[talkUser] = 0
       selfSay('Ok then.', cid)
   end
    return true
end


npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Esse npc ficou pogado igual o diabo pq eu não sei fazer npcs, bjos ;*

 

 

  • Tags:

Agora vá em creaturescripts/creaturescripts.xml e coloque isso:

<event type="combat" name="durability" event="script" value="durability.lua"/>
<event type="login" name="durabilitylogin" event="script" value="durability.lua"/>

 

OBS: Por motivos pessoais, não quero a postagem deste script ou qualquer outro script meu em outro forum.

OBS²: Em alguns distros, a função onCombat é executada mais de uma vez ao entrar em combat, isso é um erro nas source, então as vezes pode ocorrer isso (no distro que eu usei, ocorreu)...

OBS³: As funções isArmor e isWeapon vieram do upgrade system do Mock. Então Credito a ele pelas funções...

 

  • Imagem Bonus:

57dd06c242.bmp

Editado por iuniX

Compartilhar este post


Link para o post
Oneshot    24
Oneshot

rere...

 

Já vi isso em algum lugar, além dos MMOs citados no tópico. De qualquer forma, é uma idéia interessante e aprecio bastante a capacidade que os membros têm de adaptar sistemas de outros jogos para o open Tibia.

 

É um mecanismo muito útil e favorece bastante os RPGs em geral, deixando estes mais realistas. Ao todo, o código do script está funcional e bem desenvolvido.

 

Criatividade: 60

Organização: 60

Tamanho: 55

Utilidade: 70

 

Nota Final: 60 ou B

Remuneração Total: 45V$

Compartilhar este post


Link para o post
iuniX    4
iuniX

Estou fazendo a versão 2, esse dai foi meio apressado. Só pra testar as coisas mesmo. Agora vou fazer um completo usando lib pra facilitar um pouco.

Compartilhar este post


Link para o post
tigerx2    1
tigerx2

Coloca uma action pra usar hammer, pra reparar.

Bem melhor que ter que ficar levando no NPC (:

 

Porém, deixe o NPC também, aí é só valorizar o hammer,

e colocar um preço no NPC (:

 

@off

Desculpa tocar no assunto, mas não resisti,

foi você quem perdeu a namorada ? .-.

 

EDIT

 

Esqueci de dizer, o sisteminha é bem legal, parabéns.

Compartilhar este post


Link para o post
iuniX    4
iuniX
Coloca uma action pra usar hammer, pra reparar.

Bem melhor que ter que ficar levando no NPC (:

 

Porém, deixe o NPC também, aí é só valorizar o hammer,

e colocar um preço no NPC (:

 

@off

Desculpa tocar no assunto, mas não resisti,

foi você quem perdeu a namorada ? .-.

 

EDIT

 

Esqueci de dizer, o sisteminha é bem legal, parabéns.

 

Versão 2.0 vou por o hammer e o npc. Só que o npc vai ter uns extras pra ser mais valorizado ;)

 

off: não, nem perdi... tava só trollando os loser do vt :]

Compartilhar este post


Link para o post
joaotesch    0
joaotesch

iunix fico muito massa, vo usar!!!

rep++

 

@edit

so nao do v$ pq minha conta foi banida hashashahsh!

Compartilhar este post


Link para o post
Biozard    0
Biozard

A primeira linha do script do npc tem um erro...Tem 2 "L"

llocal keywordHandler = KeywordHandler:new()

 

 

deu erro...arruma aew

[Error - LuaScriptInterface::loadFile] data/npc/scripts/blachsmith.lua:73: 'end'

expected (to close 'function' at line 11) near 'elseif'

[Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/blachsmith

.lua

data/npc/scripts/blachsmith.lua:73: 'end' expected (to close 'function' at line

11) near 'elseif'

Editado por Biozard

Compartilhar este post


Link para o post
iuniX    4
iuniX
A primeira linha do script do npc tem um erro...Tem 2 "L"

 

 

 

deu erro...arruma aew

 

Vlew avisar, deve ter sido na hora de colar aqui no forum...

Compartilhar este post


Link para o post
LsM    2
LsM

Sabe iunix, tanto você, quanto os outros que eu tive a oportunidade de ver crescer, me fazem muito orgulhoso após ver trabalhos como esse. Continue assim, você será um grande programador, daí vc me ensina tá =]?

 

Flws marmota =]

Compartilhar este post


Link para o post
iuniX    4
iuniX
Sabe iunix, tanto você, quanto os outros que eu tive a oportunidade de ver crescer, me fazem muito orgulhoso após ver trabalhos como esse. Continue assim, você será um grande programador, daí vc me ensina tá =]?

 

Flws marmota =]

Ahh Salmão... Eu, dalvo, Gui e Pança somos gratos pelas aulas, aprendi muito com elas. Se um dia eu virar programador como eu quero mesmo, vc vai ser o primeiro que irá ver e aprender comigo :D

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn
Ahh Salmão... Eu, dalvo, Gui e Pança somos gratos pelas aulas, aprendi muito com elas. Se um dia eu virar programador como eu quero mesmo, vc vai ser o primeiro que irá ver e aprender comigo :D

 

O pança até descobriu o que é console *-*

 

@topic

Nem precisa de crédito pra eu, fiz quase nada .-.

Fico massinha, a v2 que ta ficando fodinha, aguardem \o/

Compartilhar este post


Link para o post
vyctor17    35
vyctor17

da pra colocar uma durabilidade separada para cada item ?

Compartilhar este post


Link para o post
iuniX    4
iuniX

Voce teria que criar uma tabela com todos os items e por a durabilidade de cada e checar... traduzindo, ia ficar imenso e trabalhoso...

Compartilhar este post


Link para o post
Vittu    5
Vittu

Irado fico igual ao Diablo mais ficaria sinistro ter que ficar almentando os items di novo serve para quem gosta Muito de RPG.

Compartilhar este post


Link para o post
Cirtaboy    0
Cirtaboy

[1:19:52.255] [Error - LuaInterface::loadFile] data/npc/scripts/cyclops.lua:73:'end' expected (to close 'function' at line 11) near 'elseif'

[1:19:52.255] [Warning - NpcEvents::NpcEvents] Cannot load script: data/npc/scripts/cyclops.lua

[1:19:52.256] data/npc/scripts/cyclops.lua:73: 'end' expected (to close 'function' at line 11) near 'elseif'

Compartilhar este post


Link para o post
iuniX    4
iuniX
[1:19:52.255] [Error - LuaInterface::loadFile] data/npc/scripts/cyclops.lua:73:'end' expected (to close 'function' at line 11) near 'elseif'

[1:19:52.255] [Warning - NpcEvents::NpcEvents] Cannot load script: data/npc/scripts/cyclops.lua

[1:19:52.256] data/npc/scripts/cyclops.lua:73: 'end' expected (to close 'function' at line 11) near 'elseif'

 

Verifique se você não esqueceu de copiar algum end do script.

Compartilhar este post


Link para o post
Cirtaboy    0
Cirtaboy
A primeira linha do script do npc tem um erro...Tem 2 "L"

 

 

 

deu erro...arruma aew

 

Ele tem também, eu ter copiado todos ao fim. Além disso, ele não vai mostrar a durabilidade, talvez eu esteja faltando alguma coisa? Estou usando o TFS 0,4

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×