m9chou
Дата: Четверг, 15.08.2019, 05:38:36 | Сообщение # 1
Сообщений: 25
Репутация: 0 [ +/- ]
кто может подправить модуль. lk_module_pokupka_vip_ws.sp
#pragma semicolon 1 #include <sourcemod> #include <cstrike> #include <lk> #include <vip> #define MAX_GROUPS 16 #define MAX_TIMES 16 enum enum_Groups { String:GroupName[64], String:VIPGroup[64], _:TimesCount, } enum enum_Times { String:TimesName[64], _:Days, _:Price, } int g_iGroups, g_Groups[MAX_GROUPS][enum_Groups], g_Times[MAX_GROUPS][MAX_TIMES][enum_Times]; char g_sItemName[] = "pokupka_vip_ws"; public Plugin myinfo = { name = "[LK MODULE] Покупка VIP (VIP wS)", author = "aaa", version = "4.0.0" }; public void LK_OnLoaded() { if(LK_GetVersion() < 400) LogError("[LK MODULE][Покупка VIP (VIP wS)] Обновите ядро до последней версии"); else { LoadTranslations("lk_module_pokupka_vip_ws.phrases"); LK_RegisterItem(g_sItemName, BuyVIP_Callback); } } public void OnPluginEnd() { LK_UnRegisterItem(g_sItemName); } public void OnMapStart() { KFG_load(); } public void BuyVIP_Callback(int iClient, int ItemID, const char[] ItemName) { ShowMenuModule(iClient); } void ShowMenuModule(int iClient) { char sTitle[256]; LK_GetMainMenuTitle(iClient, sTitle, sizeof(sTitle)); Menu hMenu = new Menu(MenuHandler_MainMenu); hMenu.ExitBackButton = true; hMenu.SetTitle(sTitle); for(int i = 0; i < g_iGroups; i++) { char szBuffer[16]; IntToString(i, szBuffer, sizeof(szBuffer)); hMenu.AddItem(szBuffer, g_Groups[i][GroupName]); } hMenu.Display(iClient, 0); } public int MenuHandler_MainMenu(Menu hMenu, MenuAction action, int iClient, int iItem) { switch(action) { case MenuAction_End: delete hMenu; case MenuAction_Cancel: { if(iItem == MenuCancel_ExitBack) LK_ShowMainMenu(iClient); } case MenuAction_Select: { char szInfo[16], sTitle[256]; hMenu.GetItem(iItem, szInfo, sizeof(szInfo)); int i = StringToInt(szInfo); int ClientCash = LK_GetClientCash(iClient); LK_GetMainMenuTitle(iClient, sTitle, sizeof(sTitle)); Menu hMenu2 = new Menu(MenuHandler_MainMenu2); hMenu2.ExitBackButton = true; hMenu2.SetTitle(sTitle); for(int j = 0; j < g_Groups[i][TimesCount]; j++) { char szBuffer[16]; FormatEx(szBuffer, sizeof(szBuffer), "%i|%i", i, j); hMenu2.AddItem(szBuffer, g_Times[i][j][TimesName], ClientCash >= g_Times[i][j][Price] ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED); } hMenu2.Display(iClient, 0); } } } public int MenuHandler_MainMenu2(Menu hMenu, MenuAction action, int iClient, int iItem) { switch(action) { case MenuAction_End: delete hMenu; case MenuAction_Cancel: { if(iItem == MenuCancel_ExitBack) ShowMenuModule(iClient); } case MenuAction_Select: { char szInfo[16], sBuffers[2][16], sAuth[32]; GetClientAuthId(iClient, AuthId_Steam2, sAuth, sizeof(sAuth)); hMenu.GetItem(iItem, szInfo, sizeof(szInfo)); ExplodeString(szInfo, "|", sBuffers, 2, 16); int i = StringToInt(sBuffers[0]); int j = StringToInt(sBuffers[1]); if(VIP_GetSeconds(iClient) > -2) { if(VIP_GetSeconds(iClient) > 0) { char szBuffer[64]; VIP_GetGroupName(iClient, szBuffer, sizeof(szBuffer)); if(StrEqual(g_Groups[i][VIPGroup], szBuffer, true)) { if(g_Times[i][j][Days] != 0) { char szAuth[32]; GetClientAuthId(iClient, AuthId_Steam2, szAuth, sizeof(szAuth), true); LK_TakeClientCash(iClient, g_Times[i][j][Price]); ServerCommand("sm_viptime + %i \"%s\"", g_Times[i][j][Days]*1440, szAuth); LK_PrintToChat(iClient, "%T", "VIP_AddTime", iClient, g_Groups[i][VIPGroup], g_Times[i][j][Days]); LK_LogMessage("[Личный кабинет] Игрок %N (%s) продлил %s на %i дней.", iClient, sAuth, g_Groups[i][VIPGroup], g_Times[i][j][Days]); } else LK_PrintToChat(iClient, "%T", "No_Buy_Forever", iClient); } else LK_PrintToChat(iClient, "%T", "No_Buy", iClient); } else LK_PrintToChat(iClient, "%T", "Already_Forever", iClient); } else { char szAuth[32]; LK_TakeClientCash(iClient, g_Times[i][j][Price]); GetClientAuthId(iClient, AuthId_Steam2, szAuth, sizeof(szAuth), true); ServerCommand("sm_vipadd \"%s\" %i %s", szAuth, g_Times[i][j][Days]*1440, g_Groups[i][VIPGroup]); if(g_Times[i][j][Days] == 0) { LK_PrintToChat(iClient, "%T", "Buy_Forever", iClient, g_Groups[i][VIPGroup]); LK_LogMessage("[Личный кабинет] Игрок %N (%s) купил %s навсегда.", iClient, sAuth, g_Groups[i][VIPGroup]); } else { LK_PrintToChat(iClient, "%T", "Buy_Time", iClient, g_Groups[i][VIPGroup], g_Times[i][j][Days]); LK_LogMessage("[Личный кабинет] Игрок %N (%s) купил %s на %i дней.", iClient, sAuth, g_Groups[i][VIPGroup], g_Times[i][j][Days]); } } } } } void KFG_load() { char sPath[128]; KeyValues KV = new KeyValues("LK_MODULE"); BuildPath(Path_SM, sPath, sizeof(sPath), "configs/lk/lk_module_pokupka_vip_ws.ini"); if(!KV.ImportFromFile(sPath)) SetFailState("[LK MODULE][Покупка VIP (VIP wS)] - Файл конфигураций не найден"); KV.Rewind(); if(KV.GotoFirstSubKey(true)) { g_iGroups = 0; do { if(KV.GetSectionName(g_Groups[g_iGroups][GroupName], 64)) { KV.GetString("groups", g_Groups[g_iGroups][VIPGroup], 64); if(KV.JumpToKey("times", false)) { if(KV.GotoFirstSubKey(true)) { g_Groups[g_iGroups][TimesCount] = 0; do { if(KV.GetSectionName(g_Times[g_iGroups][g_Groups[g_iGroups][TimesCount]][TimesName], 64)) { g_Times[g_iGroups][g_Groups[g_iGroups][TimesCount]][Days] = KV.GetNum("days"); if(g_Times[g_iGroups][g_Groups[g_iGroups][TimesCount]][Days] < 0) g_Times[g_iGroups][g_Groups[g_iGroups][TimesCount]][Days] = 0; g_Times[g_iGroups][g_Groups[g_iGroups][TimesCount]][Price] = KV.GetNum("price"); if(g_Times[g_iGroups][g_Groups[g_iGroups][TimesCount]][Price] < 0) g_Times[g_iGroups][g_Groups[g_iGroups][TimesCount]][Price] = 0; g_Groups[g_iGroups][TimesCount] += 1; } } while(KV.GotoNextKey(true)); KV.GoBack(); } KV.GoBack(); } g_iGroups += 1; } } while(KV.GotoNextKey(true)); } }
Сообщение отредактировал m9chou - Четверг, 15.08.2019, 05:40:30
_wS_
Дата: Четверг, 15.08.2019, 10:16:21 | Сообщение # 2
lk_module_pokupka_vip_ws.smx нужно переместить в addons\sourcemod\plugins\ws_vip и должно работать. Если перемещать не хочется, то нужно "сказать" чтобы lk_module_pokupka_vip_ws.smx не отключался, если владелец функции VIP_GetSeconds/VIP_GetGroupName не найден, а не найден он просто потому что VIP включается позднее. Раз в vip.inc есть:Код
#if !defined REQUIRE_PLUGIN public __pl_vip_SetNTVOptional() { MarkNativeAsOptional("VIP_GetSeconds"); MarkNativeAsOptional("VIP_GetGroupName"); } #endif
То подключить библиотеку vip нужно так:Код
#if defined REQUIRE_PLUGIN #undef REQUIRE_PLUGIN #endif #include <vip> #define REQUIRE_PLUGIN
Т.е. просто замени строку #include <vip> на этот код, скомпилируй, и должно работать. Если бы в vip.inc не было ничего про MarkNativeAsOptional, то делают так:Код
public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) { MarkNativeAsOptional("VIP_GetSeconds"); MarkNativeAsOptional("VIP_GetGroupName"); return APLRes_Success; }
m9chou
Дата: Пятница, 16.08.2019, 05:34:19 | Сообщение # 3
Сообщений: 25
Репутация: 0 [ +/- ]
Спасибо.работает.но есть ошибка с переводом. Все переводы есть.даже закидывал их повторно.
_wS_
Дата: Пятница, 16.08.2019, 10:12:30 | Сообщение # 4
"Фатальная ошибка при синтаксическом анализе файла перевода" Скобку пропустил или еще что-то, синтаксис.