Synd1qate
Участник
- Сообщения
- 819
- Реакции
- 292
Тогда нужно плагин декомпилить и смотреть путь, раз автору не хватило мозгов написать этот путь, мб название не то или путь кастомный
декомпил:
public PlVers:__version =
{
version = 5,
filevers = "1.9.0.6282",
date = "03/09/2020",
time = "20:56:47"
};
new Float:NULL_VECTOR[3];
new String:NULL_STRING[4];
public Extension:__ext_core =
{
name = "Core",
file = "core",
autoload = 0,
required = 0,
};
new MaxClients;
public Extension:__ext_sdktools =
{
name = "SDKTools",
file = "sdktools.ext",
autoload = 1,
required = 1,
};
public SharedPlugin:__pl_shop =
{
name = "shop",
file = "shop.smx",
required = 1,
};
new String:CTag[6][] =
{
"{default}",
"{green}",
"{lightgreen}",
"{red}",
"{blue}",
"{olive}"
};
new String:CTagCode[6][16] =
{
"\x01",
"\x04",
"\x03",
"\x03",
"\x03",
"\x05"
};
new bool:CTagReqSayText2[6] =
{
0, 0, 1, 1, 1, 0
};
new bool:CEventIsHooked;
new bool:CSkipList[66];
new bool:CProfile_Colors[6] =
{
1, 1, 0, 0, 0, 0
};
new CProfile_TeamIndex[6] =
{
-1, ...
};
new bool:CProfile_SayText2;
public Extension:__ext_cprefs =
{
name = "Client Preferences",
file = "clientprefs.ext",
autoload = 1,
required = 1,
};
public Plugin:myinfo =
{
name = "Contracts",
description = "",
author = "Tonki_Ton",
version = "1.0.0",
url = "vk.com/tonki_ton"
};
new g_iClientAward[66];
new g_iPercent;
new g_iTemporaryMoney[66];
new g_iTempClient[66];
new g_iColors[4];
new bool:g_bPrintTime[66];
new String:g_sClienWeapon[66][64];
new String:g_sTempCategory[66][64];
new String:g_sTempWeapon[66][64];
new String:g_sExecutor[66][36];
new Handle:g_hCookies;
new KeyValues:g_hKV;
public void:__ext_core_SetNTVOptional()
{
MarkNativeAsOptional("GetFeatureStatus");
MarkNativeAsOptional("RequireFeature");
MarkNativeAsOptional("AddCommandListener");
MarkNativeAsOptional("RemoveCommandListener");
MarkNativeAsOptional("BfWriteBool");
MarkNativeAsOptional("BfWriteByte");
MarkNativeAsOptional("BfWriteChar");
MarkNativeAsOptional("BfWriteShort");
MarkNativeAsOptional("BfWriteWord");
MarkNativeAsOptional("BfWriteNum");
MarkNativeAsOptional("BfWriteFloat");
MarkNativeAsOptional("BfWriteString");
MarkNativeAsOptional("BfWriteEntity");
MarkNativeAsOptional("BfWriteAngle");
MarkNativeAsOptional("BfWriteCoord");
MarkNativeAsOptional("BfWriteVecCoord");
MarkNativeAsOptional("BfWriteVecNormal");
MarkNativeAsOptional("BfWriteAngles");
MarkNativeAsOptional("BfReadBool");
MarkNativeAsOptional("BfReadByte");
MarkNativeAsOptional("BfReadChar");
MarkNativeAsOptional("BfReadShort");
MarkNativeAsOptional("BfReadWord");
MarkNativeAsOptional("BfReadNum");
MarkNativeAsOptional("BfReadFloat");
MarkNativeAsOptional("BfReadString");
MarkNativeAsOptional("BfReadEntity");
MarkNativeAsOptional("BfReadAngle");
MarkNativeAsOptional("BfReadCoord");
MarkNativeAsOptional("BfReadVecCoord");
MarkNativeAsOptional("BfReadVecNormal");
MarkNativeAsOptional("BfReadAngles");
MarkNativeAsOptional("BfGetNumBytesLeft");
MarkNativeAsOptional("BfWrite.WriteBool");
MarkNativeAsOptional("BfWrite.WriteByte");
MarkNativeAsOptional("BfWrite.WriteChar");
MarkNativeAsOptional("BfWrite.WriteShort");
MarkNativeAsOptional("BfWrite.WriteWord");
MarkNativeAsOptional("BfWrite.WriteNum");
MarkNativeAsOptional("BfWrite.WriteFloat");
MarkNativeAsOptional("BfWrite.WriteString");
MarkNativeAsOptional("BfWrite.WriteEntity");
MarkNativeAsOptional("BfWrite.WriteAngle");
MarkNativeAsOptional("BfWrite.WriteCoord");
MarkNativeAsOptional("BfWrite.WriteVecCoord");
MarkNativeAsOptional("BfWrite.WriteVecNormal");
MarkNativeAsOptional("BfWrite.WriteAngles");
MarkNativeAsOptional("BfRead.ReadBool");
MarkNativeAsOptional("BfRead.ReadByte");
MarkNativeAsOptional("BfRead.ReadChar");
MarkNativeAsOptional("BfRead.ReadShort");
MarkNativeAsOptional("BfRead.ReadWord");
MarkNativeAsOptional("BfRead.ReadNum");
MarkNativeAsOptional("BfRead.ReadFloat");
MarkNativeAsOptional("BfRead.ReadString");
MarkNativeAsOptional("BfRead.ReadEntity");
MarkNativeAsOptional("BfRead.ReadAngle");
MarkNativeAsOptional("BfRead.ReadCoord");
MarkNativeAsOptional("BfRead.ReadVecCoord");
MarkNativeAsOptional("BfRead.ReadVecNormal");
MarkNativeAsOptional("BfRead.ReadAngles");
MarkNativeAsOptional("BfRead.BytesLeft.get");
MarkNativeAsOptional("PbReadInt");
MarkNativeAsOptional("PbReadFloat");
MarkNativeAsOptional("PbReadBool");
MarkNativeAsOptional("PbReadString");
MarkNativeAsOptional("PbReadColor");
MarkNativeAsOptional("PbReadAngle");
MarkNativeAsOptional("PbReadVector");
MarkNativeAsOptional("PbReadVector2D");
MarkNativeAsOptional("PbGetRepeatedFieldCount");
MarkNativeAsOptional("PbSetInt");
MarkNativeAsOptional("PbSetFloat");
MarkNativeAsOptional("PbSetBool");
MarkNativeAsOptional("PbSetString");
MarkNativeAsOptional("PbSetColor");
MarkNativeAsOptional("PbSetAngle");
MarkNativeAsOptional("PbSetVector");
MarkNativeAsOptional("PbSetVector2D");
MarkNativeAsOptional("PbAddInt");
MarkNativeAsOptional("PbAddFloat");
MarkNativeAsOptional("PbAddBool");
MarkNativeAsOptional("PbAddString");
MarkNativeAsOptional("PbAddColor");
MarkNativeAsOptional("PbAddAngle");
MarkNativeAsOptional("PbAddVector");
MarkNativeAsOptional("PbAddVector2D");
MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
MarkNativeAsOptional("PbReadMessage");
MarkNativeAsOptional("PbReadRepeatedMessage");
MarkNativeAsOptional("PbAddMessage");
MarkNativeAsOptional("Protobuf.ReadInt");
MarkNativeAsOptional("Protobuf.ReadFloat");
MarkNativeAsOptional("Protobuf.ReadBool");
MarkNativeAsOptional("Protobuf.ReadString");
MarkNativeAsOptional("Protobuf.ReadColor");
MarkNativeAsOptional("Protobuf.ReadAngle");
MarkNativeAsOptional("Protobuf.ReadVector");
MarkNativeAsOptional("Protobuf.ReadVector2D");
MarkNativeAsOptional("Protobuf.GetRepeatedFieldCount");
MarkNativeAsOptional("Protobuf.SetInt");
MarkNativeAsOptional("Protobuf.SetFloat");
MarkNativeAsOptional("Protobuf.SetBool");
MarkNativeAsOptional("Protobuf.SetString");
MarkNativeAsOptional("Protobuf.SetColor");
MarkNativeAsOptional("Protobuf.SetAngle");
MarkNativeAsOptional("Protobuf.SetVector");
MarkNativeAsOptional("Protobuf.SetVector2D");
MarkNativeAsOptional("Protobuf.AddInt");
MarkNativeAsOptional("Protobuf.AddFloat");
MarkNativeAsOptional("Protobuf.AddBool");
MarkNativeAsOptional("Protobuf.AddString");
MarkNativeAsOptional("Protobuf.AddColor");
MarkNativeAsOptional("Protobuf.AddAngle");
MarkNativeAsOptional("Protobuf.AddVector");
MarkNativeAsOptional("Protobuf.AddVector2D");
MarkNativeAsOptional("Protobuf.RemoveRepeatedFieldValue");
MarkNativeAsOptional("Protobuf.ReadMessage");
MarkNativeAsOptional("Protobuf.ReadRepeatedMessage");
MarkNativeAsOptional("Protobuf.AddMessage");
VerifyCoreVersion();
return void:0;
}
bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
{
return strcmp(str1, str2, caseSensitive) == 0;
}
ExplodeString(String:text[], String:split[], String:buffers[][], maxStrings, maxStringLength, bool:copyRemainder)
{
new reloc_idx;
new idx;
new total;
new var1;
if (maxStrings < 1 || !split[0])
{
return 0;
}
while ((idx = SplitString(text[reloc_idx], split, buffers[total], maxStringLength)) != -1)
{
reloc_idx = idx + reloc_idx;
total++;
if (maxStrings == total)
{
if (copyRemainder)
{
strcopy(buffers[total + -1], maxStringLength, text[reloc_idx - idx]);
}
return total;
}
}
total++;
strcopy(buffers[total], maxStringLength, text[reloc_idx]);
return total;
}
Handle:StartMessageOne(String:msgname[], client, flags)
{
new players[1];
players[0] = client;
return StartMessage(msgname, players, 1, flags);
}
GetEntSendPropOffs(ent, String:prop[], bool:actual)
{
new String:cls[64];
if (!GetEntityNetClass(ent, cls, 64))
{
return -1;
}
new local = -1;
new offset = FindSendPropInfo(cls, prop, 0, 0, local);
if (actual)
{
return offset;
}
return local;
}
void:SetEntityRenderMode(entity, RenderMode:mode)
{
static bool:gotconfig;
static String:prop[32];
if (!gotconfig)
{
new Handle:gc = LoadGameConfigFile("core.games");
new bool:exists = GameConfGetKeyValue(gc, "m_nRenderMode", prop, 32);
CloseHandle(gc);
if (!exists)
{
strcopy(prop, 32, "m_nRenderMode");
}
gotconfig = true;
}
SetEntProp(entity, PropType:0, prop, mode, 1, 0);
return void:0;
}
void:SetEntityRenderColor(entity, r, g, b, a)
{
static bool:gotconfig;
static String:prop[32];
if (!gotconfig)
{
new Handle:gc = LoadGameConfigFile("core.games");
new bool:exists = GameConfGetKeyValue(gc, "m_clrRender", prop, 32);
CloseHandle(gc);
if (!exists)
{
strcopy(prop, 32, "m_clrRender");
}
gotconfig = true;
}
new offset = GetEntSendPropOffs(entity, prop, false);
if (0 >= offset)
{
ThrowError("SetEntityRenderColor not supported by this mod");
}
SetEntData(entity, offset, r, 1, true);
SetEntData(entity, offset + 1, g, 1, true);
SetEntData(entity, offset + 2, b, 1, true);
SetEntData(entity, offset + 3, a, 1, true);
return void:0;
}
CPrintToChat(client, String:szMessage[])
{
new var1;
if (client <= 0 || client > MaxClients)
{
ThrowError("Invalid client index %d", client);
}
if (!IsClientInGame(client))
{
ThrowError("Client %d is not in game", client);
}
decl String:szBuffer[252];
decl String:szCMessage[252];
SetGlobalTransTarget(client);
Format(szBuffer, 250, "\x01%s", szMessage);
VFormat(szCMessage, 250, szBuffer, 3);
new index = CFormat(szCMessage, 250, -1);
if (index == -1)
{
PrintToChat(client, szCMessage);
}
else
{
CSayText2(client, index, szCMessage);
}
return 0;
}
CPrintToChatAll(String:szMessage[])
{
decl String:szBuffer[252];
new i = 1;
while (i <= MaxClients)
{
new var1;
if (IsClientInGame(i) && !IsFakeClient(i) && !CSkipList[i])
{
SetGlobalTransTarget(i);
VFormat(szBuffer, 250, szMessage, 2);
CPrintToChat(i, szBuffer);
}
CSkipList[i] = 0;
i++;
}
return 0;
}
CFormat(String:szMessage[], maxlength, author)
{
if (!CEventIsHooked)
{
CSetupProfile();
HookEvent("server_spawn", CEvent_MapStart, EventHookMode:2);
CEventIsHooked = true;
}
new iRandomPlayer = -1;
if (author != -1)
{
if (CProfile_SayText2)
{
ReplaceString(szMessage, maxlength, "{teamcolor}", "\x03", true);
iRandomPlayer = author;
}
else
{
ReplaceString(szMessage, maxlength, "{teamcolor}", CTagCode[1], true);
}
}
else
{
ReplaceString(szMessage, maxlength, "{teamcolor}", "", true);
}
new i;
while (i < 6)
{
if (!(StrContains(szMessage, CTag[i], true) == -1))
{
if (!CProfile_Colors[i])
{
ReplaceString(szMessage, maxlength, CTag[i], CTagCode[1], true);
}
else
{
if (!CTagReqSayText2[i])
{
ReplaceString(szMessage, maxlength, CTag[i], CTagCode[i], true);
}
if (!CProfile_SayText2)
{
ReplaceString(szMessage, maxlength, CTag[i], CTagCode[1], true);
}
if (iRandomPlayer == -1)
{
iRandomPlayer = CFindRandomPlayerByTeam(CProfile_TeamIndex[i]);
if (iRandomPlayer == -2)
{
ReplaceString(szMessage, maxlength, CTag[i], CTagCode[1], true);
}
else
{
ReplaceString(szMessage, maxlength, CTag[i], CTagCode[i], true);
}
}
ThrowError("Using two team colors in one message is not allowed");
}
}
i++;
}
return iRandomPlayer;
}
CFindRandomPlayerByTeam(color_team)
{
if (color_team)
{
new i = 1;
while (i <= MaxClients)
{
new var1;
if (IsClientInGame(i) && color_team == GetClientTeam(i))
{
return i;
}
i++;
}
return -2;
}
return 0;
}
CSayText2(client, author, String:szMessage[])
{
new Handle:hBuffer = StartMessageOne("SayText2", client, 0);
if (GetUserMessageType() == 1)
{
PbSetInt(hBuffer, "ent_idx", author, -1);
PbSetBool(hBuffer, "chat", true, -1);
PbSetString(hBuffer, "msg_name", szMessage, -1);
PbAddString(hBuffer, "params", "");
PbAddString(hBuffer, "params", "");
PbAddString(hBuffer, "params", "");
PbAddString(hBuffer, "params", "");
}
else
{
BfWriteByte(hBuffer, author);
BfWriteByte(hBuffer, 1);
BfWriteString(hBuffer, szMessage);
}
EndMessage();
return 0;
}
CSetupProfile()
{
decl String:szGameName[32];
GetGameFolderName(szGameName, 30);
if (StrEqual(szGameName, "cstrike", false))
{
CProfile_Colors[2] = 1;
CProfile_Colors[3] = 1;
CProfile_Colors[4] = 1;
CProfile_Colors[5] = 1;
CProfile_TeamIndex[2] = 0;
CProfile_TeamIndex[3] = 2;
CProfile_TeamIndex[4] = 3;
CProfile_SayText2 = true;
}
else
{
if (StrEqual(szGameName, "tf", false))
{
CProfile_Colors[2] = 1;
CProfile_Colors[3] = 1;
CProfile_Colors[4] = 1;
CProfile_Colors[5] = 1;
CProfile_TeamIndex[2] = 0;
CProfile_TeamIndex[3] = 2;
CProfile_TeamIndex[4] = 3;
CProfile_SayText2 = true;
}
new var1;
if (StrEqual(szGameName, "left4dead", false) || StrEqual(szGameName, "left4dead2", false))
{
CProfile_Colors[2] = 1;
CProfile_Colors[3] = 1;
CProfile_Colors[4] = 1;
CProfile_Colors[5] = 1;
CProfile_TeamIndex[2] = 0;
CProfile_TeamIndex[3] = 3;
CProfile_TeamIndex[4] = 2;
CProfile_SayText2 = true;
}
if (StrEqual(szGameName, "hl2mp", false))
{
if (GetConVarBool(FindConVar("mp_teamplay")))
{
CProfile_Colors[3] = 1;
CProfile_Colors[4] = 1;
CProfile_Colors[5] = 1;
CProfile_TeamIndex[3] = 3;
CProfile_TeamIndex[4] = 2;
CProfile_SayText2 = true;
}
else
{
CProfile_SayText2 = false;
CProfile_Colors[5] = 1;
}
}
if (StrEqual(szGameName, "dod", false))
{
CProfile_Colors[5] = 1;
CProfile_SayText2 = false;
}
if (GetUserMessageId("SayText2") == -1)
{
CProfile_SayText2 = false;
}
CProfile_Colors[3] = 1;
CProfile_Colors[4] = 1;
CProfile_TeamIndex[3] = 2;
CProfile_TeamIndex[4] = 3;
CProfile_SayText2 = true;
}
return 0;
}
public Action:CEvent_MapStart(Handle:event, String:name[], bool:dontBroadcast)
{
CSetupProfile();
new i = 1;
while (i <= MaxClients)
{
CSkipList[i] = 0;
i++;
}
return Action:0;
}
public void:OnPluginStart()
{
g_hCookies = RegClientCookie("contracts", "", CookieAccess:2);
RegConsoleCmd("sm_contracts", ContCmd, "", 0);
RegConsoleCmd("sm_nb", ContCmdNB, "", 0);
new i = 1;
while (i <= MaxClients)
{
new var1;
if (IsClientInGame(i) && !IsFakeClient(i))
{
OnClientCookiesCached(i);
}
i++;
}
HookEvent("player_spawn", ePS, EventHookMode:1);
HookEvent("player_death", ePD, EventHookMode:1);
return void:0;
}
public void:OnPluginEnd()
{
new i = 1;
while (i <= MaxClients)
{
new var1;
if (IsClientInGame(i) && !IsFakeClient(i))
{
OnClientDisconnect(i);
}
i++;
}
return void:0;
}
public void:OnMapStart()
{
if (g_hKV)
{
CloseHandle(g_hKV);
g_hKV = MissingTAG:0;
}
new String:sBuff[256];
new String:sColors[4][8] = {
"contracts",
"s",
"",
"igs/contracts.ini"
};
g_hKV = KeyValues.KeyValues("contracts", "", "");
BuildPath(PathType:0, sBuff, 256, "configs/contracts.ini");
if (!KeyValues.ImportFromFile(g_hKV, sBuff))
{
SetFailState("Конфигурационный файл отсутсвует!");
}
g_iPercent = KeyValues.GetNum(g_hKV, "percent", 0);
KeyValues.GetString(g_hKV, "player_colors", sBuff, 32, "");
ExplodeString(sBuff, " ", sColors, 4, 8, false);
new i;
while (i < 4)
{
g_iColors[i] = StringToInt(sColors[i], 10);
i++;
}
return void:0;
}
public Action:ContCmdNB(iClient, iArgs)
{
GlobaWantedList(iClient);
return Action:3;
}
public Action:ContCmd(iClient, iArgs)
{
new Menu:hMenu = Menu.Menu(ConMainMenuHandler, MenuAction:28);
Menu.SetTitle(hMenu, "Награда за голову\n ");
Menu.AddItem(hMenu, NULL_STRING, "Выставить награду", 0);
new iCount;
new String:sAuth[36];
GetClientAuthId(iClient, AuthIdType:1, sAuth, 36, true);
new i = 1;
while (i <= MaxClients)
{
new var1;
if (IsClientInGame(i) && !IsFakeClient(i) && !strcmp(g_sExecutor[i], sAuth, true))
{
iCount++;
}
i++;
}
if (!iCount)
{
Menu.AddItem(hMenu, NULL_STRING, "Снять награду (Выставленно: 0)\n ", 1);
}
else
{
new String:sBuff[64];
FormatEx(sBuff, 64, "Снять награду (Выставленно: %i)\n ", iCount);
Menu.AddItem(hMenu, NULL_STRING, sBuff, 0);
}
Menu.AddItem(hMenu, NULL_STRING, "Список особо опасных", 0);
Menu.Display(hMenu, iClient, 0);
return Action:3;
}
ConMainMenuHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
switch (iPick)
{
case 0:
{
ChoiceAmount(iClient);
}
case 1:
{
YourWantedList(iClient);
}
case 2:
{
GlobaWantedList(iClient);
}
default:
{
}
}
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
void:GlobaWantedList(iClient)
{
new Menu:hMenu = Menu.Menu(GlobalWantedListMenuHandler, MenuAction:28);
Menu.SetTitle(hMenu, "Список особо опасных:\n ");
new String:sName[64];
new String:sUserID[16];
new i = 1;
while (i < MaxClients)
{
new var1;
if (IsClientInGame(i) && g_iClientAward[i])
{
IntToString(GetClientUserId(i), sUserID, 16);
FormatEx(sName, 64, "%N", i);
Menu.AddItem(hMenu, sUserID, sName, 0);
}
i++;
}
if (!Menu.ItemCount.get(hMenu))
{
Menu.AddItem(hMenu, NULL_STRING, "Нет подходящих игроков.", 1);
}
Menu.ExitBackButton.set(hMenu, true);
Menu.Display(hMenu, iClient, 0);
return void:0;
}
GlobalWantedListMenuHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
new String:sPick[16];
Menu.GetItem(hMenu, iPick, sPick, 16, 0, "", 0);
new iPicker = GetClientOfUserId(StringToInt(sPick, 10));
new var1;
if (!iPicker || !IsClientInGame(iPicker))
{
CPrintToChat(iClient, "\x01[SM] \x04Выбранный игрок покинул сервер\x01.");
GlobaWantedList(iClient);
return 0;
}
ConfirmWipe(iClient, iPicker);
}
case 8:
{
if (iPick == -6)
{
ContCmd(iClient, 0);
}
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
void:ConfirmWipe(iClient, iPicker)
{
new Panel:hTop = Panel.Panel(Handle:0);
new String:sDisplay[128];
FormatEx(sDisplay, 128, "Награда за голову %N:\n ", iPicker);
Panel.SetTitle(hTop, sDisplay, false);
FormatEx(sDisplay, 128, "Размер награды: %i кредитов", g_iClientAward[iPicker]);
Panel.DrawText(hTop, sDisplay);
FormatEx(sDisplay, 128, "Условия выполнения: Оружие %s", g_sClienWeapon[iPicker][1]);
Panel.DrawText(hTop, sDisplay);
new String:sAuth[32];
new iExecutor;
new i = 1;
while (i < MaxClients)
{
if (IsClientInGame(i))
{
GetClientAuthId(i, AuthIdType:1, sAuth, 32, true);
if (!strcmp(g_sExecutor[iPicker], sAuth, true))
{
iExecutor = i;
}
}
i++;
}
new var1;
if (!iExecutor)
{
var1[0] = 21388;
}
else
{
var1[0] = 21428;
}
FormatEx(sDisplay, 128, var1, iExecutor);
Panel.DrawText(hTop, sDisplay);
Panel.DrawItem(hTop, " ", 10);
SetPanelCurrentKey(hTop, 1);
Panel.DrawItem(hTop, "Назад", 0);
Panel.Send(hTop, iClient, ConfirmWipeHandler, 30);
CloseHandle(hTop);
hTop = MissingTAG:0;
return void:0;
}
ConfirmWipeHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
GlobaWantedList(iClient);
ClientCommand(iClient, "play buttons/combine_button7.wav");
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
void:YourWantedList(iClient)
{
new Menu:hMenu = Menu.Menu(YouWantedListMenuHandler, MenuAction:28);
Menu.SetTitle(hMenu, "Выберите игрока:\nКомиссия: %i\n ", g_iPercent);
new String:sName[64];
new String:sUserID[16];
new String:sAuth[36];
GetClientAuthId(iClient, AuthIdType:1, sAuth, 36, true);
new i = 1;
while (i < MaxClients)
{
new var1;
if (IsClientInGame(i) && g_iClientAward[i] && !strcmp(g_sExecutor[i], sAuth, true))
{
IntToString(GetClientUserId(i), sUserID, 16);
FormatEx(sName, 64, "%N", i);
Menu.AddItem(hMenu, sUserID, sName, 0);
}
i++;
}
if (!Menu.ItemCount.get(hMenu))
{
Menu.AddItem(hMenu, NULL_STRING, "Нет подходящих игроков", 1);
}
Menu.ExitBackButton.set(hMenu, true);
Menu.Display(hMenu, iClient, 0);
return void:0;
}
YouWantedListMenuHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
new String:sPick[16];
Menu.GetItem(hMenu, iPick, sPick, 16, 0, "", 0);
new iPicker = GetClientOfUserId(StringToInt(sPick, 10));
new var1;
if (!iPicker || !IsClientInGame(iPicker))
{
CPrintToChat(iClient, "\x01[SM] \x04Выбранный игрок покинул сервер\x01.");
YourWantedList(iClient);
return 0;
}
CPrintToChatAll("\x01%N \x04снял заказ на голову игрока {red}%N", iClient, iPicker);
CPrintToChat(iClient, "\x01Вы вернули \x04%i \x01кредитов за отменненный заказ", g_iClientAward[iPicker]);
decl iAmount;
new var2 = g_iClientAward[iPicker];
new var3 = g_iPercent * g_iClientAward[iPicker] / 100;
var2 -= var3;
iAmount = var2 - var3;
Shop_GiveClientCredits(iClient, iAmount, -5);
g_iClientAward[iPicker] = 0;
SetClientCookie(iPicker, g_hCookies, NULL_STRING);
ContCmd(iClient, 0);
}
case 8:
{
if (iPick == -6)
{
ContCmd(iClient, 0);
}
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
void:ChoiceAmount(iClient)
{
new Menu:hMenu = Menu.Menu(ConAmountMenuHandler, MenuAction:28);
Menu.SetTitle(hMenu, "Выберите награду\n ");
Menu.AddItem(hMenu, "chat", "Выставить награду через чат", 0);
KeyValues.Rewind(g_hKV);
new var1;
if (KeyValues.JumpToKey(g_hKV, "amounts", false) && KeyValues.GotoFirstSubKey(g_hKV, false))
{
new String:sSecName[32];
new String:sName[64];
do {
KeyValues.GetSectionName(g_hKV, sSecName, 32);
KeyValues.GetString(g_hKV, NULL_STRING, sName, 64, "");
new var2;
if (StringToInt(sSecName, 10) > Shop_GetClientCredits(iClient))
{
var2 = 1;
}
else
{
var2 = 0;
}
Menu.AddItem(hMenu, sSecName, sName, var2);
} while (KeyValues.GotoNextKey(g_hKV, false));
}
Menu.ExitBackButton.set(hMenu, true);
Menu.Display(hMenu, iClient, 0);
return void:0;
}
ConAmountMenuHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
new String:sPick[32];
Menu.GetItem(hMenu, iPick, sPick, 32, 0, "", 0);
if (!strcmp(sPick, "chat", true))
{
g_bPrintTime[iClient] = 1;
}
else
{
g_iTemporaryMoney[iClient] = StringToInt(sPick, 10);
ChoiceWeaponSection(iClient);
}
}
case 8:
{
if (iPick == -6)
{
ContCmd(iClient, 0);
}
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
void:ChoiceWeaponSection(iClient)
{
new Menu:hMenu = Menu.Menu(ConWepSectionMenuHandler, MenuAction:28);
Menu.SetTitle(hMenu, "Выберите тип оружия:\n ");
KeyValues.Rewind(g_hKV);
new var1;
if (KeyValues.JumpToKey(g_hKV, "weapons", false) && KeyValues.GotoFirstSubKey(g_hKV, true))
{
new String:sSecName[48];
do {
KeyValues.GetSectionName(g_hKV, sSecName, 48);
Menu.AddItem(hMenu, sSecName, sSecName, 0);
} while (KeyValues.GotoNextKey(g_hKV, true));
}
Menu.ExitBackButton.set(hMenu, true);
Menu.Display(hMenu, iClient, 0);
return void:0;
}
ConWepSectionMenuHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
new String:sPick[48];
Menu.GetItem(hMenu, iPick, sPick, 48, 0, "", 0);
strcopy(g_sTempCategory[iClient], 64, sPick);
ChoiceWeapon(iClient, sPick);
}
case 8:
{
if (iPick == -6)
{
ChoiceAmount(iClient);
}
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
void:ChoiceWeapon(iClient, String:sWeapon[])
{
new Menu:hMenu = Menu.Menu(ConWepMenuHandler, MenuAction:28);
Menu.SetTitle(hMenu, "Категория: %s\nВыберите оружие:\n ", g_sTempCategory[iClient]);
KeyValues.Rewind(g_hKV);
new var1;
if (KeyValues.JumpToKey(g_hKV, "weapons", false) && KeyValues.JumpToKey(g_hKV, sWeapon, false) && KeyValues.GotoFirstSubKey(g_hKV, false))
{
new String:sSecName[48];
new String:sName[64];
do {
KeyValues.GetSectionName(g_hKV, sSecName, 48);
KeyValues.GetString(g_hKV, NULL_STRING, sName, 64, "");
Menu.AddItem(hMenu, sSecName, sName, 0);
} while (KeyValues.GotoNextKey(g_hKV, false));
}
Menu.ExitBackButton.set(hMenu, true);
Menu.Display(hMenu, iClient, 0);
return void:0;
}
ConWepMenuHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
new String:sPick[48];
Menu.GetItem(hMenu, iPick, sPick, 48, 0, "", 0);
strcopy(g_sTempWeapon[iClient], 64, sPick);
PlayerListMenu(iClient);
}
case 8:
{
if (iPick == -6)
{
ChoiceWeaponSection(iClient);
}
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
void:PlayerListMenu(iClient)
{
new Menu:hMenu = Menu.Menu(ConPlayerListMenuHandler, MenuAction:28);
Menu.SetTitle(hMenu, "Выберите игрока:\n ", iClient);
new String:sName[64];
new String:sUserID[16];
new i = 1;
while (i < MaxClients)
{
new var1;
if (IsClientInGame(i) && !g_iClientAward[i])
{
IntToString(GetClientUserId(i), sUserID, 16);
FormatEx(sName, 64, "%N", i);
Menu.AddItem(hMenu, sUserID, sName, 0);
}
i++;
}
if (!Menu.ItemCount.get(hMenu))
{
Menu.AddItem(hMenu, NULL_STRING, "Нет подходящих игроков", 1);
}
Menu.ExitBackButton.set(hMenu, true);
Menu.Display(hMenu, iClient, 0);
return void:0;
}
ConPlayerListMenuHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
new String:sPick[16];
Menu.GetItem(hMenu, iPick, sPick, 16, 0, "", 0);
new iPicker = GetClientOfUserId(StringToInt(sPick, 10));
new var1;
if (!iPicker || !IsClientInGame(iPicker))
{
CPrintToChat(iClient, "\x01[SM] \x04Выбранный игрок покинул сервер\x01.");
PlayerListMenu(iClient);
return 0;
}
ConfirmContract(iClient, iPicker);
}
case 8:
{
if (iPick == -6)
{
ChoiceWeapon(iClient, g_sTempCategory[iClient]);
}
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
void:ConfirmContract(iClient, iPicker)
{
new Panel:hTop = Panel.Panel(Handle:0);
new String:sDisplay[256];
new String:sWepName[64];
KeyValues.Rewind(g_hKV);
FormatEx(sDisplay, 256, "weapons/%s/%s", g_sTempCategory[iClient], g_sTempWeapon[iClient]);
KeyValues.GetString(g_hKV, sDisplay, sWepName, 64, "");
FormatEx(sDisplay, 256, "Вы уверены, что хотите выставить\nнаграду за голову игрока %N\nв размере %i кредитов\nОружие: %s", iPicker, g_iTemporaryMoney[iClient], sWepName);
Panel.SetTitle(hTop, sDisplay, false);
g_iTempClient[iClient] = iPicker;
Panel.DrawItem(hTop, " ", 10);
SetPanelCurrentKey(hTop, 1);
Panel.DrawItem(hTop, "Выставить Награду", 0);
SetPanelCurrentKey(hTop, 2);
Panel.DrawItem(hTop, "Разорвать Контракт", 0);
Panel.Send(hTop, iClient, ConfirmContractHandler, 30);
CloseHandle(hTop);
hTop = MissingTAG:0;
return void:0;
}
ConfirmContractHandler(Menu:hMenu, MenuAction:maAction, iClient, iPick)
{
switch (maAction)
{
case 4:
{
if (iPick == 1)
{
new var1;
if (!g_iTempClient[iClient] || !IsClientInGame(g_iTempClient[iClient]))
{
CPrintToChat(iClient, "\x01[SM] \x04Выбранный игрок покинул сервер\x01.");
PlayerListMenu(iClient);
return 0;
}
new String:sAuth[36];
GetClientAuthId(iClient, AuthIdType:1, sAuth, 36, true);
g_iClientAward[g_iTempClient[iClient]] = g_iTemporaryMoney[iClient];
strcopy(g_sClienWeapon[g_iTempClient[iClient]], 64, g_sTempWeapon[iClient]);
strcopy(g_sExecutor[g_iTempClient[iClient]], 36, sAuth);
Shop_TakeClientCredits(iClient, g_iTemporaryMoney[iClient], -1);
CPrintToChat(iClient, "\x01С вашего баланса снято \x04%i \x01кредитов", g_iTemporaryMoney[iClient]);
CPrintToChatAll("\x04%N \x01выставил награду за голову {red}%N", iClient, g_iTempClient[iClient]);
new String:sBuff[128];
new String:sWepName[64];
KeyValues.Rewind(g_hKV);
FormatEx(sBuff, 128, "weapons/%s/%s", g_sTempCategory[iClient], g_sTempWeapon[iClient]);
KeyValues.GetString(g_hKV, sBuff, sWepName, 64, "");
CPrintToChatAll("\x01Сумма награды: {red}%i \x04кредитов. \x01Оружие: \x04%s", g_iTemporaryMoney[iClient], sWepName);
ColorPlayer(g_iTempClient[iClient]);
ClientCommand(iClient, "play buttons/button14.wav");
}
else
{
ClientCommand(iClient, "play buttons/combine_button7.wav");
}
}
case 16:
{
CloseHandle(hMenu);
hMenu = MissingTAG:0;
}
default:
{
}
}
return 0;
}
public void:ePD(Event:hEvent, String:sName[], bool:bDontBroadcast)
{
new iAttacker = GetClientOfUserId(Event.GetInt(hEvent, "attacker", 0));
new iClient = GetClientOfUserId(Event.GetInt(hEvent, "userid", 0));
new var1;
if (iAttacker != iClient && IsClientInGame(iClient) && IsClientInGame(iAttacker) && g_iClientAward[iClient])
{
new String:sWeapon[48];
GetClientWeapon(iAttacker, sWeapon, 48);
if (!strcmp(sWeapon, g_sClienWeapon[iClient], true))
{
CPrintToChatAll("\x04%N \x01выполнил заказ на игрока {red}%N \x01и получил \x04%i \x01кредитов", iAttacker, iClient, g_iClientAward[iClient]);
Shop_GiveClientCredits(iAttacker, g_iClientAward[iClient], -5);
g_iClientAward[iClient] = 0;
SetClientCookie(iClient, g_hCookies, NULL_STRING);
}
}
return void:0;
}
public void:ePS(Event:hEvent, String:sName[], bool:bDontBroadcast)
{
new iClient = GetClientOfUserId(Event.GetInt(hEvent, "userid", 0));
new var1;
if (iClient && IsClientInGame(iClient) && g_iClientAward[iClient])
{
ColorPlayer(iClient);
}
return void:0;
}
void:ColorPlayer(iClient)
{
SetEntityRenderMode(iClient, RenderMode:1);
SetEntityRenderColor(iClient, g_iColors[0], g_iColors[1], g_iColors[2], g_iColors[3]);
return void:0;
}
public Action:OnClientSayCommand(iClient, String:command[], String:sArgs[])
{
if (g_bPrintTime[iClient])
{
new iBet;
new var1;
if ((iBet = StringToInt(sArgs, 10)) > Shop_GetClientCredits(iClient) || iBet <= 0)
{
CPrintToChat(iClient, "\x01[SM] \x04Некорректная сумма\x01.");
g_bPrintTime[iClient] = 0;
return Action:3;
}
g_iTemporaryMoney[iClient] = iBet;
ChoiceWeaponSection(iClient);
g_bPrintTime[iClient] = 0;
return Action:3;
}
return Action:0;
}
public void:OnClientCookiesCached(iClient)
{
new String:sCookies[128];
GetClientCookie(iClient, g_hCookies, sCookies, 128);
if (sCookies[0])
{
/* ERROR! offset 23048, count 0, length 23016 */
function "OnClientCookiesCached" (number 40)
public void:OnClientDisconnect(iClient)
{
if (g_iClientAward[iClient])
{
new String:sCookies[128];
FormatEx(sCookies, 128, "%i|%s|%s", g_iClientAward[iClient], g_sExecutor[iClient], g_sClienWeapon[iClient]);
SetClientCookie(iClient, g_hCookies, sCookies);
}
return void:0;
}