Merhabalar,
Bu konuda da E-Posta Sistemini paylaşacağım sizinle.
İlk olarak her oyuncunun E-Posta kutusu bu şekilde görünecektir.
[/CENTER]
Daha sonra mesaj geldiğinde aşağıdaki gibi olacaktır:
İşlemleri veritabanı üzerinden yapacağız. İlk olarak eğer sunucunuzda MySQL kodları çalışmıyor ise "questing.lua" nın en altına aşağıdaki fonksiyonu ekleyin:
MYSQL FONKSİYONU:
Şimdi "quest_functions" dosyamızı açalım ve "mysql_query10" var mı yok mu kontrol edelim. Eğer yoksa en alta "mysql_query10" kodunu ekleyelim. Burası ile de işimiz bitti.
Daha sonra kullanacağımız veritabanı dosyasını indiriyoruz.
MySQL dosyalarını "player" veritabanına ekliyoruz. Herhangi bir işlem yapmanıza gerek yok. (REBOOT atmanıza gerek yok eklemeyi yaptıktan sonra)
Şimdi bir işlem daha yapmamız gerekiyor. "Player" tablosuna aşağıdaki gibi sağ tıklayıp "Design Table" diyoruz.
Daha sonra "eposta_durum" ve "eposta_gelen" adında 2 adet sütun ekliyoruz veritabanımıza.
Kaydedip çıkabilirsiniz daha sonra. Reboot atmanıza gerek yok!
Şimdi lua(quest) dosyalarımızı oluşturalım.
1-) usr/game/share/locale/turkey/quest bölümüne "eposta_sistemi.lua" adında bir lua dosyası açalım. Daha sonra dosyasının içine aşağıdaki kodları yazalım:
Bunu kaydedip çıkıyoruz.
2-)Putty'e geliyoruz.
cd /usr/game/share/locale/turkey/quest yazıp enterliyoruz. Daha sonra şu komutu yazıyoruz.
./qc eposta_sistemi.lua
Putty ile de işimiz bitti.
3-) Oyuna dönüyoruz ve bir GM karakter ile "/reload q" çekiyoruz.
4-) Daha sonra karakter atarak E-Posta göndermeye başlayabilirsiniz.
GÜNCELLEME!
Oyuncular mesajı silseler bile ben kontrol edebileyim diyorsanız aşağıdaki MySQL dosyasını indirip "log" veritabanına yükleyin. Daha sonra aşağıdaki kodları eski eposta kodları ile değiştirin:
Aşağıdaki kodu yazıyoruz yeni E-Posta Sistemi kodu olarak:
NOT: eposta.sql dosyasını silmeyeceksiniz veritabanından. Eğer silinen mesajları görebileyim diyorsanız verdiğim MySQL dosyasını "log" veritabanına ekleyin yeterli.
Ferdinant'dan Paylaşımlar: Biyolog Sıfırlama Questi
Metin2 Lobby olarak, oyuncularımıza en kaliteli quest sistemlerini sunmayı hedefliyoruz. Bu doğrultuda, Metin2 dünyasında özel görev sistemleri, quest geliştirme süreçleri ve Lua tabanlı scriptler üzerinde çalışmalarımız devam ediyor. Bugün konumuz ise 'Ferdinant'dan Paylaşımlar: Biyolog Sıfırlama Questi'.
Metin2 sunucularında biyolog sınıfı, özellikle yüksek seviye oyuncular arasında popülerdir. Ancak biyolog sınıflarında belirli seviyelerde sıfırlama mekanizmaları bulunabilir. Ferdinant adlı geliştirici, bu konuyla ilgili özgün bir quest paylaşmış. Bu quest, biyolog karakterlerin belirli koşullar altında sınıf sıfırlama hakkını kazanabilmesini sağlıyor.
Questin Özellikleri:
Bu quest, Lua script diliyle yazılmıştır. Metin2’in quest sistemine entegre edilebilir. Oyuncu, belirli görevleri tamamladığında biyolog karakterini sıfırlama hakkı kazanır. Bu işlem, karakterin seviyesini, becerilerini ve bazı istatistiklerini sıfırlar ancak karşılığında oyuncuya bonus özellik puanları veya eşyalar verilir.
Questin Amacı:
Ferdinant’ın paylaştığı bu quest, hem oyuncuların tekrar tekrar oyunu deneyimlemesini hem de biyolog sınıfının daha dengeli bir şekilde kullanılmasını sağlar. Özellikle sunucularda özel olaylar veya turnuvalar için ideal bir yapıdır.
Kurulum ve Geliştirme:
Bu quest, Lua script bilgisi olan geliştiriciler tarafından kolayca özelleştirilebilir..quest dosyası doğrudan Metin2 sunucusuna entegre edilebilir. Hata ayıklama (debug) işlemleri için gerekli kontrol noktaları da mevcuttur. Ayrıca, questin tetiklenme zamanı, NPC etkileşimleri, item gereksinimleri gibi unsurlar ayarlanabilir.
Teknik Detaylar:
Quest scripti, 'begin', 'end', 'state', 'timer', 'flag', 'mob', 'npc' gibi temel Metin2 quest komutlarını içerir. Bu komutlar, questin akışını yönlendirir ve oyuncunun hangi eylemleri gerçekleştirmesi gerektiğini tanımlar. Ferdinant'ın paylaşımı, özellikle 'quest chain' yapısıyla dikkat çekiyor. Yani birbirine bağlı görevlerle daha zengin bir deneyim sunuluyor.
Uyarılar ve Öneriler:
Sunucunuzda bu questi kullanmadan önce mutlaka test ortamında denemenizi öneririz..quest dosyasında değişiklik yaparken dikkatli olmalısınız. Yanlış bir komut, sunucuda hata oluşmasına neden olabilir. Ayrıca, quest ödülü olarak verilen itemlerin sunucunuzdaki item ID'leriyle uyumlu olduğundan emin olun.
Metin2 Lobby olarak, Ferdinand’tan gelen bu paylaşımı değerli biliyor ve topluluk için açık kaynak olarak sunuyoruz. Quest sistemleri, Metin2 deneyimini zenginleştiren önemli yapılardır. Sizler de kendi questlerinizi geliştirebilir, paylaşabilir ve Metin2 topluluğunu destekleyebilirsiniz.
Shares from Ferdinant: Biologist Reset Quest
As Metin2 Lobby, we aim to provide our players with the highest quality quest systems. In this regard, our work on special mission systems in the Metin2 world, quest development processes, and Lua-based scripts continues. Today's topic is 'Shares from Ferdinant: Biologist Reset Quest'.
In Metin2 servers, the biologist class is popular among high-level players. However, there may be reset mechanisms for biologist classes at certain levels. Ferdinant, a developer, has shared an original quest related to this subject. This quest allows biologist characters to gain the ability to reset their class under certain conditions.
Features of the Quest:
This quest is written in Lua scripting language and can be integrated into Metin2's quest system. When the player completes specific missions, they gain the right to reset their biologist character. This process resets the character's level, skills, and some stats but provides bonus attribute points or items to the player in return.
Purpose of the Quest:
The quest shared by Ferdinant allows players to experience the game again while enabling more balanced use of the biologist class. It is especially ideal for special events or tournaments on servers.
Installation and Development:
This quest can be easily customized by developers familiar with Lua scripting. The .quest file can be directly integrated into a Metin2 server. Debugging procedures are also included via checkpoints. Moreover, elements such as the quest's trigger time, NPC interactions, and item requirements can be adjusted.
Technical Details:
The quest script includes fundamental Metin2 quest commands like 'begin', 'end', 'state', 'timer', 'flag', 'mob', 'npc'. These commands direct the flow of the quest and define what actions the player must perform. Ferdinant’s share stands out particularly due to its 'quest chain' structure, offering a richer experience through interconnected missions.
Warnings and Suggestions:
Before using this quest on your server, we recommend testing it thoroughly in a safe environment. Be careful when editing the .quest file; incorrect commands might cause errors on your server. Additionally, ensure that the item IDs used as rewards match those configured in your server.
At Metin2 Lobby, we value Ferdinant's contribution and present it as open-source material for the community. Quest systems are important structures that enrich the Metin2 gameplay experience. You can also develop, share, and support the Metin2 community with your own quests.
Bu konuda da E-Posta Sistemini paylaşacağım sizinle.
İlk olarak her oyuncunun E-Posta kutusu bu şekilde görünecektir.
Daha sonra mesaj geldiğinde aşağıdaki gibi olacaktır:
İşlemleri veritabanı üzerinden yapacağız. İlk olarak eğer sunucunuzda MySQL kodları çalışmıyor ise "questing.lua" nın en altına aşağıdaki fonksiyonu ekleyin:
MYSQL FONKSİYONU:
Kod:
mysql_query10 = function(query) if not pre then local rt = io.open('CONFIG','r'):read('*all') pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4') end math.randomseed(os.time()) local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{} --os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51 os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55 for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi); for i = 2, table.getn(t) do table.foreach(t[i],function(a,b) out[i-1] = out[i-1] or {} out[i-1][a] = tostring(b) or b or 'NULL' out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = tostring(b) or b or 'NULL' end) end return out end
Şimdi "quest_functions" dosyamızı açalım ve "mysql_query10" var mı yok mu kontrol edelim. Eğer yoksa en alta "mysql_query10" kodunu ekleyelim. Burası ile de işimiz bitti.
Daha sonra kullanacağımız veritabanı dosyasını indiriyoruz.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
MySQL dosyalarını "player" veritabanına ekliyoruz. Herhangi bir işlem yapmanıza gerek yok. (REBOOT atmanıza gerek yok eklemeyi yaptıktan sonra)
Şimdi bir işlem daha yapmamız gerekiyor. "Player" tablosuna aşağıdaki gibi sağ tıklayıp "Design Table" diyoruz.
Daha sonra "eposta_durum" ve "eposta_gelen" adında 2 adet sütun ekliyoruz veritabanımıza.
Kaydedip çıkabilirsiniz daha sonra. Reboot atmanıza gerek yok!
Şimdi lua(quest) dosyalarımızı oluşturalım.
1-) usr/game/share/locale/turkey/quest bölümüne "eposta_sistemi.lua" adında bir lua dosyası açalım. Daha sonra dosyasının içine aşağıdaki kodları yazalım:
Kod:
quest eposta_sistemi begin state start begin when login begin local karakter_id = pc.get_player_id() loop_timer("eposta_kontrol",1) pc.setqf("eposta_var",0) end when eposta_kontrol.timer begin local karakter_id = tonumber(pc.get_player_id()) local karakter_isim = pc.get_name() local gelen_mesaj = mysql_query10("select * from player.eposta where alan_id='"..karakter_id.."' and alan_isim='"..karakter_isim.."' and okundu_mu='0' ") local gelen_mesaj_kactane = tonumber(table.getn(gelen_mesaj)) if pc.getqf("eposta_var") == 0 and gelen_mesaj_kactane > 0 then send_letter("E-Posta("..gelen_mesaj_kactane..")") pc.setqf("eposta_var",1) elseif pc.getqf("eposta_var") == 1 and gelen_mesaj_kactane > 0 then send_letter(" ") pc.setqf("eposta_var",0) else send_letter("E-Posta("..gelen_mesaj_kactane..")") end end when letter begin local karakter_id = tonumber(pc.get_player_id()) local karakter_isim = pc.get_name() local gelen_mesaj = mysql_query10("select * from player.eposta where alan_id='"..karakter_id.."' and alan_isim='"..karakter_isim.."' and okundu_mu='0' ") local gelen_mesaj_kactane = tonumber(table.getn(gelen_mesaj)) send_letter("E-Posta("..gelen_mesaj_kactane..")") end when info or button begin local karakter_id = pc.get_player_id() local karakter_isim= pc.get_name() local eposta = select("E-Posta Gönder","E-Posta Kontrol","Yönetici E-Posta Kontrol","E-Posta Alım","Kapat") if eposta == 1 then say_title("Bilgilendirme:") say("") say("Merhaba "..karakter_isim) say("E-Posta sistemine hoş geldin.") say("") say_reward("Devam etmek istiyor musun?") say("") local eposta_gonderme = select("Evet","Hayır") if eposta_gonderme == 1 then say_title("Bilgilendirme:") say("") say("E-Posta karakter ismine göre gönderilmektedir.") say("Karakter ismi dışında herhangi bir şey girerseniz E-Postanız yollanmayacaktır.") say("") say_reward("E-Posta yollayacağınız karakter adını giriniz:") local eposta_gonderilen = tostring(input()) if eposta_gonderilen == "" then say_title("Uyarı:") say("") say_reward("Bu alanı boş bırakamazsınız, tekrar deneyin.") say("") else local gonderilen_kisi_bilgiler = mysql_query10("select * from player.player") local kac_kisi_var = tonumber(table.getn(gonderilen_kisi_bilgiler)) local i = 1 while i <= kac_kisi_var do local gonderilen_kisi_isim = tostring(gonderilen_kisi_bilgiler.name[i]) if eposta_gonderilen == gonderilen_kisi_isim then local gonderilen_kisi_kontrol = mysql_query10("select * from player.player where name= '"..eposta_gonderilen.."'") pc.setqf("eposta_durum",gonderilen_kisi_kontrol.eposta_durum[1]) pc.setqf("eposta_gelen",gonderilen_kisi_kontrol.eposta_gelen[1]) local kisi_kontrol_id = gonderilen_kisi_kontrol.id[1] local kisi_kontrol_isim = gonderilen_kisi_kontrol.name[1] if pc.getqf("eposta_durum") == 1 then say_title("Bilgilendirme:") say("") say("E-Posta gönderme bölümüne hoş geldin, "..karakter_isim) say("") say_reward("Aşağıya yollamak istediğin mesajı gir:") local giden_mesaj = tostring(input()) if giden_mesaj == "" then say_title("Uyarı:") say("") say_reward("Mesaj kısmını boş bırakamazsınız! Tekrar deneyin.") say() else --------------------- Mesaj Gönderilecek local tarih_saat = os.date("%x").." "..os.date("%X") local eposta_ekle = mysql_query10("insert into eposta(gonderen_id,gonderen_isim,alan_id,alan_isim,mesaj,tarih_saat) values('"..karakter_id.."','"..karakter_isim.."','"..kisi_kontrol_id.."','"..kisi_kontrol_isim.."','"..giden_mesaj.."','"..tarih_saat.."')") if eposta_ekle then mysql_query10("UPDATE player.player SET eposta_gelen = eposta_gelen + 1 where id= '"..kisi_kontrol_id.."' and name='"..kisi_kontrol_isim.."'") say_title("Bilgilendirme:") say("") say(karakter_isim..", mesajınız "..kisi_kontrol_isim.." isimli oyuncuya başarı ile[ENTER]iletilmiştir.") say("") else say_title("Uyarı:") say("") say_reward("Mesajınız gönderilemedi, tekrar deneyiniz!") end ---------------------- END end else say_title("Uyarı:") say("") say_reward("Bu kişi E-Posta alımlarını kapatmıştır.[ENTER]Mesaj gönderemezsiniz!") say("") end break elseif i == kac_kisi_var then say_title("Uyarı:") say("") say_reward("Aradığınız kişi oyunumuzda kayıtlı değildir.") say("") break end i = i + 1 end end elseif eposta_gonderme == 2 then return end elseif eposta == 2 then local karakter_id = tonumber(pc.get_player_id()) local karakter_isim = pc.get_name() local gelen_mesaj = mysql_query10("select * from player.eposta where alan_id='"..karakter_id.."' and alan_isim='"..karakter_isim.."'") local gelen_mesaj_kactane = tonumber(table.getn(gelen_mesaj)) local gonderen_dizi = {} for z=1,gelen_mesaj_kactane,1 do gonderen_dizi[z] = gelen_mesaj.gonderen_isim[z] end local gelen_mesaj_dizi = {} for z=1,gelen_mesaj_kactane,1 do gelen_mesaj_dizi[z] = gelen_mesaj.mesaj[z] end local gelen_mesaj_id = {} for z=1,gelen_mesaj_kactane,1 do gelen_mesaj_id[z] = gelen_mesaj.id[z] end gonderen_dizi[gelen_mesaj_kactane + 1] = "Kapat" mesaj_gonderen = select_table(gonderen_dizi) local i = 1 while i < (gelen_mesaj_kactane + 1) do if mesaj_gonderen == gelen_mesaj_kactane + 1 then break end if mesaj_gonderen == i then say_title("Bilgilendirme:") say("") say_reward("Mesajınız:") say_title(gelen_mesaj_dizi[i]) say("") say_reward("Ne yapmak istersin?") say("") local islem_yap = select("Okundu Olarak İşaretle","Sil","Kapat") if islem_yap == 1 then local okundu = mysql_query10("UPDATE player.eposta SET okundu_mu = 1 where id='"..gelen_mesaj_id[i].."' ") if okundu then say_title("Bilgilendirme:") say("") say("Gelen mesaj okundu olarak işaretlenmiştir.") say("") else say_title("Uyarı:") say("") say_reward("Mesaj okundu olarak işaretlenemedi!") say("") end elseif islem_yap == 2 then local eposta_kac_sorgula = mysql_query10("select * from player.player where id= '"..karakter_id.."' and name='"..karakter_isim.."' ") local epostasi_kac = tonumber(eposta_kac_sorgula.eposta_gelen[1]) if epostasi_kac > 0 then local silindi = mysql_query10("DELETE FROM player.eposta WHERE id='"..gelen_mesaj_id[i].."'") local gelen_eksilt = mysql_query10("UPDATE player.player SET eposta_gelen = eposta_gelen - 1 where id= '"..karakter_id.."' and name='"..karakter_isim.."'") if silindi and gelen_eksilt then say_title("Bilgilendirme:") say("") say("Gelen mesaj başarı ile silinmiştir.") say("") else say_title("Uyarı:") say("") say_reward("Mesaj silinemedi!") say("") end end end end i = i + 1 end elseif eposta == 3 then say_title("Bilgilendirme:") say("") say("YAKINDA...") say("") elseif eposta == 4 then local karakter_id_y = pc.get_player_id() local karakter_isim_y = pc.get_name() local kapansin_mi_sorgula = mysql_query10("select * from player.player where id= '"..karakter_id_y.."' and name='"..karakter_isim_y.."' ") local eposta_durum = tonumber(kapansin_mi_sorgula.eposta_durum[1]) local eposta_alimi = select("Aktif Et","Kapat","Çıkış") if eposta_alimi == 1 then say_title("Bilgilendirme:") say("") say("Merhaba,"..pc.get_name()) say("Buradan E-Posta alımını aktif edebilirsin.") say("E-Posta alımını aktif edersen, diğer oyuncular sana mesaj yollayabilirler.") say("E-Posta alımını dilersen tekrardan kapatabilirsin.") say("") say_reward("Aktif etmek istiyor musun?") say("") local aktif_olsun_mu = select("Evet","Hayır") if aktif_olsun_mu == 1 then if eposta_durum == 0 then local eposta_aktif_et = mysql_query10("UPDATE player.player SET eposta_durum = '1' where id='"..karakter_id_y.."' and name='"..karakter_isim_y.."' ") if eposta_aktif_et then say_title("Bilgilendirme:") say("") say("E-Posta alımı başarı ile aktif edilmiştir. Artık mesaj alabileceksiniz.") say("") end else say_title("Uyarı:") say("") say_reward("E-Posta alımlarınız zaten aktif, tekrar aktif edemezsiniz.") say("") end end elseif eposta_alimi == 2 then say_title("Bilgilendirme:") say("") say("Merhaba,"..pc.get_name()) say("Buradan E-Posta alımını kapatabilirsin.") say("E-Posta alımını kapatırsan, kimse sana mesaj yollayamaz.") say("Dilersen tekrardan açabilirsin.") say("") say_reward("Kapatmak istiyor musun?") say("") local kapansin_mi = select("Evet","Hayır") if kapansin_mi == 1 then if eposta_durum == 1 then local eposta_kapat = mysql_query10("UPDATE player.player SET eposta_durum = '0' where id='"..karakter_id_y.."' and name='"..karakter_isim_y.."' ") if eposta_kapat then say_title("Bilgilendirme:") say("") say("E-Posta alımı başarı ile kapatılmıştır. Artık mesaj alamayacaksınız.") say("") end else say_title("Uyarı:") say("") say_reward("E-Posta alımlarınız zaten kapalı, tekrar kaptamazsınız.") say("") end end end end end end end
Bunu kaydedip çıkıyoruz.
2-)Putty'e geliyoruz.
cd /usr/game/share/locale/turkey/quest yazıp enterliyoruz. Daha sonra şu komutu yazıyoruz.
./qc eposta_sistemi.lua
Putty ile de işimiz bitti.
3-) Oyuna dönüyoruz ve bir GM karakter ile "/reload q" çekiyoruz.
4-) Daha sonra karakter atarak E-Posta göndermeye başlayabilirsiniz.
NOT: E-Posta alımını istediğiniz gibi açıp kapatabilirsiniz:
EK RESİMLER
GÜNCELLEME!
Oyuncular mesajı silseler bile ben kontrol edebileyim diyorsanız aşağıdaki MySQL dosyasını indirip "log" veritabanına yükleyin. Daha sonra aşağıdaki kodları eski eposta kodları ile değiştirin:
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Aşağıdaki kodu yazıyoruz yeni E-Posta Sistemi kodu olarak:
Kod:
quest eposta_sistemi begin state start begin when login begin local karakter_id = pc.get_player_id() loop_timer("eposta_kontrol",1) pc.setqf("eposta_var",0) end when eposta_kontrol.timer begin local karakter_id = tonumber(pc.get_player_id()) local karakter_isim = pc.get_name() local gelen_mesaj = mysql_query10("select * from player.eposta where alan_id='"..karakter_id.."' and alan_isim='"..karakter_isim.."' and okundu_mu='0' ") local gelen_mesaj_kactane = tonumber(table.getn(gelen_mesaj)) if pc.getqf("eposta_var") == 0 and gelen_mesaj_kactane > 0 then send_letter("E-Posta("..gelen_mesaj_kactane..")") pc.setqf("eposta_var",1) elseif pc.getqf("eposta_var") == 1 and gelen_mesaj_kactane > 0 then send_letter(" ") pc.setqf("eposta_var",0) else send_letter("E-Posta("..gelen_mesaj_kactane..")") end end when letter begin local karakter_id = tonumber(pc.get_player_id()) local karakter_isim = pc.get_name() local gelen_mesaj = mysql_query10("select * from player.eposta where alan_id='"..karakter_id.."' and alan_isim='"..karakter_isim.."' and okundu_mu='0' ") local gelen_mesaj_kactane = tonumber(table.getn(gelen_mesaj)) send_letter("E-Posta("..gelen_mesaj_kactane..")") end when info or button begin local karakter_id = pc.get_player_id() local karakter_isim= pc.get_name() local eposta = select("E-Posta Gönder","E-Posta Kontrol","Yönetici E-Posta Kontrol","E-Posta Alım","Kapat") if eposta == 1 then say_title("Bilgilendirme:") say("") say("Merhaba "..karakter_isim) say("E-Posta sistemine hoş geldin.") say("") say_reward("Devam etmek istiyor musun?") say("") local eposta_gonderme = select("Evet","Hayır") if eposta_gonderme == 1 then say_title("Bilgilendirme:") say("") say("E-Posta karakter ismine göre gönderilmektedir.") say("Karakter ismi dışında herhangi bir şey girerseniz E-Postanız yollanmayacaktır.") say("") say_reward("E-Posta yollayacağınız karakter adını giriniz:") local eposta_gonderilen = tostring(input()) if eposta_gonderilen == "" then say_title("Uyarı:") say("") say_reward("Bu alanı boş bırakamazsınız, tekrar deneyin.") say("") else local gonderilen_kisi_bilgiler = mysql_query10("select * from player.player") local kac_kisi_var = tonumber(table.getn(gonderilen_kisi_bilgiler)) local i = 1 while i <= kac_kisi_var do local gonderilen_kisi_isim = tostring(gonderilen_kisi_bilgiler.name[i]) if eposta_gonderilen == gonderilen_kisi_isim then local gonderilen_kisi_kontrol = mysql_query10("select * from player.player where name= '"..eposta_gonderilen.."'") pc.setqf("eposta_durum",gonderilen_kisi_kontrol.eposta_durum[1]) pc.setqf("eposta_gelen",gonderilen_kisi_kontrol.eposta_gelen[1]) local kisi_kontrol_id = gonderilen_kisi_kontrol.id[1] local kisi_kontrol_isim = gonderilen_kisi_kontrol.name[1] if pc.getqf("eposta_durum") == 1 then say_title("Bilgilendirme:") say("") say("E-Posta gönderme bölümüne hoş geldin, "..karakter_isim) say("") say_reward("Aşağıya yollamak istediğin mesajı gir:") local giden_mesaj = tostring(input()) if giden_mesaj == "" then say_title("Uyarı:") say("") say_reward("Mesaj kısmını boş bırakamazsınız! Tekrar deneyin.") say() else --------------------- Mesaj Gönderilecek local tarih_saat = os.date("%x").." "..os.date("%X") local eposta_ekle = mysql_query10("insert into eposta(gonderen_id,gonderen_isim,alan_id,alan_isim,mesaj,tarih_saat) values('"..karakter_id.."','"..karakter_isim.."','"..kisi_kontrol_id.."','"..kisi_kontrol_isim.."','"..giden_mesaj.."','"..tarih_saat.."')") local eposta_ekle1 = mysql_query10("insert into eposta_kontrol(gonderen_id,gonderen_isim,alan_id,alan_isim,mesaj,tarih_saat) values('"..karakter_id.."','"..karakter_isim.."','"..kisi_kontrol_id.."','"..kisi_kontrol_isim.."','"..giden_mesaj.."','"..tarih_saat.."')") if eposta_ekle and eposta_ekle1 then mysql_query10("UPDATE player.player SET eposta_gelen = eposta_gelen + 1 where id= '"..kisi_kontrol_id.."' and name='"..kisi_kontrol_isim.."'") say_title("Bilgilendirme:") say("") say(karakter_isim..", mesajınız "..kisi_kontrol_isim.." isimli oyuncuya başarı ile[ENTER]iletilmiştir.") say("") else say_title("Uyarı:") say("") say_reward("Mesajınız gönderilemedi, tekrar deneyiniz!") end ---------------------- END end else say_title("Uyarı:") say("") say_reward("Bu kişi E-Posta alımlarını kapatmıştır.[ENTER]Mesaj gönderemezsiniz!") say("") end break elseif i == kac_kisi_var then say_title("Uyarı:") say("") say_reward("Aradığınız kişi oyunumuzda kayıtlı değildir.") say("") break end i = i + 1 end end elseif eposta_gonderme == 2 then return end elseif eposta == 2 then local karakter_id = tonumber(pc.get_player_id()) local karakter_isim = pc.get_name() local gelen_mesaj = mysql_query10("select * from player.eposta where alan_id='"..karakter_id.."' and alan_isim='"..karakter_isim.."'") local gelen_mesaj_kactane = tonumber(table.getn(gelen_mesaj)) local gonderen_dizi = {} for z=1,gelen_mesaj_kactane,1 do gonderen_dizi[z] = gelen_mesaj.gonderen_isim[z] end local gelen_mesaj_dizi = {} for z=1,gelen_mesaj_kactane,1 do gelen_mesaj_dizi[z] = gelen_mesaj.mesaj[z] end local gelen_mesaj_id = {} for z=1,gelen_mesaj_kactane,1 do gelen_mesaj_id[z] = gelen_mesaj.id[z] end gonderen_dizi[gelen_mesaj_kactane + 1] = "Kapat" mesaj_gonderen = select_table(gonderen_dizi) local i = 1 while i < (gelen_mesaj_kactane + 1) do if mesaj_gonderen == gelen_mesaj_kactane + 1 then break end if mesaj_gonderen == i then say_title("Bilgilendirme:") say("") say_reward("Mesajınız:") say_title(gelen_mesaj_dizi[i]) say("") say_reward("Ne yapmak istersin?") say("") local islem_yap = select("Okundu Olarak İşaretle","Sil","Kapat") if islem_yap == 1 then local okundu = mysql_query10("UPDATE player.eposta SET okundu_mu = 1 where id='"..gelen_mesaj_id[i].."' ") if okundu then say_title("Bilgilendirme:") say("") say("Gelen mesaj okundu olarak işaretlenmiştir.") say("") else say_title("Uyarı:") say("") say_reward("Mesaj okundu olarak işaretlenemedi!") say("") end elseif islem_yap == 2 then local eposta_kac_sorgula = mysql_query10("select * from player.player where id= '"..karakter_id.."' and name='"..karakter_isim.."' ") local epostasi_kac = tonumber(eposta_kac_sorgula.eposta_gelen[1]) if epostasi_kac > 0 then local silindi = mysql_query10("DELETE FROM player.eposta WHERE id='"..gelen_mesaj_id[i].."'") local gelen_eksilt = mysql_query10("UPDATE player.player SET eposta_gelen = eposta_gelen - 1 where id= '"..karakter_id.."' and name='"..karakter_isim.."'") if silindi and gelen_eksilt then say_title("Bilgilendirme:") say("") say("Gelen mesaj başarı ile silinmiştir.") say("") else say_title("Uyarı:") say("") say_reward("Mesaj silinemedi!") say("") end end end end i = i + 1 end elseif eposta == 3 then say_title("Bilgilendirme:") say("") say("YAKINDA...") say("") elseif eposta == 4 then local karakter_id_y = pc.get_player_id() local karakter_isim_y = pc.get_name() local kapansin_mi_sorgula = mysql_query10("select * from player.player where id= '"..karakter_id_y.."' and name='"..karakter_isim_y.."' ") local eposta_durum = tonumber(kapansin_mi_sorgula.eposta_durum[1]) local eposta_alimi = select("Aktif Et","Kapat","Çıkış") if eposta_alimi == 1 then say_title("Bilgilendirme:") say("") say("Merhaba,"..pc.get_name()) say("Buradan E-Posta alımını aktif edebilirsin.") say("E-Posta alımını aktif edersen, diğer oyuncular sana mesaj yollayabilirler.") say("E-Posta alımını dilersen tekrardan kapatabilirsin.") say("") say_reward("Aktif etmek istiyor musun?") say("") local aktif_olsun_mu = select("Evet","Hayır") if aktif_olsun_mu == 1 then if eposta_durum == 0 then local eposta_aktif_et = mysql_query10("UPDATE player.player SET eposta_durum = '1' where id='"..karakter_id_y.."' and name='"..karakter_isim_y.."' ") if eposta_aktif_et then say_title("Bilgilendirme:") say("") say("E-Posta alımı başarı ile aktif edilmiştir. Artık mesaj alabileceksiniz.") say("") end else say_title("Uyarı:") say("") say_reward("E-Posta alımlarınız zaten aktif, tekrar aktif edemezsiniz.") say("") end end elseif eposta_alimi == 2 then say_title("Bilgilendirme:") say("") say("Merhaba,"..pc.get_name()) say("Buradan E-Posta alımını kapatabilirsin.") say("E-Posta alımını kapatırsan, kimse sana mesaj yollayamaz.") say("Dilersen tekrardan açabilirsin.") say("") say_reward("Kapatmak istiyor musun?") say("") local kapansin_mi = select("Evet","Hayır") if kapansin_mi == 1 then if eposta_durum == 1 then local eposta_kapat = mysql_query10("UPDATE player.player SET eposta_durum = '0' where id='"..karakter_id_y.."' and name='"..karakter_isim_y.."' ") if eposta_kapat then say_title("Bilgilendirme:") say("") say("E-Posta alımı başarı ile kapatılmıştır. Artık mesaj alamayacaksınız.") say("") end else say_title("Uyarı:") say("") say_reward("E-Posta alımlarınız zaten kapalı, tekrar kaptamazsınız.") say("") end end end end end end end
NOT: eposta.sql dosyasını silmeyeceksiniz veritabanından. Eğer silinen mesajları görebileyim diyorsanız verdiğim MySQL dosyasını "log" veritabanına ekleyin yeterli.
Ferdinant'dan Paylaşımlar: Biyolog Sıfırlama Questi
Metin2 Lobby olarak, oyuncularımıza en kaliteli quest sistemlerini sunmayı hedefliyoruz. Bu doğrultuda, Metin2 dünyasında özel görev sistemleri, quest geliştirme süreçleri ve Lua tabanlı scriptler üzerinde çalışmalarımız devam ediyor. Bugün konumuz ise 'Ferdinant'dan Paylaşımlar: Biyolog Sıfırlama Questi'.
Metin2 sunucularında biyolog sınıfı, özellikle yüksek seviye oyuncular arasında popülerdir. Ancak biyolog sınıflarında belirli seviyelerde sıfırlama mekanizmaları bulunabilir. Ferdinant adlı geliştirici, bu konuyla ilgili özgün bir quest paylaşmış. Bu quest, biyolog karakterlerin belirli koşullar altında sınıf sıfırlama hakkını kazanabilmesini sağlıyor.
Questin Özellikleri:
Bu quest, Lua script diliyle yazılmıştır. Metin2’in quest sistemine entegre edilebilir. Oyuncu, belirli görevleri tamamladığında biyolog karakterini sıfırlama hakkı kazanır. Bu işlem, karakterin seviyesini, becerilerini ve bazı istatistiklerini sıfırlar ancak karşılığında oyuncuya bonus özellik puanları veya eşyalar verilir.
Questin Amacı:
Ferdinant’ın paylaştığı bu quest, hem oyuncuların tekrar tekrar oyunu deneyimlemesini hem de biyolog sınıfının daha dengeli bir şekilde kullanılmasını sağlar. Özellikle sunucularda özel olaylar veya turnuvalar için ideal bir yapıdır.
Kurulum ve Geliştirme:
Bu quest, Lua script bilgisi olan geliştiriciler tarafından kolayca özelleştirilebilir..quest dosyası doğrudan Metin2 sunucusuna entegre edilebilir. Hata ayıklama (debug) işlemleri için gerekli kontrol noktaları da mevcuttur. Ayrıca, questin tetiklenme zamanı, NPC etkileşimleri, item gereksinimleri gibi unsurlar ayarlanabilir.
Teknik Detaylar:
Quest scripti, 'begin', 'end', 'state', 'timer', 'flag', 'mob', 'npc' gibi temel Metin2 quest komutlarını içerir. Bu komutlar, questin akışını yönlendirir ve oyuncunun hangi eylemleri gerçekleştirmesi gerektiğini tanımlar. Ferdinant'ın paylaşımı, özellikle 'quest chain' yapısıyla dikkat çekiyor. Yani birbirine bağlı görevlerle daha zengin bir deneyim sunuluyor.
Uyarılar ve Öneriler:
Sunucunuzda bu questi kullanmadan önce mutlaka test ortamında denemenizi öneririz..quest dosyasında değişiklik yaparken dikkatli olmalısınız. Yanlış bir komut, sunucuda hata oluşmasına neden olabilir. Ayrıca, quest ödülü olarak verilen itemlerin sunucunuzdaki item ID'leriyle uyumlu olduğundan emin olun.
Metin2 Lobby olarak, Ferdinand’tan gelen bu paylaşımı değerli biliyor ve topluluk için açık kaynak olarak sunuyoruz. Quest sistemleri, Metin2 deneyimini zenginleştiren önemli yapılardır. Sizler de kendi questlerinizi geliştirebilir, paylaşabilir ve Metin2 topluluğunu destekleyebilirsiniz.
Shares from Ferdinant: Biologist Reset Quest
As Metin2 Lobby, we aim to provide our players with the highest quality quest systems. In this regard, our work on special mission systems in the Metin2 world, quest development processes, and Lua-based scripts continues. Today's topic is 'Shares from Ferdinant: Biologist Reset Quest'.
In Metin2 servers, the biologist class is popular among high-level players. However, there may be reset mechanisms for biologist classes at certain levels. Ferdinant, a developer, has shared an original quest related to this subject. This quest allows biologist characters to gain the ability to reset their class under certain conditions.
Features of the Quest:
This quest is written in Lua scripting language and can be integrated into Metin2's quest system. When the player completes specific missions, they gain the right to reset their biologist character. This process resets the character's level, skills, and some stats but provides bonus attribute points or items to the player in return.
Purpose of the Quest:
The quest shared by Ferdinant allows players to experience the game again while enabling more balanced use of the biologist class. It is especially ideal for special events or tournaments on servers.
Installation and Development:
This quest can be easily customized by developers familiar with Lua scripting. The .quest file can be directly integrated into a Metin2 server. Debugging procedures are also included via checkpoints. Moreover, elements such as the quest's trigger time, NPC interactions, and item requirements can be adjusted.
Technical Details:
The quest script includes fundamental Metin2 quest commands like 'begin', 'end', 'state', 'timer', 'flag', 'mob', 'npc'. These commands direct the flow of the quest and define what actions the player must perform. Ferdinant’s share stands out particularly due to its 'quest chain' structure, offering a richer experience through interconnected missions.
Warnings and Suggestions:
Before using this quest on your server, we recommend testing it thoroughly in a safe environment. Be careful when editing the .quest file; incorrect commands might cause errors on your server. Additionally, ensure that the item IDs used as rewards match those configured in your server.
At Metin2 Lobby, we value Ferdinant's contribution and present it as open-source material for the community. Quest systems are important structures that enrich the Metin2 gameplay experience. You can also develop, share, and support the Metin2 community with your own quests.
