EİKS | Edit İtem Kontrol Sistemi |

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Peki nedir Edit Eşya Kontrol Sistemi?

Bu sistem oyunculardaki tüm eşyaları tek tek efsunlarıyla birlikte kontrol eder ve oyunun efsun düzeninden farklı bir şey algıladığında o eşyayı siler. Kontrol işlemini item_attr.sql dosyasından yani sizin oyununuzun efsun ayarlarının olduğu dosyadan yapar. Bu nedenden oyunun efsunlarından 1 puan fazla dâhi olsa hesabı kapatır ve eşyayı siler. Aynı şekilde aynı tip efsuna sahip bir eşya algıladığında da yada item_attr.sql de olmayan bir efsun algıladığında da sistem hesabı kapatır ve eşyayı siler.

Sistem nasıl işler?

40004 kodlu yüzüğe tıklanıp sistem açılabilir ya da kapatılabilir. Sistem açıkken her 1 saatte oyundaki tüm eşyaları tarar ve oyunun efsun ayarlarından farklı bir edit durumu algıladığı an hesabı kapatır, eşyayı siler. Sistemi kapatırsanız tarama da durur. Dilediğiniz zaman taramayı açıp kapatabilirsiniz.

Not: Bu sistemden edit olan hiçbir oyuncu kaçamaz. Her ne kadar eşya envanterdeyken hemen silinmiyor olsa dâhi o eşyaya sahip olan hesaplar kapatılacağı için, kişi o eşyayı kullanmaya fırsat dâhi bulamaz ve eşyayı verdiği her hesap kapanır. Ayrıca IP adresinden tespit edip diğer hesaplarını da kapatabilirsiniz.

Tabii ki doğal olarak bu sistem MySQL veritabanı üzerinden işleyecek. İlk olarak MySQL kodları sunucumuzda çalışmıyorsa aşağıdaki işlemleri yapalım:

"quetlib.lua" dosyasını açıyor ve en altına aşağıdaki fonksiyonu ekliyoruz:

MYSQL FONKSİYONU:
PHP- Kodu:
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,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.



Şimdi gelelim yapmamızın gereken son ayara daha sonra yeni dosyayı indirmeniz için vereceğim:

* Veritabanını açıyoruz Account veritabanından Account tablosuna sağ tıklıyoruz ve yeni bir sütun ekliyoruz aşağıdaki gibi ve default değerini 0 yapıyoruz. Mutlaka default değerini 0 yapın!

8g6Rb1.jpg



İşimiz bitti burası ile artık dosyamızı verebilirim dilerseniz aşağıdaki kodla kendiniz oluşturabilir yada buradaki linkten hazır halini indirebilirsiniz.

Hazır indirmek isteyenler için:


LUA dosyasını oluşturma:

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

PHP- Kodu:
quest kontrol begin
state start begin
when 40004.use with pc.is_gm() begin
if game.get_event_flag("editKontrolSistemi") == 0 then
kontrolSuresi = 60*60
-- Burası saniye cinsindendir. Yani 60*60 = 3600 saniye o da 1 saat yapar. 1 güne bir kontrol etsin istiyorsanız şu şekilde yapabilirsiniz:
-- 60*60*24 -- > 60*60 = 3600 saniye yapar. Yani 1 saat. 3600*24 = 86400 saniye o da 24 saat yapar. Mantık bu.
server_loop_timer("editKontrol",kontrolSuresi,get_server_timer_arg())
game.set_event_flag("editKontrolSistemi",1)
syschat("Sistem: Otomatik Edit Silme Sistemi aktif edilmiştir.")
elseif game.get_event_flag("editKontrolSistemi") == 1 then
clear_server_timer("editKontrol",get_server_timer_arg())
game.set_event_flag("editKontrolSistemi",0)
syschat("Sistem: Otomatik Edit Silme Sistemi kapatılmıştır.")
end
end

when editKontrol.server_timer begin
tumEsyalarKontrol = mysql_query10("select * from player.item")
tumEsyalarKontrolSay = tonumber(table.getn(tumEsyalarKontrol))
notice_all("Toplam taranan eşya sayısı: "..tumEsyalarKontrolSay)
if tumEsyalarKontrolSay < 1 then
notice_all("Oyunda kayıtlı hiç eşya bulunamadi")
return
end
editliOyuncular = {}
editliEsyalar = {}
editliEsyaKodlari = {}
oyuncuEfsunTipiDizi = {}
oyuncuEsyaEfsunDiziTipY = {}
k=1
b=1
for i=1,tumEsyalarKontrolSay,1 do
for m=13,25,2 do
esyaEfsunTipveDeger = tonumber(tumEsyalarKontrol[m])
if esyaEfsunTipveDeger != 0 then
esyaEfsunDeger = tonumber(tumEsyalarKontrol[m+1])
esyaEfsunTipi = kontrol.efsun(tonumber(tumEsyalarKontrol[m]))
if esyaEfsunTipi == "BECERI_HASARI" then
if esyaEfsunDeger > 30 then
editliOyuncular[k] = tonumber(tumEsyalarKontrol.owner_id)
editliEsyalar[k] = tonumber(tumEsyalarKontrol.id)
editliEsyaKodlari[k] = tonumber(tumEsyalarKontrol.vnum)
k = k + 1
l = 1
break
end
elseif esyaEfsunTipi == "ORTALAMA_ZARAR" then
if esyaEfsunDeger > 60 then
editliOyuncular[k] = tonumber(tumEsyalarKontrol.owner_id)
editliEsyalar[k] = tonumber(tumEsyalarKontrol.id)
editliEsyaKodlari[k] = tonumber(tumEsyalarKontrol.vnum)
k = k + 1
l = 1
break
end
elseif esyaEfsunTipi == "B_H_KARSI_KOYMA" or esyaEfsunTipi == "O_Z_KARSI_KOYMA" then
if esyaEfsunDeger > 0 then
editliOyuncular[k] = tonumber(tumEsyalarKontrol.owner_id)
editliEsyalar[k] = tonumber(tumEsyalarKontrol.id)
editliEsyaKodlari[k] = tonumber(tumEsyalarKontrol.vnum)
k = k + 1
l = 1
break
end
else
efsunTipiDegerKontrol = mysql_query10("select * from player.item_attr where apply='"..esyaEfsunTipi.."' ")
if tonumber(table.getn(efsunTipiDegerKontrol)) > 0 then
efsunTipiDeger = tonumber(efsunTipiDegerKontrol.lv5[1])
if esyaEfsunDeger > efsunTipiDeger then
editliOyuncular[k] = tonumber(tumEsyalarKontrol.owner_id)
editliEsyalar[k] = tonumber(tumEsyalarKontrol.id)
editliEsyaKodlari[k] = tonumber(tumEsyalarKontrol.vnum)
k = k +1
l = 1
break
end -- edit kontrol if endi
else
editliOyuncular[k] = tonumber(tumEsyalarKontrol.owner_id)
editliEsyalar[k] = tonumber(tumEsyalarKontrol.id)
editliEsyaKodlari[k] = tonumber(tumEsyalarKontrol.vnum)
k = k + 1
l = 1
break
end
end
oyuncuEfsunTipiDizi = tonumber(tumEsyalarKontrol[m])
b = b + 1
end-- efsun tip kontrol endi
end -- efsun sütun kontrol endi
if l == 1 then
l = 0
break
end
oyuncuEfsunTipiDiziSay = tonumber(table.getn(oyuncuEfsunTipiDizi))
if oyuncuEfsunTipiDiziSay > 0 then
for p=1,oyuncuEfsunTipiDiziSay,1 do
m=0
oyuncuEsyaEfsunDiziTipY[p] = oyuncuEfsunTipiDizi[p]
for c=1,oyuncuEfsunTipiDiziSay,1 do
if oyuncuEsyaEfsunDiziTipY[p] == oyuncuEfsunTipiDizi[c] then
m = m + 1
if m != 1 and oyuncuEsyaEfsunDiziTipY[p] != 0 then
editliOyuncular[k] = tonumber(tumEsyalarKontrol.owner_id)
editliEsyalar[k] = tonumber(tumEsyalarKontrol.id)
editliEsyaKodlari[k] = tonumber(tumEsyalarKontrol.vnum)
k = k + 1
break
end
end
end
if m != 1 then
break
end
end
end
end -- eşya kontrol endi
editliOyuncularSay = tonumber(table.getn(editliOyuncular))
notice_all("Toplam edit sayısı: "..editliOyuncularSay)
if editliOyuncularSay == 0 then
notice_all("Editli oyuncu bulunamadı.")
else
for i=1,editliOyuncularSay,1 do
oyuncuHesapKimlik = tonumber(editliOyuncular)
oyuncuEsyaKimlik = tonumber(editliEsyalar)
oyuncuEsyaKodu = tonumber(editliEsyaKodlari)
oyuncuBilgiCek = mysql_query10("select * from player.player where account_id='"..oyuncuHesapKimlik.."' ")
if tonumber(table.getn(oyuncuBilgiCek)) > 0 then
oyuncuBilgiAd = tostring(oyuncuBilgiCek.name[1])
oyuncununHesabiKapat = mysql_query10("UPDATE account.account SET status='BLOCK' where id='"..oyuncuHesapKimlik.."' ")
oyuncununHesabiKapatD = mysql_query10("UPDATE account.account SET edit_ban='1' where id='"..oyuncuHesapKimlik.."' ")
oyuncununEsyasiniSil = mysql_query10("DELETE FROM player.item where owner_id='"..oyuncuHesapKimlik.."' and id='"..oyuncuEsyaKimlik.."' ")
notice_all(oyuncuBilgiAd.." isimli oyuncuda edit bulunmuş, hesabı kapatılmış ve eşyası silinmiştir. Eşya Kodu: "..oyuncuEsyaKodu)
else
oyuncuBilgiCek = mysql_query10("select * from player.player where id='"..oyuncuHesapKimlik.."' ")
oyuncuHesap_id = tonumber(oyuncuBilgiCek.account_id[1])
oyuncuBilgiAd = tostring(oyuncuBilgiCek.name[1])
oyuncununHesabiKapat = mysql_query10("UPDATE account.account SET status='BLOCK' where id='"..oyuncuHesap_id.."' ")
oyuncununHesabiKapatD = mysql_query10("UPDATE account.account SET edit_ban='1' where id='"..oyuncuHesap_id.."' ")
oyuncununEsyasiniSil = mysql_query10("DELETE FROM player.item where owner_id='"..oyuncuHesapKimlik.."' and id='"..oyuncuEsyaKimlik.."' ")
notice_all(oyuncuBilgiAd.." isimli oyuncuda edit bulunmuş, hesabı kapatılmış ve eşyası silinmiştir. Eşya Kodu: "..oyuncuEsyaKodu)
end
end
end
end

when 40004.use with not pc.is_gm() begin
syschat("Sistem: Bu yüzük oyunculara kapalıdır. Sadece yöneticiler kullanabilir.")
end

function efsun(efsun_kodu)
efsun = {
--[0] = {"EfsunYok"}
[1] = {"MAX_HP"},
[2] = {"MAX_SP"},
[3] = {"INT"},
[4] = {"CON"},
[5] = {"STR"},
[6] = {"DEX"},
[7] = {"ATT_SPEED"},
[8] = {"MOV_SPEED"},
[9] = {"CAST_SPEED"},
[10] = {"HP_REGEN"},
[11] = {"SP_REGEN"},
[12] = {"POISON_PCT"},
[13] = {"STUN_PCT"},
[14] = {"SLOW_PCT"},
[15] = {"CRITICAL_PCT"},
[16] = {"PENETRATE_PCT"},
[17] = {"ATTBONUS_HUMAN"},
[18] = {"ATTBONUS_ANIMAL"},
[19] = {"ATTBONUS_ORC"},
[20] = {"ATTBONUS_MILGYO"},
[21] = {"ATTBONUS_UNDEAD"},
[22] = {"ATTBONUS_DEVIL"},
[23] = {"STEAL_HP"},
[24] = {"STEAL_SP"},
[25] = {"MANA_BURN_PCT"},
[26] = {" "},
[27] = {"BLOCK"},
[28] = {"DODGE"},
[29] = {"RESIST_SWORD"},
[30] = {"RESIST_TWOHAND"},
[31] = {"RESIST_DAGGER"},
[32] = {"RESIST_BELL"},
[33] = {"RESIST_ELEC"},
[34] = {"RESIST_BOW"},
[35] = {"RESIST_FIRE"},
[36] = {" "},
[37] = {"RESIST_MAGIC"},
[38] = {"RESIST_WIND"},
[39] = {"REFLECT_MELEE"},
[40] = {"CURSE_PCT"},
[41] = {"POISON_REDUCE"},
[42] = {"KILL_SP_RECOVER"},
[43] = {"EXP_DOUBLE_BONUS"},
[44] = {"GOLD_DOUBLE_BONUS"},
[45] = {"ITEM_DROP_BONUS"},
[46] = {"POTION_BONUS"},
[47] = {"KILL_HP_RECOVER"},
[48] = {"IMMUNE_STUN"},
[49] = {"IMMUNE_SLOW"},
[50] = {"IMMUNE_FALL"},
[51] = {" "},
[52] = {"BOW_DISTANCE"},
[53] = {"ATT_GRADE_BONUS"},
[54] = {"DEF_GRADE_BONUS"},
[55] = {"MAGIC_ATT_GRADE"},
[56] = {"MAGIC_DEF_GRADE"},
[57] = {" "},
[58] = {"MAX_STAMINA"},
[59] = {"ATT_BONUS_TO_WARRIOR"},
[60] = {"ATT_BONUS_TO_ASSASSIN"},
[61] = {"ATT_BONUS_TO_SURA"},
[62] = {"ATT_BONUS_TO_SHAMAN"},
[63] = {"ATTBONUS_MONSTER"},
[64] = {"ATT_GRADE_BONUS"},
[65] = {"DEF_GRADE_BONUS"},
[66] = {" "},
[67] = {" "},
[68] = {" "},
[69] = {" "},
[70] = {" "},
[71] = {"BECERI_HASARI"},
[72] = {"ORTALAMA_ZARAR"},
[73] = {"B_H_KARSI_KOYMA"},
[74] = {"O_Z_KARSI_KOYMA"},
[75] = {" "},
[76] = {" "},
[77] = {" "},
[78] = {"RESIST_WARRIOR"},
[79] = {"RESIST_ASSASSIN"},
[80] = {"RESIST_SURA"},
[81] = {"RESIST_SHAMAN"}
}
return efsun[efsun_kodu][1]
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 editkontrol.lua

Putty ile de işimiz bitti.
3-) Oyuna dönüyoruz ve bir GM karakter ile "/reload q" çekiyoruz.
4-) Daha sonra edit eşya oluşturarak 40004 kodlu yüzük ile sistemi kontrol edebilirsiniz.

EİKS | Edit Item Kontrol Sistemi Nedir?

Metin2 Lobby olarak sunucularınızda daha güçlü ve esnek bir içerik yönetimi için EİKS yani Edit Item Kontrol Sistemi hakkında detaylı bilgiler sunuyoruz. Bu sistem özellikle Metin2 geliştiricileri için büyük kolaylıklar sağlar. Özellikle quest ve item yönetiminde yüksek düzeyde kontrol imkanı sunar.

EİKS Nedir?

EİKS, Metin2 sunucularında kullanılan gelişmiş bir script tabanlı kontrol sistemidir. Oyuncuların envanterindeki eşyaları, görev durumlarını ve özel quest sistemlerini doğrudan Lua scriptleri aracılığıyla düzenlemenizi sağlar. Bu sayede hem güvenlik artırılır hem de özel içerikler üretmek kolaylaşır.

EİKS'in Özellikleri

Gerçek zamanlı item kontrolü
Quest başlatma ve bitirme işlemleri
Oyuncu durum takibi (flag, state)
Zamanlanmış görevler (timer)
NPC ve mob ile entegre çalışabilme
Hata ayıklama (debug) desteği

Quest Sistemleriyle Entegrasyon

Metin2 quest sistemleri, oyuncuların oyun içinde belirli görevleri yaparak ödüller kazanmasını sağlar. EİKS ile bu sistemler daha da geliştirilebilir. Örneğin, bir quest tamamlandığında otomatik olarak bir item verilebilir veya bir flag değiştirilebilir. Bu tür işlemler Lua scriptleri ile kolayca tanımlanabilir.

EİKS ile Quest Geliştirme

EİKS kullanarak custom quest sistemleri geliştirmek mümkündür. Metin2 quest script yazımı için gerekli olan tüm fonksiyonlar EİKS tarafından desteklenir. Ayrıca, quest hatalarını anında görebilmeniz için debug araçları da mevcuttur.

Daily Quest ve Özel Görevler

Daily quest gibi tekrarlayan görevler için EİKS idealdir. Günlük görevlerin otomatik olarak sıfırlanması, ödül verilmesi gibi süreçler script yardımıyla kolayca sağlanabilir. Aynı zamanda, özel quest sistemleri de tasarlanabilir. Bu sistemlerde trigger mantığı kullanılarak belirli eylemlerde quest başlatılabilir.

Örnek Kullanım Senaryosu

Oyuncu bir NPC ile konuşunca quest başlasın. Bu quest sırasında mob öldürerek item toplayıp NPC'ye getirsin. Bu işlem bittiğinde, EİKS üzerinden ödül verilsin ve bir sonraki quest otomatik olarak aktif edilsin. Tüm bu süreç EİKS ile Lua scriptleri ile kolayca yönetilebilir.

EİKS ve Metin2 Sunucuları

Metin2 sunucularında quest sistemi merkezi bir rol oynar. EİKS ile bu sistemlerin yönetimi daha verimli hale gelir. Hata ayıklama, item kontrolü ve görev zinciri yönetimi gibi işlemler büyük kolaylık sağlar. Özellikle Metin2dev ve Martysama gibi platformlarda geliştirilen sistemlerle uyumlu çalışır.

Sonuç

EİKS, Metin2 geliştiricileri için güçlü bir araçtır. Quest sistemlerini daha dinamik hale getirir, hata ayıklamayı kolaylaştırır ve sunucu performansını artırır. Teknik olarak güçlü bir yapıya sahip olan bu sistem, Metin2 Lobby kullanıcıları için ideal bir çözüm sunar.


What is EIKS | Edit Item Control System?

Metin2 Lobby presents detailed information about EIKS, also known as Edit Item Control System, for stronger and more flexible content management on your servers. This system provides great convenience especially for Metin2 developers. It offers high-level control over quest and item management.

What is EIKS?

EIKS is an advanced script-based control system used in Metin2 servers. It allows you to directly manage items in player inventories, quest statuses, and special quest systems through Lua scripts. This increases security and makes creating custom content easier.

Features of EIKS

Real-time item control
Starting and ending quests
Player status tracking (flag, state)
Scheduled tasks (timer)
Integration with NPCs and mobs
Debug support

Integration with Quest Systems

Metin2 quest systems allow players to earn rewards by completing certain tasks in-game. EIKS enhances these systems further. For instance, after a quest completion, an item can be automatically given or a flag changed. Such operations can be easily defined using Lua scripts.

Developing Quests with EIKS

With EIKS, custom quest systems can be developed. All functions required for Metin2 quest script creation are supported by EIKS. Additionally, debug tools are available for real-time error tracking during quest development.

Daily Quests and Special Missions

EIKS is ideal for recurring quests like daily quest. Automatic resetting of daily quests and awarding of rewards can be achieved with script assistance. Moreover, special quests can be designed where a trigger mechanism starts a quest upon specific actions.

Example Use Case

When a player talks to an NPC, a quest begins. During this quest, the player collects items by killing mobs and delivers them to the NPC. Upon completion, EIKS awards the reward and automatically activates the next quest. The entire process can be easily managed via Lua scripts using EIKS.

EIKS and Metin2 Servers

The quest system plays a central role in Metin2 servers. EIKS makes the management of these systems more efficient. It greatly facilitates processes such as error debugging, item control, and quest chain management. It works seamlessly with systems developed on platforms like Metin2dev and Martysama.

Conclusion

EIKS is a powerful tool for Metin2 developers. It makes quest systems more dynamic, simplifies debugging, and improves server performance. With its technical strength, this system offers an ideal solution for Metin2 Lobby users.
 

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

Benzer konular

Geri
Üst Alt