Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Actions] System Ulepszen ala Metin2


Rekomendowane odpowiedzi

Opublikowano

Witam mam dziś do zaprezentowania wam skrypt do ots pod Tibie 8.6 od jednego z lepszych skrypterów z otland edytowany przeze mnie.

Przejdźmy do sedna ! Jest to skrypt dzięki któremu możemy ulepszać nasze itemy do +9 jak w Metinie Zwojami Błogosławieństwa.

Czyli mamy np. 20% na ulepszenie na następny poziom a jeśli zawiedziemy to poziom spada o 1. Wszystko można ustawić pod swoje preferencje.

Wiec zaczynajmy:

otwieramy: data -> actions -> scripts

tworzymy tam nowy plik .lua (najlepiej skopiować jakiś i go edytować)

zmieniamy jego nazwę na magicznymetal.lua i edytujemy go notatnikiem i wklejamy to :

--- Perfect refine system by Mock (edit by Rafaeru)
local gain = {
gainArmor='&p+1',loseArmor='&p-1', -- liczba pkt dodanych po ulepszaniu pancerzy
gainShield='&s+#',loseShield='&s-(#+1)', -- liczba pkt dodanych po ulepszaniu tarczy
gainAttack='&a+(2*(#))',loseAttack='&a-(2*(#+1))',  -- liczba pkt dodanych po ulepszaniu broni (atak)
gainDefense='&d+(2*(#))',loseDefense='&d-(2*(#+1))',  -- liczba pkt dodanych po ulepszaniu broni (obrona)
chance='100/((#*(1/(@/2)))*(@/2))',  -- szansa na ulepszanie 
maxlvl = 9, -- max lvl do ulepszania
blocked_ids = {2488,8881} -- blokowane id przedmiotu
}

if not setItemName then
	function setItemName(uid,name)
	 return doItemSetAttribute(uid,'name',name)
	end
	function setItemArmor(uid,name)
	 return doItemSetAttribute(uid,'armor',name)
	end
	function setItemDefense(uid,name)
	 return doItemSetAttribute(uid,'defense',name)
	end
	function setItemAttack(uid,name)
	 return doItemSetAttribute(uid,'attack',name)
	end
	function getItemAttack(uid)
	   return getItemAttribute(uid,'attack')
	end
	function getItemDefense(uid)
	   return getItemAttribute(uid,'defense')
	end
	function getItemArmor(uid)
	   if type(uid) == 'number' then
		  return getItemAttribute(uid,'armor')
	   else
		  return getItemInfo(uid.itemid).armor
	   end
	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 then
             return TRUE
         end
         return FALSE
end
function isShield(uid)
         uid = uid or 0
         if getItemWeaponType(uid) == 4 then
             return TRUE
         end
         return FALSE
end
 
function getWeaponLevel(uid)
   uid = uid or 0
   local name = getItemName(uid)
   local lvl = string.match(name,'+(%d)')
   return tonumber(lvl) or 0
end
function doTransform(s,i) 
    local c = string.gsub(s,'@',gain.maxlvl)
    local c = string.gsub(c,'&a',getItemAttack(i.uid) or getItemInfo(i.itemid).attack)
    local c = string.gsub(c,'&d',getItemDefense(i.uid) or getItemInfo(i.itemid).defense)
    local c = string.gsub(c,'&s',getItemDefense(i.uid) or getItemInfo(i.itemid).defense)
    local c = string.gsub(c,'&p',getItemArmor(i.uid) or getItemInfo(i.itemid).armor)
    local c = string.gsub(c,'#',getWeaponLevel(i.uid))
    local q,err = loadstring('return '..c)
    assert(q,err)
    return assert(q())
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
         toPosition.stackpos = 255
         if isInArray(gain.blocked_ids, itemEx.itemid) == TRUE
          or getItemWeaponType(itemEx.uid) > 4
           or (getItemWeaponType(itemEx.uid) == 0
            and isArmor(itemEx) == FALSE)
             or itemEx.itemid == 0 then
                doPlayerSendTextMessage(cid, 24,"Nie mozna ulepszyc tego przedmiotu")
                return TRUE
         end
         if isCreature(itemEx.uid) == TRUE then
            return FALSE
         end
        local level = getWeaponLevel(itemEx.uid)
        local chance = doTransform(gain.chance,itemEx)
        if chance >= math.random(0,100) or item.actionid >= 1000 or (item.actionid == 500 and math.random(0,100) <= 25) then
           if level+1 > gain.maxlvl then
              doSendMagicEffect(toPosition, 2)
              return doPlayerSendTextMessage(cid, 24,"Twoj item osiagnal juz max lvl")
           else
              setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level+1))
              doPlayerSendTextMessage(cid, 24,"Twoj przedmiot zostal ulepszoy do +"..(level+1)..".")
              doSendMagicEffect(toPosition, 12)
              if isArmor(itemEx) == TRUE then
                 local get = doTransform(gain.gainArmor,itemEx)
                 setItemArmor(itemEx.uid,get)
              elseif isWeapon(itemEx.uid) == TRUE then
                  setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))
                  setItemDefense(itemEx.uid, doTransform(gain.gainDefense,itemEx))
              elseif isShield(itemEx.uid) == TRUE then
                  setItemDefense(itemEx.uid, doTransform(gain.gainShield,itemEx))
              end
           end
        else
 
           if level == 0 then
               doPlayerSendTextMessage(cid, 24,"Nic sie nie stalo")
               doSendMagicEffect(toPosition, 2)
           elseif level == gain.maxlvl then
                  doSendMagicEffect(toPosition, 2)
                  return doPlayerSendTextMessage(cid, 24,"Twoj przedmiot nie moze byc bardziej ulepszany")
           elseif level > 0 then
               if level == 1 then
                   setItemName(itemEx.uid, getItemNameById(itemEx.itemid))
                   doPlayerSendTextMessage(cid, 24,"Twoj przedmiot ma normalny poziom.")
               else
                   setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1))
                   doPlayerSendTextMessage(cid, 24,"Ulepszyles item do +"..(level-1)..".")
               end
              if isArmor(itemEx) == TRUE then
                 setItemArmor(itemEx.uid,doTransform(gain.loseArmor  ,itemEx))
              elseif isWeapon(itemEx.uid) == TRUE then
                  setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))
                  setItemDefense(itemEx.uid, doTransform(gain.loseDefense,itemEx))
              elseif isShield(itemEx.uid) == TRUE then
                  setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx))
              end
           end
           doSendMagicEffect(toPosition, 9)
        end
     doRemoveItem(item.uid,1)
     return TRUE
end

Jest tam wszystko wyjaśnione nie powinno być problemu z edytowaniem tego skryptu nawet dla zielonych

następnie wchodzimy w : data -> actions

edytujemy plik actions.xml notatnikiem i dodajemy linijkę :

    <action itemid="8306" script="magicznymetal.lua"/>

Wszystko zapisujemy i restartujemy serwer lub robimy reload actions w konsoli.

Powinno być wszystko dobrze. ID przedmiotu który ulepsza to "8306"

Można to zmienić na jakie się chce.

 

Dziękuje za przeczytanie tego poradnika i proszę o ocenę.

  • 9 miesięcy temu...
Opublikowano

Przyda mi sie dzieki masz u mnie + i do tego ocene tobie stawiam za skrypt 6/10 , jak bys sie znal na tfs 0.4 i source dokladnie to potrzebuje zwiekszyc max level , moge zaplacic gora 10zl doladowanie pisz pw. Ocena 6/10

  • 5 miesięcy temu...
  • 3 tygodnie później...
Opublikowano

Ref, zapraszam do testowania i oceniania.

od 0 pisałeś ten skrypt, kojarzę go z jakiegoś otka. Opcja fajna, dzisiaj przetestuję na swoim serwerze. 

Pewnego wieczoru wziąłem na kolana Piękno. - I przekonałem się, że jest gorzkie.

Opublikowano

od 0 pisałeś ten skrypt, kojarzę go z jakiegoś otka. Opcja fajna, dzisiaj przetestuję na swoim serwerze. 

Nie ja tylko edytowałem go na własne potrzeby ale myślę, że opcja jest fajna.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...