Jump to content
  • 0

Timer


Snz

Question

Problema intalnita (descriere): Am incercat sa fac la comanda /freeze un textdraw care arata de la cine ai primit freeze si timpul ramas.

Timpul mi-l arata, ex: /freeze 0 2 Test , 0 fiind id-ul si 2 minutele. In textdraw apare Timp ramas: 2 ,  si la Admin Name lafel, apare de la cine ai primit freeze. Problema e ca nu reusesc sa il fac in secunde. Daca ii dau unui player 10 minute jail, sa inceapa sa scada, 9:59, 9:58 pana la 0 cand va lua unfreeze.
Ero(area / rile) / warning-(ul / urile): - 
Liniile de cod / sursa / script-ul(obligatoriu):

CMD:freeze(playerid, params[])
{
    if(PlayerInfo[playerid][Level] < 2) return SendError(playerid, "You need to be Admin Level 2 to use this command!");
    //--------------------------------------------------------------------------
    new liPlayer, liTime, Reason[50]; eString[0] = EOS;
    //--------------------------------------------------------------------------
    if(sscanf(params, "uiS(No Reason)[50]", liPlayer, liTime, Reason)) return
	SendUsage(playerid, "/freeze [PlayerID] [Freeze Time] [Reason]");
	//--------------------------------------------------------------------------
    if(!IsPlayerConnected(liPlayer)) return
	SendError(playerid, "Player not connected.");
	//--------------------------------------------------------------------------
    if(PlayerInfo[liPlayer][Frozen] == 1) return
	SendError(playerid, "Player is already frozen!");
	//--------------------------------------------------------------------------
    if(liTime > 9999) return
	SendError(playerid, "Invalid Time!");
    //--------------------------------------------------------------------------
    TogglePlayerControllable(liPlayer, false),	SetPlayerVirtualWorld(liPlayer, 10);
    PlayerInfo[liPlayer][Frozen] = 1,			PlayerPlaySound(liPlayer, 1057, 0.0, 0.0, 0.0);
	fTime[liPlayer][0] = liTime-1,				fTime[liPlayer][1] = 60;
	new Str[80];
	format(Str, sizeof(Str), "%d:%d",liTime/60,liTime-liTime/60*60);
 	TextDrawSetString(Textdraw7, Str);
 	new Str2[80];
 	format(Str2, sizeof(Str2), "%s", PlayerName(playerid));
 	TextDrawSetString(Textdraw11, Str2);
  	TextDrawShowForPlayer(liPlayer, Textdraw0);
 	TextDrawShowForPlayer(liPlayer, Textdraw1);
  	TextDrawShowForPlayer(liPlayer, Textdraw2);
  	TextDrawShowForPlayer(liPlayer, Textdraw3);
  	TextDrawShowForPlayer(liPlayer, Textdraw4);
  	TextDrawShowForPlayer(liPlayer, Textdraw5);
   	TextDrawShowForPlayer(liPlayer, Textdraw6);
  	TextDrawShowForPlayer(liPlayer, Textdraw7);
  	TextDrawShowForPlayer(liPlayer, Textdraw8);
  	TextDrawShowForPlayer(liPlayer, Textdraw9);
   	TextDrawShowForPlayer(liPlayer, Textdraw10);
  	TextDrawShowForPlayer(liPlayer, Textdraw11);
    //--------------------------------------------------------------------------
	SetTimerEx("ShowFreezeLeftTime", 1000, 0, "i", liPlayer);
    //--------------------------------------------------------------------------
    format(eString, sizeof(eString), "Co-Owner {FF0000}%s{D1D1D1} la inghetat pe {00A6FF}%s {D1D1D1}pentru {00A6FF}%d {D1D1D1}minute.(Motiv: %s)", PlayerName(playerid), PlayerName(liPlayer), liTime, Reason);
    SendClientMessageToAll(COLOR_GREY2, eString);
    //--------------------------------------------------------------------------
    return 1;
}

Imagini / Video (optional): "10" acela sunt minutele http://prntscr.com/7vnq1s
Ati incercat sa rezolvati singur?: Desigur, am incercat sa folosesc un timer, dar de geaba..

Edited by Snz
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Daca vrei sa il faci in secunde pui asa:

 

format(Str, sizeof(Str), "%d:%d",liTime/60,liTime);

 

Pui undeva la un timer de o secunde reoetabil asta

fTime[liPlayer][0] --;

 

Si inlocuiesti aici asta 

fTime[liPlayer][0] = liTime-1,

 

Cu asta  

fTime[liPlayer][0] = liTime*60, // lifetime este cate minute ai scris inmultit cu 60 pnetru 60 de secunde

 

Canda dai /freeze de acum incolo o sa dai asa /freeze playerid minute motiv

 

Edited by Mister

 

    __  ____      __           
   /  |/  (_)____/ /____  _____
  / /|_/ / / ___/ __/ _ \/ ___/
 / /  / / (__  ) /_/  __/ /    
/_/  /_/_/____/\__/\___/_/     
SERVICII SCRIPTING DE CALITATE
Pagina     Scripting     pawn
Link to comment
Share on other sites

  • 0

Ramane lafel ca inainte, nu scade timp-ul

Comanda:

CMD:freeze(playerid, params[])
{
    if(PlayerInfo[playerid][Level] < 2) return SendError(playerid, "You need to be Admin Level 2 to use this command!");
    //--------------------------------------------------------------------------
    new liPlayer, liTime, Reason[50]; eString[0] = EOS;
    //--------------------------------------------------------------------------
    if(sscanf(params, "uiS(No Reason)[50]", liPlayer, liTime, Reason)) return
	SendUsage(playerid, "/freeze [PlayerID] [Freeze Time] [Reason]");
	//--------------------------------------------------------------------------
    if(!IsPlayerConnected(liPlayer)) return
	SendError(playerid, "Player not connected.");
	//--------------------------------------------------------------------------
    if(PlayerInfo[liPlayer][Frozen] == 1) return
	SendError(playerid, "Player is already frozen!");
	//--------------------------------------------------------------------------
    if(liTime > 9999) return
	SendError(playerid, "Invalid Time!");
    //--------------------------------------------------------------------------
    TogglePlayerControllable(liPlayer, false),	SetPlayerVirtualWorld(liPlayer, 10);
    PlayerInfo[liPlayer][Frozen] = 1,			PlayerPlaySound(liPlayer, 1057, 0.0, 0.0, 0.0);
	fTime[liPlayer][0] = liTime*60,				fTime[liPlayer][1] = 60;
	new Str[80];
	format(Str, sizeof(Str), "%d:%d",liTime/60,liTime);
 	TextDrawSetString(Textdraw7, Str);
 	new Str2[80];
 	format(Str2, sizeof(Str2), "%s", PlayerName(playerid));
 	TextDrawSetString(Textdraw11, Str2);
  	TextDrawShowForPlayer(liPlayer, Textdraw0);
 	TextDrawShowForPlayer(liPlayer, Textdraw1);
  	TextDrawShowForPlayer(liPlayer, Textdraw2);
  	TextDrawShowForPlayer(liPlayer, Textdraw3);
  	TextDrawShowForPlayer(liPlayer, Textdraw4);
  	TextDrawShowForPlayer(liPlayer, Textdraw5);
   	TextDrawShowForPlayer(liPlayer, Textdraw6);
  	TextDrawShowForPlayer(liPlayer, Textdraw7);
  	TextDrawShowForPlayer(liPlayer, Textdraw8);
  	TextDrawShowForPlayer(liPlayer, Textdraw9);
   	TextDrawShowForPlayer(liPlayer, Textdraw10);
  	TextDrawShowForPlayer(liPlayer, Textdraw11);
    //--------------------------------------------------------------------------
	SetTimerEx("ShowFreezeLeftTime", 1000, 0, "i", liPlayer);
    //--------------------------------------------------------------------------
    format(eString, sizeof(eString), "Co-Owner {FF0000}%s{D1D1D1} la inghetat pe {00A6FF}%s {D1D1D1}pentru {00A6FF}%d {D1D1D1}minute.(Motiv: %s)", PlayerName(playerid), PlayerName(liPlayer), liTime, Reason);
    SendClientMessageToAll(COLOR_GREY2, eString);
    //--------------------------------------------------------------------------
    return 1;
}

Iar timer-ul in care am pus:

fTime[liPlayer][0]--;

Este:

function ShowFreezeLeftTime(szPlayer)
{
	new liPlayer;
	if(!IsPlayerConnected(szPlayer)) return 0;
	//--------------------------------------------------------------------------
    if(fTime[szPlayer][0] < 0 && fTime[szPlayer][1] > 0)
    {
		if(PlayerInfo[szPlayer][Frozen] == 1) UnFreezeMe(szPlayer);
	}
	else SetTimerEx("ShowFreezeLeftTime", 1000, 0, "i", szPlayer);
    //--------------------------------------------------------------------------
	fTime[szPlayer][1]--;
	fTime[liPlayer][0] --; //aceasta e linia
	//--------------------------------------------------------------------------
	if(fTime[szPlayer][1] == 0) fTime[szPlayer][0]--, fTime[szPlayer][1] = 60;
	//--------------------------------------------------------------------------
    return 1;
}
Link to comment
Share on other sites

  • 0

adauga asa:

new TimeFrezeForPlayer[MAX_PLAYERS] = 0;

forward TimeInFreeze();

public OnGameModeInit()
{
	SetTimer("TimeInFreeze",1000,true);
	// liniile tale
	return 1;
}
public TimeInFreeze()
{
    foreach(Player, i)
    {
        if(TimeFrezeForPlayer[i] > 0)
        {
            TimeFrezeForPlayer[i] --;
        }
        if(TimeFrezeForPlayer[i] <= 0)
        {
            PlayerInfo[i][Frozen] = 0;
            TogglePlayerControllable(i, true);
        }
    }
    return 1;
}

si asta:

CMD:freeze(playerid, params[])
{
    if(PlayerInfo[playerid][Level] < 2) 
			return SendError(playerid, "You need to be Admin Level 2 to use this command!");
	
    new targetid, TimeFreeze, Reason[50]; eString[0] = EOS;
	new Str[80], Str2[80];
	
    if(sscanf(params, "uds[49]", targetid, TimeFreeze, Reason)) 
			return SendUsage(playerid, "/freeze [PlayerID] [Freeze Time(minute)] [Reason]");
	
    if(!IsPlayerConnected(targetid)) 
			return SendError(playerid, "Player not connected.");
	
    if(PlayerInfo[targetid][Frozen] == 1) 
			return SendError(playerid, "Player is already frozen!");
	
    if(TimeFreeze > 9999) 
			return SendError(playerid, "Invalid Time!");
	
    TogglePlayerControllable(targetid, false),	SetPlayerVirtualWorld(targetid, 10);
    PlayerInfo[targetid][Frozen] = 1,			PlayerPlaySound(targetid, 1057, 0.0, 0.0, 0.0);
	
	TimeFrezeForPlayer[targetid] = TimeFreeze * 60;
	
	format(Str, sizeof(Str), "%d",TimeFrezeForPlayer);
 	TextDrawSetString(Textdraw7, Str);
	
 	format(Str2, sizeof(Str2), "%s", PlayerName(playerid));
 	TextDrawSetString(Textdraw11, Str2);
  	TextDrawShowForPlayer(targetid, Textdraw0);
 	TextDrawShowForPlayer(targetid, Textdraw1);
  	TextDrawShowForPlayer(targetid, Textdraw2);
  	TextDrawShowForPlayer(targetid, Textdraw3);
  	TextDrawShowForPlayer(targetid, Textdraw4);
  	TextDrawShowForPlayer(targetid, Textdraw5);
   	TextDrawShowForPlayer(targetid, Textdraw6);
  	TextDrawShowForPlayer(targetid, Textdraw7);
  	TextDrawShowForPlayer(targetid, Textdraw8);
  	TextDrawShowForPlayer(targetid, Textdraw9);
   	TextDrawShowForPlayer(targetid, Textdraw10);
  	TextDrawShowForPlayer(targetid, Textdraw11);
	
	SetTimerEx("ShowFreezeLeftTime", 1000, 0, "i", targetid);
	
    format(eString, sizeof(eString), "Co-Owner {FF0000}%s{D1D1D1} la inghetat pe {00A6FF}%s {D1D1D1}pentru {00A6FF}%d {D1D1D1}secunde.(Motiv: %s)", PlayerName(playerid), PlayerName(targetid), TimeFrezeForPlayer, Reason);
    SendClientMessageToAll(COLOR_GREY2, eString);
	
    return 1;
}

 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.