MUTE PLAYER FOR TIME.
#1

Hi all.I need some help with mute for time it look like that: mute[playerid][time/sec].
Reply
#2

Use sscanf ,it will be easier to make the command.
Reply
#3

https://sampwiki.blast.hk/wiki/SetTimerEx
Reply
#4

Yes,but i don't understand,when admin mute player i do that:

mute[MuteID] = true;

Ok good,then onplayertext:

if(mute[playerid] == true)
{
SendClientMessage(playerid,COLOR_WHITE,"You are mute");
return 0;
}

But why,when I get mute,and i text anything,i don't get this message "You are mute".
Reply
#5

Help please.
Reply
#6

i think becauuse of return 0 but not sure
Reply
#7

return 0 actually prevents message to be sent to Main Chat
Reply
#8

Example code:

pawn Код:
new muted[ MAX_PLAYERS ];
CMD:mutemeforaminute( playerid, params[ ] ) {
    SetTimerEx( "unmute", 60000, 0, "i", playerid );
    muted[ playerid ] = 1;
    return SendClientMessage( playerid, -1, "You have muted yourself for a minute. " );
}

public OnPlayerText( playerid, text[ ] ) {
    if( muted[ playerid ] == 1 ) {
        SendClientMessage( playerid, -1, "Can't talk while muted! " );
        return 0;
    }
    return 1;
}

forward unmute( playerid );
public unmute( playerid ) {
    SendClientMessage( playerid, -1, "A minute has passed, you have been unmuted. " );
    muted[ playerid ] = 0;
    return 1;
}

public OnPlayerDisconnect( playerid, reason ) {  
    muted[ playerid ] = 0;
    return 1;
}
I think you can figure the rest yourself. You haven't provided any code, therefore we can't help you.
Reply
#9

pawn Код:
COMMAND:mute(playerid,params[])
{
new MuteID,MuteTime;
if(!IsPlayerAdmin(playerid)){return 1;}
if (sscanf(params, "ud", MuteID, MuteTime)){SendClientMessage(playerid, COLOR_ORANGE, "* mute player /mute [player_name] [time]");return 1;}
if (MuteID == INVALID_PLAYER_ID){SendClientMessage(playerid, COLOR_ORANGE, "This play do not exit");return 1;}
if(mute[MuteID] == true) { SendClientMessage(playerid,COLOR_ORANGE,"Player is already mute");return 1;}
SetTimerEx("MuteLeft",MuteTime,false,"i",MuteID);
MuteLiko[playerid] = SetTimerEx("MuteShow",1000,true,"i",MuteID);
mute[MuteID] = true;
PlayerData[playerid][rid][2] = MuteTime;
new Name[MAX_PLAYER_NAME];
GetPlayerName(playerid,Name,MAX_PLAYER_NAME);
new String[70];
format(String,sizeof(String),"* You have been muted by admin %i (seconds)",MuteTime);
SendClientMessage(MuteID,COLOR_ORANGE,String);
new String2[70];
format(String2,sizeof(String2),"* You muted %s %i (seconds)",Name,MuteTime);
SendClientMessage(playerid,COLOR_ORANGE,String2);
return 1;
}
Here is my script.
Reply
#10

Use [pawn][ /pawn], this is heavily unreadable.
Reply
#11

Another script without timer

pawn Код:
new gMuted[MAX_PLAYERS];
pawn Код:
CMD:mute(playerid, params[]) {
    if(sscanf(params, "dd", params[0], params[1]) || (params[1] < 1)) {
        SendClientMessage(playerid, -1, "Usage: /mute [playerid][time]");
    } else {
        new
            tmp[128];
        GetPlayerName(params[0], tmp, MAX_PLAYER_NAME);
        gMuted[params[0]] = GetTickCount() + (params[1] * 1000);
        format(tmp, sizeof tmp, "Player \"%s\" (%d) muted for %d seconds", tmp, params[0], params[1]);
        SendClientMessage(playerid, 0xFFFFFFFF, tmp);
    }
    return true;
}
pawn Код:
//OnPlayerText
    if(gMuted[playerid]) {
        if(GetTickCount() < gMuted[playerid]) {
            new
                tmp[64];
            format(tmp, sizeof tmp, "Muted!, %d seconds remaining",
                ((gMuted[playerid] - GetTickCount()) / 1000));
            SendClientMessage(playerid, 0xFF0000FF, tmp);
            return false;
        } else {
            gMuted[playerid] = 0;
        }
    }
pawn Код:
//OnPlayerDisconnect or OnPlayerConnect
    muted[playerid] = 0;
Reply
#12

I update my post.I think you understand easier.
Reply
#13

THX you Nero_3D

All is work now.Just now i want to do with 3dtextlabel i do this timer when player mute player:

MuteLeft[MuteID] = SetTimerEx("MuteShow",1000,true,"i",MuteID);

forward MuteShow(playerid);
public MuteShow(playerid)
{
if(PlayerData[playerid][muted] == 1)
{
new Tekstas[10];
format(Tekstas,sizeof(Tekstas),"Mute %d",((PlayerData[playerid][muted] - GetTickCount()) / 1000));
SeeMute[playerid] = Create3DTextLabel(Tekstas, 0xFF0000FF, 30.0, 40.0, 50.0, 40.0, 0);
Attach3DTextLabelToPlayer(SeeMute[playerid], playerid, 0.0, 0.0, 0.7);
}
else
KillTimer(MuteLeft[playerid]);
}


And why when i mute player,player don't get 3dtextlabel
Reply
#14

Very sorry for triple post,but i need very help with this.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)