SA-MP Forums Archive
cage help - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: cage help (/showthread.php?tid=434335)



cage help - ProShooter22 - 02.05.2013

i found this cage this script but players can easily escape bt /kill and how to send the all cilent 'Players has been been caged [reason .....]

pls some1 help
no one shouldbe be able to get out of cage unless admin uncage him
and message should be sent to all players [u know what i mean right]




Код:
/* -------------------
cage by Rachael
----------------------
*/
 
#include <a_samp>
#include <a_players>
#include <a_irc>
 
#pragma unused sztmp
 
#define COLOR_GREY                              0xAFAFAFAA
#define COLOR_RCON              0x3399FFAA
 
 
enum obj { id, Float:ox, Float:oy, Float:oz, Float:xa, Float:ya, Float:za }
new object_ref[10][obj] =
{
        { 971 , -4.374 , -0.274 , 1.674 , 0.0000 , 0.0000 , 270.0000 },
        { 971 , 0.100 , 4.179 , 1.712 , 0.0000 , 0.0000 , 180.0000 },
        { 971 , 0.000 , -4.724 , 1.674 , 0.0000 , 0.0000 , 0.0000 },
        { 971 , 4.500 , -0.124 , 1.674 , 0.0000 , 0.0000 , 90.0000 },
        { 969 , -4.428 , 4.053 , 5.139 , 270.618 , 0.0000 , 270.0000 },
        { 969 , -1.428 , 4.053 , 5.139 , 270.618 , 0.0000 , 270.0000 },
        { 969 , 1.396 , 4.053 , 5.139 , 270.618 , 0.0000 , 270.0000 },
        { 969 , -4.428 , 4.053 , -1.76 , 270.618 , 0.0000 , 270.0000 },
        { 969 , -1.428 , 4.053 , -1.76 , 270.618 , 0.0000 , 270.0000 },
        { 969 , 1.396 , 4.053 , -1.76 , 270.618 , 0.0000 , 270.0000 }
};
 
new object[120];
new obj_count = 0;
new cage[20][10];
new cage_count= 0;
enum loc { Float:cx, Float:cy, Float:cz }
new cage_pos[20][loc];
new astring[255];
 
stock strtok(const string[], &index)
{
        new length = strlen(string);
        while ((index < length) && (string[index] <= ' '))
        {
                index++;
        }
 
        new offset = index;
        new result[20];
        while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
        {
                result[index - offset] = string[index];
                index++;
        }
        result[index - offset] = EOS;
        return result;
}
 
stock IsNumeric(const string[])
{
        for(new i = 0, j = strlen(string); i < j; i++)
        {
                if(string[i] > '9' || string[i] < '0') return 0;
        }
        return 1;
}
 
stock ReturnUser(text[], playerid = INVALID_PLAYER_ID)
{
        new pos = 0;
        while (text[pos] < 0x21) // Strip out leading spaces
        {
                if (text[pos] == 0) return INVALID_PLAYER_ID; // No passed text
                pos++;
        }
        new userid = INVALID_PLAYER_ID;
        if (IsNumeric(text[pos])) // Check whole passed string
        {
                // If they have a numeric name you have a problem (although names are checked on id failure)
                userid = strval(text[pos]);
                if (userid >=0 && userid < MAX_PLAYERS)
                {
                        if(!IsPlayerConnected(userid))
                        {
                                userid = INVALID_PLAYER_ID;
                        }
                        else
                        {
                                return userid; // A player was found
                        }
                }
        }
        // They entered [part of] a name or the id search failed (check names just incase)
        new len = strlen(text[pos]);
        new count = 0;
        new aname[MAX_PLAYER_NAME];
        for (new i = 0; i < MAX_PLAYERS; i++)
        {
                if (IsPlayerConnected(i))
                {
                        GetPlayerName(i, aname, sizeof (aname));
                        if (strcmp(aname, text[pos], true, len) == 0) // Check segment of name
                        {
                                if (len == strlen(aname)) // Exact match
                                {
                                        return i; // Return the exact player on an exact match
                                }
                                else // Partial match
                                {
                                        count++;
                                        userid = i;
                                }
                        }
                }
        }
        if (count != 1)
        {
                if (playerid != INVALID_PLAYER_ID)
                {
                        if (count)
                        {
                                SendClientMessage(playerid, 0xFF0000AA, "Multiple users found, please narrow search.");
                        }
                        else
                        {
                                SendClientMessage(playerid, 0xFF0000AA, "No matching user found.");
                        }
                }
                userid = INVALID_PLAYER_ID;
        }
        return userid; // INVALID_PLAYER_ID for bad return
}
 
stock Name(playerid)  // returns player's name
{
        new pname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pname, sizeof (pname));
        return pname;
}
 
 
public OnPlayerCommandText(playerid,cmdtext[])
{
        if(IsPlayerAdmin(playerid))
        {
            new
                    idx,
                        argument[32]
                ;
 
            argument = strtok(cmdtext,idx);
 
                if(!strcmp(argument,"/cage",true))
                {
                    argument = strtok(cmdtext,idx);
                    if(!strlen(argument))
                    {
                        SendClientMessage(playerid,COLOR_GREY,"USAGE: /cage [playerID/partofname|del|send|up|dn|north|south|east|west]");
                        return 1;
                        }
                    new caged = ReturnUser(argument);
                    if(caged != INVALID_PLAYER_ID)
                    {
                                new Float:playX, Float:playY, Float:playZ;
                                GetPlayerPos(caged,playX,playY,playZ);
                                cage_count++;
                                cage_pos[cage_count][cx] = playX;
                                cage_pos[cage_count][cy] = playY;
                                cage_pos[cage_count][cz] = playZ;
                                for(new i = 0; i <= 9;i++)
                                {
                                    obj_count++;
                                    object[obj_count] = CreateObject(object_ref[i][id],
                                                                                                        playX+object_ref[i][ox],
                                                                                                        playY+object_ref[i][oy],
                                                                                                        playZ+object_ref[i][oz],
                                                                                                        object_ref[i][xa],
                                                                                                        object_ref[i][ya],
                                                                                                        object_ref[i][za]);
                                        cage[cage_count][i] = obj_count;
                                }
                                format(astring,sizeof(astring), "cage %d created",cage_count);
                                SendClientMessage(playerid, COLOR_RCON, astring);
                                return 1;
                        }
                        if(!strcmp(argument,"up",true))
                        {
                            argument = strtok(cmdtext, idx);
                            new cagenum = strval(argument);
                            if(cagenum < 1 || cagenum > cage_count)
                            {
                                SendClientMessage(playerid,COLOR_GREY,"USAGE: /cage up [cage#] [distance]");
                                return 1;
                                }
                                argument = strtok(cmdtext, idx);
                                new Float:distance = floatstr(argument);
                                if(distance <= 0)
                                {
                                SendClientMessage(playerid,COLOR_GREY,"invalid distance [1-1000]");
                                return 1;
                                }
                                for(new i = 0; i <= 9;i++)
                                {
                                MoveObject(object[cage[cagenum][i]],
                                                                cage_pos[cagenum][cx]+object_ref[i][ox],
                                                                cage_pos[cagenum][cy]+object_ref[i][oy],
                                                                cage_pos[cagenum][cz]+object_ref[i][oz]+distance,
                                                                2.0);
                                }
                cage_pos[cagenum][cz] += distance;
                                new movest[128];
                                format(movest,sizeof(movest),"cage %d moved up %.1fm",cagenum,distance);
                                SendClientMessage(playerid,COLOR_RCON,movest);
                                return 1;
                        }
                        if(!strcmp(argument,"dn",true))
                        {
                        argument = strtok(cmdtext, idx);
                        new cagenum = strval(argument);
                        if(cagenum < 1 || cagenum > cage_count)
                        {
                                SendClientMessage(playerid,COLOR_GREY,"USAGE: /cage dn [cage#] [distance]");
                                return 1;
                                }
                                argument = strtok(cmdtext, idx);
                                new Float:distance = floatstr(argument);
                                if(distance <= 0)
                                {
                                    SendClientMessage(playerid,COLOR_GREY,"invalid distance [1-1000]");
                                    return 1;
                                }
                                for(new i = 0; i <= 9;i++)
                                {
                                    MoveObject(object[cage[cagenum][i]],
                                                                cage_pos[cagenum][cx]+object_ref[i][ox],
                                                                cage_pos[cagenum][cy]+object_ref[i][oy],
                                                                cage_pos[cagenum][cz]+object_ref[i][oz]-distance,
                                                                2.0);
                                }
                    cage_pos[cagenum][cz] -= distance;
                                new movest[128];
                                format(movest,sizeof(movest),"cage %d moved down %.1fm",cagenum,distance);
                                SendClientMessage(playerid,COLOR_RCON,movest);
                                return 1;
                        }
                        if(!strcmp(argument,"north",true))
                        {
                            argument = strtok(cmdtext, idx);
                            new cagenum = strval(argument);
                            if(cagenum < 1 || cagenum > cage_count)
                            {
                                SendClientMessage(playerid,COLOR_GREY,"USAGE: /cage north [cage#] [distance]");
                                return 1;
                                }
                                argument = strtok(cmdtext, idx);
                                new Float:distance = floatstr(argument);
                                if(distance <= 0)
                                {
                                    SendClientMessage(playerid,COLOR_GREY,"invalid distance [1-1000]");
                                    return 1;
                                }
                                for(new i = 0; i <= 9;i++)
                                {
                                    MoveObject(object[cage[cagenum][i]],
                                                                        cage_pos[cagenum][cx]+object_ref[i][ox],
                                                                        cage_pos[cagenum][cy]+object_ref[i][oy]+distance,
                                                                        cage_pos[cagenum][cz]+object_ref[i][oz],
                                                                        2.0);
                                }
                    cage_pos[cagenum][cy] += distance;
                                new movest[128];
                                format(movest,sizeof(movest),"cage %d moved north %.1fm",cagenum,distance);
                                SendClientMessage(playerid,COLOR_RCON,movest);
                                return 1;
                        }
                        if(!strcmp(argument,"south",true))
                        {
                            argument = strtok(cmdtext, idx);
                            new cagenum = strval(argument);
                            if(cagenum < 1 || cagenum > cage_count)
                            {
                                SendClientMessage(playerid,COLOR_GREY,"USAGE: /cagesouth [cage#] [distance]");
                                return 1;
                                }
                                argument = strtok(cmdtext, idx);
                                new Float:distance = floatstr(argument);
                                if(distance <= 0)
                                {
                                    SendClientMessage(playerid,COLOR_GREY,"invalid distance [1-1000]");
                                    return 1;
                                }
                                for(new i = 0; i <= 9;i++)
                                {
                                    MoveObject(object[cage[cagenum][i]],
                                                                        cage_pos[cagenum][cx]+object_ref[i][ox],
                                                                        cage_pos[cagenum][cy]+object_ref[i][oy]-distance,
                                                                        cage_pos[cagenum][cz]+object_ref[i][oz],
                                                                        2.0);
                                }
                    cage_pos[cagenum][cy] -= distance;
                                new movest[128];
                                format(movest,sizeof(movest),"cage %d moved south %.1fm",cagenum,distance);
                                SendClientMessage(playerid,COLOR_RCON,movest);
                                return 1;
                        }
                        if(!strcmp(argument,"east",true))
                        {
                            argument = strtok(cmdtext, idx);
                            new cagenum = strval(argument);
                            if(cagenum < 1 || cagenum > cage_count)
                            {
                                SendClientMessage(playerid,COLOR_GREY,"USAGE: /cage east [cage#] [distance]");
                                return 1;
                                }
                                argument = strtok(cmdtext, idx);
                                new Float:distance = floatstr(argument);
                                if(distance <= 0)
                                {
                                    SendClientMessage(playerid,COLOR_GREY,"invalid distance [1-1000]");
                                    return 1;
                                }
                                for(new i = 0; i <= 9;i++)
                                {
                                    MoveObject(object[cage[cagenum][i]],
                                                                        cage_pos[cagenum][cx]+object_ref[i][ox]+distance,
                                                                        cage_pos[cagenum][cy]+object_ref[i][oy],
                                                                        cage_pos[cagenum][cz]+object_ref[i][oz],
                                                                        2.0);
                                }
                    cage_pos[cagenum][cx] += distance;
                                new movest[128];
                                format(movest,sizeof(movest),"cage %d moved east %.1fm",cagenum,distance);
                                SendClientMessage(playerid,COLOR_RCON,movest);
                                return 1;
                        }
                        if(!strcmp(argument,"west",true))
                        {
                            argument = strtok(cmdtext, idx);
                            new cagenum = strval(argument);
                            if(cagenum < 1 || cagenum > cage_count)
                            {
                                SendClientMessage(playerid,COLOR_GREY,"USAGE: /cagewest [cage#] [distance]");
                                return 1;
                                }
                                argument = strtok(cmdtext, idx);
                                new Float:distance = floatstr(argument);
                                if(distance <= 0)
                                {
                                    SendClientMessage(playerid,COLOR_GREY,"invalid distance [1-1000]");
                                    return 1;
                                }
                                for(new i = 0; i <= 9;i++)
                                {
                                    MoveObject(object[cage[cagenum][i]],
                                                                        cage_pos[cagenum][cx]+object_ref[i][ox]+distance,
                                                                        cage_pos[cagenum][cy]+object_ref[i][oy],
                                                                        cage_pos[cagenum][cz]+object_ref[i][oz],
                                                                        2.0);
                                }
                    cage_pos[cagenum][cx] -= distance;
                                new movest[128];
                                format(movest,sizeof(movest),"cage %d moved west %.1fm",cagenum,distance);
                                SendClientMessage(playerid,COLOR_RCON,movest);
                                return 1;
                        }
                        if(!strcmp(argument,"del",true))
                        {
                            argument = strtok(cmdtext,idx);
                            if(!strcmp(argument,"#all",true))
                            {
                                for(new i = 1; i <= cage_count;i++)
                                {
                                    for(new j = 0; j <= 9; j++)
                                    {
                                        cage[i][j] = 0;
                                                }
                                                cage_pos[i][cx] = 0;
                                                cage_pos[i][cy] = 0;
                                                cage_pos[i][cz] = 0;
                                        }
                                        cage_count = 0;
                                        for(new i = 1; i <= obj_count;i++)
                                        {
                                                if(object[i])
                                                {
                                                    DestroyObject(object[i]);
                                                }
                                        }
                                        obj_count = 0;
                                        SendClientMessage(playerid, COLOR_RCON, "all cages destroyed.");
                                        return 1;
                                }
                            new cage_num = strval(argument);
                            if(cage_num < 1 || cage_num > cage_count)
                            {
                                SendClientMessage(playerid, COLOR_GREY, "USAGE: /cage del [cage num|#all]");
                                return 1;
                                }
                                for(new i = 0; i <= 9;i++)
                                {
                                        if(object[cage[cage_num][i]])
                                        {
                                                DestroyObject(object[cage[cage_num][i]]);
                                        object[cage[cage_num][i]] = 0;
                                        cage[cage_num][i] = 0;
                                        }
                                        cage_pos[cage_num][cx] = 0;
                                        cage_pos[cage_num][cy] = 0;
                                        cage_pos[cage_num][cz] = 0;
                                }
                                format(astring,sizeof(astring), "cage number %d destroyed",cage_num);
                                SendClientMessage(playerid, COLOR_RCON, astring);
                                return 1;
                        }
                        if(!strcmp(argument,"send",true))
                        {
                            argument = strtok(cmdtext,idx);
                            new cage_num = strval(argument);
                            if(cage_num < 0 || cage_num > cage_count || cage_pos[cage_num][cx] == 0)
                            {
                                SendClientMessage(playerid, COLOR_GREY, "USAGE: /cagesend [cage num] [player]");
                                return 1;
                                }
                                argument = strtok(cmdtext,idx);
                                new player = ReturnUser(argument);
                                if(player == INVALID_PLAYER_ID)
                                {
                                    SendClientMessage(playerid, COLOR_GREY, "Invalid player ID.");
                                    return 1;
                                }
                                SetPlayerInterior(player,0);
                                SetPlayerVirtualWorld(player,0);
                                SetPlayerPos(player,cage_pos[cage_num][cx],cage_pos[cage_num][cy],cage_pos[cage_num][cz]);
                                format(astring,sizeof(astring), "%s placed inside cage number %d",Name(player),cage_num);
                                SendClientMessage(playerid, COLOR_RCON, astring);
                                return 1;
                        }
                        SendClientMessage(playerid,COLOR_GREY,"USAGE: /cage [playerID/partofname|del|send|up|dn|north|south|east|west]");
                        return 1;
                }
                return 0;
        }
        return 0;
}
 
public OnFilterScriptExit()
{
        for(new i = 1; i <= obj_count;i++)
        {
            DestroyObject(object[i]);
        }
        return 1;
}



Re: cage help - vvhy - 02.05.2013

Try this
Put this on your /kill command before it sets the players health to 0:
pawn Код:
if(GetPVarInt(playerid,"iscaged") == 1) return SendClientMessage(playerid, 0xB90004FF, "You are caged. You cannot kill yourself.");
Then put this under where it cages the player:
pawn Код:
SetPVarInt(player,"iscaged",1[player]);
And put this under anywhere that it uncages the player:
pawn Код:
SetPVarInt(player,"iscaged",0[player]);



Re: cage help - Pottus - 02.05.2013

@vvhy: Your pvar habits need to cease, they're not good at all use proper arrays.


Re: cage help - [..MonTaNa..] - 02.05.2013

pawn Код:
new cageid, reason[24]

format(string, sizeof string, "An Administrator Has Caged %s (%d)  Reason: %s", PlayerName(cageid), pID, reason[0] ? reason : "No Reason Given");
SendClientMessageToAll(COLOR_PINK, string);



Re: cage help - ProShooter22 - 02.05.2013

ill try


Re: cage help - ProShooter22 - 02.05.2013

Then put this under where it cages the player:
pawn Код:
SetPVarInt(player,"iscaged",1[player]);
And put this under anywhere that it uncages the player:
pawn Код:
SetPVarInt(player,"iscaged",0[player]);
[/QUOTE]


where must i add these this pls tell


Re: cage help - [..MonTaNa..] - 02.05.2013

Quote:
Originally Posted by ProShooter22
Посмотреть сообщение
Then put this under where it cages the player:
pawn Код:
SetPVarInt(player,"iscaged",1[player]);
And put this under anywhere that it uncages the player:
pawn Код:
SetPVarInt(player,"iscaged",0[player]);

where must i add these this pls tell
That will probably give some errors, try:

in the /cage CMD
pawn Код:
SetPVarInt(pID, "iscaged", 1);

When player gets uncaged
SetPvarInt(pID, "iscaged", 0);
And this in the /kill CMD.

pawn Код:
if(GetPvarInt(pID, "iscaged") == 1) return SendClientMessage(playerid, COLOR_RED, "You cannot use this command when caged.");



Re: cage help - ProShooter22 - 02.05.2013

: error 017: undefined symbol "pID"
: error 017: undefined symbol "When"
E : error 017: undefined symbol "player"
~1\cod\F : error 017: undefined symbol "gets"


Re: cage help - [..MonTaNa..] - 02.05.2013

Lines ? Add

new pID;


Re: cage help - ProShooter22 - 02.05.2013

Quote:
Originally Posted by MonTaNaAa
Посмотреть сообщение
Lines ? Add

new pID;
dude do me a favor u take that cage script and add what u suggested and put it back in pastbin pls