Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <zcmd>
- #define grey 0xAFAFAFAA
- #define red 0xAA3333AA
- //Choose a type, if 1 it'll be a simple message box. If 2 then there will be an input box to send messages while frozen.
- new TYPE = 2;
- //
- new Frozen[MAX_PLAYERS];
- new Talk[MAX_PLAYERS];
- new Spam[MAX_PLAYERS];
- forward SpamTimer();
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print("Take Damage While Frozen - by Giacomand ");
- print("--------------------------------------\n");
- SetTimer("SpamTimer", 1000, 1);
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- public SpamTimer()
- {
- for(new i = 0; i < MAX_PLAYERS; i++)
- {
- if(Spam[i] > 0)
- {
- Spam[i]--;
- }
- }
- return 1;
- }
- //ZCMD Commands
- command(freezeex, playerid, params[])
- {
- new targetid;
- new string[128];
- if(!sscanf(params, "u", targetid))
- {
- if(targetid != INVALID_PLAYER_ID)
- {
- Frozen[targetid] = 1;
- format(string, sizeof(string), "You have frozen %s", Name(targetid));
- SendClientMessage(playerid, grey, string);
- format(string, sizeof(string), "You have been frozen by Admin %s", Name(playerid));
- ShowPlayerDialog(playerid,665,DIALOG_STYLE_MSGBOX,"FROZEN",string,"Frozen","");
- }
- else
- {
- SendClientMessage(playerid, red, "Player is not connected");
- }
- }
- else
- {
- SendClientMessage(playerid, grey, "Usage: /(un)freezeEx [playerid/partofname]");
- }
- return 1;
- }
- command(unfreezeex, playerid, params[])
- {
- new targetid;
- new string[128];
- if(!sscanf(params, "u", targetid))
- {
- if(targetid != INVALID_PLAYER_ID)
- {
- Frozen[targetid] = 0;
- format(string, sizeof(string), "You have thawed %s", Name(targetid));
- SendClientMessage(playerid, grey, string);
- format(string, sizeof(string), "You have been thawed by Admin %s", Name(playerid));
- SendClientMessage(playerid, grey, string);
- ShowPlayerDialog(playerid,666,DIALOG_STYLE_MSGBOX,"THAWED",string,"Thaw me","");
- Talk[targetid] = 0;
- }
- else
- {
- SendClientMessage(playerid, red, "Player is not connected");
- }
- }
- else
- {
- SendClientMessage(playerid, grey, "Usage: /(un)freezeEx [playerid/partofname]");
- }
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- Frozen[playerid] = 0;
- Talk[playerid] = 0;
- Spam[playerid] = 0;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- Frozen[playerid] = 0;
- Talk[playerid] = 0;
- Spam[playerid] = 0;
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- Frozen[playerid] = 0;
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- Frozen[playerid] = 0;
- return 1;
- }
- public OnPlayerText(playerid, text[])
- {
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(dialogid == 665)
- {
- if(TYPE == 1)
- {
- ShowPlayerDialog(playerid,665,DIALOG_STYLE_MSGBOX,"FROZEN","Wait for an admin to thaw you.","","");
- }
- if(Talk[playerid] == 1)
- {
- if(Spam[playerid] <= 0)
- {
- // Insert custom text talk here, for my example I'll use "SendClientMessageToAll
- SendClientMessageToAll(grey, inputtext);
- }
- else
- {
- SendClientMessage(playerid, red, "Wait a second or two.");
- }
- }
- if(TYPE == 2)
- {
- Talk[playerid] = 1;
- ShowPlayerDialog(playerid ,665,DIALOG_STYLE_INPUT,"FROZEN","Speak in chat while frozen:","Talk","");
- Spam[playerid] = 2;
- }
- }
- return 1;
- }
- stock Name(playerid) //By Alex "Y_Less" Cole
- {
- new plname[24];
- GetPlayerName(playerid, plname, sizeof(plname));
- return plname;
- }
- /*----------------------------------------------------------------------------*-
- Function:
- sscanf
- Params:
- string[] - String to extract parameters from.
- format[] - Parameter types to get.
- {Float,_}:... - Data return variables.
- Return:
- 0 - Successful, not 0 - fail.
- Notes:
- A fail is either insufficient variables to store the data or insufficient
- data for the format string - excess data is disgarded.
- A string in the middle of the input data is extracted as a single word, a
- string at the end of the data collects all remaining text.
- The format codes are:
- c - A character.
- d, i - An integer.
- h, x - A hex number (e.g. a colour).
- f - A float.
- s - A string.
- z - An optional string.
- pX - An additional delimiter where X is another character.
- '' - Encloses a litteral string to locate.
- u - User, takes a name, part of a name or an id and returns the id if they're connected.
- Now has IsNumeric integrated into the code.
- Added additional delimiters in the form of all whitespace and an
- optioanlly specified one in the format string.
- -*----------------------------------------------------------------------------*/
- stock sscanf(string[], format[], {Float,_}:...)
- {
- #if defined isnull
- if (isnull(string))
- #else
- if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
- #endif
- {
- return format[0];
- }
- #pragma tabsize 4
- new
- formatPos = 0,
- stringPos = 0,
- paramPos = 2,
- paramCount = numargs(),
- delim = ' ';
- while (string[stringPos] && string[stringPos] <= ' ')
- {
- stringPos++;
- }
- while (paramPos < paramCount && string[stringPos])
- {
- switch (format[formatPos++])
- {
- case '\0':
- {
- return 0;
- }
- case 'i', 'd':
- {
- new
- neg = 1,
- num = 0,
- ch = string[stringPos];
- if (ch == '-')
- {
- neg = -1;
- ch = string[++stringPos];
- }
- do
- {
- stringPos++;
- if ('0' <= ch <= '9')
- {
- num = (num * 10) + (ch - '0');
- }
- else
- {
- return -1;
- }
- }
- while ((ch = string[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num * neg);
- }
- case 'h', 'x':
- {
- new
- num = 0,
- ch = string[stringPos];
- do
- {
- stringPos++;
- switch (ch)
- {
- case 'x', 'X':
- {
- num = 0;
- continue;
- }
- case '0' .. '9':
- {
- num = (num << 4) | (ch - '0');
- }
- case 'a' .. 'f':
- {
- num = (num << 4) | (ch - ('a' - 10));
- }
- case 'A' .. 'F':
- {
- num = (num << 4) | (ch - ('A' - 10));
- }
- default:
- {
- return -1;
- }
- }
- }
- while ((ch = string[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num);
- }
- case 'c':
- {
- setarg(paramPos, 0, string[stringPos++]);
- }
- case 'f':
- {
- setarg(paramPos, 0, _:floatstr(string[stringPos]));
- }
- case 'p':
- {
- delim = format[formatPos++];
- continue;
- }
- case '\'':
- {
- new
- end = formatPos - 1,
- ch;
- while ((ch = format[++end]) && ch != '\'') {}
- if (!ch)
- {
- return -1;
- }
- format[end] = '\0';
- if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
- {
- if (format[end + 1])
- {
- return -1;
- }
- return 0;
- }
- format[end] = '\'';
- stringPos = ch + (end - formatPos);
- formatPos = end + 1;
- }
- case 'u':
- {
- new
- end = stringPos - 1,
- id = 0,
- bool:num = true,
- ch;
- while ((ch = string[++end]) && ch != delim)
- {
- if (num)
- {
- if ('0' <= ch <= '9')
- {
- id = (id * 10) + (ch - '0');
- }
- else
- {
- num = false;
- }
- }
- }
- if (num && IsPlayerConnected(id))
- {
- setarg(paramPos, 0, id);
- }
- else
- {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #define __SSCANF_FOREACH__
- #endif
- string[end] = '\0';
- num = false;
- new
- name[MAX_PLAYER_NAME];
- id = end - stringPos;
- foreach (Player, playerid)
- {
- GetPlayerName(playerid, name, sizeof (name));
- if (!strcmp(name, string[stringPos], true, id))
- {
- setarg(paramPos, 0, playerid);
- num = true;
- break;
- }
- }
- if (!num)
- {
- setarg(paramPos, 0, INVALID_PLAYER_ID);
- }
- string[end] = ch;
- #if defined __SSCANF_FOREACH__
- #undef foreach
- #undef __SSCANF_FOREACH__
- #endif
- }
- stringPos = end;
- }
- case 's', 'z':
- {
- new
- i = 0,
- ch;
- if (format[formatPos])
- {
- while ((ch = string[stringPos++]) && ch != delim)
- {
- setarg(paramPos, i++, ch);
- }
- if (!i)
- {
- return -1;
- }
- }
- else
- {
- while ((ch = string[stringPos++]))
- {
- setarg(paramPos, i++, ch);
- }
- }
- stringPos--;
- setarg(paramPos, i, '\0');
- }
- default:
- {
- continue;
- }
- }
- while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
- {
- stringPos++;
- }
- while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
- {
- stringPos++;
- }
- paramPos++;
- }
- do
- {
- if ((delim = format[formatPos++]) > ' ')
- {
- if (delim == '\'')
- {
- while ((delim = format[formatPos++]) && delim != '\'') {}
- }
- else if (delim != 'z')
- {
- return delim;
- }
- }
- }
- while (delim > ' ');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement