Skip to content

An oversight in the "/mute" command #1

Open
@Daniel-Cortez

Description

The following code in COMMAND::mute is suspicious:

SampGamemodes/TDM[BETA].pwn

Lines 5673 to 5677 in 3863697

new targetid, minutes, reason[128], string[128];
if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, COLOR_RED, "Player Not Connected");
if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, COLOR_RED, "Do Not Have Permission");
if(muted[targetid] == true) return SendClientMessage(playerid, COLOR_RED, "Player is mute");
if(sscanf(params,"dds",targetid,minutes,reason)) { SendClientMessage(playerid, -1, "USAGE: /jail <playerid> <time> <reason>"); return 1;}

Variable targetid is used in IsPlayerConnected() before being assigned a value. The value is assigned later on with sscanf(), and before that targetid is zero-initialized by default, so

if(IsPlayerConnected(targetid))

works as

if(IsPlayerConnected(0))

which means the command won't work if Player 0 isn't connected.
You probably intended to write the code in the following way:

new targetid, minutes, reason[128], string[128];
if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, COLOR_RED, "Do Not Have Permission");
if(sscanf(params,"dds",targetid,minutes,reason)) { SendClientMessage(playerid, -1, "USAGE: /jail <playerid> <time> <reason>"); return 1;}
if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, COLOR_RED, "Player Not Connected");
if(muted[targetid] == true) return SendClientMessage(playerid, COLOR_RED, "Player is mute");

EDIT: The same oversight is also present in COMMAND::unmute.

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions