|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
Помогите новичку
|
|
sonicsonedit | Дата: Воскресенье, 15.03.2009, 10:18:18 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 24
Статус: Не в сети
| Вот делаю плагин один...хочу сделать аналог 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
Статус: Не в сети
| Используй динамические массивы, как они работают можно посмотреть в стандартных плагинах
http://romanov4400.mybrute.com
|
|
| |
sonicsonedit | Дата: Воскресенье, 15.03.2009, 10:38:38 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 24
Статус: Не в сети
| PomanoB Можно пример с кратким пояснением?
Сообщение отредактировал sonicsonedit - Воскресенье, 15.03.2009, 10:39:15 |
|
| |
PomanoB | Дата: Воскресенье, 15.03.2009, 11:11:59 | Сообщение # 4 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| 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
Статус: Не в сети
| Спасибо большое! А что может быть с нечитаемым cvar'ом?
|
|
| |
PomanoB | Дата: Воскресенье, 15.03.2009, 11:30:03 | Сообщение # 6 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Попробуй переместить в 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
Статус: Не в сети
| Не работает =\ Вот весь плагин: 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
Статус: Не в сети
| Quote (sonicsonedit) Warning: Loose indentation on line 27 Это не ошибка, это предупреждение, говорит о том, что ты похерил отступ. Самый бредовый warning.
|
|
| |
| AMX Mod X Russian Community © 2006-2024 | |
|
| |