AMX MOD X
Пятница, 29.03.2024, 16:57:41



Приветствую Вас Гость | RSS
[ Главная ] [ Помогите новичку - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Помогите новичку
Помогите новичку
sonicsoneditДата: Воскресенье, 15.03.2009, 10:18:18 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
Вот делаю плагин один...хочу сделать аналог buymenu для Zombie Plague, а то идея с аммопаками кажеться ну очень уж бредовой.

Возникло несколько проблем...
Суть идеи была в том, чтобы в cfg файле пользователь указывал кол-во пунктов меню для пистолетов, обрезов, винтовок и т.п., потом в другом cfg файле добавлял имена пунктов меню, "стоимость" и команду выполнения (т.е. там не только покупка оружия будет как в оригинальном Buymenu CS, а всякие антидоты, инфект гранаты и прочее), чтобы плагин читал это всё и строил меню на лету.
Пытаюсь сделать пистолеты и вот уже затык с cvar'ом...

Code
public plugin_init()
{
              cvar_zp_cs_buymenu_pistol_count = register_cvar("zp_cs_buymenu_pistol_count", "5");
      register_plugin(PLUGIN,VERSION,AUTHOR);
      register_clcmd("amx_buy", "clcmd_zp_cs_buymenu");
            
            
            
      new cfgdir[64];
      get_configsdir(cfgdir, sizeof cfgdir - 1);
      server_print("[zp_cs_buymenu] Executing: %s/zp_cs_buymenu.cfg",cfgdir);
      server_cmd("exec %s/zp_cs_buymenu.cfg", cfgdir);
      server_print("[zp_cs_buymenu] Pistols found: %d",get_pcvar_num(cvar_zp_cs_buymenu_pistol_count));
}

В конфиг-файле написано:

Code
zp_cs_buymenu_pistol_count 3213

Конфиг сам исполняется, проверил. А вот при загрузке сервер всегда выдаёт "Pistols found: 5", ну или если сделать register_cvar("zp_cs_buymenu_pistol_count", "1"); будет выдавать "Pistols found: 1" - объясните новичку пожалуйста, почему не читается значение переменной из конфига?

Вторая проблема - собственно отталкиваясь от значения перемнной zp_cs_buymenu_pistol_count надо создать динамический массив. Пытаюсь так:

Code
new zp_cs_buymenu_pistol_name[cvar_zp_cs_buymenu_pistol_count];

Получаю так:
Quote
Welcome to the AMX Mod X 1.76-300 Compiler.
Copyright © 1997-2006 ITB CompuPhase, AMX Mod X Team

Error: Must be a constant expression; assumed zero on line 35
Error: Invalid array size (negative or zero) on line 35
Error: Empty statement on line 35
Error: Too many error messages on one line on line 35

Compilation aborted.
4 Errors.
Could not locate output file D:\Temp\2\cstrike\addons\amxmodx\plugins\zp_original_cs_buymenu.amx (compile failed).


Как можно задать размер массива, если размер этот в переменной, которая читается (точнее пока ещё не читается) из конфига?

Ну, и наконец, последнее - можно в меню сделать так, чтобы цифры слева от пунктов меню были не красные, а белые, как в оригинальном Buymenu CS? \w пытался тыкать всюда - не помогает.

Сообщение отредактировал sonicsonedit - Воскресенье, 15.03.2009, 10:38:10
 
PomanoBДата: Воскресенье, 15.03.2009, 10:36:46 | Сообщение # 2
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Используй динамические массивы, как они работают можно посмотреть в стандартных плагинах

http://romanov4400.mybrute.com
 
sonicsoneditДата: Воскресенье, 15.03.2009, 10:38:38 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
PomanoB
Можно пример с кратким пояснением?


Сообщение отредактировал sonicsonedit - Воскресенье, 15.03.2009, 10:39:15
 
PomanoBДата: Воскресенье, 15.03.2009, 11:11:59 | Сообщение # 4
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Code

/* Plugin generated by AMXX-Studio */

#include <amxmodx>

#define PLUGIN "Test Array"
#define VERSION "1.0"
#define AUTHOR "PomanoB"

//Массив
new Array:g_Array;

//Кол элементов
new g_pnum

public plugin_init() {
  register_plugin(PLUGIN, VERSION, AUTHOR)
   
  //Создание массива
  g_Array=ArrayCreate(32);
  g_pnum = 0
   
  register_srvcmd("add_pistol","pistol");
  register_srvcmd("print_p","pistol_p");
}

public pistol()
{
   
  new pist[32]
  read_args(pist,31);
   
  //Добавить в массив строку pist
  ArrayPushString(g_Array, pist);
  g_pnum++
}
public pistol_p()
{
  new p[32]
  for (new i = 0 ; i<g_pnum; i++)
  {
   //Получить из массива строку номер i
   ArrayGetString(g_Array,i,p,31)
   server_print(p)
  }
}


http://romanov4400.mybrute.com
 
sonicsoneditДата: Воскресенье, 15.03.2009, 11:13:28 | Сообщение # 5
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
Спасибо большое!
А что может быть с нечитаемым cvar'ом?
 
PomanoBДата: Воскресенье, 15.03.2009, 11:30:03 | Сообщение # 6
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Попробуй переместить в plugin_cfg
Code

       new cfgdir[64];  
       get_configsdir(cfgdir, sizeof cfgdir - 1);  
       server_print("[zp_cs_buymenu] Executing: %s/zp_cs_buymenu.cfg",cfgdir);  
       server_cmd("exec %s/zp_cs_buymenu.cfg", cfgdir);  
       server_print("[zp_cs_buymenu] Pistols found: %d",get_pcvar_num(cvar_zp_cs_buymenu_pistol_count));


http://romanov4400.mybrute.com
 
sonicsoneditДата: Понедельник, 16.03.2009, 00:38:00 | Сообщение # 7
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
Не работает =\
Вот весь плагин:
Code
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <zombieplague>

#define PLUGIN "CS - like buymenu for Zombie Plague"
#define VERSION "1.0"
#define AUTHOR "Sonic Son'edit"

new zp_cs_buymenu;   
new zp_cs_buymenu_pistol;   
new tempstr[2];
new tempstr2[100];   

new cvar_zp_cs_buymenu_pistol_count;
     
     
public plugin_init()
{
   register_plugin(PLUGIN,VERSION,AUTHOR)
     
   register_clcmd("amx_buy", "clcmd_zp_cs_buymenu")
     
           cvar_zp_cs_buymenu_pistol_count = register_cvar("zp_cs_buymenu_pistol_count", "5")
      
      
    /*new zp_cs_buymenu_pistol_name[cvar_zp_cs_buymenu_pistol_count];   
   new zp_cs_buymenu_pistol_cost[99];
   new zp_cs_buymenu_pistol_id[99];
   for(new i=0;i<cvar_zp_cs_buymenu_pistol_count;i++)
   {
    num_to_str(i, tempstr, 2)
    tempstr2 = "zp_cs_buymenu_pistol___name";
    tempstr2[20]=tempstr[0];
    tempstr2[21]=tempstr[1];
           zp_cs_buymenu_pistol_name[i] = register_cvar("tempstr2", "1");
           //zp_cs_buymenu_pistol_cost[i] = register_cvar("zp_cs_buymenu_pistol_cost", "1");
           //zp_cs_buymenu_pistol_id[i] = register_cvar("zp_cs_buymenu_pistol_id", "1");
   server_print("[zp_cs_buymenu] Registring Pistol %d of %d (%s)",i,cvar_zp_cs_buymenu_pistol_count,tempstr2);
   }
   server_print("[zp_cs_buymenu] Pistols registered. Loading registered pistols...");
   server_cmd("exec %s/zp_cs_buymenu_list.cfg", cfgdir);   
   for(new i=0;i<cvar_zp_cs_buymenu_pistol_count;i++)
    server_print("[zp_cs_buymenu] Pistol %d: %s",i,zp_cs_buymenu_pistol_name[i]);*/
     
     
      
   zp_cs_buymenu = menu_create("Buy Item","zp_cs_buymenu_handle")
   build_menu()
}

public plugin_cfg()
{
   new cfgdir[32]
   get_configsdir(cfgdir, sizeof cfgdir - 1)
   server_cmd("exec %s/zp_cs_buymenu.cfg", cfgdir)
     
   server_print("[zp_cs_buymenu] Pistols found: %d",get_pcvar_num(cvar_zp_cs_buymenu_pistol_count))
}

build_menu()
{
   menu_additem(zp_cs_buymenu, "\wHandgun", "1");
   menu_additem(zp_cs_buymenu, "\wShotgun", "2");
   menu_additem(zp_cs_buymenu, "Sub-Machine Gun", "3");
   menu_additem(zp_cs_buymenu, "Rifle", "4");
   menu_additem(zp_cs_buymenu, "Big Gun^n", "5");
   menu_additem(zp_cs_buymenu, "Primary weapon ammo", "6");
   menu_additem(zp_cs_buymenu, "Secondary weapon ammo^n", "7");
   menu_additem(zp_cs_buymenu, "Equipment^n", "8");
   menu_additem(zp_cs_buymenu, "Rebuy", "9");
   menu_additem(zp_cs_buymenu, "Exit", "0");
   menu_setprop(zp_cs_buymenu, MPROP_PERPAGE, 0);
}
     
public clcmd_zp_cs_buymenu(id)
{
   if(is_user_alive(id))
    menu_display(id, zp_cs_buymenu, 0);     
                      
}
     
public  zp_cs_buymenu_handle(id, menu, item)
{
    // Получаем информацию о пункте
   new cmd[3];
   new access, callback;
     
   menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
     
   new iChoice = str_to_num(cmd);
     
   client_print(id, print_center, "choice: %d", iChoice );
     
   if (iChoice == 1)   
    menu_display(id, zp_cs_buymenu_pistol, 0);   
     
   return PLUGIN_HANDLED;
}

При компиле говорит:
Quote

Warning: Loose indentation on line 27
Warning: Loose indentation on line 51

27 это cvar_zp_cs_buymenu_pistol_count = register_cvar("zp_cs_buymenu_pistol_count", "5")
51 это zp_cs_buymenu = menu_create("Buy Item","zp_cs_buymenu_handle")

Хотя сам плагин компилится и вроде работает, только cvar не читается из zp_cs_buymenu.cfg =\

Добавлено (2009-03-16, 0:38 Am)
---------------------------------------------
Странно, если сделать так

Code
public clcmd_zp_cs_buymenu(id)
{
   
  server_print("[zp_cs_buymenu] Pistols found: %d",get_pcvar_num(cvar_zp_cs_buymenu_pistol_count))
   
   
  if(is_user_alive(id))
   menu_display(id, zp_cs_buymenu, 0);                      
}

то при вызове amx_buy оно уже верно пишет, что 3213 найдено...такое чувство что конфиг тормозно исполняется...или надо выполнить какое-то дополнительное кеширование, о котором я не знаю xD


Сообщение отредактировал sonicsonedit - Понедельник, 16.03.2009, 00:18:50
 
slogicДата: Понедельник, 16.03.2009, 13:32:08 | Сообщение # 8
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (sonicsonedit)
Warning: Loose indentation on line 27

Это не ошибка, это предупреждение, говорит о том, что ты похерил отступ. Самый бредовый warning.
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Помогите новичку
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024