Проблема с AddMenuItem

Sergey Grinko

Участник
Сообщения
140
Реакции
10
Проблема с меню, что я неправильно делаю?

Ошибка в строке:
PHP:
new listmenu = ("%i - %i", costc, buffer);

Сам код:
PHP:
		new Amount = KvGetNum(g_KeyValues, "amount");
		if(Amount > 0)
		{
			new String:num[32],String:buffer[48],String:costc[48];
			for (new i = 0; i < Amount; i++)
			{
				IntToString(i, num, sizeof(num));
				if(KvJumpToKey(g_KeyValues, num, false))
				{
					KvGetString(g_KeyValues, "title", buffer, sizeof(buffer));
					KvGetString(g_KeyValues, "cost", costc, sizeof(costc));
					new listmenu = ("%i - %i", costc, buffer);
					AddMenuItem(gBonusesMenu, num, listmenu, ITEMDRAW_DEFAULT);
					KvGoBack(g_KeyValues);
				}
			}
		}
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
new listmenu = "%i - %i", costc, buffer;
Такого нельзя делать, надо так:

new String:listmenu[8];
Format(listmenu,sizeof(listmenu),"%i - %i", costc, buffer);
 

Sergey Grinko

Участник
Сообщения
140
Реакции
10
А если вот такой код http://pastebin.com/25Zmbw81

И когда делаешь:
PHP:
Format(listmenu,sizeof(listmenu),"%i - %i | %s", costc, bparam[i][cost], buffer);
То почему тут "bparam[cost]" не работает?
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
А если вот такой код http://pastebin.com/25Zmbw81

И когда делаешь:
PHP:
Format(listmenu,sizeof(listmenu),"%i - %i | %s", costc, bparam[i][cost], buffer);
То почему тут "bparam[cost]" не работает?


Ну, сразу на всякий пожарный, увеличь размер listmenu, не 8 а 32 или даже 64 лучше, если строки будут...

Что подразумевается под "не работает"? Выводит 0/-1? Ошибка компиляции? Ошибка во время работы? Пустота? Если есть ошибки, скопируй их.
 

Sergey Grinko

Участник
Сообщения
140
Реакции
10
Ну, сразу на всякий пожарный, увеличь размер listmenu, не 8 а 32 или даже 64 лучше, если строки будут...

Что подразумевается под "не работает"? Выводит 0/-1? Ошибка компиляции? Ошибка во время работы? Пустота? Если есть ошибки, скопируй их.

Когда стоит %i, то выводит "0". А с %s вообще пустота.
 

Sergey Grinko

Участник
Сообщения
140
Реакции
10
Ну, сразу на всякий пожарный, увеличь размер listmenu, не 8 а 32 или даже 64 лучше, если строки будут...

Что подразумевается под "не работает"? Выводит 0/-1? Ошибка компиляции? Ошибка во время работы? Пустота? Если есть ошибки, скопируй их.

Это не из-за этого. Стоит:
PHP:
new String:num[32],String:buffer[26],String:costc[3],String:listmenu[32];
Но все тоже самое :(
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
А ты точно уверен, что в bparam[cost] не ноль? Можешь например проверить на всякий случай, где
bparam[cost] = KvGetNum(g_KeyValues, "cost", 0);
добавить
PrintToServer("KVValue: %d", KvGetNum(g_KeyValues, "cost", 0))
и посмотреть, что он грузит? Может он 0 как раз и грузит? МОжет cost нулевой илине существует в файле?
 

Sergey Grinko

Участник
Сообщения
140
Реакции
10
А ты точно уверен, что в bparam[cost] не ноль? Можешь например проверить на всякий случай, где
bparam[cost] = KvGetNum(g_KeyValues, "cost", 0);
добавить
PrintToServer("KVValue: %d", KvGetNum(g_KeyValues, "cost", 0))
и посмотреть, что он грузит? Может он 0 как раз и грузит? МОжет cost нулевой илине существует в файле?


Cost не нулевой, он грузит из файла.

Вот ниже же работает код же

PHP:
public handler_bonusbuy(Handle:menu, MenuAction:action, userid, i)
{
	if (action==MenuAction_Select) 
	{
		if(bparam[i][cost] <= credits[userid])
		{
			credits[userid] -= bparam[i][cost];
			SavePlayer(userid);
		}
	}
}
 
Последнее редактирование:

_wS_

Участник
Сообщения
383
Реакции
760
А если вот такой код http://pastebin.com/25Zmbw81

И когда делаешь:
PHP:
Format(listmenu,sizeof(listmenu),"%i - %i | %s", costc, bparam[i][cost], buffer);
То почему тут "bparam[cost]" не работает?

У меня вроде подобный баг тоже был, решение простое:

PHP:
new xz = bparam[i][cost];
Format(listmenu, sizeof(listmenu), "%d - %d | %s", costc, xz, buffer);
В этом не вижу смысла:

PHP:
enum Parameters
{
        cost
}
Лучше просто сделать new bparam[256];

Ну и перед циклом for (new i = 0; i < Amount; i++), убедись, что Amount < 256:
if (Amount >= 256) Amount = 255;
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
В этом не вижу смысла:

PHP:
enum Parameters
{
        cost
}
Видимо это тестовый пример и там планируется добавление описаний и прочего...

У меня вроде подобный баг тоже был, решение простое:

PHP:
new xz = bparam[i][cost];
Format(listmenu, sizeof(listmenu), "%d - %d | %s", costc, xz, buffer);
Спасибо, возьму и себе на заметку :)
 

Sergey Grinko

Участник
Сообщения
140
Реакции
10
У меня вроде подобный баг тоже был, решение простое:

PHP:
new xz = bparam[i][cost];
Format(listmenu, sizeof(listmenu), "%d - %d | %s", costc, xz, buffer);
В этом не вижу смысла:

PHP:
enum Parameters
{
        cost
}
Лучше просто сделать new bparam[256];

Ну и перед циклом for (new i = 0; i < Amount; i++), убедись, что Amount < 256:
if (Amount >= 256) Amount = 255;

Тоже самое... Я так понял, что он не может загрузить "bparam[cost]".
А компилируется без ошибок из-за "for (new i = 0; i < Amount; i++)"
Только вот что делать?
 

_wS_

Участник
Сообщения
383
Реакции
760
Только вот что делать?
Дать весь код, а не эти куски.
Ну или не весь, а все, что касается этой строки:

Format(listmenu, sizeof(listmenu), "%i - %i | %s", costc, bparam[cost], buffer);

---------
Вот тест, работает все:

PHP:
#pragma semicolon 1
#include <sourcemod>

enum Parameters
{
	cost
} 

new bparam[256][Parameters];

public OnPluginStart()
{
	bparam[1][cost] = 5;

	decl String:txt[10]; Format(txt, 10, "%d", bparam[1][cost]);
	PrintToServer("-> %s", txt); // -> 5
}

---------
Ответил. Ошибка совсем в другом у тебя.
 
Последнее редактирование:
Сверху Снизу