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.
endCheckLevel(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.
endGoldLose(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

