Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Almira2 1
Almira2
romegames 1
romegames
D 1
delimuratt
melankolıa18 1
melankolıa18
shrpnl 1
shrpnl
Fethi Polat 1
Fethi Polat
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Best Studio 1
Best Studio
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

RepairSystem

  • Konuyu başlatan Konuyu başlatan DNA
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 8
  • Görüntüleme Görüntüleme 874

DNA

Dgraphic
TM Üye
Katılım
18 Eyl 2010
Konular
340
Mesajlar
1,023
Çözüm
4
Online süresi
2mo 27d
Reaksiyon Skoru
1,444
Altın Konu
4
Başarım Puanı
277
Yaş
39
MmoLira
7,180
DevLira
591
Ticaret - 100%
3   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

1769123521992.png


Metin2’ye özgün bir “Item Yaşlanma + Repair” sistemi yaptık.

  • Itemler kullanıldıkça yıpranıyor
  • Repair yapılmazsa renk değiştiriyor (yeşil → sarı → kırmızı)​
  • Tamir edilmezse item yok oluyor
  • Demirciye gidip bakım (repair) yaptırıyorsun​
  • Itemler geçmişini hafızada tutuyor (PK, boss, kullanım)​
  • PvP yaparsan item daha hızlı eskir​
  • Bazı itemler efsane oluyor, düşmüyor​
  • UI, ikonlar, kurulum ve fix’ler hazır​

Özetle:
Kopya Metin2 değil, itemi olan değil itemine bakan kazanıyor.
[CODE lang="cpp" title="item.h"]enum EItemRepairFlags
{
ITEM_REPAIR_MAX = 100,
};

class CItem
{
public:
int GetRepair() const { return m_iRepair; }
void SetRepair(int r) { m_iRepair = MINMAX(0, r, ITEM_REPAIR_MAX); }

int GetRepairCount() const { return m_iRepairCount; }
void IncreaseRepairCount() { ++m_iRepairCount; }

int GetMemoryPK() const { return m_iMemoryPK; }
void IncreaseMemoryPK() { ++m_iMemoryPK; }

bool IsLegendary() const { return m_bLegendary; }
void SetLegendary(bool b) { m_bLegendary = b; }

protected:
int m_iRepair;
int m_iRepairCount;
int m_iMemoryPK;
bool m_bLegendary;
};
[/CODE]

[CODE lang="cpp" title="char_battle.cpp"]void CHARACTER::OnKillRepair(LPITEM item, bool bPK)
{
if (!item || !item->IsEquipped())
return;

int loss = bPK ? 2 : 1;

if (IsDuel() || IsGuildWar())
loss /= 2;

item->SetRepair(item->GetRepair() - loss);

if (bPK)
item->IncreaseMemoryPK();

if (item->GetRepair() <= 0)
{
SendChatPacket(CHAT_TYPE_NOTICE, "Item dayanamadi ve parcalandi!");
ITEM_MANAGER::instance().DestroyItem(item);
}
}
[/CODE]

[CODE title="item.cpp"]void CItem::FinalBurst(LPCHARACTER owner)
{
if (!owner)
return;

owner->EffectPacket(SE_CRACK_EFFECT);

if (m_iMemoryPK > 50)
{
owner->Damage(owner, 500, DAMAGE_TYPE_MAGIC);
}
}
[/CODE]

[CODE title="Destroy öncesi:"]item->FinalBurst(item->GetOwner());
[/CODE]

[CODE title="repair_system.quest"]quest repair_system begin
state start begin
when 20016.chat."Item Tamiri (Repair)" begin
local item = pc.get_item_id()
if item == 0 then
say("Item secmelisin.")
return
end

if item.get_repair() <= 0 then
say("Bu item kurtarilamaz.")
return
end

local cost = item.get_level() * 100000
say("Tamir bedeli: "..cost.." Yang")

if pc.gold < cost then
say("Yeterli Yang yok.")
return
end

pc.change_gold(-cost)
item.set_repair(100)
item.add_repair_count()

say("Item tamir edildi.")
end
end
end
[/CODE]

[CODE title="uiToolTip.py"]repair = item.GetRepair()

if repair <= 30:
self.AppendTextLine("Repair: %d (KRITIK)" % repair, 0xffc0392b)
elif repair <= 70:
self.AppendTextLine("Repair: %d (YIPRANMIS)" % repair, 0xfff1c40f)
else:
self.AppendTextLine("Repair: %d (SAGLAM)" % repair, 0xff2ecc71)
[/CODE]

[CODE title="item.cpp"]void CItem::CheckLegendary()
{
if (m_iMemoryPK >= 100 && m_iRepairCount >= 10)
{
m_bLegendary = true;
SetAntiFlag(ITEM_ANTIFLAG_DROP);
SetAntiFlag(ITEM_ANTIFLAG_TRADE);
}
}
[/CODE]

[CODE title="TEST KOMUTU (GM)"]/repair_set 0
/repair_set 100
[/CODE]

[CODE title="repair_system.quest"]quest repair_system begin
state start begin

when 20016.chat."Item Tamiri (Repair)" begin
say_title("Demirci")
say("Tamir edilecek itemi takılı halde olmalı.")

-- Silah slotu (0) örnek, istersen zırh için 1 yaparsın
local wear_slot = 0
local item_vnum = pc.get_wear(wear_slot)

if item_vnum == 0 then
say("Üzerinde tamir edilecek item yok.")
return
end

local repair = item.get_repair()
if repair <= 0 then
say("Bu item artık kurtarılamaz.")
return
end

local cost = item.get_level() * 100000
say("Mevcut Repair: "..repair)
say("Tamir Bedeli: "..cost.." Yang")

local s = select("Tamir Et", "İptal")
if s == 2 then
return
end

if pc.gold < cost then
say("Yeterli Yang yok.")
return
end

pc.change_gold(-cost)
item.set_repair(100)
item.add_repair_count()

say("Item başarıyla tamir edildi.")
end

end
end
[/CODE]
 

Ekli dosyalar

Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

Paylaşım için teşekkürler. Bu kısmı anlamadım
Quest aracılığıyla bir eşya seçmeden neden eşya seçili olup olmadığını kontrol ettirdiniz? pc.select_item() eksik.

when 20016.chat."Item Tamiri (Repair)" begin
local item = pc.get_item_id()
if item == 0 then
say("Item secmelisin.")
return
end
Farklı ve kendinize özgü sıradışı bir sistem yapmışsınız. Teşekkür ederim paylaşım için.
 
Ko daki rpr sistemimi bu
 
PAYLAŞIM İÇİN TEŞEKKÜRLER ELİNE SAĞLIK .
 
  • Beğeni
Reactions: DNA
Paylaşım için teşekkürler. Bu kısmı anlamadım
Quest aracılığıyla bir eşya seçmeden neden eşya seçili olup olmadığını kontrol ettirdiniz? pc.select_item() eksik.

when 20016.chat."Item Tamiri (Repair)" begin
local item = pc.get_item_id()
if item == 0 then
say("Item secmelisin.")
return
end
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst