SA-MP Forums Archive
MUTE PLAYER FOR TIME. - 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)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: MUTE PLAYER FOR TIME. (/showthread.php?tid=271414)



MUTE PLAYER FOR TIME. - budelis - 24.07.2011

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


AW: MUTE PLAYER FOR TIME. - Forbidden - 24.07.2011

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


Re: MUTE PLAYER FOR TIME. - MadeMan - 24.07.2011

https://sampwiki.blast.hk/wiki/SetTimerEx


Re: MUTE PLAYER FOR TIME. - budelis - 26.07.2011

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".


Re: MUTE PLAYER FOR TIME. - budelis - 26.07.2011

Help please.


Re: MUTE PLAYER FOR TIME. - Cjgogo - 26.07.2011

i think becauuse of return 0 but not sure


Re: MUTE PLAYER FOR TIME. - [MG]Dimi - 26.07.2011

return 0 actually prevents message to be sent to Main Chat


Re: MUTE PLAYER FOR TIME. - Mean - 26.07.2011

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.


Re: MUTE PLAYER FOR TIME. - budelis - 26.07.2011

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.


Re: MUTE PLAYER FOR TIME. - Mean - 26.07.2011

Use [pawn][ /pawn], this is heavily unreadable.


AW: MUTE PLAYER FOR TIME. - Nero_3D - 26.07.2011

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;



Re: MUTE PLAYER FOR TIME. - budelis - 26.07.2011

I update my post.I think you understand easier.


Re: MUTE PLAYER FOR TIME. - budelis - 28.07.2011

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


Re: MUTE PLAYER FOR TIME. - budelis - 28.07.2011

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