25.12.2016, 16:20
Hi, I made a whisper command, but I want it to work like that a player can type other player's part of name, id or mask id to whisper him. Here's the GetMaskPlayerID function and the command:
What I tried to do is
but then I realized that if I try to type in a mask id then sscanf will return 65535 because the mask id is an invalid player id so I can't use GetMaskPlayerID. So how would it be possible to use both u specifier and GetMaskPlayerID?
Also I have another question: shall I use normal variables or static variables (e.g for "targetid") in commands?
Код:
GetMaskPlayerID(maskid) { for (new i, j = GetPlayerPoolSize(); i <= j; i++) if (IsPlayerConnected(i) && PlayerInfo[i][pMaskID] == maskid) return i; return INVALID_PLAYER_ID; } CMD:whisper(playerid, params[]) { new targetid, text[128]; if (PlayerInfo[playerid][pDeathState] == DEATH_STATE_DEAD) return SendClientMessage(playerid, COLOR_LIGHTRED, "You can't whisper anyone while being dead."); if (sscanf(params, "us[128]", targetid, text)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /whisper [playerid/name/maskid] [text]"); if (targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_LIGHTRED, "You have specified an invalid player."); if (!IsPlayerNearPlayer(playerid, targetid, 2.5)) return SendClientMessage(playerid, COLOR_LIGHTRED, "You are near the specified player."); if (strlen(params) > 64) { SendClientMessageEx(playerid, COLOR_YELLOW, "* You whisper to %s: %.64s", GetName(targetid, 0), text); SendClientMessageEx(playerid, COLOR_YELLOW, "...%s", text[64]); SendClientMessageEx(targetid, COLOR_YELLOW, "* %s whispers you: %.64s", GetName(playerid, 0), text); SendClientMessageEx(targetid, COLOR_YELLOW, "...%s", text[64]); } else { SendClientMessageEx(playerid, COLOR_YELLOW, "* You whisper to %s: %s", GetName(targetid, 0), text); SendClientMessageEx(targetid, COLOR_YELLOW, "* %s whispers you: %s", GetName(playerid, 0), text); } return 1; }
Код:
if (targetid == INVALID_PLAYER_ID && GetMaskPlayerID(targetid) == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_LIGHTRED, "You have specified an invalid player.");
Also I have another question: shall I use normal variables or static variables (e.g for "targetid") in commands?