Команда /ban и /warn
|
|
Accardo |
Дата: Понедельник, 11.04.2016, 18:04 | Сообщение # 1
|
Новичок
Сообщений: 22
Статус: Offline
|
Всем привет, столкнулся с такой проблемой, команда /ban не банит игрока, а тупо его кикает.Вот сам код:
Код if(!strcmp(cmd,"/ban",true)) { if(pData[playerid][pAdmin] < 4) return 1; tmp = strtok(cmdtext, idx); if(!strlen(tmp) || !isNumeric(tmp)) return SendClientMessage(playerid,CGRAY,"/ban [ID игрока] [Кол-во дней] [Причина]"); new id = strval(tmp); if(!IsPlayerConnected(id) || IsKicked(id)) return SendClientMessage(playerid,CGRAY,"Неверный ID"); if(!pData[id][pMysqlID]) { NewKick(id); return SendClientMessage(playerid,CGRAY,"Данный игрок был в окне авторизации и поэтому был кикнут"); } tmp = strtok(cmdtext, idx); if(!strlen(tmp) || !isNumeric(tmp)) return SendClientMessage(playerid,CGRAY,"/ban [ID èãðîêà] [Ê-âî äíåé] [Ïðè÷èíà]"); new time = strval(tmp); if(time < 1 || time > 30 && pData[playerid][pAdmin] < 5) return SendClientMessage(playerid,CGRAY,"Не верное кол-во дней"); if(time < 0 || time > 30 && pData[playerid][pAdmin] >= 5) return SendClientMessage(playerid,CGRAY,"Не верное кол-во дней"); tmp = strrest(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid,CGRAY,"/ban [ID игрока] [Кол-во дней] [Причина]"); new mes[128]; ServerBan(playerid,id,time,tmp); format(mes,sizeof(mes),"Администратор %s забанил игрока %s на %d дней. Причина: %s",pData[playerid][pNickname],pData[id][pNickname],time,tmp); SendClientMessageToAll(COLOR_LIGHTRED,mes); NewKick(id); }
А теперь /warn, он как бы варнит игрока, но при 3\3 не банит.
Код if(!strcmp(cmd,"/warn",true)) { if(pData[playerid][pAdmin] < 4) return 1; tmp = strtok(cmdtext, idx); if(!strlen(tmp) || !isNumeric(tmp)) return SendClientMessage(playerid,CGRAY,"/warn [ID игрока] [Причина]"); new id = strval(tmp); if(!IsPlayerConnected(id) || IsKicked(id)) return SendClientMessage(playerid,CGRAY,"Неверный ID"); if(!pData[id][pMysqlID]) return SendClientMessage(playerid,CGRAY,"Данный игрок не авторизирован"); tmp = strrest(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid,CGRAY,"/warn [ID игрока] [Причина]"); new mes[128]; format(mes,sizeof(mes),"/aunfjihaosj %d",id); OnPlayerCommandText(playerid,mes); new kol = pData[id][pWarnc]+1; if(kol < 3) format(mes,sizeof(mes),"Администратор %s выдал предупреждение игроку %s [%d/3]. Причина: %s",pData[playerid][pNickname],pData[id][pNickname],kol,tmp); if(kol-1 > 0) pData[id][pWarn] += WARN_TIME; else pData[id][pWarn] = gCurDay + WARN_TIME; pData[id][pWarnc] = kol; UpdatePlayerData(id,"warn",pData[id][pWarn]); UpdatePlayerData(id,"warnc",pData[id][pWarnc]); if(kol == 3) { pData[id][pWarn] = 0; pData[id][pWarnc] = 0; UpdatePlayerData(id,"warn",pData[id][pWarn]); UpdatePlayerData(id,"warnc",pData[id][pWarnc]); format(mes,sizeof(mes),"Администратор %s забанил игрока %s (3 Предупреждения). Причина: %s",pData[playerid][pNickname],pData[id][pNickname],tmp); ServerBan(playerid,id,5,tmp); } SendClientMessageToAll(COLOR_LIGHTRED,mes); NewKick(id); }
Stock CheckPlayerBan
Код stock CheckPlayerBan(playerid) { new query[128], time_unban, time_ban, reason[100], result[64]; format(query, 128, "SELECT `time`, `reason` FROM `ban` WHERE `takeid` = '%d'",playerid); new Result:ban_data = sql_query(dbserv, query, QUERY_CACHED); if(sql_num_rows(ban_data)) { sql_fetch_row(ban_data,"|",result); sscanf(result,"p<|>is[100]",time_ban,reason); time_unban = time_ban - gCurDay; if(time_ban <= 0) { format(query,sizeof(query),"DELETE FROM `ban` WHERE `takeid` = '%d'",playerid); sql_query(dbserv,query); } else { new string[300]; if(time_ban == -1) format(string,sizeof(string),"{"#cW"}Причина блокировки: %s\n\nВведите {"#cBRIGHTRED"}/q (/quit) {"#cW"}чтобы выйти.",reason); else format(string,sizeof(string),"{"#cW"}: %s\nПричина блокировки: %d äíåé\n\nВведите {"#cBRIGHTRED"}/q (/quit) {"#cW"}чтобы выйти.",reason,time_unban); ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"{"#cRE"}Этот аккаунт заблокирован",string,"Закрыть",""); sql_free_result(ban_data); NewKick(playerid); return true; } } return false; }
Сообщение отредактировал Accardo - Понедельник, 11.04.2016, 18:18 |
|
|
|
=) |
Дата: Понедельник, 11.04.2016, 18:19 | Сообщение # 2
|
Боец
Сообщений: 271
Статус: Offline
|
Цитата Accardo ( ) ServerBan(playerid,id,time,tmp); блокировку производит этот сток, а не чекбан.
проверку по варну делай так:
Код if(kol > 2) { ban return 1; } else { warn return 1; }
Скорее всего в обоих вариантах просто не сохраняются параметры в MySQL. Проверяй папку с сервером, уверен там должен быть файл mysql_log.txt подтверждающий мои слова.
|
|
|
|
Accardo |
Дата: Понедельник, 11.04.2016, 18:31 | Сообщение # 3
|
Новичок
Сообщений: 22
Статус: Offline
|
Цитата =) ( ) проверку по варну делай так: Можешь скинуть /warn с такой проверкой, просто времени мало сейчас + я в PAWNO начинающий и легко могу накосячить...
|
|
|
|
=) |
Дата: Понедельник, 11.04.2016, 18:38 | Сообщение # 4
|
Боец
Сообщений: 271
Статус: Offline
|
Accardo, примерно так:
Код if(!strcmp(cmd,"/warn",true)) { if(pData[playerid][pAdmin] < 4) return 1; tmp = strtok(cmdtext, idx); if(!strlen(tmp) || !isNumeric(tmp)) return SendClientMessage(playerid,CGRAY,"/warn [ID игрока] [Причина]"); new id = strval(tmp); if(!IsPlayerConnected(id) || IsKicked(id)) return SendClientMessage(playerid,CGRAY,"Неверный ID"); if(!pData[id][pMysqlID]) return SendClientMessage(playerid,CGRAY,"Данный игрок не авторизирован"); tmp = strrest(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid,CGRAY,"/warn [ID игрока] [Причина]"); new mes[128]; format(mes,sizeof(mes),"/aunfjihaosj %d",id); OnPlayerCommandText(playerid,mes); new kol = pData[id][pWarnc]+1; if(kol < 3) format(mes,sizeof(mes),"Администратор %s выдал предупреждение игроку %s [%d/3]. Причина: %s",pData[playerid][pNickname],pData[id][pNickname],kol,tmp); if(kol-1 > 0) pData[id][pWarn] += WARN_TIME; else pData[id][pWarn] = gCurDay + WARN_TIME; pData[id][pWarnc] = kol; if(kol > 2) { pData[id][pWarn] = 0; pData[id][pWarnc] = 0; UpdatePlayerData(id,"warn",pData[id][pWarn]); UpdatePlayerData(id,"warnc",pData[id][pWarnc]); format(mes,sizeof(mes),"Администратор %s забанил игрока %s (3 Предупреждения). Причина: %s",pData[playerid][pNickname],pData[id][pNickname],tmp); ServerBan(playerid,id,5,tmp); } else { UpdatePlayerData(id,"warn",pData[id][pWarn]); UpdatePlayerData(id,"warnc",pData[id][pWarnc]); } SendClientMessageToAll(COLOR_LIGHTRED,mes); NewKick(id); return 1; }
П.С. Команда просто ужас. Даже страшно подумать, что у тебя за мод. И да, если ошибка с MySQL, как я и писал раньше - то это не поможет, ведь проблема в сохранении.
|
|
|
|
Accardo |
Дата: Понедельник, 11.04.2016, 18:44 | Сообщение # 5
|
Новичок
Сообщений: 22
Статус: Offline
|
Цитата =) ( ) П.С. Команда просто ужас. Даже страшно подумать, что у тебя за мод. И да, если ошибка с MySQL, как я и писал раньше - то это не поможет, ведь проблема в сохранении. А есть какой-то выход из данной ситуации? Вроде все в базе сохраняется, как баню, сразу в таблице появляется строчка.
Сообщение отредактировал Accardo - Понедельник, 11.04.2016, 18:46 |
|
|
|
=) |
Дата: Понедельник, 11.04.2016, 18:55 | Сообщение # 6
|
Боец
Сообщений: 271
Статус: Offline
|
Accardo, Естественно есть. Файл о котором я писал появляется? Кстати, при варне появляется надпись "забанил" когда должен банить по причине 3/3 варнов или вообще ничего не происходит?
Сообщение отредактировал =) - Понедельник, 11.04.2016, 19:04 |
|
|
|
Accardo |
Дата: Понедельник, 11.04.2016, 20:47 | Сообщение # 7
|
Новичок
Сообщений: 22
Статус: Offline
|
Цитата =) ( ) Accardo, Естественно есть. Файл о котором я писал появляется? Кстати, при варне появляется надпись "забанил" когда должен банить по причине 3/3 варнов или вообще ничего не происходит? Все оно пишет, только не банит.
|
|
|
|