Bilinmesi gereken quest fonksiyonları

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 288

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhaba arkadaşlar yaklaşık 2-3 gündür quest paylaşamıyorum bunun sebebi saat 15.00 dan 22.00 a kadar işte oluyor idim fakat gündüz den bir arkadaşın yakını vefat edince gündüzde gitmek zorunda kaldım faka bugün hem bu konuya değinmek hemde bir müdey vermek istedim bugün kodlamasına başladığım lig sistemi questini yarın aksama kadar bitişmiş olacagım hemde ilk ve tek tr de ve ücretsiz olarak dağıtacağım..

Fazla uzatmadan bu konu hakkında bildiğim kadarı ile sizlere hangi fonksiyonların ne işe yaradığını anlatacağım..

Questte'ki fonksiyon ve lua kodlarını ayırt etmek

Evet arkadaşlar bir quest yazarken yazdığınız her cümlecik kod değildir. 3 Farklı olay ile questleri oluştururuz..
a-Lua kodları
b-function(fonksiyon)
c-Metinler
a-Lua kodları lua proğlamlama diline ait kodlarıdır.php,javascript vb kodlama dilleri gibi buda proğlamlama dilidir
lua diline ait birkaç kod:
if elseif else for end or and not select local global switc table while print
Bazı lua kodları bunlardır

b-Functions (fonksiyonlar)
Fonksiyonlar ise bu lua kodları ile yazılmış hazır kod diye biliriz. fonksiyonlar çağırılır iken fonksiyon_ismi() şeklinde çağrılır () içerisine bir değer girile bilir örnekler ile anlatacağım. Ayrıca dikkat ederseniz bir quest full fonksiyonlar ile çalışmakta :D örnek oyuncuya item ver : pc.get_item2("50002",1) şeklinde
Bazı fonksiyonlar:
notice pc.get_item pc.get_item2 say say_green pc.get_name pc.is_gm pc.get_level
bazu fonksiyonlardır
Fonksiyonlar sabit değildir ve lua diline hakin iseniz sizde kendi fonksiyonunuzu yazabilirsiniz entegresini anlatırım..

c- metinler
Metinler ise questi komple düşündüğümüzde içerisinde olanlar dedim o zaman bunuda eklemek gerekirdi
metinler arkadaşlar say("") arasında kullanıcıya ifa ettiğimiz bölümler örnek say("naber millet ")

Not:bu konu devamlı güncellenecektir bu yüzden şu eksik bu eksik demeyin en basitlerden başlıyorum elim yorulmasın :D

Quest fonksiyonları
1-say(),say_green(),say_yellow(),say_red()
Bahsetmek anlamına gelir ekrana basılacak her türlü ifadeyi bu parantezler içerisine yazarız
Not: say ın bazı yazım kuralları vardır örnek say("naber") şeklinde yazmamız gereklidir fakat yazılacak bir değişken ise
say(naber) de yazılabilir değişkeni yazmanın diğer yolu say(""naber"") de olabilir fakat değişkenni say("naber") şeklinde yazar iseniz ekranda naber yazar. Eğer bir değişken birde metin eklemek istiyo iseniz örnek
local yas = 24
say("Senin Yaşın "..yas.." Mı ?") şeklinde yazmamız gereklidir..
say_green ve diğerleri ise içerisine yazılan metini renkli hale getirir bir örnek vermek gerekirse
say_green("Bu yeşil bir metindir")
Çıktısı: Bu yeşil bir metindir

2-İnput()
Anlatım:
İnput oyuncuların klavyeden giriş yapmasını sağlayan kutucuklardır ruhtaşına sağ tıkladığınızda ekrana gelen kutu gibi

Kullanım:
2 farklı kullanımı vardır bu kullanımlar istenilen veriye göre değişmektedir. Eğer istenilen veri metinsel bir değer ise
direkt input() yazabiliriz fakat istenilen değer sayısal bir değer ise bunu tonumber(input()) tonumber lua hazır fonksiyonunun içerisine almamız gereklidir. almaya bilirsiniz faka if ile sorgulamada sıkıntı olur alın siz

Örnek:
local sayi = tonumber(input()) // Sayısal bir değer alıyo isem
local metin = input() // Metinsel bir değer alıyo isem
Çıktısı: Oyuncu kutuya ne yazar ise o

3-pc.get_name()
Anlatım:
Etkileşimde olan oyuncunun ismini almaya yarar

Kullanım:
2 farklı yol ile kullanabilirsiniz birincisi bir değişkene atayarak kullanım local oyuncu = pc.get_name() diğeri ise direkt kullanım pc.get_name()

Örnek:
local oyuncu = pc.get_name() say("Senin adın "..oyuncu.." ") // Değişkene atayarak kullanım
say("Senin adın "..pc.get_name().." ") //Normal kullanım
Her zaman en üstte bir kere değişkene atayın bir daha tekrar tekrar pc.get_name() yazmayın

4-pc.get_level()
Anlatım:
Etkileşimde olan oyuncunun levelini verir

Kullanım:
pc.get_name() ile aynıdır
Örnek:
pc.get_name() ile aynıdır

5-pc.get_job()
Anlatım:
Etkileşimde olan oyuncunun karakterini verir sayısal bir değer gelir 0 ile 7 arasında

Kullanım:
pc.get_name() ile aynıdır

Örnek:
pc.get_name() ile aynıdır

Mini bilgi: Sayısal bir değer geleceği için bunları bir diziye sokarak hangi karakter olduğu bulunabilir
local karakterler = {}
karakterler[0] = "Erkek savaşçı";karakterler[1] = "Kadın savaşçı";
Şeklinde gelecek değeri [*] içerisine yazarak

6-pc.get_playtime()
anlatım:
Etkileşimde olan oyuncunun oyun süresini verir. oyunda kalma süresi

Kullanım:
pc.get_name() ile aynıdır
Örnek:
local suren = pc.get_playtime()
if ( suren < 100 ) then
say("Oyun süren 100 den küçük")
else
say("Oyun süren 100 den büyük")
end

7-pc.get_money()
Gold değil money coins ep yani

Kullanım:
pc.get_name() ile aynıdır

Örnek:
local ep = pc.get_money()
say("Hesabında"..ep.." bulunmaktadır")

8-pc.get_gold()
Anlatım:
Etkileşimde olan oyuncunun yang'ını miktarını gösterir

Kullanım:
pc.get_name() ile aynıdır

Örnek:
local yang = pc.get_gold()
say("Toplam "..yang.." yangınız var")

9-pc.get_hp()
Etkileşimde olan oyuncunun hp değerini gösterir

Kullanım:
pc.get_name() ile aynıdır

Örnek:
local hp = pc.get_hp()
say("Toplam "..hp.." hp bulunmaktadır")

10-pc.get_local_x & pc.get_local_y
Anlatım:
Etkileşimde olan oyuncunun local deki x ve y konumunu gösterir dikkat local deki dedim..

Kullanım:
pc.get_name() ile aynıdır

Örnek:
local local_x = pc.get_local_x()
local local_y = pc.get_local_y()
say("Local olarak kordinatlarınız: X:"..x.." Y:"..y.." dir... ")

11-pc.get_empire()
Anlatım:
Etkileşimde olan oyuncunun krallığını verir 3 krallıkdan birisi sayısal bir değer döner 1 2 3

Kullanım:
pc.get_name() ile aynıdır

Örnek:
local kral = pc.get_empire()
say("Krallığınız: "..kral.." dır")

12-chat()
Anlatım:
Alttan geçen ve sadece etkileşimdeki oyuncunun görebileceği konuşmadır.

Kullanım:
chat("yeterince güçlü değilsin") // muharebe kılıcı +0 kazandınız yazısı gibi alttan gecer


12-table.getn()
Anlatım:
Genelde sql cümlelerini sorgulamada kullanılır. sql den dönen satır sayısını verir

Kullanım:
local sql = mysql_query10("select * from player order by id desc")
local toplam = tonumber (table.getn(sql))
say("Toplam oyuncu sayımız: "..toplam.." ")

Dipnot: tonumberi sayısal olduğu için kullandım. direkt olarak table.getn() yazabilirsiniz

13-pc.getqf()
Anlatım:
Olay tutucudur bu kodu her kullandığımızda aslında veri tabanına () arasına yazdıklarınız kayıt edilir.
olay tutucu cok kullanışlı bir olaydır fakat 1 den fazla değer verilmiyor. ama siz kendi olay tutucunuzu yapabilirisiniz
biraz sql biliyo iseniz....

Kullanım:
oyuncudan bir görevi yaptığını farz edelim ve başarınca bu kodu yazıyorum pc.getqf("yapti",1) yapti == 1 oldu ve questimin en başına if ( pc.getqf("yapti") == 0 ) yazar isem artık o görevi tekrar yapamaz :d

Örnek:
when 20018.chat."görev" with pc.getqf("yapti") == 0 begin
say("Görevi yapmamışın")
vs vs vs....
pc.getqf("yapti",1) //artık bu bölüme gireme yapti artık 1 oldu sadece 0 olanları alırız..

14-pc.getx() & pc.gety()
Anlatım:
Normal olarak x ve y deki kordinatlar bu kordinatlar oyundaki sag üstte bulunan küçük haritadaki sizin bunudugunuz kordinatlar ile aynıdır.

Kullanım:
local x= pc.getx()
local y= pc.gety()

say("Kordinatlarınız X:"..x.." Y:"..y.." ")

15-say_item_vnum()
Anlatım:
İtemin png resmini verir..

Kullanım:
Parantezler arasına yazılan item kodları ile gerçekleşir mob kodlarını çalıştırmaz..

Örnek:
say("İtemin resmi:")
say(say_item_vnum(19))
Çıktısı: 19 kodlu kılıç+9 un png resmi

Şimdilik 15 tanesi yeter yarın gene güncellerim arkadaşlarç malum daha lig sistemini yazacağım :d
Yorumlar eksik olmasın..inşallah...konunun devamı için

Güncelleme-1

16-Mob_name()
Anlatım:
Mobların isimlerini verir

Kullanım:
Parantezler arasına girilen mob kodları ile çalışır girilen kodun mob ismini verir

Örnek:
say("Bu npc'nin ismi:")
mob_name(20017)
Şeklinde kullanılır

17-Mob_vnum()
Anlatım:
Mob un kodunu verir

Kullanım:
Etkileşimde olan mob un kodunu almaya yarar

Örnek:
say("Bu npc'nin kodu:")
say(""..mob_vnum().."'dir")

18-timer()
Anlatım:
Geri sayım zaman

Kullanım:
Parantez aralarına verilen sayi ile kullanılır bir string ve bir int değer ile çalışır. when komutu ile bu değerleri yakalarız..

Örnek:
say("beni yolla")
timer("yolla",10)
when yolla.timer begin
pc.warp(555,555)
end

19-Loop_timer()
Anlatım:
Sonsuz döndü süresi aktif hale getiren veya reload q ve reboot atılmadığı sürece oyundan çıkana kadar dönen bir döngü süresidir

Kullanım:
Timer ile aynıdır tek fark timer da tekrar dönmesini istese idik bir daha timer() yapmamız gerekli idi bunda gerek yok

Örnek:
when 20018.chat."lolo" begin
loop_timer("hasan",10)
end
when hasan.loop_timer begin
say("Bu yazı ben oyundan cıkana kadar her 10 saniyede gelecek")
end

20-server_timer()
Anlatım:
Server taraflı süredir timer den farkı oyuncu ile alakası yoktur aktif hale getiren oyuncu oyunda olmasa bile döngü devam eder

Kullanım:
timer ile kullanımı aynıdır

Örnek:
when 20018.chat."lolo" begin
server_timer("hasan",10)
end
when hasan.server_timer begin
say("Bu yazı ben oyunda olmasam bile gelecek")
end

21-server_loop_timer()
Anlatım:
Server timer ile aynıdır tek fark buda loop timer da olduğu gibi sınırsız döndü süresidir

Kullanım:
Loop_timer ile aynı kullanımı vardır

Örnek:
loop_timer ile aynıdır
tek fark oyuncu oyunda olmasada döngü reload q veya reboot atılmadğı sürece devam eder

22-send_letter()
Anlatım:
Görev şeklinde buton vermemizi sağlar

Kullanım:
Parantezler arasına bir isim girilir ve sol kenardaki görev butonları yerine gelir

Örnek:
when letter with pc.is_gm() begin
send_letter("GM:E-posta")
end
when info or button with pc.is_gm() begin
end
bu ikiliyi hep birlikte kullanmak gerekir yoksa buton çalışmaz..

23-clear_letter()
Anlatım:
Görev butonlarını silmeye yarar

Kullanım:
bitişlere bu kodu yazarak silnilir

Örnek:
questin sonuna
celar_letter()

Bir sonraki güncellemeyi bekleyin...

Metin2 oyununda quest sistematiği, oyuncuların oyun içi hikâyeyi daha derinlemesine yaşamasını sağlayan temel yapı taşlarından biridir. Bu sistem, oyunculara görevler vererek onların ilerlemelerini yönlendirir ve oyun içi ödüller kazandırmalarını sağlar. Metin2 quest sistematiği, Lua programlama dili kullanılarak geliştirilir ve bu sayede yüksek düzeyde özelleştirilebilir ve dinamik görevler oluşturulabilir.

Quest yazımı sırasında kullanılan fonksiyonlar, geliştiricilerin görevlerin akışını kontrol edebilmelerini sağlar. İşte bilinmesi gereken bazı temel quest fonksiyonları:

quest_begin(npc_name): Bu fonksiyon, quest'in başlatıldığı NPC'yi tanımlar. Quest sisteminde görevin başlaması için bu fonksiyon kullanılır. Genellikle 'begin' adında bir blok altında tanımlanır.

quest_end(): Quest'in sonlandığını belirtmek için kullanılır. Görev tamamlandığında veya iptal edildiğinde çağrılır.

say(message): Oyuncuya bir mesaj göstermek için kullanılır. NPC ile etkileşim sırasında bilgi vermek veya yönlendirmek için oldukça faydalıdır.

getitem(item_vnum): Oyuncunun envanterinde belirtilen eşyanın olup olmadığını kontrol eder. Görevin bir aşaması olarak belirli bir eşyanın toplanması isteniyorsa bu fonksiyon kullanılır.

pc.getqf(quest_flag): Oyuncunun quest bayrağını kontrol eder. Bayraklar, oyuncunun hangi aşamada olduğunu takip etmede kullanılır.

pc.setqf(quest_flag, value): Oyuncunun quest bayrağını ayarlar. Görevin ilerleyişini kaydetmek için kullanılır.

timer('event_name', seconds): Belirli bir süre sonra bir olay tetiklemek için kullanılır. Örneğin, görevin zaman sınırlı bir kısmı olabilir ve bu fonksiyonla zamanlayıcı ayarlanabilir.

notice(message)[/COORD]: Oyuncuya ekranın üst kısmında küçük bir bildirim gösterir. Daha az dikkat çekici ama bilgilendirici mesajlar için uygundur.

cmdchat(command): Sunucuda bir komut çalıştırmak için kullanılır. Oyuncu ile sunucu arasında özel etkileşimler sağlar.

mob.spawn(mob_vnum, x, y): Görev kapsamında özel bir canavarın spawn edilmesini sağlar. Bu, görevin bir düşmanla mücadele içermesi durumunda işe yarar.

getitem2(item_vnum)[/COORD]: Oyuncuya belirli bir eşya verir. Görev ödülü olarak kullanılır.

Metin2 quest geliştirme sürecinde bu fonksiyonlar sıkça kullanılır. Ayrıca, quest chain (zincir görevler) sistematiği sayesinde bir görevden diğerine geçişler sağlanabilir. Daily quest (günlük görevler) gibi tekrarlayan görevler, oyuncuların aktif kalmasını destekler. Debug işlemleri sırasında quest hataları izlenebilir ve düzeltilmesi sağlanabilir. Quest scriptlerinde dikkat edilmesi gereken syntax kuralları vardır; aksi halde script çalışmaz veya beklentiler dışında davranabilir.

Metin2 quest sistemi, hem sunucu sahipleri hem de geliştiriciler için esnek bir yapı sunar. Martysama quest ve devQuest gibi gelişmiş sistemler sayesinde daha karmaşık ve detaylı görevler yazılabilir. Ancak bu sistemlerin doğru çalışabilmesi için Lua bilgisi ve Metin2 mimarisine hakim olunması gerekir.


In the game Metin2, the quest system is one of the fundamental elements that allow players to experience the in-game story more deeply. This system provides missions to players, directing their progress and enabling them to earn in-game rewards. The Metin2 quest system is developed using the Lua programming language, allowing for highly customizable and dynamic quests.

Functions used during quest writing enable developers to control the flow of quests. Here are some essential quest functions you should know:

quest_begin(npc_name): Defines the NPC where the quest starts. Used to initiate the quest, typically defined under a block named 'begin'.

quest_end(): Indicates the end of the quest. Called when the quest is completed or canceled.

say(message): Displays a message to the player. Useful for providing information or guidance during interactions with NPCs.

getitem(item_vnum): Checks if the specified item exists in the player's inventory. Used when collecting certain items is required as part of a quest stage.

pc.getqf(quest_flag): Checks the player's quest flag. Flags are used to track which stage the player has reached in the quest.

pc.setqf(quest_flag, value): Sets the player's quest flag. Used to save the progress of the quest.

timer('event_name', seconds): Triggers an event after a specified time period. Useful for timed parts of a quest.

notice(message): Displays a small notification at the top of the screen. Suitable for less intrusive but informative messages.

cmdchat(command): Executes a command on the server. Allows special interactions between the player and the server.

mob.spawn(mob_vnum, x, y): Spawns a specific monster during the quest. Useful if the quest involves fighting an enemy.

getitem2(item_vnum): Gives the player a specific item. Used as a reward for completing a quest.

These functions are frequently used in the process of developing Metin2 quests. Additionally, the quest chain system allows transitions from one quest to another. Daily quests help keep players active. During debugging, quest errors can be tracked and corrected. There are syntax rules to follow in quest scripts; otherwise, the script may not run or behave unexpectedly.

The Metin2 quest system offers a flexible structure for both server owners and developers. Advanced systems like Martysama quest and devQuest allow for writing more complex and detailed quests. However, proper operation of these systems requires knowledge of Lua and familiarity with the Metin2 architecture.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt