KAYNAK KOD Knight Online | Npc Ile Item Alma & Np Karşılığı Quest Sistemi (Lua + Sql)

  • Konuyu Başlatan Konuyu Başlatan Prepective
  • Başlangıç tarihi Başlangıç tarihi
  • Okuma süresi: 3:03

Prepective

Admin
Admin
Moderatör
Puan 0
Çözümler 0
Katılım
18 Ocak 2025
Mesajlar
52
Tepkime puanı
2
Konum
Bursa
Web sitesi
ko-turkey.net
@Prepective
Konu Sahibi
Herkese Merhaba!


Bu rehberimizde, Knight Online Private Server’ınızda oyuncuların NP (National Point) karşılığı item alabilecekleri bir quest sistemini sıfırdan nasıl kuracağınızı adım adım anlatacağım.


Bu sistem ile oyuncular, belirli bir NP karşılığında kendi sınıflarına uygun Chitin 9 setini seçip alabilecekler. Proje v18xx–v21xx arası sunucularda sorunsuz çalışır.




📌 Bölüm 1 – NPC Tanımlaması (SQL)​


Öncelikle görev verecek NPC’yi oyun dünyasına tanıtıyoruz.
SQL:
-- NPC Tanımı
INSERT INTO K_NPC VALUES
('29100','Vsro.ORG','31200','100','0','0','3','4','33','1','3','3','0','90','100','500','120000','0','0','20000','497','497','4000','1500','0','0','1000','0','0','0','250','250','250','250','250','250','250','90','7','14','35','32000','21510','0',);

-- NPC Pozisyonu (Moradon koordinatları örnek)
INSERT INTO K_NPCPOS VALUES
('21','29100','100','0','0','0','0','824','552','824','552','824','552','824','552','1','1800','0','0','NULL21');


📌 Bölüm 2 – Quest Helper Tanımı​


NPC ile etkileşimi sağlayacak görev bağlantısı.
SQL:
-- Quest Helper Tanımı
INSERT INTO QUEST_HELPER VALUES
('27100','2','1','0','5','3','1','21','29100','0','0','100','0','0','0','Vsro.ORG')


📜 Bölüm 3 – LUA Kodları (Görev Mantığı)​


Aşağıdaki LUA kodları, oyuncunun NP’sine göre sınıfına özel item seti almasını sağlar. 150,000 NP karşılığı verilecek olan Chitin 9 setleri oyuncunun çantasına otomatik aktarılır.
SQL:
local UserClass;
local QuestNum;
local Ret = 0;
local NPC = 27100;

if EVENT == 100 then
    SelectMsg(UID, 3, -1, 6038, NPC, 7200, 150, 7201, 151, 7203, 152, 7217, 153);
end

-- Rogue Chitin 9 Set
if EVENT == 150 then
    Loyalty = CheckLoyalty(UID, 150000);
    if Loyalty > 150000 then
        RobLoyalty(UID, 150000)
        GiveItem(UID, 255001071)
        GiveItem(UID, 255002071)
        GiveItem(UID, 255003071)
        GiveItem(UID, 255004071)
        GiveItem(UID, 255005071)
        NpcMsg(UID, 4886, NPC)
    end
end

-- Warrior Chitin 9 Set
if EVENT == 151 then
    Loyalty = CheckLoyalty(UID, 150000);
    if Loyalty > 150000 then
        RobLoyalty(UID, 150000)
        GiveItem(UID, 215001011)
        GiveItem(UID, 215002011)
        GiveItem(UID, 215003011)
        GiveItem(UID, 215004011)
        GiveItem(UID, 215005011)
        NpcMsg(UID, 4886, NPC)
    end
end

-- Mage Chitin 9 Set
if EVENT == 152 then
    Loyalty = CheckLoyalty(UID, 150000);
    if Loyalty > 150000 then
        RobLoyalty(UID, 150000)
        GiveItem(UID, 275001041)
        GiveItem(UID, 275002041)
        GiveItem(UID, 275003041)
        GiveItem(UID, 275004041)
        GiveItem(UID, 275005041)
        NpcMsg(UID, 4886, NPC)
    end
end

-- Priest Chitin 9 Set
if EVENT == 153 then
    Loyalty = CheckLoyalty(UID, 150000);
    if Loyalty > 150000 then
        RobLoyalty(UID, 150000)
        GiveItem(UID, 295001041)
        GiveItem(UID, 295002041)
        GiveItem(UID, 295003041)
        GiveItem(UID, 295004041)
        GiveItem(UID, 295005041)
        NpcMsg(UID, 4886, NPC)
    end
end


🧠 Ekstra Bilgiler:​


  • CheckLoyalty(UID,150000) → Oyuncunun yeterli NP’ye sahip olup olmadığını kontrol eder.
  • RobLoyalty(UID,150000) → Belirtilen NP miktarını düşer.
  • GiveItem(UID, ITEM_ID) → Belirtilen itemi oyuncuya verir.
  • NpcMsg → NPC'den mesaj gösterimi sağlar (oyuna özel lokalize mesaj).



✅ Sonuç:​


Bu sistem sayesinde oyuncuların sınıfına göre otomatik item alma işlemleri basitleşmiş olur. Event ödülleri, NP shop ya da özel görev senaryoları için çok işlevseldir.




🧾 Not: Her zaman scriptleri canlı sunucuya uygulamadan önce test sunucusunda deneyin ve veritabanınızın yedeğini alın.
 
Geri
Üst