Vahsi Uzman 1
Vahsi Uzman
Bvural41 1
Bvural41
OnurBoyla 1
OnurBoyla
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Hikaye Ekle

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 884

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. 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.
 
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