Обучение и помощь по скриптингу для MIRDOBRO777

Сообщения
113
Реакции
26
Pokemoshka,
не вижу вообщще ничего
fantom,
все получилось с изменением счета. Только вот когда делаю рестарт раунда, то счет по "0".
Отлавливаю только начало раунда:
RegisterHookChain(RG_CSGameRules_RestartRound, "on_restart_round_post", .post = true);
А какой функцией отлавливать рестарты?
И второй вопрос, что спрашивал выше, а можно еще изменить названия команд в таблице счета?
 
Сообщения
59
Реакции
28
Помог
1 раз(а)
MIRDOBRO777, рестарт отлавливается глобальным параметром m_bCompleteReset в функции рестарта раунда
 
  • Нравится
Реакции: Ayk
Сообщения
113
Реакции
26
Здравствуйте, ребята!
Снова несколько вопросов появилось:
1. Не могу понять, как правильно получить данные из следующего натива:
native get_sestats_read_stime(CSXSQL_SESTATS:sestats_array,index)
2. Как определить, что игрок находится в воздуххе?
 
Последнее редактирование:
Сообщения
113
Реакции
26
Ребята, привет!
Подскажите, пожалуйста, а возможно определить id открытого меню?
Мне просто нужно закрывать не любое открытое меню из других плагинов и не у всех, а конкретно проводить проверку на открытое меню из плагина.
Например, у игрока 1 открыта админка и он живой, а у игроков 2, 3 и 4 открыто меню ставок и они мертвы.
Мне надо проводить проверку на открытое меню ставок и закрывать только его у нужных игроков.
Вот так регистрирую меню:
register_menu("BetMenu", 1023, "BetMenu_handler");
Вот проверка на открытие меню:
if(player_menu_info(id, iMenu, iMenuNew))
Как подставлять нужные id меню по старому и новому коду самих менюшек?
 
Сообщения
113
Реакции
26
Привет всем!
Решил изучать SQLite и как всегда что-то пошло не так...
Есть хорошие мануалы по SQLite с примерами и пояснениями к ним?
На данный момент столкнулся с проблемой создания таблицы.
Код:
 SQL_SetCharset(sql, "utf8");
 // запрос на создание таблицы
 new szQuery[MAX_FMT_LENGTH];
 formatex(szQuery, charsmax(szQuery), "CREATE TABLE IF NOT EXISTS `%s` (\
 id INT(11) NOT NULL AUTO_INCREMENT,\
 nick VARCHAR(32) NOT NULL,\
 steamid VARCHAR(32) NOT NULL,\
 death INT(11) NOT NULL,\
 PRIMARY KEY (`id`))", table_name);
 SQL_ThreadQuery(sql, "Sql_Handler", szQuery);
Не создает таблицу, а в логах следующая ошибка:
Error #1; near "AUTO_INCREMENT": syntax error
 
Сообщения
113
Реакции
26
Доброго времени!
Продолжаю изучать SQLite, но не могу понять где ошибка зарыта, т.к. для меня это совершенно новое.
Подскажите, пожалуйста, в чем причина ошибок и, соответственно, почему не заносит записи в таблицу?
Не ругайтесь на отступы в коде.
Код:
#include <amxmodx>
#include <reapi>
#include <sqlx>
#define VERSION "1.0"
new const db_name[] = "hns_x"
new const table_name[] = "save_players"
#define mp MAX_PLAYERS + 1
new Handle:sql, g_szSteamID[mp][MAX_AUTHID_LENGTH];
new g_iKills[mp], g_iDeaths[mp];
enum _:TOTAL_SQL_TYPES {
SQL_TYPE_LOAD,
SQL_TYPE_IGNORE
};
public plugin_init() {
register_plugin("HnS X", VERSION, "MIRDOBRO");
// register_clcmd("say /s", "Test");
RegisterHookChain(RG_CBasePlayer_Killed, "on_player_killed_post", .post = true);
}
public OnConfigsExecuted() {
SQL_SetAffinity("sqlite");
sql = SQL_MakeDbTuple("", "", "", db_name); // Создание картежа данных для соединения с БД
 SQL_SetCharset(sql, "utf8");
// запрос на создание таблицы
new szQuery[MAX_FMT_LENGTH], szData[1] = SQL_TYPE_IGNORE;
formatex(szQuery, charsmax(szQuery), "CREATE TABLE IF NOT EXISTS `%s` (\
`nick` TEXT NOT NULL,\
`steamid` TEXT NOT NULL,\
`kills` INTEGER NOT NULL DEFAULT 0,\
`deaths` INTEGER NOT NULL DEFAULT 0,\
PRIMARY KEY (steamid))", table_name);
SQL_ThreadQuery(sql, "Sql_Handler", szQuery, szData, sizeof szData);
}
public client_putinserver(id) {
 if(is_user_bot(id) || is_user_hltv(id)) return;
 get_user_authid(id, g_szSteamID[id], charsmax(g_szSteamID));
LoadData(id);
}
public on_player_killed_post(iVictim, iAttacker) {
if(iVictim != iAttacker) {
g_iKills[iAttacker]++;
g_iDeaths[iVictim]++;
UpdateData(iVictim);
}
}
public LoadData(id) {
new szQuery[MAX_FMT_LENGTH], szData[2];
szData[0] = SQL_TYPE_LOAD;
szData[1] = id;

formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `steamid` = '%s'", table_name, g_szSteamID[id]);
SQL_ThreadQuery(sql, "Sql_Handler", szQuery, szData, sizeof szData);
}
public UpdateData(id) {
new szQuery[MAX_FMT_LENGTH], szData[1] = SQL_TYPE_IGNORE;
formatex(szQuery, charsmax(szQuery),"\
UPDATE `%s` SET\
`kills` = '%d',\
`deaths` = '%d',\
WHERE `steamid` = '%s'\
", table_name, g_iKills[id], g_iDeaths[id], g_szSteamID[id]);
SQL_ThreadQuery(sql, "Sql_Handler", szQuery, szData, sizeof szData);
}
public Sql_Handler(iFailState, Handle:Query, szError[], iErrNum, szData[], size, Float:flQueryTime) {
switch(iFailState) {
case TQUERY_CONNECT_FAILED: {
log_to_file("fail_sql.txt" , "^nConnection failed^nError: #%d^n%s^n", iErrNum, szError);
return;
}
case TQUERY_QUERY_FAILED: {
log_to_file("fail_sql.txt" , "^nQuery failed^nError: #%d^n%s^n", iErrNum, szError);
new szLastQuery[96];
SQL_GetQueryString(sql, szLastQuery, charsmax(szLastQuery));
log_to_file("fail_sql.txt" , "Last Query: %s^n", szLastQuery);
return;
}
}

new iDataType = szData[0];
switch(iDataType) {
case SQL_TYPE_LOAD: {
new id = szData[1];
if(!is_user_connected(id)) return;
if(!SQL_NumResults(sql)) {
new szName[32]; get_user_info(id, "name", szName, charsmax(szName));
 mysql_escape_string(szName, charsmax(szName));
 new szQuery[MAX_FMT_LENGTH], szData[1] = SQL_TYPE_IGNORE;
formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`nick`, `steamid`, `kills`, `deaths`)\
VALUES ('%s', '%s', '%d', '%d')\
", table_name, szName, g_szSteamID[id], g_iKills[id], g_iDeaths[id]);
SQL_ThreadQuery(sql, "Sql_Handler", szQuery, szData, sizeof szData);
} else {
g_iKills[id] = SQL_ReadResult(sql, SQL_FieldNameToNum(sql, "kills"));
g_iDeaths[id] = SQL_ReadResult(sql, SQL_FieldNameToNum(sql, "deaths"));
}
log_to_file("db_sql.txt" , "^nKills: %d^nDeaths: %d^n", g_iKills[id], g_iDeaths[id]);
}
}
}
mysql_escape_string(dest[],len) {
replace_all(dest,len,"\\","\\\\");
replace_all(dest,len,"\0","\\0");
replace_all(dest,len,"\n","\\n");
replace_all(dest,len,"\r","\\r");
replace_all(dest,len,"\x1a","\Z");
replace_all(dest,len,"'","''");
replace_all(dest,len,"^"","^"^"");
}
L 05/03/2020 - 23:30:09: [SQLITE] Invalid query handle: 1
L 05/03/2020 - 23:30:09: [AMXX] Displaying debug trace (plugin "s.amxx", version "1.0")
L 05/03/2020 - 23:30:09: [AMXX] Run time error 10: native error (native "SQL_GetQueryString")
L 05/03/2020 - 23:30:09: [AMXX] [0] s.sma::Sql_Handler (line 85)
==================
L 05/03/2020 - 23:30:09:
Query failed
Error: #1
near "WHERE": syntax error
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
MIRDOBRO777, для SQL_GetQueryString нужен query handler, а не tuple. Приходит он в callback sql запроса Handle:Query вторым аргументом.
 

wellasgood

Кидала, мошенник, вымогатель
Сообщения
1,409
Реакции
182
Помог
2 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
MIRDOBRO777, а что код без форматирования? такой читать не оч приятно
4 Май 2020
Табуляцию или пробелы..

Пользуйся хотя бы вот этим перед отправкой https://dev-cs.ru/resources/476/
 
Сообщения
113
Реакции
26
fantom,
Спасибо! Проверил по коду где неправильно и все заработало.
Вот только при подсоединении на сервер следующая ошибка:
L 05/04/2020 - 23:59:26: [MySQL] Invalid info tuple handle: 0
L 05/04/2020 - 23:59:26: [AMXX] Displaying debug trace (plugin "s.amxx", version "1.0")
L 05/04/2020 - 23:59:26: [AMXX] Run time error 10: native error (native "SQL_ThreadQuery")
L 05/04/2020 - 23:59:26: [AMXX] [0] s.sma::LoadData (line 62)
L 05/04/2020 - 23:59:26: [AMXX] [1] s.sma::client_putinserver (line 45)
Данная ошибка появляется после смены карты. Как я понял, то плагин не успевает определить какой использовать модуль (MySQL или SQLite) и поэтому не загружает данные игрока.
Правильно я понимаю и как это исправить? Можно сделать через таск задержку на запрос в БД или есть другой способ?
5 Май 2020
MIRDOBRO777, а что код без форматирования? такой читать не оч приятно
4 Май 2020
Табуляцию или пробелы..
Пользуйся хотя бы вот этим перед отправкой https://dev-cs.ru/resources/476/
Я понимаю, что визуально код нечитаем, но я то по коду перемещаюсь на слух диктора и при помощи стрелок.
Мне большие отступы и фигурные скобки на новой строке неудобны и перемещение тогда увеличивается, как между строк, так и вначале каждой строки.
Сохраню ссылку, что Вы мне посоветовали и перед отправкой буду пробовать форматировать код.
 

wellasgood

Кидала, мошенник, вымогатель
Сообщения
1,409
Реакции
182
Помог
2 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
MIRDOBRO777, ну ты извини, я просто недоконца понял что у тебя за проблемы, тогда ладно.

Сохраню ссылку, что Вы мне посоветовали и перед отправкой буду пробовать форматировать код.
ОК, да, попробуй хотя бы, там просто делаешь и оно сразу из не читаемого превращается в читаемый.
 
Сообщения
289
Реакции
251
Помог
7 раз(а)
wellasgood, что тебе мешает прогнать его код через утилиту и прочитать код?
 

wellasgood

Кидала, мошенник, вымогатель
Сообщения
1,409
Реакции
182
Помог
2 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Jumper, я никого не заставляю, это его выбор, делать так или делать по другому.
5 Май 2020
wellasgood, что тебе мешает прогнать его код через утилиту и прочитать код?
Так то можно конечно. В таком случае я не против.

MIRDOBRO777 , впринципе можешь писать как тебе удобнее, не слушай меня дурака.. Мои замечания не совсем уместны.

Я могу и сам прогнать через эту прогу
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу