xstage
🏹
- Сообщения
- 727
- Реакции
- 756
Ему нужен steamid, sourcequery такого не дастА в чём глубокий смысл? Ведь после выхода игрока информация записанная будет удалена
Смотреть онлайн сервера можно же и более простым путём, на пример как мониторинги
Ему нужен steamid, sourcequery такого не дастА в чём глубокий смысл? Ведь после выхода игрока информация записанная будет удалена
Смотреть онлайн сервера можно же и более простым путём, на пример как мониторинги
Статус через ркон запросить?Ему нужен steamid, sourcequery такого не даст
Через статус мароки, с парсом выводящей инфы, слишком много по моему.Статус через ркон запросить?
Прописываешь 2 двух местах в таком случае параллельно либо новый запрос, либо в текущие добавляешь свой текстЧерез статус мароки, с парсом выводящей инфы, слишком много по моему.
А к плагину можно тот же инклюд lvl подключить и в бд кидать например данные за сессию для мониторинга.
Я немного не понял суть твоего сообщения и что ты имеешь в видуПрописываешь 2 двух местах в таком случае параллельно либо новый запрос, либо в текущие добавляешь свой текст
Если используешь lvl, можно отредачить просто запросы в исходнике database.spЯ немного не понял суть твоего сообщения и что ты имеешь в виду![]()
Так мне нужно в другую бд инфу кидать для монитора данных. По мне так, зачем я буду базу лвл`а трогать под этот плагин?Если используешь lvl, можно отредачить просто запросы в исходнике database.sp
А почему бы не потрогать, когда нужные данные уже готовы и нужно просто их взять с базы?Так мне нужно в другую бд инфу кидать для монитора данных. По мне так, зачем я буду базу лвл`а трогать под этот плагин?
По сути, как я описал выше: мне просто нужно вывести данные по игрокам которые находятся в данные момент онлайн. При выходе - дропать их запись из базы. Чтобы можно было массив перебрать и например, вывести уровень, время, киллов и т.п за сессию в мониторингА почему бы не потрогать, когда нужные данные уже готовы и нужно просто их взять с базы?
По сути, как я описал выше: мне просто нужно вывести данные по игрокам которые находятся в данные момент онлайн. При выходе - дропать их запись из базы. Чтобы можно было массив перебрать и например, вывести уровень, время, киллов и т.п за сессию в мониторинг
#define TABLENAME "client_data"
Database db;
public void OnPluginStart()
{
Database.Connect(SQLConnect, "session_data");
}
public void OnClientConnected(int client)
{
AddClientToDb(client);
}
public void OnClientDisconnect(int client)
{
RemoveClientFromDb(client);
}
public void SQLConnect(Database hdb, const char[] error, any data)
{
if(hdb == INVALID_HANDLE || error[0])
{
SetFailState("ERROR CONNECT TO DB: %s", error);
return;
}
db = hdb;
CreateTable();
}
void CreateTable()
{
char sQuery[256];
SQL_FormatQuery(db, sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `%s` (\
`id` AUTO_INCREMENT, \
`auth` VARCHAR(22) NOT NULL, \
`connect_time` TIMESTAMP)", TABLENAME);
db.Query(SQLCreateTableCallBack, sQuery, _, DBPrio_High);
}
void AddClientToDb(int client)
{
char sQuery[256], sAuth[22];
GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth));
//char sTime[32];
//FormatTime(sTime, sizeof(sTime), "%F %X", GetTime());
SQL_FormatQuery(db, sQuery, sizeof(sQuery), "INSERT INTO `%s` (\
`auth`, \
`connect_time`) VALUES ('%s', CURRENT_TIMESTAMP)", TABLENAME, sAuth);
db.Query(SQLAddToDBCallBack, sQuery, _, DBPrio_High);
}
void RemoveClientFromDb(int client)
{
char sQuery[256], sAuth[22];
GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth));
SQL_FormatQuery(db, sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE `auth`='%s'"TABLENAME, sAuth);
db.Query(RemoveFromDBCallBack, sQuery, _, DBPrio_High);
}
public void SQLCreateTableCallBack(Database hdb, DBResultSet results, const char[] error, any data)
{
if(error[0] || db == INVALID_HANDLE)
{
SetFailState("ERROR CREATE TABLE: %s", error);
return;
}
}
public void SQLAddToDBCallBack(Database hdb, DBResultSet results, const char[] error, any data)
{
if(error[0] || db == INVALID_HANDLE)
{
SetFailState("ERROR ADD CLIENT: %s", error);
return;
}
}
public void RemoveFromDBCallBack(Database hdb, DBResultSet results, const char[] error, any data)
{
if(error[0] || db == INVALID_HANDLE)
{
SetFailState("ERROR REMOVE CLIENT: %s", error);
return;
}
}
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <cstrike>
public OnPluginStart()
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i))
OnClientPutInServer(i); // На случай если плагин был перезагружен
}
}
public OnClientPutInServer(client) // Хуки
{
SDKHook(client, SDKHook_WeaponEquipPost, OnWeaponEquipPost); // подбирает любое оружие
}
public OnWeaponEquipPost(client, weapon) // Хук Подбора
{
char classnameweapon[64];
GetEntityClassname(weapon, classnameweapon, sizeof classnameweapon)
AcceptEntityInput(weapon, "kill")
GivePlayerItem(client, classnameweapon)
}
Может это поможет:Доброго времени суток.
Нужно сделать, когда игрок подбирал оружие, оружие удалялась и выдавалась заново.
Для чего? На некоторых картах разбросано оружие, но на него не действует скинченджер. Таким костылём, можно выдать оружие со скином.
В итоге, бесконечный цикл, с выдачей оружия и его удаления. У кого какие идеи, как это можно сделать? Может запоминать используемые weapon.
+при старте раунда, выдаётся нож и т.д. и они тоже вызывают этот бесконечный цикл.
DEL weapon:#include <sourcemod> #include <sdktools> #include <sdkhooks> #include <cstrike> public OnPluginStart() { for (new i = 1; i <= MaxClients; i++) { if (IsClientInGame(i)) OnClientPutInServer(i); // На случай если плагин был перезагружен } } public OnClientPutInServer(client) // Хуки { SDKHook(client, SDKHook_WeaponEquipPost, OnWeaponEquipPost); // подбирает любое оружие } public OnWeaponEquipPost(client, weapon) // Хук Подбора { char classnameweapon[64]; GetEntityClassname(weapon, classnameweapon, sizeof classnameweapon) AcceptEntityInput(weapon, "kill") GivePlayerItem(client, classnameweapon) }
м/б всё дело, что это SDKHook_WeaponEquipPost?В итоге, бесконечный цикл, с выдачей оружия и его удаления. У кого какие идеи, как это можно сделать?
#include <sdkhooks>
bool bChanged[MAXPLAYERS+1];
public void OnPluginStart()
{
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) OnClientPutInServer(i);
}
public void OnClientPutInServer(int client) // Хуки
{
if(IsFakeClient(client)) return;
bChanged[client] = false;
SDKHook(client, SDKHook_WeaponEquipPost, OnWeaponEquipPost);
}
public void OnWeaponEquipPost(int client, int weapon) // Хук Подбора
{
if(!(bChanged[client] = !bChanged[client])) return;
static char cls[32];
GetEntityClassname(weapon, cls, sizeof cls)
AcceptEntityInput(weapon, "Kill")
GivePlayerItem(client, cls)
}
Теперь просто через раз работает.Вот так, например:
ХмммОружие с карты можно определять следующим образом если weapon_* имеет hammerid>0, то это оружие с карты. Если не критично можно стриппером просто всë оружие на карте удалять глобальным фильтром
Для получения hammerid:Хммм
Есть примеры, как можно использовать, через что хукать.
int GetEntProp(entity, Prop_Data, "m_iHammerID");
public void OnEntityCreated(int iEntity, const char[] sClassname)
public void OnClientPutInServer(int iClient)
{
SDKHook(iClient, SDKHook_WeaponEquipPost, OnWeaponEquip);
SDKHook(iClient, SDKHook_WeaponCanUse, OnWeaponCanUse);
//...
}
public Action OnWeaponCanUse(int iClient, int iWeapon)
public void OnWeaponEquip(int iClient, int iWeapon)
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NUL' at line 1 SQL_FormatQuery(db, sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `%s` (\
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\
`auth` varchar(32) NOT NULL,\
`name` varchar(64) NOT NULL,\
`rank` int(11) unsigned NOT NULL,\
`kills` int(11) NOT NULL,\
`death` int(11) NOT NULL,\
`hs` int(11) unsigned NOT NULL,\
`connect_time` datetime unsigned NULL) ENGINE InnoDBDEFAULT CHARSET utf8;", TABLENAME);
у тебя id - AUTO_INCREMENTПомогите устоканить sql запрос, а то он вредный.. Если строку с `hs` убирать, то все работает, а так выдает ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NUL' at line 1
C#:SQL_FormatQuery(db, sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `%s` (\ `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\ `auth` varchar(32) NOT NULL,\ `name` varchar(64) NOT NULL,\ `rank` int(11) unsigned NOT NULL,\ `kills` int(11) NOT NULL,\ `death` int(11) NOT NULL,\ `hs` int(11) unsigned NOT NULL,\ `connect_time` datetime unsigned NULL) ENGINE InnoDBDEFAULT CHARSET utf8;", TABLENAME);
Видимо учусь на своих же ошибках) Без этого он выдает ошибку:у тебя id - AUTO_INCREMENT
зачем ты ему ставишь int not null?
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AUTO_INCREMENT,`auth` varchar(22) NOT NULL,`name` varchar(64) NOT NULL,`rank` in' at line 1Видимо учусь на своих же ошибках) Без этого он выдает ошибку:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AUTO_INCREMENT,`auth` varchar(22) NOT NULL,`name` varchar(64) NOT NULL,`rank` in' at line 1
SQL_FormatQuery(db, sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `%s` (\
`id` PRIMARY KEY AUTO_INCREMENT,\
`auth` varchar(22) NOT NULL,\
`name` varchar(256) NOT NULL,\
`rank` integer(11) unsigned NOT NULL,\
`kills` integer(11) NOT NULL,\
`death` integer(11) NOT NULL,\
`hs` integer(11) NOT NULL,\
`connect_time` timestamp) ENGINE InnoDBDEFAULT CHARSET utf8;", TABLENAME);