All pastes #482762 Raw Edit

Something

public text v1 · immutable
·published 2007-05-11 12:09 UTC
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;
}