xranzei 1
xranzei
Agora Metin2 1
Agora Metin2
Bvural41 1
Bvural41
romegames 1
romegames
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Best Studio 1
Best Studio
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
InfernoShade 1
InfernoShade
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com
Edit Eşya Kontrol Sistemi[LUA]

Edit Eşya Kontrol Sistemi[LUA] 1

indirmek için izniniz yok
  • Konuyu başlatan Konuyu başlatan thenemne0032
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 194
  • Görüntüleme Görüntüleme 23K

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Eğer gerçekten çalışıyor ise çok güzel bir quest. Eminim çok işe yarayacaktır. Paylaşımlarınızın devamını bekliyoruz.
 
konu iiçin tşkler :) bu konuların devamında bekliyoruz
zaten bu şekilde svlerde buglu edit olmıcak :)
 
öncelikle çok teşekkür ederim gayet güzel bi sistem ve kullanılabilir. Eline sağlık.

Geliştirmen açısından bi öneri söylüyeyim;

Buglu market scriptleri vardı. Aynı iteme iki tane kritik, delici , ortalama zarar ... vb efsunları açık sayesinde getirebiliyorlardı.
Acaba bunuda çözmen mümkünmü?
Efsun oranını kontrol edekerken bi itemde aynı efsundan iki tane olmamasınıda kontrol ettirebilirmisin ?

Eger öyle olursa daha kullanışlı olur.
Tekrardan teşekkürler
 
Paylaşım için teşekkürler, kullanan olacaktır başarılarının devamını dilerim.. :rolleyes:

Merhabalar,

@ZacqooLeaven; arkadaşımın isteği üzerine Edit Eşya Kontrol Sistemini kodladım.


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.

Sistem nasıl işler?

Yönetici 20095 kodlu NPC'ye gider ve "Edit Sil" e tıklar. Daha sonra sistem oyunda kayıtlı olan tüm karakterlerin sırayla eşyalarını tek tek kontrol eder. Örneğin önce A oyuncusunun seçer daha sonra A'ya ait tüm eşyaları kontrol eder. Daha sonra B karakterine ait tüm eşyaları kontrol eder. Sistem bu şekilde işliyor.


NOT: Daha verimli ve hızlı çalışabilmesi için bir kaç şey yapmam gerekiyordu fakat en oluru bu şekilde oluyor. Normalde efsun değerlerini item_attr.sql yani oyunun efsunlarının tablosundaki değerler ile karşılaştıracaktı böylece en ufak bir sıkıntıda, efsun puanı 1 fazla olsa bile silecekti fakat şuan en düşük efsunu yani 8'i göz önüne alırsak 21 olunca silecek yani arada bir 12 puanlık efsun farkı var. Buda artık olacak mecburen. Yapabileceğim bir şey yok çünkü herkeste item_attr.sql farklı olabiliyor ya da efsunlar eksik olabiliyor. Diğer taraftan eşyaları sorgularken sadece count'u yani sayısı 1 olan eşyalar üzerinde işlem yapacak böylece sistem biraz daha hızlanıyor. Sonuçta editli hiçbir eşyanın count sayı değeri 2 olamaz.


Edit Eşya Kontrol Sistemi ile ilgili resimler


n7blPg.jpg


1ypEPD.jpg


b5vvG8.jpg


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:
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.


LUA dosyasını oluşturma:

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

PHP:
quest editsil begin
    state start begin
        when 20095.chat."Edit Sil" with pc.is_gm() begin
            say_title("Bilgilendirme:")
            say("")
            say("Eşyalarda edit olup olmadığı kontrol edildi.")
            say("Sohbet penceresini kontrol edin.")
            say("")
            maxHpAd = "MAX_HP"
            ortalamaHasarSaldiriDegeri = 60
            beceriHasariHpUretimi = 30
            digerEfsunlar = 20
            efsunMaxHpKontrol = mysql_query10("select lv5 from player.item_attr where apply='"..maxHpAd.."' ")
            efsunMaxHpDeger = tonumber(efsunMaxHpKontrol.lv5[1])
            oyuncuBilgisiSorgula = mysql_query10("select * from player.player")
            oyuncuBilgisiSorgulaSay = tonumber(table.getn(oyuncuBilgisiSorgula))
            for i=1,oyuncuBilgisiSorgulaSay,1 do
                oyuncuHesap_id = tonumber(oyuncuBilgisiSorgula.account_id[i])
                oyuncuKarakterAdi = tostring(oyuncuBilgisiSorgula.name[i])
                oyuncuEsyaKontrol = mysql_query10("select * from player.item where owner_id='"..oyuncuHesap_id.."' and count='1' ")
                oyuncuEsyaKontrolSay = tonumber(table.getn(oyuncuEsyaKontrol))
                for k=1,oyuncuEsyaKontrolSay,1 do
                    esyaKimlik = tonumber(oyuncuEsyaKontrol.id[k])
                    esyaKodu = tonumber(oyuncuEsyaKontrol.vnum[k])
                    oyuncuEsyaEfsunDiziTip = {
                        tonumber(oyuncuEsyaKontrol.attrtype0[k]),
                        tonumber(oyuncuEsyaKontrol.attrtype1[k]),
                        tonumber(oyuncuEsyaKontrol.attrtype2[k]),
                        tonumber(oyuncuEsyaKontrol.attrtype3[k]),
                        tonumber(oyuncuEsyaKontrol.attrtype4[k]),
                        tonumber(oyuncuEsyaKontrol.attrtype5[k]),
                        tonumber(oyuncuEsyaKontrol.attrtype6[k])
                    }
                    oyuncuEsyaEfsunDiziDeger = {
                        tonumber(oyuncuEsyaKontrol.attrvalue0[k]),
                        tonumber(oyuncuEsyaKontrol.attrvalue1[k]),
                        tonumber(oyuncuEsyaKontrol.attrvalue2[k]),
                        tonumber(oyuncuEsyaKontrol.attrvalue3[k]),
                        tonumber(oyuncuEsyaKontrol.attrvalue4[k]),
                        tonumber(oyuncuEsyaKontrol.attrvalue5[k]),
                        tonumber(oyuncuEsyaKontrol.attrvalue6[k])
                    }
                    oyuncuEsyaEfsunDiziSay = tonumber(table.getn(oyuncuEsyaEfsunDiziDeger))
                    for p=1,oyuncuEsyaEfsunDiziSay,1 do
                        efsunTipi = tonumber(oyuncuEsyaEfsunDiziTip[p])
                        efsunDegeri = tonumber(oyuncuEsyaEfsunDiziDeger[p])
                        if efsunTipi == 1 then
                            if efsunDegeri > efsunMaxHpDeger then
                                editEsyaSil = mysql_query10("delete from player.item where owner_id='"..oyuncuHesap_id.."' and id='"..esyaKimlik.."' ") 
                                if editEsyaSil then
                                    syschat("Edit eşya bulundu ve silindi. Karakter adı: "..oyuncuKarakterAdi.." | Eşya Kodu: "..esyaKodu.." | Efsun kodu: "..efsunTipi.. " | Efsun değeri: "..efsunDegeri)
                                end -- silme kontrol
                            end -- edit kontrol ve edit silme endi
                        elseif efsunTipi  == 72 or efsunTipi == 53 then
                            if efsunDegeri > ortalamaHasarSaldiriDegeri then
                                editEsyaSil = mysql_query10("delete from player.item where owner_id='"..oyuncuHesap_id.."' and id='"..esyaKimlik.."' ") 
                                if editEsyaSil then
                                    syschat("Edit eşya bulundu ve silindi. Karakter adı: "..oyuncuKarakterAdi.." | Eşya Kodu: "..esyaKodu.." | Efsun kodu: "..efsunTipi.. " | Efsun değeri: "..efsunDegeri)
                                end -- silme kontrol                                
                            end -- edit kontrol ve edit silme endi
                        elseif efsunTipi == 71 or efsunTipi == 10 then
                            if efsunDegeri > beceriHasariHpUretimi then
                                editEsyaSil = mysql_query10("delete from player.item where owner_id='"..oyuncuHesap_id.."' and id='"..esyaKimlik.."' ") 
                                if editEsyaSil then
                                    syschat("Edit eşya bulundu ve silindi. Karakter adı: "..oyuncuKarakterAdi.." | Eşya Kodu: "..esyaKodu.." | Efsun kodu: "..efsunTipi.. " | Efsun değeri: "..efsunDegeri)
                                end -- silme kontrol        
                            end
                        else
                            if efsunDegeri > digerEfsunlar then
                                editEsyaSil = mysql_query10("delete from player.item where owner_id='"..oyuncuHesap_id.."' and id='"..esyaKimlik.."' ") 
                                if editEsyaSil then
                                    syschat("Edit eşya bulundu ve silindi. Karakter adı: "..oyuncuKarakterAdi.." | Eşya Kodu: "..esyaKodu.." | Efsun kodu: "..efsunTipi.. " | Efsun değeri: "..efsunDegeri)
                                end -- silme kontrol                                            
                            end
                        end -- max hp tipini kontrol endi
                    end -- for p endi
                end -- for k endi
            end -- for i endi
        end
    end
end


Hazır indirmek isteyenler için:





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 editsil.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 yaratarak 20095 kodlu NPCden sistemi kontrol edebilirsiniz.


NOT: Sistem TR tipi efsun oranlarına göre ayarlanmıştır.
 
İtem countu 2 olamaz demişsinde :D iyide ben ninjanın okuna ORT Ekliyorum 200 li alıyorum count 200 oluyor yani bunuda düzenlesen iyi olur :D
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst