12.06.2009, 13:54
I'm not sure as to exactly what it is that you're looking for, but I took this from the GF. When a cop says "handsup" near the suspect, it should force the suspect to put their hands up.
Код:
strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } public OnPlayerText(playerid, text[]) { new idx; tmp = strtok(text, idx); if ((strcmp("handsup", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("handsup"))) { if(IsPlayerConnected(playerid)) { if(IsACop(playerid)) { new suspect = GetClosestPlayer(playerid); if(IsPlayerConnected(suspect)) { if(GetDistanceBetweenPlayers(playerid,suspect) < 5) { if(GetPlayerState(suspect) == PLAYER_STATE_ONFOOT) { SetPlayerSpecialAction(suspect,SPECIAL_ACTION_HANDSUP); return 1; } } } } } } } forward GetClosestPlayer(p1); public GetClosestPlayer(p1) { new x,Float:dis,Float:dis2,player; player = -1; dis = 99999.99; for (x=0;x<MAX_PLAYERS;x++) { if(IsPlayerConnected(x)) { if(x != p1) { dis2 = GetDistanceBetweenPlayers(x,p1); if(dis2 < dis && dis2 != -1.00) { dis = dis2; player = x; } } } } return player; } forward Float:GetDistanceBetweenPlayers(p1,p2); public Float:GetDistanceBetweenPlayers(p1,p2) { new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2; if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2)) { return -1.00; } GetPlayerPos(p1,x1,y1,z1); GetPlayerPos(p2,x2,y2,z2); return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2)); }