Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #define DISTANCE_BETWEEN_PLAYERS 10
- #define WAIT_BEFORE_HEALING_AGAIN_TIME 30000
- #define WAIT_BEFORE_HEALING_YOURSELF_AGAIN_TIME 10000
- #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
- #define Red 0xFF0000FF
- #define Grey 0xAFAFAFAA
- #define Green 0x33AA33AA
- #define Yellow 0xFFFF00AA
- #define White 0xFFFFFFAA
- #define Blue 0x0000BBAA
- #define Lightblue 0x33CCFFAA
- #define Orange 0xFF9900AA
- #define Lime 0x10F441AA
- #define Magenta 0xFF00FFFFT
- #define Navy 0x000080AA
- #define Aqua 0xF0F8FFAA
- #define Crimson 0xDC143CAA
- #define Black 0x000000AA
- #define Brown 0XA52A2AAA
- #define Gold 0xB8860BAA
- #define Limegreen 0x32CD32AA
- new giveplayerid;
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- dcmd(heal, 4, cmdtext);
- dcmd(trytohealself, 13, cmdtext);
- return 0;
- }
- stock Float:GetDistanceBetweenPlayers(p1,p2){
- new Float:x1,Float:y1,Float:z1,Float:x3,Float:y3,Float:z3;
- if (!IsPlayerConnected(p1) || !IsPlayerConnected(p2)){
- return -1.00;
- }
- GetPlayerPos(p1,x1,y1,z1);
- GetPlayerPos(p2,x3,y3,z3);
- return floatsqroot(floatpower(floatabs(floatsub(x3,x1)),2)+floatpower(floatabs(floatsub(y3,y1)),2)+floatpower(floatabs(floatsub(z3,z1)),2));
- }
- dcmd_heal(playerid, params[])
- {
- if(GetPVarInt(playerid,"HEALABUSE")>GetTickCount()) return SendClientMessage(playerid, Red, "ERROR : You have to wait before healing again!");
- new skinid = GetPlayerSkin(playerid);
- if(skinid == 274 || skinid == 275 || skinid == 276)
- {
- new Float:health;
- new healthee = GetPlayerHealth(giveplayerid, health);
- if(sscanf(params, "u", giveplayerid)) SendClientMessage(playerid, Orange, "USAGE : /heal <playerid>");
- else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, Red, "ERROR : That player is not connected!");
- else if (giveplayerid == playerid) SendClientMessage(playerid, Red, "ERROR : You cant heal yourself!");
- else if (GetDistanceBetweenPlayers(playerid, giveplayerid) > DISTANCE_BETWEEN_PLAYERS){ new string[106]; new name[MAX_PLAYER_NAME]; GetPlayerName(giveplayerid, name, sizeof(name)); format(string, sizeof(string), "ERROR : You must be close to %s before you can heal him!",name);SendClientMessage(playerid, Red, string);}
- else if (healthee == 100){ new string[106]; new name[MAX_PLAYER_NAME]; GetPlayerName(giveplayerid, name, sizeof(name)); format(string, sizeof(string), "ERROR : You cant heal %s! The player has a full health!",name); SendClientMessage(playerid, Red, string);}
- else
- {
- GetPlayerHealth(playerid, health);
- SetPlayerHealth(giveplayerid, 100);
- new name[MAX_PLAYER_NAME], pname[MAX_PLAYER_NAME];
- GetPlayerName(giveplayerid, name, sizeof(name)); GetPlayerName(playerid, pname, sizeof(pname));
- new string[106];
- format(string, sizeof(string), "SERVER : You have healed player %s", name);
- SendClientMessage(playerid, Limegreen, string);
- format(string, sizeof(string), "SERVER : Player %s has healed you!", pname);
- SetPVarInt(playerid,"HEALABUSE",GetTickCount()+WAIT_BEFORE_HEALING_AGAIN_TIME);
- SendClientMessage(giveplayerid, Limegreen, string);
- }
- }
- else
- {
- SendClientMessage(playerid, Red, "ERROR : Your not a Medic!");
- }
- return 1;
- }
- dcmd_trytohealself(playerid, params[])
- {
- if(GetPVarInt(playerid,"HEALSELFABUSE")>GetTickCount()) return SendClientMessage(playerid, Red, "ERROR : You have to wait before healing yourself again!");
- new Float:health; new skinid = GetPlayerSkin(playerid);
- #pragma unused params
- SetPVarInt(playerid,"HEALSELFABUSE",GetTickCount()+WAIT_BEFORE_HEALING_YOURSELF_AGAIN_TIME);
- if(skinid == 274 || skinid == 275 || skinid == 276)
- {
- switch(random(2))
- {
- case 0:SendClientMessage(playerid, Limegreen, "You have succesfully healed yourself!"), GetPlayerHealth(playerid, health),SetPlayerHealth(playerid, health+100);
- case 1:SendClientMessage(playerid, Red, "ERROR : Wrong healing procedure! You lost 25 health!"), GetPlayerHealth(playerid, health),SetPlayerHealth(playerid, health-25);
- }
- }
- else
- {
- switch(random(4))
- {
- case 0:SendClientMessage(playerid, Limegreen, "You have succesfully healed yourself!"), GetPlayerHealth(playerid, health),SetPlayerHealth(playerid, health+100);
- case 1:SendClientMessage(playerid, Red, "ERROR : Wrong healing procedure! You lost 50 health!"), GetPlayerHealth(playerid, health),SetPlayerHealth(playerid, health-50);
- case 2:SendClientMessage(playerid, Red, "ERROR : Wrong healing procedure! You lost 25 health!"), GetPlayerHealth(playerid, health),SetPlayerHealth(playerid, health-25);
- case 3:SendClientMessage(playerid, Red, "ERROR : You have worsen the wound! You bleeded to death!"), GetPlayerHealth(playerid, health),SetPlayerHealth(playerid, 0);
- }
- }
- return 1;
- }
- 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':
- {
- new changestr[16], changepos = 0, strpos = stringPos;
- while(changepos < 16 && string[strpos] && string[strpos] != delim)
- {
- changestr[changepos++] = string[strpos++];
- }
- changestr[changepos] = '\0';
- setarg(paramPos,0,_:floatstr(changestr));
- }
- 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