drag help
#1

Hey all.
when im trying to drag someone nothing happends.
this is the script:
pawn Код:
CMD:drag(playerid, params[])
{
    if(IsACop(playerid))
    {
        new string[128], giveplayerid;
        if(sscanf(params, "u", giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /drag [playerid]");

        if(IsPlayerConnected(giveplayerid))
        {
            if(GetPVarInt(giveplayerid, "PlayerCuffed") == 2)
            {
                if(IsPlayerInAnyVehicle(playerid)) return SendClientMessageEx(playerid, COLOR_WHITE, " You must be out of the vehicle to use this command.");
                if(GetPVarInt(giveplayerid, "BeingDragged") == 1)
                {
                    SendClientMessageEx(playerid, COLOR_WHITE, " That player is already being dragged. ");
                    return 1;
                }
                new Float:dX, Float:dY, Float:dZ;
                GetPlayerPos(giveplayerid, dX, dY, dZ);
                if(!IsPlayerInRangeOfPoint(playerid, 5.0, dX, dY, dZ))
                {
                    SendClientMessageEx(playerid, COLOR_GRAD2, " That suspect is not near you.");
                    return 1;
                }
                format(string, sizeof(string), "* %s has is now dragging you.", GetPlayerNameEx(playerid));
                SendClientMessageEx(giveplayerid, COLOR_WHITE, string);
                format(string, sizeof(string), "* You are now dragging %s, you may move them now.", GetPlayerNameEx(giveplayerid));
                SendClientMessageEx(playerid, COLOR_WHITE, string);
                format(string, sizeof(string), "* %s grabs ahold of %s and begins to move them.", GetPlayerNameEx(playerid), GetPlayerNameEx(giveplayerid));
                ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
                SendClientMessageEx(playerid, COLOR_WHITE, "You are now dragging the suspect, press the '{AA3333}FIRE{FFFFFF}' button to stop.");
                SetPVarInt(giveplayerid, "BeingDragged", 1);
                SetPVarInt(playerid, "DraggingPlayer", giveplayerid);
            }
            else
            {
                SendClientMessageEx(playerid, COLOR_WHITE, " The specified player is not cuffed !");
            }
        }
    }
    else
    {
        SendClientMessageEx(playerid, COLOR_GREY, "   You are not a LEO ! ");
        return 1;
    }
    return 1;
}
Reply
#2

1. Please use intendation and [.pawn] tag (without dot)
2. SendClientMessageEx is not a native function. Did you define it somewhere?
3. Try:
pawn Код:
CMD:drag(playerid, params[])
{
    if(IsACop(playerid))
    {
        new string[128], giveplayerid;
        if(sscanf(params, "u", giveplayerid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /drag [playerid]");

        if(IsPlayerConnected(giveplayerid))
        {
            if(GetPVarInt(giveplayerid, "PlayerCuffed") == 2)
            {
                if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_WHITE, " You must be out of the vehicle to use this command.");
                if(GetPVarInt(giveplayerid, "BeingDragged") == 1) return SendClientMessage(playerid, COLOR_WHITE, " That player is already being dragged. ");
               
                new Float:dX, Float:dY, Float:dZ;
                GetPlayerPos(giveplayerid, dX, dY, dZ);
               
                if(!IsPlayerInRangeOfPoint(playerid, 5.0, dX, dY, dZ)) return SendClientMessage(playerid, COLOR_GRAD2, " That suspect is not near you.");

                format(string, sizeof(string), "* %s has is now dragging you.", GetPlayerNameEx(playerid));
                SendClientMessage(giveplayerid, COLOR_WHITE, string);
                format(string, sizeof(string), "* You are now dragging %s, you may move them now.", GetPlayerNameEx(giveplayerid));
                SendClientMessage(playerid, COLOR_WHITE, string);
                format(string, sizeof(string), "* %s grabs ahold of %s and begins to move them.", GetPlayerNameEx(playerid), GetPlayerNameEx(giveplayerid));
                ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
                SendClientMessage(playerid, COLOR_WHITE, "You are now dragging the suspect, press the '{AA3333}FIRE{FFFFFF}' button to stop.");
                SetPVarInt(giveplayerid, "BeingDragged", 1);
                SetPVarInt(playerid, "DraggingPlayer", giveplayerid);
                return 1;
            }
            else return SendClientMessage(playerid, COLOR_WHITE, " The specified player is not cuffed !");
        } else return SendClientMessage(playerid, COLOR_WHITE, " The specified player is not connected !");
    }
    else return SendClientMessage(playerid, COLOR_GREY, " You are not a LEO ! ");
}
Reply
#3

Quote:
Originally Posted by Misiur
Посмотреть сообщение
1. Please use intendation and [.pawn] tag (without dot)
2. SendClientMessageEx is not a native function. Did you define it somewhere?
3. Try:
pawn Код:
CMD:drag(playerid, params[])
{
    if(IsACop(playerid))
    {
        new string[128], giveplayerid;
        if(sscanf(params, "u", giveplayerid)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /drag [playerid]");

        if(IsPlayerConnected(giveplayerid))
        {
            if(GetPVarInt(giveplayerid, "PlayerCuffed") == 2)
            {
                if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_WHITE, " You must be out of the vehicle to use this command.");
                if(GetPVarInt(giveplayerid, "BeingDragged") == 1) return SendClientMessage(playerid, COLOR_WHITE, " That player is already being dragged. ");
               
                new Float:dX, Float:dY, Float:dZ;
                GetPlayerPos(giveplayerid, dX, dY, dZ);
               
                if(!IsPlayerInRangeOfPoint(playerid, 5.0, dX, dY, dZ)) return SendClientMessage(playerid, COLOR_GRAD2, " That suspect is not near you.");

                format(string, sizeof(string), "* %s has is now dragging you.", GetPlayerNameEx(playerid));
                SendClientMessage(giveplayerid, COLOR_WHITE, string);
                format(string, sizeof(string), "* You are now dragging %s, you may move them now.", GetPlayerNameEx(giveplayerid));
                SendClientMessage(playerid, COLOR_WHITE, string);
                format(string, sizeof(string), "* %s grabs ahold of %s and begins to move them.", GetPlayerNameEx(playerid), GetPlayerNameEx(giveplayerid));
                ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
                SendClientMessage(playerid, COLOR_WHITE, "You are now dragging the suspect, press the '{AA3333}FIRE{FFFFFF}' button to stop.");
                SetPVarInt(giveplayerid, "BeingDragged", 1);
                SetPVarInt(playerid, "DraggingPlayer", giveplayerid);
                return 1;
            }
            else return SendClientMessage(playerid, COLOR_WHITE, " The specified player is not cuffed !");
        } else return SendClientMessage(playerid, COLOR_WHITE, " The specified player is not connected !");
    }
    else return SendClientMessage(playerid, COLOR_GREY, " You are not a LEO ! ");
}
Not working.
Reply
#4

Cool, but not working is a wide term. Any compilation errors, or simply no response after typing /drag?
Reply
#5

Quote:
Originally Posted by Misiur
Посмотреть сообщение
Cool, but not working is a wide term. Any compilation errors, or simply no response after typing /drag?
Nope it's when im /drag and choose id im start to walk and nothing happends
Reply
#6

Of course it won't work. You have to create a timer, which will loop through all players with BeingDragged equal 1 (I suggest creating separate global array, to avoid looping through ALL players, not only the dragged ones). Then, check if player dragged is in range of drag - if he isn't teleport him a little closer.
Reply
#7

Quote:
Originally Posted by Misiur
Посмотреть сообщение
Of course it won't work. You have to create a timer, which will loop through all players with BeingDragged equal 1 (I suggest creating separate global array, to avoid looping through ALL players, not only the dragged ones). Then, check if player dragged is in range of drag - if he isn't teleport him a little closer.
I am beginner can you show me maybe?
Reply
#8

pawn Код:
#define DRAG_RANGE 5

//Global variable
forward ExecuteDrag();

//in ongamemodeinit
SetTimer("ExecuteDrag", 1000, true); //It will run once a second

//Outside any callbacks
public ExecuteDrag() {
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid++) {
        if(1 != GetPVarInt(playerid, "BeingDragged")) continue;
        else {
            new draggerid = GetPVarInt(playerid, "DraggingPlayer"), Float:dpos[3], Float:ppos[3];
            GetPlayerPos(draggerid, dpos[0], dpos[1], dpos[2]);
            GetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
           
            new Float:diff[3], Float:tmp, Float:newpos[3];
            for(new i = 0; i < 3; i++) {
                tmp = dpos[i] - ppos[i];
               
                diff[i] = ((tmp < 0) ? (-tmp) : (tmp));
               
                if(diff[i] > DRAG_RANGE) {
                    newpos[i] = (dpos[i] + (DRAG_RANGE - 3));
                }
            }
        }
    }
    return 1;
}
Dirty and untested, but try it.

E:
You might want to remove the timer when there are no dragged players. I'll leave this to you and wiki
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)