Çoklu Oylama Sistemi[FONKSİYON]

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhabalar,

Bu fonksiyon da tamamen tarafımızda kodlanmıştır ve herhangi bir yerden alıntı değildir. Daha önce birileri yazdı mı ya da paylaşıldı mı bilmiyoruz.


Nedir "Çoklu Oylama Sistemi" ?

Çoklu Oylama Sistemi, yapmış olduğunuz herhangi bir bahis ya da anket durumunda çoklu olarak oy kullanılmasını sağlar. Ne demek istiyorum? Şöyle örnek vereyim:

Bir turnuva sistemi yaptınız ve rakipleri belirlediniz. Daha sonra rakipleri oyunculara sunuyorsunuz oyun içerisinde. Şu kişi şununla eşleşmiş diye. Birde oylama sistemi yapıyorsunuz buna ek olarak. Karşılaşan kişileri sistem şu şekilde listeliyor:

TRIGONOMETRI(0) vs İNTEGRAL (0)

TUREV(0) vs LIMIT(0)

Evet bu şekilde. Daha sonra ilk vs'ye tıklıyor ve INTEGRAL'e oy veriyorsunuz. Sonra görüntü aşağıdaki gibi oluyor:

TRIGONOMETRI(0) vs İNTEGRAL (1)

TUREV(0) vs LIMIT(0)

Tekrardan oy vermeye kalktığınızda zaten oy vermişsiniz uyarısı ile karşılaşıyorsunuz. Fakat TUREV vs LIMIT'e oy verebilirsiniz. Eğer TUREV vs LIMIT'e oy verirseniz tekrardan oy veremezsiniz. Sistem bu şekilde işliyor ve bu nedenden adı "Çoklu Oylama Sistemi".



Fonksiyonun eklenmesi ve kullanımı:

Bunun için 3 FONKSİYON kullanacağız. İlk fonksiyon bizim yazmış olduğumuz oylama fonksiyonu. Diğer 2 fonksiyon bildiğiniz üzere her yerde yaygın olan "getvarchar" ve "setvarchar" fonksiyonları. İlk olarak "getvarchar" ve "setvarchar" fonksiyonlarını ekleyiniz.

"GETVARCHAR" ve "SETVARCHAR" Fonksiyon kodu:


GETVARCHAR:
Kod:
function getvarchar(name)  local save_laenge = ""..name.."laenge"  local laenge = pc.getqf(save_laenge)  local save_name = 0  local var = ""  local letter = 0  local getchar = 0  while laenge > getchar do getchar = getchar + 1 save_name = ""..name.."_char_"..getchar.."" letter = pc.getqf(save_name)   if letter!=0 then    letter = string.char(letter)   else    letter = ""   end var = ""..var..""..letter..""  end return var end

SETVARCHAR:
Kod:
function setvarchar(name, var)  local laenge = string.len (var)  local setchar = 0  local save_name = 0  local letter = 0 while laenge > setchar do setchar = setchar + 1 letter = string.sub (var, setchar, setchar) letter = string.byte(letter, 1) save_name = ""..name.."_char_"..setchar.."" pc.setqf(save_name, letter) end local save_laenge=""..name.."laenge" pc.setqf(save_laenge, laenge) end

OYLAMA FONKSİYONU:

Kod:
function secimKontrolEt(secimler,oylama) local parcala = tostring(secimler) dizi = { } dizi2 = {} for i=1, string.len(parcala) do dizi[i]= (string.sub(parcala,i,i)) end local sinir =  table.getn(dizi) local say1 = 1 local c = 1 while c <= sinir do if dizi[c] == "," then say1 = say1 + 1 else if dizi2[say1] == nil then dizi2[say1] = "" end dizi2[say1] = tostring(dizi2[say1])..tostring(dizi[c]) end c = c + 1 end local say212 = 1 while say212 <= sinir do if tonumber(dizi2[say212]) == tonumber(oylama) then return 0 end say212 = say212 +1 end return -1 end

Kurulumu:

UYARI: "questlib.lua" dosyanızı kontrol edin eğer yukarıdaki fonksiyonlar (getvarchar ve setvarchar) varsa tekrardan eklemeyin!

1-) Filezilla programını açıp sunucumuza bağlanalım.
2-) /usr/game/share/locale/turkey/quest bölümüne gelelim.
3-) "questlib.lua" adlı dosyayı açıyoruz. En alta gelip yukarıdaki fonksiyon kodlarını düzgün bir şekilde ekliyoruz. Daha sonra kapatıp dosyayı üzerine yaz diyoruz. "questlib.lua" ile işimiz bitti.
4-) Şimdi "quest_functions" dosyasını açıyoruz. En alta ""secimKontrolEt","getvarchar","setvarchar"" komutlarını ekliyoruz sıra ile. UYARI: "secimKontrolEt()","getvarchar()","setvarchar()" bu şekilde eklemeyin! Hata ile karşılaşırsınız. "secimKontrolEt","getvarchar","setvarchar" bu şekilde parantezler olmadan ekleyeceksiniz. Bu şekilde:

secimKontrolEt
getvarchar
setvarchar

UYARI: "quest_functions" dosyanızı kontrol edin eğer yukarıdaki fonksiyonlar (getvarchar ve setvarchar) varsa tekrardan eklemeyin!

Ekledikten sonra kapatıp üzerine yaz diyoruz.

Evet kurulum aşamasındakileri de olduğu gibi hatasız yaptıysanız işlem tamamdır. Reboot atmanıza gerek yok.


Kullanımı:


Evet şimdi nasıl kullanılacağını göstereceğim:

Öncelikle işlemleri veritabanı üzerinden anlatacağım. İlk olarak oyununuzda "MySQL" kodları çalışmıyorsa "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.




MySQL dosyasını "player" veritabanına ekliyoruz. Herhangi bir işlem yapmanıza gerek yok. 2 tane kayıt ekli zaten daha önceden ekledim ben. Onlar üzerinden işlem yapacağım. (REBOOT atmanıza gerek yok eklemeyi yaptıktan sonra)


Şimdi lua(quest) dosyamızı oluşturalım.

1-) usr/game/share/locale/turkey/quest bölümüne "oylama.lua" adinda bir lua dosyası açalım. Daha sonra içine aşağıdaki kodları yazalım:


Kod:
quest oylama begin state start begin when 20095.chat."Eşleşmeler" begin local fikstur = mysql_query10("select * from player.eslesmeler") local fikstur_say = tonumber(table.getn(fikstur)) local b_isim_dizi = {} local r_isim_dizi = {} for i=1,fikstur_say,1 do b_isim_dizi[i] = fikstur.b_isim[i] r_isim_dizi[i] = fikstur.r_isim[i] end local turnuva_eslesme = {} for z=1,fikstur_say,1 do turnuva_eslesme[z] = b_isim_dizi[z].." vs "..r_isim_dizi[z] end turnuva_eslesme[fikstur_say + 1] = "Kapat" secim = select_table(turnuva_eslesme) for k = 1, fikstur_say, 1 do if secim == fikstur_say + 1 then return end if secim == k then  local rakipler = mysql_query10("select * from player.eslesmeler") say_title("[WINDOW_SIZE width;350|height;390]Rakipler hakkında bilgi:") say("") say_reward("Karakter Adı: "..rakipler.b_isim[k]) say("") say_reward("Karakter Adı: "..rakipler.r_isim[k]) say("") say_title("Ne yapmak istersiniz?") say("") local ne_yapmak_istersin = select("Oyla","Kapat") say() local sonuc = secimKontrolEt(tostring(getvarchar("tutulanOylamalar")),tonumber(k)) if ne_yapmak_istersin == 1 then if  tonumber(sonuc) == 0 then say_title("Uyarı:") say("") say_reward("Bu karşılaşma için zaten oy kullanmışsınız.") say("") return end say_title("Kime oy vermek istersiniz?") say("") local oy_kime = select(rakipler.b_isim[k],rakipler.r_isim[k],"Kapat") if oy_kime == 1 then local guncelle = mysql_query10("UPDATE player.eslesmeler SET b_oy_sayisi = b_oy_sayisi + 1 where b_isim='"..rakipler.b_isim[k].."' ") local atkkaa = tostring(getvarchar("tutulanOylamalar"))..tostring(k).."," setvarchar("tutulanOylamalar",tostring(atkkaa)) if guncelle then say_title("Bilgilendirme:") say("") say("Oyunuz başarı ile kullanılmıştır.") say("") end elseif oy_kime == 2 then local guncelle = mysql_query10("UPDATE player.eslesmeler SET r_oy_sayisi = r_oy_sayisi + 1 where r_isim='"..rakipler.r_isim[k].."' ") local atkkaa = tostring(getvarchar("tutulanOylamalar"))..tostring(k).."," setvarchar("tutulanOylamalar",tostring(atkkaa)) if guncelle then say_title("Bilgilendirme:") say("") say("Oyunuz başarı ile kullanılmıştır.") say("") end end end end end end when 20095.chat."Oylama Sonuçlar"  begin local fikstur = mysql_query10("select * from player.eslesmeler") local fikstur_say = tonumber(table.getn(fikstur)) say_title("Oylama Sonuçları:") local b_isim_dizi = {} local r_isim_dizi = {} for i=1,fikstur_say,1 do b_isim_dizi[i] = fikstur.b_isim[i] r_isim_dizi[i] = fikstur.r_isim[i] end local turnuva_eslesme = {} for z=1,fikstur_say,1 do turnuva_eslesme[z] = b_isim_dizi[z].."("..fikstur.b_oy_sayisi[z]..")".." vs "..r_isim_dizi[z].."("..fikstur.r_oy_sayisi[z]..")" end turnuva_eslesme[fikstur_say + 1] = "Kapat" secim = select_table(turnuva_eslesme) 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 oylama.lua

Putty ile de işimiz bitti.
3-) Oyuna dönüyoruz ve bir GM karakter ile "/reload q" çekiyoruz.
4-) Daha sonra 20095 adlı NPC'yi çağırarak oy verebilir ve oylama sonuçlarını kontrol edebilirsiniz.



NOT: Yapamayan arkadaşlar olurlarsa yardımcı olmaya çalışırım. Anlamadığınız, takıldığınız bir yer varsa sorabilirsiniz.

NOT: Biraz üzerinde durursanız mantığını kavrarsınız arkadaşlar. Eğer anket gibi şeyler yapmak istiyorsanız kullanacağınız kod yukarıdaki gibi. Mantık aynı.

NOT: Lütfen başka yerde paylaşacaklar kaynak belirtirlerse sevinirim.


Son olarak sabite alınmasını rica ediyorum. Bir çok insan görsün ve faydalansın. İlerleyen zamanlarda "LOTO SİSTEMİ" ni paylaşacağım.
Metin2'de Çoklu Oylama Sistemi Nedir?

Metin2 Lobby olarak bu yazıda Metin2 oyununda sunucularınızda kullanabileceğiniz Çoklu Oylama Sistemi'ni detaylıca ele alıyoruz. Bu sistem, oyuncuların belirli periyotlarda sunucuya oy vermesini sağlayarak oyuncu sadakatini artırmayı ve sunucu popülaritesini desteklemeyi amaçlayan önemli bir özelliktir. Özellikle quest sistemleriyle entegre edilebildiğinde, oyunculara bonus ödüller sunulabilir ve aktif kalması sağlanabilir.

Çoklu Oylama Sisteminin Özellikleri

Çoklu oylama sistemi, oyuncuların farklı oylama sitelerinden sunucunuza oy vermesine olanak tanır. Her siteye verilen oy, belirli bir zaman diliminden sonra tekrar kullanılabilir hale gelir. Bu sayede oyuncular, farklı platformlardan oy vererek daha fazla ödül kazanabilir. Sistem genellikle Lua tabanlıdır ve Metin2 sunucularında quest dosyaları üzerinden yönetilir.

Oylama Sistemi Nasıl Kurulur?

Metin2 sunucularında çoklu oylama sistemi kurulumu genellikle quest dosyası üzerinde yapılır. Bu dosya, oyuncunun oylama sitesine gitmesini ve geri dönmesini takip eder. Oylama yapıldığında, flag veya state değişkenleri kullanılarak ödül verilip verilmeyeceğine karar verilir. Quest dosyası içinde timer tanımlamaları yapılabilir. Örneğin, 6 saatte bir oy verilebilmesi gibi. Bu süre zarfında oyuncu tekrar oylama yapamaz.

Lua Script Örnekleri

Metin2 geliştiricileri, Lua dili üzerinden quest sistemini genişletebilir. Oylama sistemi için örnek bir lua kodu şu şekildedir:

quest vote_system begin
state start begin
when login begin
set_state_info(IMAGE, 'vote_icon.tga')
end
end
end

Bu örnek, oyuncu giriş yaptığında oylama simgesini gösterir. Quest dosyası içinde reward işlemleri de tanımlanabilir. Örneğin, oy verdikten sonra item veya exp ödülü verilebilir.

Ödül Sistemi ve Entegrasyon

Oylama sonrası verilecek ödüller, sunucunuzun dengesi açısından önemlidir. Ödüller genellikle item, gold, exp ya da quest puanı şeklinde olabilir. Bu ödüller, oyuncuların sunucuya sadakatini artırmak için stratejik olarak planlanmalıdır. Reward sistemi quest üzerinden yönetildiğinde, debug işlemleri ile sorunsuz çalışması sağlanabilir.

Sık Karşılaşılan Sorunlar ve Çözümleri

Metin2 sunucularında quest tabanlı oylama sisteminde bazı durumlarda hatalar oluşabilir. Bunlar genellikle trigger eksikliği, timer ayarları ya da flag kontrolü eksikliğinden kaynaklanabilir. Bu gibi durumlar için debug komutları kullanılarak sistem test edilebilir. Hata ayıklama sırasında, quest log dosyaları incelenmeli ve gerekli düzeltmeler yapılmalıdır.

Sonuç

Metin2 sunucularında çoklu oylama sistemi, oyuncu etkileşimini artıran ve sunucu popülaritesini yükseltmeyi sağlayan etkili bir özelliktir. Doğru şekilde quest dosyalarıyla entegre edildiğinde, oyunculara motive edici ödüller sunabilir ve uzun vadeli aktif kalma oranını artırabilirsiniz. Bu sistemin Lua tabanlı scriptleri, Metin2 geliştiricileri için büyük bir esneklik sağlar.


What is Multi-Voting System in Metin2?

Metin2 Lobby presents this article on the Multi-Voting System you can implement on your Metin2 servers. This system allows players to vote for your server at specific intervals, aiming to increase player loyalty and promote server popularity. When integrated with quest systems, it can provide bonus rewards to players and encourage their continued activity.

Features of the Multi-Voting System

The multi-voting system enables players to cast votes for your server from different voting websites. Each vote becomes available again after a certain period, allowing players to earn more rewards by voting across multiple platforms. The system is generally Lua-based and managed through quest files in Metin2 servers.

How to Install the Voting System?

Installing a multi-voting system on Metin2 servers typically involves creating a quest file that guides the player to a voting site and tracks their return. After voting, flag or state variables are used to determine if a reward should be granted. Timers can also be set within the quest file, such as allowing voting every six hours, during which the player cannot vote again.

Lua Script Examples

Metin2 developers can expand the quest system using the Lua language. An example code for a voting system looks like this:

quest vote_system begin
state start begin
when login begin
set_state_info(IMAGE, 'vote_icon.tga')
end
end
end

This example shows a voting icon upon login. Rewards can also be defined inside the quest file, such as granting items or experience after voting.

Reward System and Integration

Rewards given after voting are crucial for server balance. These rewards can be items, gold, experience, or quest points. Strategically planned reward systems help boost player loyalty. If managed through quest, debugging ensures smooth functionality.

Common Issues and Solutions

Sometimes errors occur in quest-based voting systems in Metin2. These often stem from missing triggers, incorrect timer settings, or faulty flag checks. Debugging commands can be used to test the system. During debugging, quest log files should be reviewed and necessary corrections made.

Conclusion

The multi-voting system in Metin2 servers is an effective feature for increasing player engagement and server popularity. When correctly integrated with quest files, it can offer rewarding incentives to players and enhance long-term activity rates. Its Lua-based scripts provide great flexibility for Metin2 developers.
 

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

Benzer konular

Geri
Üst Alt