KO-FOX'TA REKLAM VERİN · SUNUCUNUZU BİNLERCE KNIGHT ONLINE OYUNCUSUNA DUYURUN
HOŞ GELDİNİZ! KO-FOX | TÜRKİYE'NİN KNIGHT ONLINE TOPLULUĞUNA ÜCRETSİZ KATILIN →
  • Dün, 22:22:14
    Konu Sahibi #1
    RavACS
    ModeratörGold Üye
    RavClientStudio :)
    • Kayıt
      Ekim 2026
    • Mesajlar
      35
    • Beğeniler
      67
    • Durum
      Çevrimiçi
    Bu rehber, Knight Online'da Lua dilini kullanarak NPC'lerle etkileşimli görevler hazırlamayı öğretir. Buradaki komutlar ve örnekler, kendi görev scriptlerinizi oluştururken size rehberlik edecektir.
    Lua ile NPC Bağlantısı

    Değişken Tanımlamaları

    Kod:
    local UserClass;   -- Kullanıcı sınıfı
    local QuestNum;    -- Görev numarası
    local Ret = 0;     -- Fonksiyon dönüş değeri
    local NPC = NPC_KODU; -- NPC'nin kimliği
     NPC'ye Tıklayınca Açılan Menü

    İlk Menü Tanımlaması

    Kod:
    if EVENT == EVENT_KODU then
        SelectMsg(UID, 3, -1, MESAJ_KODU, NPC, MENU, ICERIK, -1, -1, -1, -1, -1);
    end
     
    • EVENT_KODU: Görevi tetikleyen olay kodu. Bu kod, benzersiz olmalıdır ve veritabanında yer alabilir ya da manuel atanabilir.
    • MESAJ_KODU: NPC ile konuştuğunuzda ekranda beliren mesaj. Bu kodlar, Quest_Talk_us.tbl dosyasından çekilir.
    • MENU: NPC menüsündeki butonlarda görünen metin. Bu metinler, Quest_Menu_us.tbl dosyasından alınır.
    • ICERIK: Butonun tetikleyeceği event kodudur.
     
    Örnek Menü Yapısı
    Kod:
    if EVENT == 100 then
        SelectMsg(UID, 3, -1, 1186, NPC, 10, 150, -1, -1, -1, -1, -1);
    end
     
    • EVENT == 100: 100 numaralı olay tetiklenir.
    • 1186: Quest_Talk_us.tbl dosyasından alınan mesaj kodu.
    • 10: Quest_Menu_us.tbl dosyasından alınan buton kodu.
    • 150: Butona basıldığında çalışacak event kodu.
     
    Devam Eden Menü Yapısı
    Kod:
    if EVENT == 150 then
        SelectMsg(UID, 3, -1, 1234, NPC, 27, 180, -1, -1, -1, -1, -1);
    end
     
    Genişletilmiş Menü Sistemi
    Kod:
    if EVENT == EVENT_KODU then
        QuestNum = SearchQuest(UID, NPC);
        if QuestNum == 0 then
            SelectMsg(UID, 3, -1, MESAJ_KODU, NPC, MENU, ICERIK, -1, -1, -1, -1, -1);
            Ret = 1;
        elseif QuestNum > 1 and QuestNum < 100 then
            NpcMsg(UID, Mesaj_Kodu, NPC);
        else
            EVENT = QuestNum;
        end
    end
     
    Ekstra Komutlar

    GiveItem(UID, ITEMNO, ADET)
    : Kullanıcıya belirli miktarda item verir.
    Kod:
    GiveItem(12345, 10001, 10);  -- Kullanıcıya 10 adet 10001 kodlu item verir.
    RobItem(UID, ITEMKOD, ADET): Kullanıcıdan belirli miktarda item alır.
    Kod:
    RobItem(12345, 10001, 5);  -- Kullanıcıdan 5 adet 10001 kodlu item alır.
    RunExchange(UID, EVENTNO): Kullanıcı için belirli bir event başlatır.
    Kod:
    RunExchange(12345, 2001);  -- Kullanıcı için 2001 kodlu event başlatılır.
    CheckGiveSlot(UID, -1): Kullanıcının envanterinde boş yer olup olmadığını kontrol eder.
    Kod:
    local Check = CheckGiveSlot(12345, -1);
    if Check > 1 then
        -- Envanterde boş yer var, devam edebilirsiniz.
    end
    CheckLevel(UID): Kullanıcının seviyesini kontrol eder.
    Kod:
    local Level = CheckLevel(12345);
    if Level >= 30 then
        -- Kullanıcının seviyesi 30 veya üstü, görevi verebilirsiniz.
    end
    GoldLose(UID, ParaMiktarı): Kullanıcıdan belirtilen miktarda altın alır.
    Kod:
    GoldLose(12345, 1000);  -- Kullanıcıdan 1000 altın alır.
    GiveLoyalty(UID, NPMIKTARI): Kullanıcıya belirli miktarda NP (national point) verir.
    Kod:
    GiveLoyalty(12345, 500);  -- Kullanıcıya 500 NP verilir.
    GiveMoney(UID, PARAMIKTARI): Kullanıcıya belirli miktarda para verir.
    Kod:
    GiveMoney(12345, 2000);  -- Kullanıcıya 2000 altın verilir.
     
    Örnek Görev Lua Scripti

    Aşağıda, kullanıcıya görev verirken yapılan kontroller ve ödüller içeren bir örnek bulunmaktadır:
    Kod:
    function OnEventStart(UID)
        local Check = CheckGiveSlot(UID, -1);
        if Check < 1 then
            print("Envanterde boş yer yok.");
            return;
        end
    
        local Level = CheckLevel(UID);
        if Level < 30 then
            print("Bu görevi Ko-Fox üyesi  yapmak için 30. seviyede olmalısınız.");
            return;
        end
    
        GoldLose(UID, 1000);
        GiveItem(UID, 10001, 10);
        GiveLoyalty(UID, 500);
        GiveMoney(UID, 2000);
    
        print("Görev başarıyla tamamlandı. Ödüller verildi.");
    end
                                                           
    RavACS 
    Admin beğendi.
  • Dün, 22:28:08
    #2
    Site Yöneticisi
    Yönetici
    Belirtilmemiş
    • Kayıt
      Ekim 2026
    • Mesajlar
      42
    • Beğeniler
      7
    • Durum
      Çevrimiçi
    Paylaşım için teşekkürler 
    KO-FOX
Hızlı Cevap
Bu konuya cevap yazabilmek için veya kayıt olmalısınız.