AlmazON
Не путать с самим yand3xmail
- Сообщения
- 5,099
- Реакции
- 2,755
Утечка памяти.if (action == MenuAction_Select)
Утечка памяти.if (action == MenuAction_Select)
Неверно. Единственное место:В коде вправил
else if (action == MenuAction_End) delete menu;
Спасибо,все отлично работает,а можно спросить как создать категорию,например: "Снаряжения" "Гранаты" "Оружия"@AlmazON, ну... С MenuHandler'ами у меня вечная проблема. Всё ещё никак не вкурю, когда хандл Menu ещё существует, а когда нет.
Иногда обезопасиваюсь лишний раз, и получаю в логах "Invalid handle" в том месте, где он закрываться должен по идее.
В коде вправил.
Можно ли как то запретить,что б на пистолетке нельзя было брать?:)@AlmazON, ну... С MenuHandler'ами у меня вечная проблема. Всё ещё никак не вкурю, когда хандл Menu ещё существует, а когда нет.
Иногда обезопасиваюсь лишний раз, и получаю в логах "Invalid handle" в том месте, где он закрываться должен по идее.
В коде вправил.
#include <sourcemod>
#include <events>
#include <sdktools>
#pragma semicolon 1
#pragma newdecls required
public Plugin myinfo = {
url = "http://www.sourcemod.net/",
name = "Give Weapon",
author = "Kiske & AlmazON edition",
version = "1.0myself",
description = "Give a weapon to a player from a command"
};
static const char g_szClassWeapons[][] = {
"ak47", "aug", "bizon", "deagle", "decoy", "elite", "famas", "fiveseven", "flashbang", "g3sg1", "galilar", "glock", "hegrenade", "hkp2000", "incgrenade",
"knife", "m249", "m4a1", "mac10", "mag7", "molotov", "mp7", "mp9", "negev", "nova", "p250", "p90", "sawedoff", "scar20", "sg556", "smokegrenade", "ssg08",
"taser", "tec9", "ump45", "xm1014", "awp", "m4a1_silencer", "knifegg"
};
static const char g_szDrawWeapons[][] = {
"AK-47", "AUG", "Бизон", "Desert Eagle", "Decoy", "Elite", "Famas", "Five Seven", "Световая граната", "G3SG1", "Galil-AR", "Glock", "Граната", "HKP2000", "IncGrenade",
"Нож", "M249", "M4A1", "Mac10", "Mag7", "Коктейль Молотова", "MP7", "MP9", "Negev", "Nova", "P250", "P90", "SawedOff", "Scar20", "SG556", "Дымовая граната", "SSG08",
"Тазер", "Tec 9", "UMP-45", "XM1014", "AWP", "M4A1 с глушителем", "Нож (???)"
};
int iRounds;
public void OnPluginStart() {
RegAdminCmd("sm_weapon", smWeapon, ADMFLAG_CUSTOM3);
HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy);
}
public void OnMapStart() {
iRounds = 0;
}
public void Event_RoundEnd(Event hEvent, const char[] szEventName, bool dontBroadcast) {
iRounds++;
}
public Action smWeapon(int iClient, int iArgs) {
if (iClient && iRounds) {
Menu hMenu = new Menu(MenuHndl);
hMenu.SetTitle("Выберите оружие:\n ");
for (int i = 0; i < sizeof(g_szDrawWeapons); i++)
hMenu.AddItem(g_szClassWeapons[i], g_szDrawWeapons[i], ITEMDRAW_DEFAULT);
hMenu.Display(iClient, 0);
} else {
ReplyToCommand(iClient, "[SM] Use this command in-game!");
}
return Plugin_Handled;
}
public int MenuHndl(Menu menu, MenuAction action, int iClient, int iSelectedItem) {
if (action == MenuAction_Select) {
char szClassName[32];
char szDisplayName[48];
menu.GetItem(iSelectedItem, szClassName, sizeof(szClassName), _, szDisplayName, sizeof(szDisplayName));
Format(szClassName, sizeof(szClassName), "weapon_%s", szClassName);
if (GivePlayerItem(iClient, szClassName) == -1) {
PrintToChat(iClient, "[SM] Оружие %s не поддерживается текущей игрой.", szDisplayName);
}
} else if (action == MenuAction_End) {
delete menu;
}
}
Да,то есть первый раз,что б нельзя было брать,ибо имболанс не много))@Rodion1488, первораунд на карте?
PHP:#include <sourcemod> #include <events> #include <sdktools> #pragma semicolon 1 #pragma newdecls required public Plugin myinfo = { url = "http://www.sourcemod.net/", name = "Give Weapon", author = "Kiske & AlmazON edition", version = "1.0myself", description = "Give a weapon to a player from a command" }; static const char g_szClassWeapons[][] = { "ak47", "aug", "bizon", "deagle", "decoy", "elite", "famas", "fiveseven", "flashbang", "g3sg1", "galilar", "glock", "hegrenade", "hkp2000", "incgrenade", "knife", "m249", "m4a1", "mac10", "mag7", "molotov", "mp7", "mp9", "negev", "nova", "p250", "p90", "sawedoff", "scar20", "sg556", "smokegrenade", "ssg08", "taser", "tec9", "ump45", "xm1014", "awp", "m4a1_silencer", "knifegg" }; static const char g_szDrawWeapons[][] = { "AK-47", "AUG", "Бизон", "Desert Eagle", "Decoy", "Elite", "Famas", "Five Seven", "Световая граната", "G3SG1", "Galil-AR", "Glock", "Граната", "HKP2000", "IncGrenade", "Нож", "M249", "M4A1", "Mac10", "Mag7", "Коктейль Молотова", "MP7", "MP9", "Negev", "Nova", "P250", "P90", "SawedOff", "Scar20", "SG556", "Дымовая граната", "SSG08", "Тазер", "Tec 9", "UMP-45", "XM1014", "AWP", "M4A1 с глушителем", "Нож (???)" }; int iRounds; public void OnPluginStart() { RegAdminCmd("sm_weapon", smWeapon, ADMFLAG_CUSTOM3); HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy); } public void OnMapStart() { iRounds = 0; } public void Event_RoundEnd(Event hEvent, const char[] szEventName, bool dontBroadcast) { iRounds++; } public Action smWeapon(int iClient, int iArgs) { if (iClient && iRounds > 0) { Menu hMenu = new Menu(MenuHndl); hMenu.SetTitle("Выберите оружие:\n "); for (int i = 0; i < sizeof(g_szDrawWeapons); i++) hMenu.AddItem(g_szClassWeapons[i], g_szDrawWeapons[i], ITEMDRAW_DEFAULT); hMenu.Display(iClient, 0); } else { ReplyToCommand(iClient, "[SM] Use this command in-game!"); } return Plugin_Handled; } public int MenuHndl(Menu menu, MenuAction action, int iClient, int iSelectedItem) { if (action == MenuAction_Select) { char szClassName[32]; char szDisplayName[48]; menu.GetItem(iSelectedItem, szClassName, sizeof(szClassName), _, szDisplayName, sizeof(szDisplayName)); Format(szClassName, sizeof(szClassName), "weapon_%s", szClassName); if (GivePlayerItem(iClient, szClassName) == -1) { PrintToChat(iClient, "[SM] Оружие %s не поддерживается текущей игрой.", szDisplayName); } } else if (action == MenuAction_End) { delete menu; } }
А какой файл на сервере отвечает за него? Или что для этого нужно?Думаю можно изменить спрайт дыма, тогда скорее всего получится
Щас напишуНапиши мне в скайп live:doublebigguy
Нужен используемый плагин, как минимум.оба отказались от ножевого поединка
чтоб работал на 2х последних игроках,а не на одного
Если писать отдельным плагином, то маяк получится сразу или с задержкой, независимо от того, что было нажато. А в ножевом поединке их тогда аж два будет: от нового плагина и собственный.оба отказались от ножевого поединка, нужно чтоб на них вешался маяк