Hem Öğrenelim hem paylaşalım (DEV KONU)

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Arkadaşlar sizlere bugünden sonra hem quest yazmayı öğreteceğim hemde yazdığımız questleri paylaşacağım
yarka kardeşimiz sabit konuda temel kavramları anlattı ilk defa quest işinde iseniz ilk olarak oraya bakın ve sonra buraya gelin burada temel dersler yok..

burada anlatacağım her questi kendim yazacağım daha önce vardı diyen arkadaş olursa kanıt koysun..

İleri düzey kimseye muhtaç olmadan quest yazmak için mutlaka ilk olarak LUA dili öğrenin
LUA da şunları öğrenin çok faydası olacaktır:değişken,dizi,fonksiyon,if yapısı,switc,for,while

Ayrıca ben veri tabanlı questler yazdığım için konumu takip edenler boş zamanlarında SQL öğrensin
SQL de şunları öğrenin çok faydası olacak :SELECT,UPDATE,INSERT,DELETE

Ben her zaman veri tabanlı questler yazarım bu yüzden mysql_query fonksiyonlarınız serverinizde mutlaka çalışıyo olsun çalışmıyo ise tedavisi bu bölümde var.
Bu konuya giderek dosyaları seninki ile değiştir reboot at:

Değiştirmeyenler için söylüyorum ben bu arkadaşın questlib dosyasını kullanmaktayım bu yüzden say_red, say_green gibi kodlar çalışmaya bilir bunları say olarak değiştirin

Quest:
Şikayet sistemi questi


Görsel:
MP7JpN.jpg


Anlatım:
Şikayet sistemi zaten vardı dienler için veri tabanlı quest ben görmedim bendede vardı notice_all den başka bir numarası yoktu GM oyunda ise görüyo yoksa laf salatası :D ama olurda ben görmedi isem genede nasıl yapıldığını anlarsınız bunu seçtim çünkü ilk dersimiz için en uygunu bu ilerde daha derin yerlere gireceğiz
Kod:
---------BURASI ANLATIM BURAYI ALAMYIN YUKARDA LINK VERDIM----------------- quest sikayet begin state start begin when 20018.chat."Sikayet Sistemi" begin local oyuncu = pc.get_name()// oyuncunun ismini değişkene atadım say_title("Demek birini Şikayet edeceksin.") say("") say_red("Büyük küçük harfe dikkat edin") local kimietti = input()//oyuncudan birinin ismini girmesini istedim local varmibak = mysql_query10("select * from player.player where name='"..kimietti.."'")//veri tabanında böyle bir oyuncu varmı baktım if (table.getn(varmibak)==0) then//var ise 1 yok ise 0 satır dönecektir 0 ise buraya gir dedim say_red("Malesef böyle bir youncu yok") return  else//1 oyuncu var ise buraya gir dedim say("Güzel oyunda böyle bir oyuncu var") say("Demek Şikayet etmek istiyorsun") say("") say_red("Dikkat gereksiz kullanım cezalandırılır") say("Neden Şikayet ediyorsunuz..!") local neden = input()//oyuncudan bir neden girmesini istedim say("Gerçekten"..kimietti.."'yi") say(""..neden.." sebebi ile") say("Sikayet etmek istiyor musunuz?") say("Gereksiz kullanım sonucu siz ban yersiniz") say_yellow("Gercekten sikayet edecekmisin?") local secim = select("Evet","Hayır")//bu aşamada vaz gecmesi olasılıgını düşünerek secenek sundum if secim == 2  then//hayır der ise questi kapattım return//bitirdim else//Evet der ise buraya girecek ---Buraya girmeden önce bir tablo oluşturun adını sikayet yapın 4 sutun olsun id(int),kim(vrc),kimi(vrc),neden(vrc) yapamayanlar yoruma yazsın local kaydet = mysql_query10("insert into player.sikayet(kim,kimi,neden) values ('"..oyuncu.."','"..kimietti.."','"..neden.."') ") //Aldıgım verileri güzelce veri tabanına kaydettım if(kaydet) then //bu aşamada eğer kayıt başarılı ise (true) değeri döner öyle ise buraya gir dedim say("Şikayetiniz alınmıştır") else say("Kayıt hatası veri tabanı yok veya kodlama hatası")//kayit hatalı ise (false) değeri döner o zaman buraya gir dedim end end end end end end

ilk olarak questimizin nerede çalışacağına karar veriyoruz ben 20018 kodlu npc yi seçtim o size kalmış..
Questi başlattıkdan sonra ilk olarak oyuncunun ismini oyuncu değişkenine atadım ( local oyuncu = pc.get_name() )
Bir kaç diyalogdan sonra ondan kimi şikayet edeceğini kutuya yazmasını istedim ( local kimietti = input() )
Büyük küçük harfe dikkat dedim aslında önemli değil Moses adlı oyuncuyu moses die yazsada bulur o

Oyuncunun yazdığı ismi veri tabanından player tablosuna bakarak böyle bir oyuncu varmı yokmu kontrol ettim
( local varmibak = mysql_query("select * from....") ) dieye devam eden blok
Sql de where komutu kullandım where koşul belirtme demekdir dedim ki (name='"..kimietti.."')
bunu anlamı player tablosunda name isminde bir sütün var orada oyuncuların isimleri yazar bende oyuncumuzun yazmış olduğu ismi oraya soktum varmı bak dedim

Altına ( if(table.getn(varmibak))==0 then ) dedim bunun anlamı şu eğer varmibak değişkenindeki satır sayısı
0 ise buraya gir yani oyuncu kutuya sallama bir isim girer ise SQL 0 değeri dönderir doğal olarak buraya girer
daha sonra else dedim yani 0 değilse sıfır hariç ne dönerse artık aklına gelen bütün rakamlar.
Normalde buda bir açık fakat oyunda isim tekil olduğu için yani 2 oyuncu aynı ismi taşıyamadığı için sonu var ise
hep 1 döner bu yüzden == 1 yazmaya gerek yok

Bir kaç diyalogdan sonrada oyuncuda bu aşamada kararından vaz geçmesi halinde bir seçim yapmasını istedim
( local secim = select("evet","hayır") )
Daha sonra ( if secim == 2 then ) dedim yani eğer hayırı secerse questi kapat dedim (return) sonlandırmak
else dedim 2 yi seçmesse geriye 1 kalır 1 de evet demek o zman veriyi tabloya kayıt etmeye getirdim

Veriyi kayıt etmeye geldi fakat ilk olarak bize bir tablo gerekli tabloyu player veri tabanına açalım (player.player değil player sadece) tablodaki sutunlar id,kim,kimi,neden olacak bilmeyenler yorum atsın yardımcı olurum

tobloyuda açtıkdan sonra:
Veriyi kayıt ettim( local kaydet =mysql_query10("inser into player.sikayet.......") ) diye
Hala işimiz bitmedi belki bir hata alırız veir kayıt edilmez bunu almamız için sorguladım
( if(kaydet) then ) bunun anlamı şu eğer kayıt başarılı ise true değeri gelir true de olumlu,1 doğru anlamına gelir
ozaman buraya girecektir
else kayit başarılı değilse hata raporu verdim

Evet arkadaşlar quest çalışmakta resmide yolladım zaten bir sorun sıkıntı durumunda yorum atın yeterli yardımcı olurum.
Ben elimden geldiği kadar hergün bir quest yazıp anlatımını yapacagım dileyen questi kullanır dileyen anlatımı dinler
özel quest yazdırmak isteyen öm atsın (ücretli büyük çaplı questler)
Hem Öğrenelim Hem Paylaşalım (DEV KONU)

Metin2 Quest Sistemi Nedir?

Metin2, özellikle MMORPG severler arasında büyük popülerlik kazanmış bir oyundur. Bu oyunun en temel yapı taşlarından birisi de quest sistemidir. Quest, Türkçeye 'görev' olarak çevrilebilir ve oyuncuların belirli ödüller karşılığı yapması gereken görevleri içerir. Metin2 quest sistemi, hem oyuncular için keyifli bir yolculuk sunarken hem de sunucu sahipleri için oyun içi deneyimi zenginleştiren güçlü bir araçtır.

Quest Script ve Lua Dili

Metin2 quest sistemlerinde en çok kullanılan dil Lua'dır. Lua dili, gömülü sistemlerde yaygın olarak kullanılan, oldukça esnek ve öğrenmesi kolay bir programlama dilidir. Metin2 quest script yazımı için Lua bilgisi şarttır. Quest script dosyaları genellikle .lua uzantılıdır ve sunucu tarafında çalıştırılır. Quest geliştirme sürecinde, Lua ile yazılmış komutlar sayesinde NPC'lerle etkileşim, zamanlayıcılar, ödüller, görev zincirleri gibi pek çok şey kontrol edilebilir.

Quest Hataları ve Debug İşlemi

Geliştirme sırasında karşılaşılan en yaygın sorunlardan birisi quest hatalarıdır. Quest script yazarken küçük bir syntax hatası bile görevin doğru çalışmamasına neden olabilir. Bu durumda, quest debug işlemleri yapılmalıdır. Sunucu logları incelenerek hata mesajları yakalanabilir ve script üzerinde gerekli düzeltmeler yapılabilir. Debug yaparken dikkatli olunmalı, çünkü hatalar genellikle küçük detaylarda gizlidir.

Quest Reward ve Görev Ödülleri

Her quest sisteminin en önemli kısmı ödülleridir. Metin2 quest reward sistemi, oyuncuların görevleri tamamladıklarında alacakları ödülleri tanımlar. Bu ödüller; item, 경험 (EXP), gold veya özel efektler olabilir. Reward sistemini iyi tasarlamak, oyuncuların oyun içinde aktif kalmasını sağlar. Ayrıca özel quest sistemleri ile sunucuya özgü ödüller tanımlanabilir.

Quest Trigger ve Timer Mekanizmaları

Quest trigger, belirli bir olay gerçekleştiğinde quest'in devreye girmesini sağlar. Örneğin bir NPC ile konuşulduğunda, bir item kullanıldığında ya da bir mob öldürüldüğünde tetiklenebilir. Timer ise belirli aralıklarla çalışan mekanizmalardır. Günlük görevler (daily quest) gibi zaman bazlı sistemler için idealdir. Bu yapılar, quest sistemini daha dinamik ve kullanıcı dostu hale getirir.

Quest Chain ve Görev Zincirleri

Metin2 quest chain sistemi, oyuncuların bir görevi tamamladığında bir sonraki görevin otomatik olarak aktif olmasıdır. Bu sistem, oyuncuların daha derinlemesine bir oyun içi hikaye deneyimi yaşamalarını sağlar. Quest chain yapısı, doğru kullanıldığında oyuncuları uzun süre oyun içinde tutabilir.

Custom ve Daily Quest Geliştirme

Sunucu sahipleri, kendi özel quest sistemlerini oluşturabilir. Bu sistemler, standart Metin2 görevlerinden farklı olarak özelleştirilmiş ödüller, etkileşimler ve hikayeler içerebilir. Daily quest sistemleri ise oyuncuların her gün giriş yaparak yapabileceği görevlerdir. Bu tür görevler, oyuncu sadakatini artırmak için idealdir. Metin2dev ve benzeri platformlarda örnek quest scriptleri bulunabilir. Martysama gibi geliştiricilerin paylaştığı quest örnekleri de öğrenmek isteyenler için değerli kaynaklardır.

Quest Edit ve Geliştirme Araçları

Quest edit işlemi, mevcut görevleri düzenlemek veya yenilerini eklemek için yapılır. Quest editörler veya doğrudan Lua editörleri kullanılabilir. Quest geliştirme sürecinde, script yazım kurallarına dikkat etmek önemlidir. Yanlış bir komut yapılandırması, tüm quest sistemini etkileyebilir. Bu yüzden test sunucularında deneme yapmak çok önemlidir.

Sonuç

Metin2 quest sistemi, hem teknik hem de yaratıcı yönüyle oldukça zengin bir alandır. Doğru kullanıldığında oyunculara unutulmaz deneyimler sunabilir. Quest geliştirme, Lua bilgisi gerektirse de, azimle öğrenilebilir. Bu konuda herkes hem öğrenip hem de başkalarıyla bilgi paylaşarak gelişime katkı sağlayabilir. Metin2Lobby üzerinden paylaşım yaparak topluluğa destek olabilirsiniz.


Let's Learn and Share Together (DEV THREAD)

What Is The Metin2 Quest System?

Metin2 is a game that has gained great popularity among MMORPG enthusiasts. One of its core components is the quest system. In Turkish, quest can be translated as 'görev', referring to tasks players must complete in exchange for rewards. The Metin2 quest system provides both an enjoyable journey for players and a powerful tool for server owners to enrich the in-game experience.

Quest Scripts and the Lua Language

In Metin2 quest systems, the most commonly used language is Lua. Lua is a flexible and easy-to-learn programming language widely used in embedded systems. Knowledge of Lua is essential for writing Metin2 quest scripts. Quest script files are usually saved with the .lua extension and run on the server side. During quest development, commands written in Lua allow control over interactions with NPCs, timers, rewards, quest chains, and more.

Quest Errors and Debugging

One of the most common issues encountered during development is quest errors. A small syntax mistake while writing quest scripts can cause the quest not to function properly. In such cases, debugging operations must be performed. By examining server logs, error messages can be caught and necessary corrections made to the script. Attention should be paid during debugging, as errors are often hidden in small details.

Quest Rewards and Task Prizes

The most important part of any quest system is its rewards. The Metin2 quest reward system defines the prizes players receive after completing quests. These rewards can include items, 경험 (EXP), gold, or special effects. Designing a good reward system ensures that players stay active within the game. Moreover, special quest systems can offer unique rewards exclusive to the server.

Quest Trigger and Timer Mechanisms

A quest trigger causes the quest to activate upon a specific event. For example, it can activate when talking to an NPC, using an item, or killing a monster. Timers, on the other hand, are mechanisms that operate at specific intervals. They are ideal for time-based systems like daily quests. These structures make the quest system more dynamic and user-friendly.

Quest Chains and Task Sequences

The Metin2 quest chain system activates the next quest automatically once the current one is completed. This system allows players to experience a deeper in-game storyline. When used correctly, the quest chain structure can keep players engaged in the game for longer periods.

Custom and Daily Quest Development

Server owners can create their own custom quest systems. These systems may feature customized rewards, interactions, and storylines different from standard Metin2 quests. Daily quest systems offer tasks that players can perform each day they log in. Such quests are ideal for increasing player loyalty. Sample quest scripts can be found on platforms like Metin2dev. Examples shared by developers like Martysama are also valuable resources for those looking to learn.

Quest Editing and Development Tools

Quest editing involves modifying existing quests or adding new ones. Quest editors or direct Lua editors can be used. During the quest development process, it’s crucial to pay attention to script writing rules. Incorrect command configurations can affect the entire quest system. Therefore, testing on trial servers is highly recommended.

Conclusion

The Metin2 quest system is rich in both technical and creative aspects. When used correctly, it can provide unforgettable experiences for players. Although developing quests requires knowledge of Lua, it can be learned with determination. Everyone can contribute to improvement by learning and sharing knowledge with others. You can support the community by sharing on Metin2Lobby.
 

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

Geri
Üst Alt