CS:GO залезе, а пък тук още няма тема.
Пускам безплатно плъгина който завърших за SourceMOD. Писан е със старата типизация и работи с calladmin уеб частта на Argos.
Ползва същата датабаза като на Call Admin системата за 1.6 сървърите на Nikolow, която е публикувана тук. Още повече - този плъгин вкарва всичко там - в същата таблица и така играчите ви могат да следят всички ваши сървъри на едно място.
Моята уеб част е ненадмината, тъй като работи с ajax бутон и обновява инфото динамично. Тук такава няма, а и няма да има (поне така мисля). Не ми беше лесно да я направя...
Давам кода не индентнат, ако ползвате някой туул - оправете си го. Може да се компилира успешно с warnings или да ползвате pragma там, която замаскира тези предупреждения, които не пречат на работата на плъгина.
Плъгина който споделям е скопен и липсват някои дефиниции като plugin author, version и т.н. (няма смисъл от тях). Автора съм аз
Код:
Код за потвърждение: Избери целия код
#pragma semicolon 1
#include <sourcemod>
new Handle:db;
new String:nickCache[33];
new String:clientCache;
new String:reasonCache[55];
public OnPluginStart() {
LoadTranslations("common.phrases.txt");
AddCommandListener(ChatTriggers, "say");
AddCommandListener(ChatTriggers, "say_team");
InitDB(db);
}
public Action:ChatTriggers(client, const String:command[], argc)
{
decl String:cmd[256];
GetCmdArgString(cmd, sizeof(cmd));
if (StrContains(cmd, "!calladmin", false) != -1 || StrContains(cmd, "/calladmin", false) != -1)
{
//show the menu
CallAdmin(client);
}
return Plugin_Continue;
}
public SQL_ErrorCheckCallBack(Handle:owner, Handle:hndl, const String:error[], any:data)
{
if(hndl == INVALID_HANDLE)
{
SetFailState("Query failed! %s", error);
}
}
InitDB(&Handle:DbHNDL)
{
// Errormessage Buffer
new String:Error[255];
// COnnect to the DB
DbHNDL = SQL_Connect("pok4_calladmin", true, Error, sizeof(Error));
// If something fails we quit
if(DbHNDL == INVALID_HANDLE)
{
SetFailState(Error);
}
// Querystring
new String:Query[255];
Format(Query, sizeof(Query), "CREATE TABLE IF NOT EXISTS `call_admin` (`id` INT(12) AUTO_INCREMENT PRIMARY KEY ,`nick` VARCHAR(30),`report` VARCHAR(255) ,`date` VARCHAR(10) ,`time` VARCHAR(10),`ip` VARCHAR(22),`server` VARCHAR(30),`ip2` VARCHAR(16),`reporter_name` VARCHAR(30));");
// Database lock
SQL_LockDatabase(DbHNDL);
// Execute the query
SQL_FastQuery(DbHNDL, Query);
// Database unlock
SQL_UnlockDatabase(DbHNDL);
}
// Function to add something to the DB
AddRecord(reporter_id)
{
if(!IsValidClient(reporter_id)) {
return;
}
// We could just write the query in the function but i like it that way
new String:Query[255];
new String:clientIP[32];
new String:ReporterName[33];
GetClientIP(reporter_id, clientIP, sizeof(clientIP));
GetClientName(reporter_id, ReporterName, sizeof(ReporterName));
new String:sTime[32];
new String:sTime2[32];
FormatTime(sTime, sizeof(sTime), "%H:%M:%S", GetTime());
FormatTime(sTime2, sizeof(sTime2), "%d.%m.%Y", GetTime());
//server name
new Handle:convar = FindConVar("hostname");
decl String:ServerName[64];
GetConVarString( convar, ServerName, sizeof(ServerName));
Format(Query, sizeof(Query), "INSERT INTO call_admin (nick,report,date,time,ip,server) VALUES ('%s','%s','%s','%s','%s','%s')", ReporterName,reasonCache,sTime2,sTime,clientIP,ServerName);
// Send our Query to the Function
SQL_TQuery(db, SQL_ErrorCheckCallBack, Query);
}
stock bool:IsValidClient(iClient) {
return (iClient > 0 && iClient <= MaxClients);
}
public Action:CallAdmin(client)
{
new String:clientName[50];
new playerCount = 0;
new index = 1;
decl String:sID[24];
playerCount = GetClientCount(true);
new Handle:playerMenu = CreateMenu(Handle_PlayerSelect);
SetMenuTitle(playerMenu, "Select Player to Report:");
while (index <= playerCount)
{
if(IsClientConnected(index) && IsClientInGame(index) && GetUserAdmin(index) == INVALID_ADMIN_ID && !IsFakeClient(index))
{
Format(sID, sizeof(sID), "%d", GetClientSerial(index));
GetClientName(index, clientName, sizeof(clientName));
AddMenuItem(playerMenu,sID,clientName);
}
++index;
}
clientCache = client;
DisplayMenu(playerMenu, client, 120);
return Plugin_Handled;
}
public Handle_PlayerSelect(Handle:playerMenu, MenuAction:action, param1, param2)
{
if(action == MenuAction_Select)
{
new String:sInfo[24];
new iSerial;
new iID;
GetMenuItem(playerMenu, param2, sInfo, sizeof(sInfo));
iSerial = StringToInt(sInfo);
iID = GetClientFromSerial(iSerial);
GetClientName(iID, nickCache, sizeof(nickCache));
new Handle:CallAdmin_ = CreateMenu(Handle_CallAdmin_);
SetMenuTitle(CallAdmin_, "Choose reason");
AddMenuItem(CallAdmin_, "", "Hacker");
AddMenuItem(CallAdmin_, "", "Bugger");
AddMenuItem(CallAdmin_, "", "Abuser");
AddMenuItem(CallAdmin_, "", "AFK");
AddMenuItem(CallAdmin_, "", "Another");
DisplayMenu(CallAdmin_,clientCache, 120);
}
else if(action == MenuAction_End)
{
CloseHandle(playerMenu);
}
}
public Handle_CallAdmin_(Handle:CallAdmin_, MenuAction:action, param1, param2)
{
if(action == MenuAction_Select)
{
new String:Playername[33];
GetClientName(clientCache, Playername, sizeof(Playername));
if(param2 == 0) {
Format(reasonCache, sizeof(reasonCache), "%s is a Hacker",nickCache );
}
if(param2 == 1) {
Format(reasonCache, sizeof(reasonCache), "%s is a Bugger",nickCache);
}
if(param2 == 2) {
Format(reasonCache, sizeof(reasonCache), "%s is a Abuser",nickCache );
}
if(param2 == 3) {
Format(reasonCache, sizeof(reasonCache), "%s is a AFK",nickCache);
}
if(param2 == 4) {
Format(reasonCache, sizeof(reasonCache), "%s [Another reason]",nickCache);
}
PrintToChatAll("%s povika admin, prichina: %s", Playername, reasonCache);
AddRecord(clientCache);
}
else if(action == MenuAction_End)
{
CloseHandle(CallAdmin_);
}
}
Плъгина е без поддръжка и надграждане, освен ако не си заплатите
Също така най-вероятно мога да подкарам и discord нотификейшъни към него, но както писах и в уеб турист(https://web-tourist.net/threads/argos-m ... ost-681701) - трудно ще ми е под CS Source v34.
Който иска и има сървъри на CS:GO и закупи всичко, можем да си поиграем да пригодим и нотификейшъните, тъй като не мога да компилирам плъгина със sm 1.6.4... (стара е версията). Успешно обаче компилирам горното парче код под 1.11.. Не вярвам да има проблеми в работата на плъгина под която и да е версия на SM.
CS:GO я има но-стийм, но няма да ми тръгне на лаптопа.. То CS Source едвам върви камоли пък CS:GO..
CS2 е ясно - още не може да се подкара SM на нея.. Когато подкарат всичко надявам се да имам вече по-нов лаптоп и да мога да си тествам на воля
Ай наздраве, пък каквото стане