[Мануал]Бан по дням(Orio[N])

Description: Уроки по скриптингу
Moderator: SJplayer

May
Topic author, Ефрейтор
Ефрейтор
Avatar
May
Topic author, Ефрейтор
Ефрейтор
Posts: 22
Joined: 8 May 2013
With us: 11 years 6 months

#1by May » 8 May 2013, 17:58

Привет всем, видел просили сделать бан с авторазбаном по дням, решил выложить. Примерно как на O[N].
//************************************************** ***\\
Добавим дефайны для удобства!

Code: Select all

#define send SendClientMessage   


В OnPlayerConnect:

Code: Select all

new PlayerIP[16]; 
    
GetPlayerIp(playeridPlayerIPsizeof(PlayerIP)); 
    new 
UnBanTime CheckTimeBanListPlayerIP ); 
    if(
UnBanTime-GetTimeStamp() > 0
    { 
        new 
ubDayubHourubMinubSecubMSec
        
timeconvert((UnBanTime-GetTimeStamp())*1000,ubMin,ubSec,ubMSec); 
        
ubHour ubMin/60
        
ubMin ubMin%60
        
ubDay ubHour/24
        
ubHour ubHour%24
        new 
UnBanTimeStr[256]; 
        
format(UnBanTimeStrsizeof(UnBanTimeStr), "FS: Вы забанены, осталось %d дней %d часов %d минут и %d секунд."ubDayubHourubMinubSec); 
        
send(playeridCOLOR_LIGHTREDUnBanTimeStr); 
        
Kick(playerid); 
        
TogglePlayerControllable(playerid0);   


Добавим стоки в конец мода

Code: Select all

stock BanLog(string[]) 

    new 
entry[256]; 
    
format(entrysizeof(entry), "%s\n",string); 
    new 
File:hFile
    
hFile fopen("[logs]/ban.log"io_append); 
    
fwrite(hFileentry); 
    
fclose(hFile); 

stock AddBan(playerplayerid[], giveplayerid[], type 1chislo 0reason[]) 

    new 
totalban 0
    switch(
type
    { 
    case 
1totalban 60*chislo// минуты 
    
case 2totalban 3600*chislo// часы 
    
case 3totalban 86400*chislo// сутки 
    
default: totalban chislo// секунды 
    

    new 
string[64]; 
    
format(stringsizeof(string), "banlist/%s.ini"playerid); 
    new 
OpenBan ini_createFile(string); 
    if(
OpenBan 0ini_openFile(string); 
    
ini_setInteger(OpenBan"BanTime"gettime()); 
    
ini_setInteger(OpenBan"UnBanTime"gettime()+totalban); 
    
ini_setString(OpenBan"PlayerBan"giveplayerid); 
    
ini_setString(OpenBan"Reason"reason); 
    
ini_closeFile(OpenBan); // Закрываем файл. 
    
return Kick(player); 

stock UnBan(playerid[]) 

    new 
string[64]; 
    
format(stringsizeof(string), "banlist/%s.ini"playerid); 
    return 
fremove(string); 

CheckTimeBanList(ip[16]) 

    if(!
fexist("Logs/TimeBanList.txt")) return false
    new 
File:file fopen("Logs/TimeBanList.txt"io_read); 
    new 
TempStr[256]; 
    new 
colon
    new 
currentIP[16]; 
    new 
unbantime
    while( 
fread(fileTempStrsizeof(TempStr)) ){ 
        for(new 
i=0;i<strlen(TempStr);i++){ 
            if(
TempStr[i] == ':'){ 
                
colon i
                break; 
            } 
        } 
        
strmid(currentIPTempStr0colonsizeof(currentIP)); 
        
strmid(TempStrTempStrcolon+1strlen(TempStr), sizeof(TempStr)); 
        
unbantime strval(TempStr); 
        if( 
strcmp(ipcurrentIPtrue) == && strlen(ip) == strlen(currentIP) ){ 
            
fclose(file); 
            if(
unbantime-GetTimeStamp() <= 0){ 
                
DeleteFromTimeBanList(currentIP); 
            } 
            return 
unbantime
        } 
    } 
    
fclose(file); 
    return 
false

DeleteFromTimeBanList(ip[16]) 

    if(!
fexist("Logs/TimeBanList.txt")) return; 
    new 
File:file fopen("Logs/TimeBanList.txt"io_read); 
    new 
File:tempFile fopen("Logs/temp_TimeBanList.temp"io_append); 
    new 
TempStr[256]; 
    new 
colon
    new 
currentIP[16]; 
    while( 
fread(fileTempStrsizeof(TempStr)) ){ 
        for(new 
i=0;i<strlen(TempStr);i++){ 
            if(
TempStr[i] == ':'){ 
                
colon i
                break; 
            } 
        } 
        
strmid(currentIPTempStr0colonsizeof(currentIP)); 
        if( !(
strcmp(ipcurrentIPtrue) == && strlen(ip) == strlen(currentIP)) ){ 
            
fwrite(tempFileTempStr); 
        } 
    } 
    
fclose(file); 
    
fclose(tempFile); 
    
fremove("Logs/TimeBanList.txt"); 
    
file fopen("Logs/TimeBanList.txt"io_append); 
    
tempFile fopen("Logs/temp_TimeBanList.temp"io_read); 
    while( 
fread(tempFileTempStrsizeof(TempStr)) ){ 
        
fwrite(fileTempStr); 
    } 
    
fclose(file); 
    
fclose(tempFile); 
    
fremove("Logs/temp_TimeBanList.temp"); 
}   


Теперь добавим команды в public OnPlayerCommandText

Code: Select all

    if(strcmp(cmd"/ban"true) == 0
    { 
        if(
PlayerInfo[playerid][pAdmin] >= 1
        { 
            
tmp strtok(cmdtextidx); 
            if(!
strlen(tmp)) return send(playerid0xFFFFFFFF"Furious: /ban [playerid] [число] [причина]"); 
            
giveplayerid strval(tmp); 
            
tmp strtok(cmdtextidx); 
             if(!
strlen(tmp)) return send(playerid0xFFFFFFFF"Furious: /ban [playerid] [число] [причина]"); 
            new 
chislo strval(tmp); 
            if(!
IsPlayerConnected(giveplayerid)) return send(playeridCOLOR_WHITE,"Этот игрок не в игре!"); 
            if(
giveplayerid != INVALID_PLAYER_ID
            { 
                new 
length strlen(cmdtext); 
                while ((
idx length) && (cmdtext[idx] <= ' ')) idx++; 
                new 
offset idx
                new 
result[64]; 
                while ((
idx length) && ((idx offset) < (sizeof(result) - 1))) 
                { 
                    
result[idx offset] = cmdtext[idx]; 
                    
idx++; 
                } 
                
result[idx offset] = EOS
                if(!
strlen(result)) return send(playeridCOLOR_WHITE"Furious: {ffdb58}/ban [playerid] [число] [причина]"); 
                if(
strval(tmp) < || strval(tmp) > 365) return send(playeridCOLOR_GREY"Количество дней бана игрока,должно быть от 1 до 365."); 
                if(
PlayerInfo[giveplayerid][pAdmin] == 6
                { 
                       
send(playeridCOLOR_WHITE"Furious:{F42D2D} Этого игрока нельзя забанить!"); 
                    return 
true
                } 
                new 
PlayerNick[MAX_PLAYER_NAME], PlayerBan[MAX_PLAYER_NAME]; 
                new 
ip[15]; 
                
GetPlayerIp(giveplayerid,ip,15); 
                
GetPlayerName(playeridPlayerNickMAX_PLAYER_NAME); 
                
GetPlayerName(giveplayeridPlayerBanMAX_PLAYER_NAME); 
                new 
arank[64]; 
                if(
PlayerInfo[playerid][pAdmin] == 6) { arank "Гл. Администратором"; } 
                 else if(
PlayerInfo[playerid][pAdmin] == 5) { arank "Гл. Модератором"; } 
                else if(
PlayerInfo[playerid][pAdmin] == 4) { arank "Модератором"; } 
                else if(
PlayerInfo[playerid][pAdmin] == 3) { arank "Модератором"; } 
                else if(
PlayerInfo[playerid][pAdmin] == 2) { arank "Модератором"; } 
                else if(
PlayerInfo[playerid][pAdmin] == 1) { arank "Модератором"; } 
                else { 
arank "Модератор"; } 
                
format(stringsizeof(string), "Furious: %s был(а) забанен(а) %s %s.(Дней: %d). Причина: %s"PlayerBan,arank,PlayerNick,chislo,(result)); 
                
sendAll(COLOR_LIGHTREDstring); 
                new 
yearmonth,day
                
getdate(yearmonthday); 
                new 
coordsstring3[512]; 
                 new 
msg3[] = "{ffdb58}__________________________________\n\n{ffdb58}Вас забанил:{ffffff} %s\n{ffdb58}Кол-во дней:{ffffff} %d\n{ffdb58}Дата бана: {FFFFFF}%d.%d.%d\n{ffdb58}Причина: {FFFFFF}%s\n\n{FFFFFF}Подробнее на сайте: {ffdb58}Furious.Ru"
                
format(coordsstring3sizeof coordsstring3msg3PlayerNick,chislo,day,month,year,(result)); 
                
SPD(giveplayerid,82,DIALOG_STYLE_MSGBOX,"Вы были забанены",coordsstring3,"Закрыть",""); 
                 
WriteLog(string,"ban.cfg"); 
                
PlayerInfo[giveplayerid][pBlockeds] += 1
                
OnPlayerSave(giveplayerid); 
                
GetPlayerIp(giveplayerid,ip,sizeof(ip)); 
                
AddBan(giveplayeridPlayerBanPlayerNick3chisloresult); 
                
format(string,sizeof(string),"banip %s",ip); 
                
SendRconCommand(string); 
                
SendRconCommand("reloadbans"); 
                  return 
true
            } 
           } 
           return 
true
    } 
    if(
strcmp(cmd,"/unban",true)==0
    { 
         if(
PlayerInfo[playerid][pAdmin] >= 4
         { 
             
tmp strtok(cmdtext,idx); 
             if(!
strlen(tmp)) return send(playerid,COLOR_WHITE,"Furious: /unban [players nick]"); 
            new 
adminname[32]; 
            
GetPlayerName(playeridadminnamesizeof(adminname)); 
              
format(stringsizeof(string), "[Admin]: %s был(а) разбанен(а). Разбанил: %s.",tmpadminname); 
            
ABroadCast(COLOR_REDstring1); 
               
format(stringsizeof(string), "Аккаунт %s был успешно разбанен!",tmp); 
            
send(playeridCOLOR_GREENstring); 
               
UnBan(tmp); 
         } 
         return 
true
    }   


Return to “Уроки”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest