/cage and /uncage
#1

sup d00dz, im using luxadmin and they have a /cage (id) (time) command. But i dont want to put a time limit in. I just want to do /cage (id). Then when i want i can do /uncage (id)

And also How can i make it give a reason. Like: ** ADMIN CAGE: Player (1) has been caged - Hacking
here is the script

pawn Код:
dcmd_cage(playerid,params[])
{
    if(AccInfo[playerid][Level] < 4)
    return ErrorMessages(playerid, 5);
   
    new Index;
    new tmp[256];  tmp  = strtok(params, Index);
    new tmp2[256]; tmp2 = strtok(params, Index);
    new player1 = ReturnUser(tmp);
    new time = strval(tmp2);
   
    if(!strlen(tmp)) return
    SendClientMessage(playerid, LIGHTBLUE2, "Usage: /cage [PlayerID] [Time]") &&
    SendClientMessage(playerid, orange, "Function: Will hold player in a Cage by specified Time");
   
    if(IsPlayerConnected(player1) && player1 != INVALID_PLAYER_ID && player1 != playerid && (AccInfo[player1][Level] != ServerInfo[MaxAdminLevel]))
    {

    if(!strlen(tmp2))
    return SendClientMessage(playerid, red, "ERROR: Not specified Time!");
   
    if(time < 10)
    return SendClientMessage(playerid, red, "ERROR: Time must be greater than 10 Seconds!");
   
    if(AccInfo[player1][pCaged] == 1)
    return SendClientMessage(playerid, red, "ERROR: Player is already in Cage!");
   
    new string[128];
    new playername[MAX_PLAYER_NAME];
    new adminname [MAX_PLAYER_NAME];
    SendCommandToAdmins(playerid,"Cage");
    GetPlayerName(player1, playername, sizeof(playername));
    GetPlayerName(playerid, adminname, sizeof(adminname));
    format(string, sizeof(string), "** ADMIN CAGE: %s Has Been Caged", playername);
    SendClientMessageToAll(adminpink, string);
    TogglePlayerControllable(player1, 0);
    AccInfo[player1][pCageTime] = time;
    AccInfo[player1][pCaged] = 1;
    GetPlayerPos(playerid, LPosX[player1], LPosY[player1], LPosZ[player1]);
    SetTimerEx("CagePlayer", 1000, 0, "i", player1);
    SetTimerEx("UnCagePlayer", AccInfo[player1][pCageTime]*1000, 0, "i", player1);
    }
    else return ErrorMessages(playerid, 3);
    return 1;
    }
i know i can take out SetTimerEx but i dont know how to make the /uncage
Reply
#2

Try this out:
pawn Код:
dcmd_cage(playerid,params[])
{
    if(AccInfo[playerid][Level] < 4) return ErrorMessages(playerid, 5);
    new Index;
    new tmp[256];  tmp  = strtok(params, Index);
    new tmp2[256]; tmp2 = strtok(params, Index);
    new player1 = ReturnUser(tmp);
    new reason[128]; reason = strval(tmp2);

    if(!strlen(tmp)) return
    SendClientMessage(playerid, LIGHTBLUE2, "Usage: /cage [PlayerID] [Reason]") &&
    SendClientMessage(playerid, orange, "Function: Will hold player in a Cage by specified Time");
    if(IsPlayerConnected(player1) && player1 != INVALID_PLAYER_ID && player1 != playerid && (AccInfo[player1][Level] != ServerInfo[MaxAdminLevel]))
    {
        if(time < 10) return SendClientMessage(playerid, red, "ERROR: Time must be greater than 10 Seconds!");
        new string[128];
        new playername[MAX_PLAYER_NAME];
        new adminname[MAX_PLAYER_NAME];
        SendCommandToAdmins(playerid,"Cage");
        GetPlayerName(player1, playername, sizeof(playername));
        GetPlayerName(playerid, adminname, sizeof(adminname));
        if(AccInfo[player1][pCaged] == 0)
        {
            if(!reason) return SendClientMessage(playerid, red, "ERROR: You need to give a reason!");
            format(string, sizeof(string), "** ADMIN CAGE: %s Has Been Caged by %s for %s.", playername, adminname, reason);
            SendClientMessageToAll(adminpink, string);
            TogglePlayerControllable(player1, 0);
            AccInfo[player1][pCageTime] = time;
            AccInfo[player1][pCaged] = 1;
            GetPlayerPos(playerid, LPosX[player1], LPosY[player1], LPosZ[player1]);
            SetTimerEx("CagePlayer", 1000, 0, "i", player1);
        }
        else
        {
            format(string, sizeof(string), "** ADMIN CAGE: %s Has been un-caged by %s", playername, adminname);
            SendClientMessageToAll(adminpink, string);
            TogglePlayerControllable(player1, 1);
            AccInfo[player1][pCageTime] = 0;
            AccInfo[player1][pCaged] = 0;
            SetTimerEx("UnCagePlayer", 1000, 0, "i", player1);
        }
    }
    else return ErrorMessages(playerid, 3);
    return 1;
}
Haven't tested it.

If you /cage a player it will cage him, and if you /cage again on him it will uncage him. So you don't need 2 cmds.
Reply
#3

(182 : error 033: array must be indexed (variable "reason")
(1835) : error 017: undefined symbol "time"
(1844) : error 033: array must be indexed (variable "reason")
(184 : error 017: undefined symbol "time"
(4667) : warning 204: symbol is assigned a value that is never used: "playername"[/pawn]
Reply
#4

Ah yeahh forgot.

so you can delete this pvar:
pawn Код:
AccInfo[player1][pCageTime]
pawn Код:
dcmd_cage(playerid,params[])
{
    if(AccInfo[playerid][Level] < 4) return ErrorMessages(playerid, 5);
    new Index;
    new tmp[256];  tmp  = strtok(params, Index);
    new tmp2[256]; tmp2 = strtok(params, Index);
    new player1 = ReturnUser(tmp);
    new reason[128];
    reason = strlen(tmp2);

    if(!strlen(tmp)) return
    SendClientMessage(playerid, LIGHTBLUE2, "Usage: /cage [PlayerID] [Reason]") &&
    SendClientMessage(playerid, orange, "Function: Will hold player in a Cage by specified Time");
    if(IsPlayerConnected(player1) && player1 != INVALID_PLAYER_ID && player1 != playerid && (AccInfo[player1][Level] != ServerInfo[MaxAdminLevel]))
    {
        new string[128];
        new playername[MAX_PLAYER_NAME];
        new adminname[MAX_PLAYER_NAME];
        SendCommandToAdmins(playerid,"Cage");
        GetPlayerName(player1, playername, sizeof(playername));
        GetPlayerName(playerid, adminname, sizeof(adminname));
        if(AccInfo[player1][pCaged] == 0)
        {
            if(!reason) return SendClientMessage(playerid, red, "ERROR: You need to give a reason!");
            format(string, sizeof(string), "** ADMIN CAGE: %s Has Been Caged by %s for %s.", playername, adminname, reason);
            SendClientMessageToAll(adminpink, string);
            TogglePlayerControllable(player1, 0);
            AccInfo[player1][pCaged] = 1;
            GetPlayerPos(playerid, LPosX[player1], LPosY[player1], LPosZ[player1]);
            SetTimerEx("CagePlayer", 1000, 0, "i", player1);
        }
        else
        {
            format(string, sizeof(string), "** ADMIN CAGE: %s Has been un-caged by %s", playername, adminname);
            SendClientMessageToAll(adminpink, string);
            TogglePlayerControllable(player1, 1);
            AccInfo[player1][pCaged] = 0;
            SetTimerEx("UnCagePlayer", 1000, 0, "i", player1);
        }
    }
    else return ErrorMessages(playerid, 3);
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)