rendered paste body//--------------------------------------------------------
//You need to use strtok for this to work.
//--------------------------------------------------------
#define CallCost 2
new Calling[MAX_PLAYERS];
new Answered[MAX_PLAYERS];
new Callerid[MAX_PLAYERS];
new Dialing[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
Calling[playerid] = -1;
Answered[playerid] = 0;
Callerid[playerid] = 0;
Dialing[playerid] = -1;
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new string[256];
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
new cmd[256];
new tmp[256];
new giveplayerid;
if(strcmp(cmd, "/call", true) == 0)
{
tmp = strtok(cmdtext, idx);
if (!strlen(tmp)) {
SendClientMessage(playerid, 0xFFFFFFAA, "Usage: /call [playerid]");
return 1;
}
giveplayerid = strval(tmp);
if (!(IsPlayerConnected(giveplayerid)))
{
SendClientMessage(playerid, 0xFF0000AA, "Inactive player id!");
return 1;
}
if (GetPlayerMoney(playerid) < CallCost)
{
SendClientMessage(playerid, 0xFF0000AA, "You do not have enough money to make a phone call!");
return 1;
}
if (giveplayerid == playerid)
{
SendClientMessage(playerid, 0xFF0000AA, "You cannot call yourself!");
return 1;
}
if (Calling[playerid] == giveplayerid && Callerid[playerid] != 1 && Answered[playerid] == 0)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "%s is already trying to ring you!", giveplayer);
SendClientMessage(playerid, 0xFFFFFFAA, string);
return 1;
}
if (Calling[playerid] > -1 && Callerid[playerid] != 1 && Answered[playerid] == 0)
{
GetPlayerName(Calling[playerid], giveplayer, sizeof(giveplayer));
GetPlayerName(giveplayerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s is trying to ring you, you must hang up before you can ring %s!", giveplayer, sendername);
SendClientMessage(playerid, 0xFFFFFFAA, string);
return 1;
}
if (Calling[playerid] == giveplayerid && Answered[playerid] == 0)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "You are already trying to ring %s", giveplayer);
SendClientMessage(playerid, 0xFFFFFFAA, string);
return 1;
}
if (Calling[playerid] > -1 && Answered[playerid] == 0)
{
GetPlayerName(Calling[playerid], giveplayer, sizeof(giveplayer));
GetPlayerName(giveplayerid, sendername, sizeof(sendername));
format(string, sizeof(string), "You are currently trying to ring %s and must hang up to call %s", giveplayer, sendername);
SendClientMessage(playerid, COLOR_0xFFFFFFAA, string);
return 1;
}
if (Calling[playerid] > -1 && Answered[playerid] == 1)
{
GetPlayerName(Calling[playerid], giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "You are already on the phone to %s!", giveplayer);
SendClientMessage(playerid, COLOR_0xFFFFFFAA, string);
return 1;
}
if (Calling[giveplayerid] > -1)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "%s is already on the phone, try again later", giveplayer);
SendClientMessage(playerid, 0xFF9900AA, string);
return 1;
}
else
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s is ringing you, type /answer to answer the call or /hangup to ignore it", sendername);
SendClientMessage(giveplayerid, 0xFFFF00AA, string);
format(string, sizeof(string), "You are ringing %s", giveplayer);
SendClientMessage(playerid, COLOR_0xFFFF00AA, string);
Calling[playerid] = giveplayerid;
Calling[giveplayerid] = playerid;
Callerid[playerid] = 1;
Dialing[playerid] = 30;
return 1;
}
if(strcmp(cmd, "/answer", true) == 0)
{
if (Calling[playerid] == -1)
{
SendClientMessage(playerid, 00xFF0000AA, "Nobody is calling you!");
return 1;
}
if (Answered[playerid] == 1)
{
SendClientMessage(playerid, 00xFF9900AA, "You are already on the phone!");
return 1;
}
else
GetPlayerName(Calling[playerid], giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s has answered your call, talk away", sendername);
SendClientMessage(Calling[playerid], 00x33CCFFAA, string);
format(string, sizeof(string), "You have answered %s's call, talk away", giveplayer);
SendClientMessage(playerid, 00x33CCFFAA, string);
Answered[playerid] = 1;
Answered[Calling[playerid]] = 1;
Callerid[Calling[playerid]] = 1;
Dialing[Calling[playerid]] = -1;
return 1;
}
if(strcmp(cmd, "/hangup", true) == 0)
{
if (Calling[playerid] == -1)
{
SendClientMessage(playerid, 00xFF0000AA, "You are not on the phone!");
return 1;
}
else
{
GetPlayerName(Calling[playerid], giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s has hung up the phone on you", sendername);
SendClientMessage(Calling[playerid], 0xFF9900AA, string);
format(string, sizeof(string), "You have hung up on %s", giveplayer);
SendClientMessage(playerid, 0xFFFFFFAA, string);
Calling[playerid] = -1;
Answered[playerid] = 0;
Callerid[playerid] = 0;
Calling[Calling[playerid]] = -1;
Answered[Calling[playerid]] = 0;
Callerid[Calling[playerid]] = 0;
Dialing[Calling[playerid]] = -1;
}
return 1;
}
return 0;
}
public OnPlayerText(playerid, text[])
{
if (!IsPlayerConnected(playerid)) {
return 0;
}
if (Calling[playerid] > -1 && Answered[playerid] == 1)
{
new string[256];
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s: %s", sendername, text);
SendClientMessage(Calling[playerid], 0xFFFFFFAA, string);
format(string, sizeof(string), "%s: %s", sendername, text);
SendClientMessage(playerid, 0x0AFF0AAA, string);
format(string, sizeof(string), "%s: %s", sendername, text);
print(string);
format(string, sizeof(string), "%s: %s", sendername, text);
print(string);
return 0;
}
return 1;
}
public OnGameModeInit()
{
SetTimer("PhoneCut",1000,1);
return 1;
}
public PhoneCut()
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{
if (Calling[i] > -1 && Answered[i] == 1 && Callerid[i] == 1)
{
if (GetPlayerMoney(i) >= CallCost)
{
GivePlayerMoney(i, -CallCost);
}
if (GetPlayerMoney(i) < CallCost)
{
SendClientMessage(i, 0xFF0000AA, "CUT OFF: You don't have enough cash to continue this call");
SendClientMessage(Calling[i], 0xFF0000AA, "CUT OFF: Your recipient's phone has been cut off due to lack of credit");
Calling[Calling[i]] = -1;
Answered[Calling[i]] = 0;
Calling[i] = -1;
Answered[i] = 0;
Callerid[i] = 0;
}
}
if (Calling[i] > -1 && (!(IsPlayerConnected(Calling[i]))))
{
SendClientMessage(i, 0xFF0000AA, "CUT OFF: Your recipitent is no longer connected to the server");
Calling[i] = -1;
Answered[i] = 0;
if (Callerid[i] == 1)
{
Callerid[i] = 0;
}
}
if (Dialing[i] > 0)
{
Dialing[i] --;
}
if (Dialing[i] == 0)
{
new string[256];
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
GetPlayerName(Calling[i], giveplayer, sizeof(giveplayer));
GetPlayerName(i, sendername, sizeof(sendername));
format(string, sizeof(string), "%s has failed to answer your call, try again later", giveplayer);
SendClientMessage(i, 0xFF0000AA, string);
format(string, sizeof(string), "You have failed to answer %s's call", sendername);
SendClientMessage(Calling[i], 0xFF0000AA, string);
Calling[Calling[i]] = -1;
Dialing[i] = -1;
Calling[i] = -1;
Callerid[i] = 0;
}
if (Dialing[i] == -1)
{
}
}
}
return 1;
}