Menüyü ini'ye bağlayıp Optimize Etme

Konu

#1
Arkadaşlar menü yapabiliyorum. Fakat optimize olarak yazamıyorum. Menüyü ini dosyasına bağlayıp hemkolay edit yapmak hem de daha optimize etmeyi öğrenmek istiyorum. Bir çok araştırma vs. yaptım, fakat gene yapamadım.
Yardım ederseniz mutlu olurum

https://webailesi.com/konu-menuyu-iniye-baglama-nasil-yapilir-10828?highlight=fopen
https://amxx-bg.info/api/file/fopen
#2
Tek başıma karar verip bir yöntemi size göstermem yanlış olabilir csgo modda pek çok kez kullandığımız bir ini okuma ve opt. mantığı var @ITenGriTR sorun olmaz derse anlatabilirim konu altında.

NOT: Dediğim normal ini okuma değil farklı bir mantık
#3
Csgo modu incelemiştim, anlamayınca ,@ITenGriTR ile konuştum bana fopeni araştır dedi. Araştırdım fakat yine yapamadım
#4
(26-11-2020, 18:18)suriyelikene Adlı Kullanıcıdan Alıntı: Csgo modu incelemiştim, anlamayınca ,@ITenGriTR  ile konuştum bana fopeni araştır dedi. Araştırdım fakat yine yapamadım

Temel anlatmak istediğim olay o değil
#5
Tamamdır hocam. Öğrenirsem çok iyi olur benim açımdan. Beklemedeyim
#7
Kod:
#include <amxmodx>

#define INI_SAYI 10
new sG_BSilahName[INI_SAYI][50],sG_Acikla[INI_SAYI][50],iG_BSilahFiyat[INI_SAYI],Float:iG_BSilahHasar[INI_SAYI];
new iG_Toplamuzunluk;
public plugin_init(){
    register_clcmd("say /inidekacsatirvar","pP_satirSoyle");
    register_clcmd("say /ornekmenu","pP_OrnekMenu");
}
public pP_satirSoyle(iP_ID) {
    client_print_color(iP_ID,iP_ID,"INI Dosyasinda alt alta, %i bolum bulunmakta!",iG_Toplamuzunluk);
}
public plugin_precache(){
    new iL_File = fopen("addons/amxmodx/configs/webailesi.ini", "rt");
    if(iL_File){
        new sL_Data[256],i = 1;
        new sL_Damage[6],sL_Money[6];
        while(!feof(iL_File)){
            fgets(iL_File, sL_Data, charsmax(sL_Data));
            if(strlen(sL_Data)){
                parse(sL_Data,
                    sG_BSilahName[i],37,
                    sG_Acikla[i],37,
                    sL_Damage,6,
                    sL_Money,5);
                iG_BSilahFiyat[i] = str_to_num(sL_Money);
                iG_BSilahHasar[i] = str_to_float(sL_Damage);
                i++;
            }
        }
        iG_Toplamuzunluk = i;
        fclose(iL_File);
    }

}
public pP_OrnekMenu(iP_ID){
    new iL_Menu = sCreateMenu("Ornek Menu","pP_OrnekMenu_Prcs");
    new sL_ToStr[6];
    for(new i = 1; i < iG_Toplamuzunluk; i++){
        num_to_str(i,sL_ToStr,5);
        sMenuAddItem(iL_Menu,"%s(%s) ~ %iTL ~ ",sL_ToStr,0,sG_BSilahName[i],sG_Acikla[i],iG_BSilahFiyat[i]);
    }
    sMenuEnd(iP_ID ,iL_Menu);
    return PLUGIN_HANDLED;
}
public pP_OrnekMenu_Prcs(iP_ID,iM_ID,iM_Item){
    if(iM_Item == MENU_EXIT){
        menu_destroy( iM_ID );
        return PLUGIN_HANDLED;
    }
    new sL_Data[6],iL_Free;
    menu_item_getinfo(iM_ID,iM_Item,iL_Free,sL_Data,charsmax(sL_Data),_,_,iL_Free);
    new iL_KEY = str_to_num(sL_Data);
    /*
    iL_KEY değişkeninde adamın bastığı seçenek olur örnek 4. satırdaki aldığı şeyin ismi ne?
    sG_BSilahName[iL_KEY] bu bastığı seçeneğin inideki ismini getirir en azından ben öyle ayarladım

    örnek bir if yapalım bastığı seçenek 2. seçenek ise
    if(iL_Key == 2){
    bla bla..
    }

    parası silaha yetiyormu?
    if(para >= iG_BSilahFiyat[iL_KEY]){
    parran yetiyor dostum, webailesi.com
    }
    */
    menu_destroy(iM_ID);
    return PLUGIN_HANDLED;
}
stock sCreateMenu(const sS_Title[],const sS_Handle[],any:...){
    new sL_NewTitle[256],sL_FixedTitle[256];
    vformat(sL_FixedTitle,255,sS_Title,3);
    formatex(sL_NewTitle,255,"\r[\wWEBAilesi.COM\r] \y~\r> \y%s",sL_FixedTitle);
    new iL_Menu = menu_create(sL_NewTitle,sS_Handle);
    return iL_Menu;
}
stock sMenuAddItem(iS_MenuID,const sS_ItemName[],const sS_ItemInfo[],iS_UseTag = 1,any:...){
    new sL_NewTitle[256],sL_FixedTitle[256];
    vformat(sL_FixedTitle,255,sS_ItemName,5);
    if(iS_UseTag == 1){
        formatex(sL_NewTitle,255,"\d[\yWEBAilesi.COM\d] \w~\r> \w%s",sL_FixedTitle);
    }
    else{
        formatex(sL_NewTitle,255,"%s",sL_FixedTitle);
    }
    menu_additem(iS_MenuID,sL_NewTitle,sS_ItemInfo);
}
stock sMenuEnd(iS_ID,iS_MenuID,iS_IsSmall = 1,iS_CanExit = 1,iS_Page = 0){
    menu_setprop(iS_MenuID,MPROP_EXITNAME,"\rCikis");
    menu_setprop(iS_MenuID,MPROP_PERPAGE, iS_IsSmall ? 7:0 );
    menu_setprop(iS_MenuID,MPROP_EXIT,iS_CanExit ? MEXIT_ALL:MEXIT_NEVER);
    menu_display(iS_ID,iS_MenuID,iS_Page); 
}

Denemeden yaptım buyur.

CLCMD Komutları

Kod:
    register_clcmd("say /inidekacsatirvar","pP_satirSoyle");
    register_clcmd("say /ornekmenu","pP_OrnekMenu");

Neden preche?

sunucu durmadan .ini yi okumasın diye prechede bir defa okuyarak daha hızlı sistem olan değişkenlere aktarıyorum bilgiyi bu sayede değişkenleri çağırdığımda iniyi çağırmaya göre büyük tasarruf yapıyorum.

CS:GO Modda ilk süreçte iniden okumaydı durmadan ve sunucuda oyun oynanmaz durumdaydı sonra bu sistemi geliştirdik sormanız gereken bişi olursa sorun kodun içine açıklamalar ekledim.

NOT: Paylaştığımız menü stockları daha fazla kullanılıyor diye onlarla yazdım.
#8
Teşekkür ederim 3 soru soracağım
1-) Oyuncuya mesela silahı alınca saydan yazı geçtirmek istiyorum. Nasıl yaparım ?
2-) İni dosyasının içeriği nasıl olmalı ?
3-) Toplam uzunluğa gerek var mı ?, bu toplam uzunluk olayını csgo mod da göremedim. Gerek yok diye düşünüyorum. Nasıl eklenti içerisinden kaldırabilirim ?
4-) Son sorum, kullanımı biraz daha detaylı anlatma şansınız var mı ?
#9
(26-11-2020, 19:16)suriyelikene Adlı Kullanıcıdan Alıntı: Teşekkür ederim 3 soru soracağım
1-) Oyuncuya mesela silahı alınca saydan yazı geçtirmek istiyorum. Nasıl yaparım ?
2-) İni dosyasının içeriği nasıl olmalı ?
3-) Toplam uzunluğa gerek var mı ?, bu toplam uzunluk olayını csgo mod da göremedim. Gerek yok diye düşünüyorum. Nasıl eklenti içerisinden kaldırabilirim ?
4-) Son sorum, kullanımı biraz daha detaylı anlatma şansınız var mı ?

1. Sorun için: 

PHP Kod:
/*
    iL_KEY değişkeninde adamın bastığı seçenek olur örnek 4. satırdaki aldığı şeyin ismi ne?
    sG_BSilahName[iL_KEY] bu bastığı seçeneğin inideki ismini getirir en azından ben öyle ayarladım

    örnek bir if yapalım bastığı seçenek 2. seçenek ise
    if(iL_Key == 2){
    bla bla..
    }

    parası silaha yetiyormu?
    if(para >= iG_BSilahFiyat[iL_KEY]){
    parran yetiyor dostum, webailesi.com
    }
    */
    client_print_color(iP_ID,iP_ID,"%s adli silahi satin aldin",sG_BSilahName[iL_KEY]); 
2. Sorun için:
parse kısmı üzerinden ayarlayabilirsin,

PHP Kod:
parse(sL_Data,
                    sG_BSilahName[i],37,
                    sG_Acikla[i],37,
                    sL_Damage,6,
                    sL_Money,5);
                iG_BSilahFiyat[i] = str_to_num(sL_Money);
                iG_BSilahHasar[i] = str_to_float(sL_Damage); 
Şuanda: "İsim" "Açıklama" "Hasar" "Fiyat" şeklinde.

3. Sorun için;

Toplam uzunluk her zaman gereklidir csgo moddada birçok bölümde mevcut onu yapmazsan gereksiz döngüler döndürürsün ve sunucuya gereksiz yük bindirirsin sayısını bildiğin birşeyi işlemek daha kolaydır.

4. Sorun için soru sorarsan cevaplarım.
#10
Hocam bunu bir jbmenu üzerinde nasıl kullanacağım. Anlamadığım yerler sadece if kısımları bla bla yazdığınız kısım orada ne yapacağız oyuncuya silahı nasıl giydirecem. İf kısmını detaylı bir şekilde anlatırsan sevinirim. Pc başına şuanda gecemiyorum yarın geçip deneme yapacağım.
Bir de sorayım bu ini işini ilk nasıl bir menü yaparak deneyeyim ?

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task
Kayıt Ol
Discord Adresimize Katılın