Truyn
King of clowns
- Сообщения
- 1,591
- Реакции
- 749
Не ужели нельзя добавить в ядро дебаг какой то чтобы хоть писал OnItemRegistered какой предмет или категория.
Это же не уникальная по факту ошибка
Не ужели нельзя добавить в ядро дебаг какой то чтобы хоть писал OnItemRegistered какой предмет или категория.
Было бы неплохо, я думаю можно.Не ужели нельзя добавить в ядро дебаг какой то чтобы хоть писал OnItemRegistered какой предмет или категория.
Это же не уникальная по факту ошибка
Я попросил бы все фразы(переводы) разделить на уникальные ключи, т.е чтоб 1 фраза в одном месте использовалась, а не как ключ "buy", например, который более чем в 2-3 местах юзается;)Было бы неплохо, я думаю можно.
Ваши данные магазина были загружены! Введите в чате !shop для доступа к магазину!
Чтобы у него еррор потом вылезал, что отсутствует фраза и он создавал потом новую тему с этой ошибкой?Файл перевода поищи и там будет такая строка. Меняй её под себя или просто сотри это сообщениеПосмотреть вложение 97340
Спасибо.@FONT, в исходнике (shop.sp) удалить блок кода с 1850 по 1857 строку
Error не должен быть если изменить или удалить только текст сообщенияЧтобы у него еррор потом вылезал, что отсутствует фраза и он создавал потом новую тему с этой ошибкой?
Чтоб пустое сообщение в чат выводилось?Файл перевода поищи и там будет такая строка. Меняй её под себя или просто сотри это сообщениеПосмотреть вложение 97340
Error будет, так как файл переводов - это KeyValues структура, а он не парсит пустые ключи ввида:Error не должен быть если изменить или удалить только текст сообщения
"phrase name"
{
}
@♂dungeon master♂, двигло отбрасывает и не показывает абсолютно пустые сообщения, там обязательно хотя бы пробел должен быть. Ну возможно, что в ксго это работает иначе, но тогда вопрос к Вентилям.
Shop_SetCallbacks(_, OnEquipItem, _, OnDisplayItem, _, OnPreviewItem, OnItemBought);
public bool OnDisplayItem(int client, CategoryId category_id, const char[] category, ItemId item_id, const char[] item, ShopMenu menu, bool &disabled, const char[] name, char[] buffer, int maxlen)
{
if (condition)
{
disabled = true;
}
return true;
}
bool disabled = false;
if (!ItemManager_OnItemDisplay(plugin, callback_display, source_client, category_id, category, item_id, item, inventory ? Menu_Inventory : Menu_Buy, disabled, display, display, sizeof(display)))
{
// LogMessage("Shop Core disabled item %s %s", item, disabled ? "Yes" : "No");
disabled = false;
}
h_KvItems.JumpToKey(sItemId);
// LogMessage("Shop Core 2 disabled item %s %s", item, disabled ? "Yes" : "No");
if (bShouldDisplay)
menu.AddItem(sItemId, display, disabled ? ITEMDRAW_DISABLED : ITEMDRAW_DEFAULT);
Короче бага. Сорри, я не силен в гитхабе, поэтому запощу здесь. Поправьте в следующих релизах, пожалуйста.Проверьте новое ядро.
case MenuAction_DrawItem :
{
char info[16];
int style;
menu.GetItem(param2, info, sizeof(info), style);
bool disabled;
switch (Forward_OnItemDraw(param1, bInv[param1] ? Menu_Inventory : Menu_Buy, iClCategoryId[param1], StringToInt(info), disabled))
{
case Plugin_Continue:
{
disabled = false;
}
case Plugin_Handled, Plugin_Stop:
{
menu.RemoveItem(param2);
return 0;
}
}
if (disabled)
{
return ITEMDRAW_DISABLED;
}
else
return style;
Создал PR, но было бы неплохо чтобы вы фигурировали там тоже и спасибо за найденый баг.Пишу плагин для Shop, хочу сделать купленные предметы "disabled" в меню.
Включил Shop_ItemDisplayCallback, в нем по условию переменную disabled из вызова делаю true. Но при этом в магазине предмет всё равно остается не disabled и может быть выбран.
У кого-то получалось это сделать? Где искать косяк? По логам проверяю, функция вызывается, disabled присваивается. А результата нет :(
C-подобный:Shop_SetCallbacks(_, OnEquipItem, _, OnDisplayItem, _, OnPreviewItem, OnItemBought);
C-подобный:public bool OnDisplayItem(int client, CategoryId category_id, const char[] category, ItemId item_id, const char[] item, ShopMenu menu, bool &disabled, const char[] name, char[] buffer, int maxlen) { if (condition) { disabled = true; } return true; }
Проверил до функции ItemManager_FillItemsOfCategory в файле item_manager.sp
Она получает disabled как true для нужного предмета. А в меню всё равно он активный :(
Вот где это (LogMessage мои для дебага)
C-подобный:bool disabled = false; if (!ItemManager_OnItemDisplay(plugin, callback_display, source_client, category_id, category, item_id, item, inventory ? Menu_Inventory : Menu_Buy, disabled, display, display, sizeof(display))) { // LogMessage("Shop Core disabled item %s %s", item, disabled ? "Yes" : "No"); disabled = false; } h_KvItems.JumpToKey(sItemId); // LogMessage("Shop Core 2 disabled item %s %s", item, disabled ? "Yes" : "No"); if (bShouldDisplay) menu.AddItem(sItemId, display, disabled ? ITEMDRAW_DISABLED : ITEMDRAW_DEFAULT);
Может лучше в скриптинг перенести?
Сообщения автоматически склеены:
Короче бага. Сорри, я не силен в гитхабе, поэтому запощу здесь. Поправьте в следующих релизах, пожалуйста.
В shop.sp функция
public int OnItemSelect(Menu menu, MenuAction action, int param1, int param2)
В разделе case MenuAction_DrawItem забыли, что до этого строку уже могли сделать disabled и игнорируют этот факт. Поэтому я справедливость восстановил. Вот так должна быть эта часть:
C-подобный:case MenuAction_DrawItem : { char info[16]; int style; menu.GetItem(param2, info, sizeof(info), style); bool disabled; switch (Forward_OnItemDraw(param1, bInv[param1] ? Menu_Inventory : Menu_Buy, iClCategoryId[param1], StringToInt(info), disabled)) { case Plugin_Continue: { disabled = false; } case Plugin_Handled, Plugin_Stop: { menu.RemoveItem(param2); return 0; } } if (disabled) { return ITEMDRAW_DISABLED; } else return style;
Читайте ниже что написано
bool ToggleItemEx(int client, const char[] sItemId, ToggleState toggle, bool by_native = false, bool load = false)
{
if (!PlayerManager_ClientHasItemEx(client, sItemId))
{
return false;
}
ShopAction action = ItemManager_OnUseToggleItemEx(client, sItemId, by_native, toggle);
if (action == Shop_Raw)
{
return false;
}
return PlayerManager_ToggleItemEx(client, sItemId, action, load);
}
bool UseItem(int client, int item_id, bool by_native)
{
if (!PlayerManager_ClientHasItem(client, item_id))
{
return false;
}
ShopAction action = ItemManager_OnUseToggleItem(client, item_id, false, Toggle, true);
if (action != Shop_Raw)
{
return PlayerManager_RemoveItem(client, item_id);
}
if (by_native)
{
return true;
}
return false;
}
Ок, спасибо. Посмотрю уже где-нибудь видео как пользоваться гитхабом и подключусь :)Создал PR, но было бы неплохо чтобы вы фигурировали там тоже и спасибо за найденый баг.
![]()
Fixes bug with applying disabled items by TiBarification · Pull Request #145 · hlmod/Shop-Core
Requested by OneMore in hlmod thread https://hlmod.ru/threads/shop-core-fork.38351/post-582601github.com