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.
Kod:
register_clcmd("say /inidekacsatirvar","pP_satirSoyle");
register_clcmd("say /ornekmenu","pP_OrnekMenu");
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.