Hey I found a PPC_BizzSystem - Now when I /createbizz this is show me dialog and I choose for example 24/7 this is not create pickup next me , heres the filterscript info :
Код:
// Make sure you don't get warnings about tabsize
#pragma tabsize 0
// Include default files
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <streamer>
// ******************************************************************************************************************************
// Settings that can be changed
// ******************************************************************************************************************************
// Default max number of players is set to 500, re-define it to 50
#undef MAX_PLAYERS
#define MAX_PLAYERS 50
// Define housing parameters
#define MAX_BUSINESS 500 // Defines the maximum number of businesses that can be created
#define MAX_BUSINESSPERPLAYER 20 // Defines the maximum number of businesses that any player can own (useable values: 1 to 20)
// Define path to business-files
#define BusinessFile "PPC_Business/Business%i.ini"
#define BusinessTimeFile "PPC_Business/BusinessTime.ini"
// Set the exit-time for exiting a business (required if you use custom-made islands, otherwise you'll fall into the water)
// Default: 1 second (1000 milliseconds)
new ExitBusinessTimer = 1000;
// Define Dialogs
#define DialogCreateBusSelType 2001
#define DialogBusinessNameChange 2002
#define DialogSellBusiness 2003
#define DialogBusinessMenu 2004
#define DialogGoBusiness 2005
// ******************************************************************************************************************************
// Enums and the array-setups that use them
// ******************************************************************************************************************************
// Setup a custom type that holds all data for businesses
enum TBusinessData
{
PickupID, // Holds the pickup-id that is linked to this business
Text3D:DoorText, // Holds the reference to the 3DText above the business's pickup
MapIconID, // Holds the ID of the mapicon for the business
BusinessName[100], // Holds the name of the business (this will be displayed above the pickup near the business when it's owned)
Float:BusinessX, // Holds the X-coordinate of the pickup for the Business
Float:BusinessY, // Holds the Y-coordinate of the pickup for the Business
Float:BusinessZ, // Holds the Z-coordinate of the pickup for the Business
BusinessType, // Holds the type of business (well stacked pizza, burger shot, ...), this defines which icon and interior to use
BusinessLevel, // Holds the level of upgrades the business has
LastTransaction, // Holds the amount of minutes when the last transaction took place (buying the business or retrieving the money by the owner)
bool:Owned, // Holds true if the Business is owned by somebody
Owner[24] // Holds the name of the owner of the Business
}
// Holds the data for all houses
new ABusinessData[MAX_BUSINESS][TBusinessData];
// This variable holds the business-time (this value is increased every hour and is used to calculate the amount of money a business
// has generated after the last transaction of the business)
new BusinessTransactionTime;
// Setup a custom type that holds all data about a business
enum TBusinessType
{
InteriorName[50], // Holds the name of the interior
InteriorID, // Holds the interior-id
Float:IntX, // Holds the X-coordinate of the spawn-location where you enter the business
Float:IntY, // Holds the Y-coordinate of the spawn-location where you enter the business
Float:IntZ, // Holds the Z-coordinate of the spawn-location where you enter the business
BusPrice, // Holds the price for the business
BusEarnings, // Holds the earnings for this type of business (a business earns this money every minute even when the player is offline)
// The earnings may not seem that high, but earning $5 every minute will earn you $7200 every day, even when you're offline
// These are multiplied by the level of your business, so a level 5 business earns you $36000 every day
// Using the default buying prices, you'll need about 70 days to refund your business and start making money with it
IconID // Holds the icon-id which represents the business
}
// Holds the data for all interiors for businesses
new ABusinessInteriors[][TBusinessType] =
{
{"Dummy", 0, 0.0, 0.0, 0.0, 0, 0, 0}, // Dummy business (Type 0), never used
{"24/7 (Small)", 6, -26.75, -55.75, 1003.6, 500000, 5, 52}, // Type 1 (earnings per day: $7200)
{"24/7 (Medium)", 18, -31.0, -89.5, 1003.6, 700000, 7, 52}, // Type 2 (earnings per day: $10080)
{"Bar", 11, 502.25, -69.75, 998.8, 400000, 4, 49}, // Type 3 (earnings per day: $5760)
{"Barber (Small)", 2, 411.5, -21.25, 1001.8, 300000, 3, 7}, // Type 4 (earnings per day: $4320)
{"Barber (Medium)", 3, 418.75, -82.5, 1001.8, 400000, 4, 7}, // Type 5 (earnings per day: $5760)
{"Betting shop", 3, 833.25, 7.0, 1004.2, 1500000, 15, 52}, // Type 6 (earnings per day: $21600)
{"Burger Shot", 10, 363.5, -74.5, 1001.5, 700000, 7, 10}, // Type 7 (earnings per day: $10080)
{"Casino (4 Dragons)", 10, 2017.25, 1017.75, 996.9, 2500000, 25, 44}, // Type 8 (earnings per day: $36000)
{"Casino (Caligula's)", 1, 2234.0, 1710.75, 1011.3, 2500000, 25, 25}, // Type 9 (earnings per day: $36000)
{"Casino (Small)", 12, 1133.0, -9.5, 1000.7, 2000000, 20, 43}, // Type 10 (earnings per day: $28800)
{"Clothing (Binco)", 15, 207.75, -109.0, 1005.2, 800000, 8, 45}, // Type 11 (earnings per day: $11520)
{"Clothing (Pro)", 3, 207.0, -138.75, 1003.5, 800000, 8, 45}, // Type 12 (earnings per day: $11520)
{"Clothing (Urban)", 1, 203.75, -48.5, 1001.8, 800000, 8, 45}, // Type 13 (earnings per day: $11520)
{"Clothing (Victim)", 5, 226.25, -7.5, 1002.3, 800000, 8, 45}, // Type 14 (earnings per day: $11520)
{"Clothing (ZIP)", 18, 161.5, -92.25, 1001.8, 800000, 8, 45}, // Type 15 (earnings per day: $11520)
{"Cluckin' Bell", 9, 365.75, -10.75, 1001.9, 700000, 7, 14}, // Type 16 (earnings per day: $10080)
{"Disco (Small)", 17, 492.75, -22.0, 1000.7, 1000000, 10, 48}, // Type 17 (earnings per day: $14400)
{"Disco (Large)", 3, -2642.0, 1406.5, 906.5, 1200000, 12, 48}, // Type 18 (earnings per day: $17280)
{"Gym (LS)", 5, 772.0, -3.0, 1000.8, 500000, 5, 54}, // Type 19 (earnings per day: $7200)
{"Gym (SF)", 6, 774.25, -49.0, 1000.6, 500000, 5, 54}, // Type 20 (earnings per day: $7200)
{"Gym (LV)", 7, 774.25, -74.0, 1000.7, 500000, 5, 54}, // Type 21 (earnings per day: $7200)
{"Motel", 15, 2216.25, -1150.5, 1025.8, 1000000, 10, 37}, // Type 22 (earnings per day: $14400)
{"RC shop", 6, -2238.75, 131.0, 1035.5, 600000, 6, 46}, // Type 23 (earnings per day: $8640)
{"Sex-shop", 3, -100.25, -22.75, 1000.8, 800000, 8, 38}, // Type 24 (earnings per day: $11520)
{"Slaughterhouse", 1, 933.75, 2151.0, 1011.1, 500000, 5, 50}, // Type 25 (earnings per day: $7200)
{"Stadium (Bloodbowl)", 15, -1394.25, 987.5, 1024.0, 1700000, 17, 33}, // Type 26 (earnings per day: $24480)
{"Stadium (Kickstart)", 14, -1410.75, 1591.25, 1052.6, 1700000, 17, 33}, // Type 27 (earnings per day: $24480)
{"Stadium (8-Track)", 7, -1396.0, -208.25, 1051.2, 1700000, 17, 33}, // Type 28 (earnings per day: $24480)
{"Stadium (Dirt Bike)", 4, -1425.0, -664.5, 1059.9, 1700000, 17, 33}, // Type 29 (earnings per day: $24480)
{"Stripclub (Small)", 3, 1212.75, -30.0, 1001.0, 700000, 7, 48}, // Type 30 (earnings per day: $10080)
{"Stripclub (Large)", 2, 1204.75, -12.5, 1001.0, 900000, 9, 48}, // Type 31 (earnings per day: $12960)
{"Tattoo LS", 16, -203.0, -24.25, 1002.3, 500000, 5, 39}, // Type 32 (earnings per day: $7200)
{"Well Stacked Pizza", 5, 372.25, -131.50, 1001.5, 600000, 6, 29} // Type 33 (earnings per day: $8640)
};
// Setup all the fields required for the player data (Speedometer TextDraw, current job, ...)
enum TPlayerData
{
Business[20], // Holds the BusinessID's of the businesses that the player owns (index of the ABusinessData array), maximum 20 businesses per player
CurrentBusiness // Holds the BusinessID to track in which business the player currently is (used when accessing the businessmenu)
}
// Create an array to hold the playerdata for every player
new APlayerData[MAX_PLAYERS][TPlayerData];
// These variables are used when starting the script and debugging purposes
new TotalBusiness;
// ******************************************************************************************************************************
// Callbacks
// ******************************************************************************************************************************
// The main function (used only once when the server loads)
main()
{
}
// This callback gets called when the server initializes the filterscript
public OnFilterScriptInit()
{
// Load the businesstime-file (which holds the current time for the businesses, used for calculating the earnings every minute)
BusinessTime_Load();
// Loop through all businesses and try to load them (BusID 0 isn't used)
for (new BusID = 1; BusID < MAX_BUSINESS; BusID++)
BusinessFile_Load(BusID); // Try to load the business-file
// Start the businesstimer and run it every minute
SetTimer("Business_TransactionTimer", 1000 * 60, true);
// Print information about the filterscript on the server-console
printf("-------------------------------------");
printf("PPC Business filterscript initialized");
printf("Businesses loaded: %i", TotalBusiness);
printf("-------------------------------------");
return 1;
}
// This callback gets called when a player connects to the server
public OnPlayerConnect(playerid)
{
// Setup local variables
new BusID, BusSlot, Name[24];
// Get the player's name
GetPlayerName(playerid, Name, sizeof(Name));
// Loop through all businesses to find the ones which belong to this player
for (BusID = 1; BusID < MAX_BUSINESS; BusID++)
{
// Check if the business exists
if (IsValidDynamicPickup(ABusinessData[BusID][PickupID]))
{
// Check if the business is owned
if (ABusinessData[BusID][Owned] == true)
{
// Check if the player is the owner of the business
if (strcmp(ABusinessData[BusID][Owner], Name, false) == 0)
{
// Add the BusID to the player's account for faster reference later on
APlayerData[playerid][Business][BusSlot] = BusID;
// Select the next BusSlot
BusSlot++;
}
}
}
}
return 1;
}
// This callback gets called when a player disconnects from the server
public OnPlayerDisconnect(playerid, reason)
{
// Setup local variables
new BusSlot;
// Loop through all businesses the player owns
for (BusSlot = 0; BusSlot < MAX_BUSINESSPERPLAYER; BusSlot++)
{
// Check if the player has a business in this busslot
if (APlayerData[playerid][Business][BusSlot] != 0)
{
// Save the Busfile
BusinessFile_Save(APlayerData[playerid][Business][BusSlot]);
// Clear the BusID stored in this busslot
APlayerData[playerid][Business][BusSlot] = 0;
}
}
// Clear all data for this player
APlayerData[playerid][CurrentBusiness] = 0;
return 1;
}
// This callback gets called when a player interacts with a dialog
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
// Select the proper dialog to process
switch (dialogid)
{
case DialogCreateBusSelType: Dialog_CreateBusSelType(playerid, response, listitem);
case DialogBusinessMenu: Dialog_BusinessMenu(playerid, response, listitem);
case DialogGoBusiness: Dialog_GoBusiness(playerid, response, listitem);
case DialogBusinessNameChange: Dialog_ChangeBusinessName(playerid, response, inputtext); // Change the name of your business
case DialogSellBusiness: Dialog_SellBusiness(playerid, response); // Sell the business
}
return 0;
}
// This callback gets called when a player spawns somewhere
public OnPlayerSpawn(playerid)
{
// Reset the BusID where the player is located
APlayerData[playerid][CurrentBusiness] = 0;
return 1;
}
// This callback gets called whenever a player dies
public OnPlayerDeath(playerid, killerid, reason)
{
// Reset the BusID where the player is located
APlayerData[playerid][CurrentBusiness] = 0;
return 1;
}
// This callback gets called when the player is selecting a class (but hasn't clicked "Spawn" yet)
public OnPlayerRequestClass(playerid, classid)
{
// Reset the BusID where the player is located
APlayerData[playerid][CurrentBusiness] = 0;
return 1;
}
// This callback is called when the player attempts to spawn via class-selection
public OnPlayerRequestSpawn(playerid)
{
// Reset the BusID where the player is located
APlayerData[playerid][CurrentBusiness] = 0;
return 1;
}
// ******************************************************************************************************************************
// Commands
// ******************************************************************************************************************************
// Lets the player add new businesses
CMD:createbizz(playerid, params[])
{
// If a player hasn't logged in properly, he cannot use this command
if (INT_IsPlayerLoggedIn(playerid) == 0) return 0;
// If the player has an insufficient admin-level (he needs level 5 or RCON admin), exit the command
// returning "SERVER: Unknown command" to the player
if (INT_CheckPlayerAdminLevel(playerid, 5) == 0) return 0;
// Setup local variables
new BusinessList[2000];
// Check if the player isn't inside a vehicle
if (GetPlayerVehicleSeat(playerid) == -1)
{
// Construct the list of businesses
for (new BusType = 1; BusType < sizeof(ABusinessInteriors); BusType++)
{
format(BusinessList, sizeof(BusinessList), "%s%s\n", BusinessList, ABusinessInteriors[BusType][InteriorName]);
}
// Let the player choose a business-type via a dialog
ShowPlayerDialog(playerid, DialogCreateBusSelType, DIALOG_STYLE_LIST, "Choose business-type:", BusinessList, "Select", "Cancel");
}
else
SendClientMessage(playerid, 0xFF0000FF, "You must be on foot to create a business");
// Let the server know that this was a valid command
return 1;
}
// This command lets the player delete a business
CMD:delbizz(playerid, params[])
{
// If a player hasn't logged in properly, he cannot use this command
if (INT_IsPlayerLoggedIn(playerid) == 0) return 0;
// If the player has an insufficient admin-level (he needs level 5 or RCON admin), exit the command
// returning "SERVER: Unknown command" to the player
if (INT_CheckPlayerAdminLevel(playerid, 5) == 0) return 0;
// Setup local variables
new file[100], Msg[128];
// Make sure the player isn't inside a vehicle
if (GetPlayerVehicleSeat(playerid) == -1)
{
// Loop through all player-owned businesses
for (new BusID = 1; BusID < MAX_BUSINESS; BusID++)
{
// Check if the business exists
if (IsValidDynamicPickup(ABusinessData[BusID][PickupID]))
{
// Check if the business has no owner
if (ABusinessData[BusID][Owned] == false)
{
// Check if the player is in range of the business-pickup
if (IsPlayerInRangeOfPoint(playerid, 2.5, ABusinessData[BusID][BusinessX], ABusinessData[BusID][BusinessY], ABusinessData[BusID][BusinessZ]))
{
// Clear all data of the business
ABusinessData[BusID][BusinessName] = 0;
ABusinessData[BusID][BusinessX] = 0.0;
ABusinessData[BusID][BusinessY] = 0.0;
ABusinessData[BusID][BusinessZ] = 0.0;
ABusinessData[BusID][BusinessType] = 0;
ABusinessData[BusID][BusinessLevel] = 0;
ABusinessData[BusID][LastTransaction] = 0;
ABusinessData[BusID][Owned] = false;
ABusinessData[BusID][Owner] = 0;
// Destroy the mapicon, 3DText and pickup for the house
DestroyDynamicPickup(ABusinessData[BusID][PickupID]);
DestroyDynamicMapIcon(ABusinessData[BusID][MapIconID]);
DestroyDynamic3DTextLabel(ABusinessData[BusID][DoorText]);
ABusinessData[BusID][PickupID] = 0;
ABusinessData[BusID][MapIconID] = 0;
// Delete the business-file
format(file, sizeof(file), BusinessFile, BusID); // Construct the complete filename for this business-file
if (fexist(file)) // Make sure the file exists
fremove(file); // Delete the file
// Also let the player know he deleted the business
format(Msg, 128, "{00FF00}You have deleted the business with ID: {FFFF00}%i", BusID);
SendClientMessage(playerid, 0xFFFFFFFF, Msg);
// Exit the function
return 1;
}
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You cannot delete an owned business");
}
}
// There was no house in range, so let the player know about it
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}No business in range to delete");
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You must be on foot to delete a business");
// Let the server know that this was a valid command
return 1;
}
// This command lets the player buy a business when he's standing in range of a business that isn't owned yet
CMD:buybizz(playerid, params[])
{
// If a player hasn't logged in properly, he cannot use this command
if (INT_IsPlayerLoggedIn(playerid) == 0) return 0;
// Setup local variables
new Msg[128], BusType;
// Make sure the player isn't inside a vehicle
if (GetPlayerVehicleSeat(playerid) == -1)
{
// Check if the player is near a business-pickup
for (new BusID = 1; BusID < sizeof(ABusinessData); BusID++)
{
// Check if this business is created (it would have a valid pickup in front of the door)
if (IsValidDynamicPickup(ABusinessData[BusID][PickupID]))
{
// Check if the player is in range of the business-pickup
if (IsPlayerInRangeOfPoint(playerid, 2.5, ABusinessData[BusID][BusinessX], ABusinessData[BusID][BusinessY], ABusinessData[BusID][BusinessZ]))
{
// Check if the business isn't owned yet
if (ABusinessData[BusID][Owned] == false)
{
// Get the type of business
BusType = ABusinessData[BusID][BusinessType];
// Check if the player can afford this type of business business
if (INT_GetPlayerMoney(playerid) >= ABusinessInteriors[BusType][BusPrice])
Business_SetOwner(playerid, BusID); // Give ownership of the business to the player
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You cannot afford this business"); // The player cannot afford this business
}
else
{
// Let the player know that this business is already owned by a player
format(Msg, 128, "{FF0000}This business is already owned by {FFFF00}%s", ABusinessData[BusID][Owner]);
SendClientMessage(playerid, 0xFFFFFFFF, Msg);
}
// The player was in range of a business-pickup, so stop searching for the other business pickups
return 1;
}
}
}
// All businesses have been processed, but the player wasn't in range of any business-pickup, let him know about it
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}To buy a business, you have to be near a business-pickup");
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You can't buy a business when you're inside a vehicle");
// Let the server know that this was a valid command
return 1;
}
// This command lets the player enter the house/business if he's the owner
CMD:enterbizz(playerid, params[])
{
// If a player hasn't logged in properly, he cannot use this command
if (INT_IsPlayerLoggedIn(playerid) == 0) return 0;
// Setup local variables
new BusID, BusType;
// Make sure the player isn't inside a vehicle
if (GetPlayerVehicleSeat(playerid) == -1)
{
// Loop through all player-owned businesses
for (new BusSlot; BusSlot < MAX_BUSINESSPERPLAYER; BusSlot++)
{
// Get the business-id at the selected slot from the player
BusID = APlayerData[playerid][Business][BusSlot];
// Check if the player has a business in this slot
if (BusID != 0)
{
// Check if the player is in range of the business-pickup
if (IsPlayerInRangeOfPoint(playerid, 2.5, ABusinessData[BusID][BusinessX], ABusinessData[BusID][BusinessY], ABusinessData[BusID][BusinessZ]))
{
// Get the business-type
BusType = ABusinessData[BusID][BusinessType];
// Set the worldid so other players cannot see him anymore
SetPlayerVirtualWorld(playerid, 2000 + BusID);
// Set the player inside the interior of the business
SetPlayerInterior(playerid, ABusinessInteriors[BusType][InteriorID]);
// Set the position of the player at the spawn-location of the business's interior
SetPlayerPos(playerid, ABusinessInteriors[BusType][IntX], ABusinessInteriors[BusType][IntY], ABusinessInteriors[BusType][IntZ]);
// Also set a tracking-variable to enable /busmenu to track in which business the player is
APlayerData[playerid][CurrentBusiness] = BusID;
// Also let the player know he can use /busmenu to control his business
SendClientMessage(playerid, 0xFFFFFFFF, "{00FF00}Use {FFFF00}/busmenu{00FF00} to change options for your business");
// Exit the function
return 1;
}
}
}
}
// If no business was in range, allow other scripts to use the same command (like the housing-script)
return 0;
}
// This command opens a menu when you're inside your business to allow to access the options of your business
CMD:bizzmenu(playerid, params[])
{
// If a player hasn't logged in properly, he cannot use this command
if (INT_IsPlayerLoggedIn(playerid) == 0) return 0;
// Setup local variables
new OptionsList[200], DialogTitle[200];
// Check if the player is inside a business
if (APlayerData[playerid][CurrentBusiness] != 0)
{
// Create the dialog title
format(DialogTitle, sizeof(DialogTitle), "Select option for %s", ABusinessData[APlayerData[playerid][CurrentBusiness]][BusinessName]);
// Create the options in the dialog
format(OptionsList, sizeof(OptionsList), "%sChange business-name\n", OptionsList);
format(OptionsList, sizeof(OptionsList), "%sUpgrade business\n", OptionsList);
format(OptionsList, sizeof(OptionsList), "%sRetrieve business earnings\n", OptionsList);
format(OptionsList, sizeof(OptionsList), "%sSell business\n", OptionsList);
format(OptionsList, sizeof(OptionsList), "%sExit business\n", OptionsList);
// Show the businessmenu
ShowPlayerDialog(playerid, DialogBusinessMenu, DIALOG_STYLE_LIST, DialogTitle, OptionsList, "Select", "Cancel");
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You're not inside a business");
// Let the server know that this was a valid command
return 1;
}
// This command teleports you to your selected business
CMD:gobus155(playerid, params[])
{
// If a player hasn't logged in properly, he cannot use this command
if (INT_IsPlayerLoggedIn(playerid) == 0) return 0;
// Setup local variables
new BusinessList[1000], BusID, BusType, Earnings;
// Check if the player is not jailed
if (INT_IsPlayerJailed(playerid) == 0)
{
// Check if the player has a wanted level of less than 3
if (GetPlayerWantedLevel(playerid) < 3)
{
// Check if the player is not inside a vehicle
if (GetPlayerVehicleSeat(playerid) == -1)
{
// Ask to which business the player wants to port
for (new BusSlot; BusSlot < MAX_BUSINESSPERPLAYER; BusSlot++)
{
// Get the business-id
BusID = APlayerData[playerid][Business][BusSlot];
// Check if this businessindex is occupied
if (BusID != 0)
{
// Get the business-type
BusType = ABusinessData[BusID][BusinessType];
Earnings = (BusinessTransactionTime - ABusinessData[BusID][LastTransaction]) * ABusinessInteriors[BusType][BusEarnings] * ABusinessData[BusID][BusinessLevel];
format(BusinessList, 1000, "%s{00FF00}%s{FFFFFF} (earnings: $%i)\n", BusinessList, ABusinessData[BusID][BusinessName], Earnings);
}
else
format(BusinessList, 1000, "%s{FFFFFF}%s{FFFFFF}\n", BusinessList, "Empty business-slot");
}
ShowPlayerDialog(playerid, DialogGoBusiness, DIALOG_STYLE_LIST, "Choose the business to go to:", BusinessList, "Select", "Cancel");
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You need to be on-foot to port to your business");
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You cannot use /gobus when you're wanted");
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You cannot use /gobus when you're in jail");
// Let the server know that this was a valid command
return 1;
}
// ******************************************************************************************************************************
// Dialog-responses
// ******************************************************************************************************************************
// This dialog processes the chosen business-type and creates the business
Dialog_CreateBusSelType(playerid, response, listitem)
{
// Just close the dialog if the player clicked "Cancel"
if(!response) return 1;
// Setup some local variables
new BusType, BusID, Float:x, Float:y, Float:z, Msg[128], bool:EmptySlotFound = false;
// Get the player's position
GetPlayerPos(playerid, x, y, z);
// Get the business-type from the option the player chose
BusType = listitem + 1;
// Find a free business-id
for (BusID = 1; BusID < MAX_BUSINESS; BusID++)
{
// Check if this business ID is free
if (ABusinessData[BusID][BusinessType] == 0)
{
EmptySlotFound = true;
break; // Stop processing
}
}
// Check if an empty slot has been found
if (EmptySlotFound == false)
{
// If no empty slot was found, let the player know about it and exit the function
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Maximum number of businesses reached");
return 1;
}
// Set some default data at the index of NextFreeBusinessID (NextFreeBusinessID will point to the next free business-index)
ABusinessData[BusID][BusinessX] = x;
ABusinessData[BusID][BusinessY] = y;
ABusinessData[BusID][BusinessZ] = z;
ABusinessData[BusID][BusinessType] = BusType;
ABusinessData[BusID][BusinessLevel] = 1;
ABusinessData[BusID][Owned] = false;
// Add the pickup and 3DText at the location of the business-entrance (where the player is standing when he creates the business)
Business_CreateEntrance(BusID);
// Save the business
BusinessFile_Save(BusID);
// Inform the player that he created a new house
format(Msg, 128, "{00FF00}You've succesfully created business {FFFF00}%i{00FF00}", BusID);
SendClientMessage(playerid, 0xFFFFFFFF, Msg);
return 1;
}
// This function processes the businessmenu dialog
Dialog_BusinessMenu(playerid, response, listitem)
{
// Just close the dialog if the player clicked "Cancel"
if(!response) return 1;
// Setup local variables
new BusID, BusType, Msg[128], DialogTitle[200], UpgradePrice;
// Get the HouseID of the house where the player is
BusID = APlayerData[playerid][CurrentBusiness];
BusType = ABusinessData[BusID][BusinessType];
// Select an option based on the selection in the list
switch(listitem)
{
case 0: // Change business name
{
format(DialogTitle, 200, "Old business-name: %s", ABusinessData[BusID][BusinessName]);
ShowPlayerDialog(playerid, DialogBusinessNameChange, DIALOG_STYLE_INPUT, DialogTitle, "Enter a new name for your business", "OK", "Cancel");
}
case 1: // Upgrade the business
{
// Check if it's possible to upgrade further
if (ABusinessData[BusID][BusinessLevel] < 5)
{
// Get the upgrade-price
UpgradePrice = ABusinessInteriors[BusType][BusPrice];
// Check if the player can afford the upgrade
if (INT_GetPlayerMoney(playerid) >= UpgradePrice)
{
// Give the current earnings of the business to the player and update the LastTransaction time
Business_PayEarnings(playerid, BusID);
// Upgrade the business 1 level
ABusinessData[BusID][BusinessLevel]++;
// Let the player pay for the upgrade
INT_GivePlayerMoney(playerid, -UpgradePrice);
// Update the 3DText near the business's entrance to show what level the business is
Business_UpdateEntrance(BusID);
// Let the player know about it
format(Msg, 128, "{00FF00}You have upgraded your business to level {FFFF00}%i", ABusinessData[BusID][BusinessLevel]);
SendClientMessage(playerid, 0xFFFFFFFF, Msg);
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You cannot afford the upgrade");
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Your business has reached the maximum level, you cannot upgrade it further");
}
case 2: // Retrieve business earnings
{
// Give the current earnings of the business to the player and update the LastTransaction time
Business_PayEarnings(playerid, BusID);
}
case 3: // Sell business
{
format(Msg, 128, "Are you sure you want to sell your business for $%i?", (ABusinessInteriors[BusType][BusPrice] * ABusinessData[BusID][BusinessLevel]) / 2);
ShowPlayerDialog(playerid, DialogSellBusiness, DIALOG_STYLE_MSGBOX, "Are you sure?", Msg, "Yes", "No");
}
case 4: // Exit the business
{
Business_Exit(playerid, BusID);
}
}
return 1;
}
// Let the player change the name of his business
Dialog_ChangeBusinessName(playerid, response, inputtext[])
{
// Just close the dialog if the player clicked "Cancel" or if the player didn't input any text
if ((!response) || (strlen(inputtext) == 0)) return 1;
// Change the name of the business
format(ABusinessData[APlayerData[playerid][CurrentBusiness]][BusinessName], 100, inputtext);
// Also update the 3DText at the entrance of the business
Business_UpdateEntrance(APlayerData[playerid][CurrentBusiness]);
// Let the player know that the name of his business has been changed
SendClientMessage(playerid, 0xFFFFFFFF, "{00FF00}You've changed the name of your business");
// Save the business-file
BusinessFile_Save(APlayerData[playerid][CurrentBusiness]);
return 1;
}
// Sell the business
Dialog_SellBusiness(playerid, response)
{
// Just close the dialog if the player clicked "Cancel"
if(!response) return 1;
// Get the BusinessID where the player is right now and the business-type
new BusID = APlayerData[playerid][CurrentBusiness];
new BusType = ABusinessData[BusID][BusinessType];
// Set the player in the normal world again
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
// Set the position of the player at the entrance of his business
SetPlayerPos(playerid, ABusinessData[BusID][BusinessX], ABusinessData[BusID][BusinessY], ABusinessData[BusID][BusinessZ]);
// Also clear the tracking-variable to track in which business the player is
APlayerData[playerid][CurrentBusiness] = 0;
// Clear the owner of the business
ABusinessData[BusID][Owned] = false;
ABusinessData[BusID][Owner] = 0;
// Clear the business-name and business-level
ABusinessData[BusID][BusinessName] = 0;
ABusinessData[BusID][BusinessLevel] = 1;
// Refund the player 50% of the worth of the business
INT_GivePlayerMoney(playerid, (ABusinessInteriors[BusType][BusPrice] * ABusinessData[BusID][BusinessLevel]) / 2);
SendClientMessage(playerid, 0xFFFFFFFF, "{00FF00}You've sold your business");
// Clear the business-id from the player
for (new BusSlot; BusSlot < MAX_BUSINESSPERPLAYER; BusSlot++)
{
// If the business-slot if found where the business was added to the player
if (APlayerData[playerid][Business][BusSlot] == BusID)
{
// Clear the business-id
APlayerData[playerid][Business][BusSlot] = 0;
// Stop searching
break;
}
}
// Update the 3DText near the business's entrance to show other players that it's for sale again
Business_UpdateEntrance(BusID);
// Also save the sold business, otherwise the old ownership-data is still there
BusinessFile_Save(BusID);
return 1;
}
// This function processes the /gobus dialog
Dialog_GoBusiness(playerid, response, listitem)
{
// Just close the dialog if the player clicked "Cancel"
if(!response) return 1;
// Setup local variables
new BusIndex, BusID;
// The listitem directly indicates the business-index
BusIndex = listitem;
BusID = APlayerData[playerid][Business][BusIndex];
// Check if this is a valid business (BusID != 0)
if (BusID != 0)
{
// Get the coordinates of the business's entrance
SetPlayerPos(playerid, ABusinessData[BusID][BusinessX], ABusinessData[BusID][BusinessY], ABusinessData[BusID][BusinessZ]);
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You don't have a business in this business-slot");
return 1;
}
// ******************************************************************************************************************************
// File functions
// ******************************************************************************************************************************
// This function loads the file that holds the current business-time
BusinessTime_Load()
{
// Setup local variables
new File:BFile, LineFromFile[100], ParameterName[50], ParameterValue[50];
// Try to load the businesstime file
if (fexist(BusinessTimeFile))
{
BFile = fopen(BusinessTimeFile, io_read); // Open the businesstime-file for reading
fread(BFile, LineFromFile); // Read the first line of the file
// Keep reading until the end of the file is found (no more data)
while (strlen(LineFromFile) > 0)
{
StripNewLine(LineFromFile); // Strip any newline characters from the LineFromFile
sscanf(LineFromFile, "s[50]s[50]", ParameterName, ParameterValue); // Extract parametername and parametervalue
// Store the proper value in the proper place
if (strcmp(ParameterName, "BusinessTime", false) == 0) // If the parametername is correct ("BusinessTime")
BusinessTransactionTime = strval(ParameterValue); // Store the BusinessTime
// Read the next line of the file
fread(BFile, LineFromFile);
}
// Close the file
fclose(BFile);
// Return if the file was read correctly
return 1;
}
else
return 0; // Return 0 if the file couldn't be read (doesn't exist)
}
// This function saves the file that holds the current business-time
BusinessTime_Save()
{
// Setup local variables
new File:BFile, LineForFile[100];
BFile = fopen(BusinessTimeFile, io_write); // Open the businesstime-file for writing
format(LineForFile, 100, "BusinessTime %i\r\n", BusinessTransactionTime); // Construct the line: "BusinessTime <BusinessTransactionTime>"
fwrite(BFile, LineForFile); // And save it to the file
fclose(BFile); // Close the file
return 1;
}
// This function will load the business's datafile (used when the server is started to load all businesses)
BusinessFile_Load(BusID)
{
// Setup local variables
new file[100], File:BFile, LineFromFile[100], ParameterName[50], ParameterValue[50];
// Construct the complete filename for this business-file
format(file, sizeof(file), BusinessFile, BusID);
// Check if the business-file exists
if (fexist(file))
{
// Open the businessfile for reading
BFile = fopen(file, io_read);
// Read the first line of the file
fread(BFile, LineFromFile);
// Keep reading until the end of the file is found (no more data)
while (strlen(LineFromFile) > 0)
{
StripNewLine(LineFromFile); // Strip any newline characters from the LineFromFile
sscanf(LineFromFile, "s[50]s[50]", ParameterName, ParameterValue); // Extract parametername and parametervalue
// Check if there is anything in the LineFromFile (skipping empty lines)
if (strlen(LineFromFile) > 0)
{
// Store the proper value in the proper place
if (strcmp(ParameterName, "BusinessName", false) == 0) // If the parametername is correct ("BusinessName")
format(ABusinessData[BusID][BusinessName], 24, ParameterValue); // Store the BusinessName
if (strcmp(ParameterName, "BusinessX", false) == 0) // If the parametername is correct ("BusinessX")
ABusinessData[BusID][BusinessX] = floatstr(ParameterValue); // Store the BusinessX
if (strcmp(ParameterName, "BusinessY", false) == 0) // If the parametername is correct ("BusinessY")
ABusinessData[BusID][BusinessY] = floatstr(ParameterValue); // Store the BusinessY
if (strcmp(ParameterName, "BusinessZ", false) == 0) // If the parametername is correct ("BusinessZ")
ABusinessData[BusID][BusinessZ] = floatstr(ParameterValue); // Store the BusinessZ
if (strcmp(ParameterName, "BusinessType", false) == 0) // If the parametername is correct ("BusinessType")
ABusinessData[BusID][BusinessType] = strval(ParameterValue); // Store the BusinessType
if (strcmp(ParameterName, "BusinessLevel", false) == 0) // If the parametername is correct ("BusinessLevel")
ABusinessData[BusID][BusinessLevel] = strval(ParameterValue); // Store the BusinessLevel
if (strcmp(ParameterName, "LastTransaction", false) == 0) // If the parametername is correct ("LastTransaction")
ABusinessData[BusID][LastTransaction] = strval(ParameterValue); // Store the LastTransaction
if (strcmp(ParameterName, "Owned", false) == 0) // If the parametername is correct ("Owned")
{
if (strcmp(ParameterValue, "Yes", false) == 0) // If the value "Yes" was read
ABusinessData[BusID][Owned] = true; // House is owned
else
ABusinessData[BusID][Owned] = false; // House is not owned
}
if (strcmp(ParameterName, "Owner", false) == 0) // If the parametername is correct ("Owner")
format(ABusinessData[BusID][Owner], 24, ParameterValue);
}
// Read the next line of the file
fread(BFile, LineFromFile);
}
// Close the file
fclose(BFile);
// Create the business-entrance and set data
Business_CreateEntrance(BusID);
// Increase the amount of businesses loaded
TotalBusiness++;
// Return if the file was read correctly
return 1;
}
else
return 0; // Return 0 if the file couldn't be read (doesn't exist)
}
// This function will save the given business
BusinessFile_Save(BusID)
{
// Setup local variables
new file[100], File:BFile, LineForFile[100];
// Construct the complete filename for this business
format(file, sizeof(file), BusinessFile, BusID);
// Open the business-file for writing
BFile = fopen(file, io_write);
format(LineForFile, 100, "BusinessName %s\r\n", ABusinessData[BusID][BusinessName]); // Construct the line: "BusinessName <BusinessName>"
fwrite(BFile, LineForFile); // And save it to the file
format(LineForFile, 100, "BusinessX %f\r\n", ABusinessData[BusID][BusinessX]); // Construct the line: "BusinessX <BusinessX>"
fwrite(BFile, LineForFile); // And save it to the file
format(LineForFile, 100, "BusinessY %f\r\n", ABusinessData[BusID][BusinessY]); // Construct the line: "BusinessY <BusinessY>"
fwrite(BFile, LineForFile); // And save it to the file
format(LineForFile, 100, "BusinessZ %f\r\n", ABusinessData[BusID][BusinessZ]); // Construct the line: "BusinessZ <BusinessZ>"
fwrite(BFile, LineForFile); // And save it to the file
format(LineForFile, 100, "BusinessType %i\r\n", ABusinessData[BusID][BusinessType]); // Construct the line: "BusinessType <BusinessType>"
fwrite(BFile, LineForFile); // And save it to the file
format(LineForFile, 100, "BusinessLevel %i\r\n", ABusinessData[BusID][BusinessLevel]); // Construct the line: "BusinessLevel <BusinessLevel>"
fwrite(BFile, LineForFile); // And save it to the file
format(LineForFile, 100, "LastTransaction %i\r\n", ABusinessData[BusID][LastTransaction]); // Construct the line: "LastTransaction <LastTransaction>"
fwrite(BFile, LineForFile); // And save it to the file
if (ABusinessData[BusID][Owned] == true) // Check if the business is owned
{
format(LineForFile, 100, "Owned Yes\r\n"); // Construct the line: "Owned Yes"
fwrite(BFile, LineForFile); // And save it to the file
}
else
{
format(LineForFile, 100, "Owned No\r\n"); // Construct the line: "Owned No"
fwrite(BFile, LineForFile); // And save it to the file
}
format(LineForFile, 100, "Owner %s\r\n", ABusinessData[BusID][Owner]); // Construct the line: "Owner <Owner>"
fwrite(BFile, LineForFile); // And save it to the file
fclose(BFile); // Close the file
return 1;
}
// ******************************************************************************************************************************
// Business functions
// ******************************************************************************************************************************
// This timer increases the variable "BusinessTransactionTime" every minute and saves the businesstime file
forward Business_TransactionTimer();
public Business_TransactionTimer()
{
// Increase the variable by one
BusinessTransactionTime++;
// And save it to the file
BusinessTime_Save();
}
// This function returns the first free business-slot for the given player
Player_GetFreeBusinessSlot(playerid)
{
// Check if the player has room for another business (he hasn't bought the maximum amount of businesses per player yet)
// and get the slot-id
for (new BusIndex; BusIndex < MAX_BUSINESSPERPLAYER; BusIndex++) // Loop through all business-slots of the player
if (APlayerData[playerid][Business][BusIndex] == 0) // Check if this business slot is free
return BusIndex; // Return the free BusIndex for this player
// If there were no free business-slots, return "-1"
return -1;
}
// This function sets ownership of the business to the given player
Business_SetOwner(playerid, BusID)
{
// Setup local variables
new BusSlotFree, Name[24], Msg[128], BusType;
// Get the first free business-slot from this player
BusSlotFree = Player_GetFreeBusinessSlot(playerid);
// Check if the player has a free business-slot
if (BusSlotFree != -1)
{
// Get the player's name
GetPlayerName(playerid, Name, sizeof(Name));
// Store the business-id for the player
APlayerData[playerid][Business][BusSlotFree] = BusID;
// Get the business-type
BusType = ABusinessData[BusID][BusinessType];
// Let the player pay for the business
INT_GivePlayerMoney(playerid, -ABusinessInteriors[BusType][BusPrice]);
// Set the business as owned
ABusinessData[BusID][Owned] = true;
// Store the owner-name for the business
format(ABusinessData[BusID][Owner], 24, Name);
// Set the level to 1
ABusinessData[BusID][BusinessLevel] = 1;
// Set the default business-name
format(ABusinessData[BusID][BusinessName], 100, ABusinessInteriors[BusType][InteriorName]);
// Store the current transaction-time (this is used so the player can only retrieve cash from the business from the moment he bought it)
ABusinessData[BusID][LastTransaction] = BusinessTransactionTime;
// Also, update 3DText of this business
Business_UpdateEntrance(BusID);
// Save the business-file
BusinessFile_Save(BusID);
// Let the player know he bought the business
format(Msg, 128, "{00FF00}You've bought the business for {FFFF00}$%i", ABusinessInteriors[BusType][BusPrice]);
SendClientMessage(playerid, 0xFFFFFFFF, Msg);
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You already own the maximum amount of allowed businesses per player");
return 1;
}
// This function adds a pickup for the given business
Business_CreateEntrance(BusID)
{
// Setup local variables
new Msg[128], Float:x, Float:y, Float:z, BusType, Icon;
// Get the coordinates of the house's pickup (usually near the door)
x = ABusinessData[BusID][BusinessX];
y = ABusinessData[BusID][BusinessY];
z = ABusinessData[BusID][BusinessZ];
// Get the business-type and icon
BusType = ABusinessData[BusID][BusinessType];
Icon = ABusinessInteriors[BusType][IconID];
// Add a dollar-sign to indicate this business
ABusinessData[BusID][PickupID] = CreateDynamicPickup(1274, 1, x, y, z, 0);
// Add a map-icon depending on which type the business is
ABusinessData[BusID][MapIconID] = CreateDynamicMapIcon(x, y, z, Icon, 0, 0, 0, -1, 150.0);
// Add a new 3DText at the business's location (usually near the door)
if (ABusinessData[BusID][Owned] == true)
{
// Create the 3DText that appears above the business-pickup (displays the businessname, the name of the owner and the current level)
format(Msg, 128, "%s\nOwned by: %s\nBusiness-level: %i\n/enter", ABusinessData[BusID][BusinessName], ABusinessData[BusID][Owner], ABusinessData[BusID][BusinessLevel]);
ABusinessData[BusID][DoorText] = CreateDynamic3DTextLabel(Msg, 0x008080FF, x, y, z + 1.0, 50.0);
}
else
{
// Create the 3DText that appears above the business-pickup (displays the price of the business and the earnings)
format(Msg, 128, "%s\nAvailable for\n$%i\nEarnings: $%i\n/buybus", ABusinessInteriors[BusType][InteriorName], ABusinessInteriors[BusType][BusPrice], ABusinessInteriors[BusType][BusEarnings]);
ABusinessData[BusID][DoorText] = CreateDynamic3DTextLabel(Msg, 0x008080FF, x, y, z + 1.0, 50.0);
}
}
// This function changes the 3DText for the given business (used when buying or selling a business)
Business_UpdateEntrance(BusID)
{
// Setup local variables
new Msg[128], BusType;
// Get the business-type
BusType = ABusinessData[BusID][BusinessType];
// Update the 3DText at the business's location (usually near the door)
if (ABusinessData[BusID][Owned] == true)
{
// Create the 3DText that appears above the business-pickup (displays the businessname, the name of the owner and the current level)
format(Msg, 128, "%s\nOwned by: %s\nBusiness-level: %i\n/enter", ABusinessData[BusID][BusinessName], ABusinessData[BusID][Owner], ABusinessData[BusID][BusinessLevel]);
UpdateDynamic3DTextLabelText(ABusinessData[BusID][DoorText], 0x008080FF, Msg);
}
else
{
// Create the 3DText that appears above the business-pickup (displays the price of the business and the earnings)
format(Msg, 128, "%s\nAvailable for\n$%i\nEarnings: $%i\n/buybus", ABusinessInteriors[BusType][InteriorName], ABusinessInteriors[BusType][BusPrice], ABusinessInteriors[BusType][BusEarnings]);
UpdateDynamic3DTextLabelText(ABusinessData[BusID][DoorText], 0x008080FF, Msg);
}
}
// This function pays the current earnings of the given business to the player
Business_PayEarnings(playerid, BusID)
{
// Setup local variables
new Msg[128];
// Get the business-type
new BusType = ABusinessData[BusID][BusinessType];
// Calculate the earnings of the business since the last transaction
// This is calculated by the number of minutes between the current business-time and last business-time, multiplied by the earnings-per-minute and business-level
new Earnings = (BusinessTransactionTime - ABusinessData[BusID][LastTransaction]) * ABusinessInteriors[BusType][BusEarnings] * ABusinessData[BusID][BusinessLevel];
// Reset the last transaction time to the current time
ABusinessData[BusID][LastTransaction] = BusinessTransactionTime;
// Reward the player with his earnings
INT_GivePlayerMoney(playerid, Earnings);
// Inform the player that he has earned money from his business
format(Msg, 128, "{00FF00}Your business has earned {FFFF00}$%i{00FF00} since your last withdrawl", Earnings);
SendClientMessage(playerid, 0xFFFFFFFF, Msg);
}
// This function is used to spawn back at the entrance of your business
Business_Exit(playerid, BusID)
{
// Set the player in the normal world again
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
// Set the position of the player at the entrance of his business
SetPlayerPos(playerid, ABusinessData[BusID][BusinessX], ABusinessData[BusID][BusinessY], ABusinessData[BusID][BusinessZ]);
// Also clear the tracking-variable to track in which business the player is
APlayerData[playerid][CurrentBusiness] = 0;
// Check if there is a timer-value set for exiting the business (this timer freezes the player while the environment is being loaded)
if (ExitBusinessTimer > 0)
{
// Don't allow the player to fall
TogglePlayerControllable(playerid, 0);
// Let the player know he's frozen while the environment loads
GameTextForPlayer(playerid, "Waiting for the environment to load", ExitBusinessTimer, 4);
// Start a timer that will allow the player to fall again when the environment has loaded
SetTimerEx("Business_ExitTimer", ExitBusinessTimer, false, "ii", playerid, BusID);
}
return 1;
}
forward Business_ExitTimer(playerid, BusID);
public Business_ExitTimer(playerid, BusID)
{
// Allow the player to move again (environment should have been loaded now)
TogglePlayerControllable(playerid, 1);
return 1;
}
// ******************************************************************************************************************************
// Support functions
// ******************************************************************************************************************************
// This function is copied from the include-file "dutils.inc"
stock StripNewLine(string[])
{
new len = strlen(string); // Get the length of the given string
if (string[0] == 0) return ; // If the given string is empty, exit the function
if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) // If the string ends with \n or \r
{
string[len - 1] = 0; // Replace the \n or \r with a 0 character
if (string[0]==0) return ; // If the string became empty, exit the function
if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) // Check again if the string ends with \n or \r
string[len - 2] = 0; // Replace the \n or \r again with a 0 character
}
}
// ******************************************************************************************************************************
// Special functions that try to access external public functions to retreive or set data from another script
// ******************************************************************************************************************************
// This function is used to get the player's money
INT_GetPlayerMoney(playerid)
{
// Setup local variables
new Money;
// Try to call the external function to get the player's money (used to get the serversided money for this player)
Money = CallRemoteFunction("Admin_GetPlayerMoney", "i", playerid);
// The external function returned "0" (as the player doesn't have any money yet), or the function is not used in another script
if (Money == 0)
return GetPlayerMoney(playerid); // Return the normal money of the player
else
return Money; // Return the money that was returned by the external function
}
// This function is used to set the player's money
INT_GivePlayerMoney(playerid, Money)
{
// Setup local variables
new Success;
// Try to call the external function to get the player's money (used to get the serversided money for this player)
Success = CallRemoteFunction("Admin_GivePlayerMoney", "ii", playerid, Money);
// The external function returned "0" as the function is not used in another script
if (Success == 0)
GivePlayerMoney(playerid, Money); // Use the normal money (client-sided money)
}
// This function checks if the admin-level of a player is sufficient
INT_CheckPlayerAdminLevel(playerid, AdminLevel)
{
// Setup local variables
new Level;
// Check if the player is an RCON admin
if (IsPlayerAdmin(playerid))
return 1; // Return 1 to indicate this player has a sufficient admin-level to use a command
// If the player is not an RCON admin, try to get his admin-level from an external script using a remote function
Level = CallRemoteFunction("Admin_GetPlayerAdminLevel", "i", playerid);
// Check if the player has a sufficient admin-level
if (Level >= AdminLevel)
return 1; // Return 1 to indicate this player has a sufficient admin-level
else
return 0; // Return 0 to indicate this player has an insufficient admin-level
}
// This function checks if the player has logged in properly by entering his password
INT_IsPlayerLoggedIn(playerid)
{
// Setup local variables
new LoggedIn;
// Try to determine if the player logged in properly by entering his password in another script
LoggedIn = CallRemoteFunction("Admin_IsPlayerLoggedIn", "i", playerid);
// Check if the player has logged in properly
switch (LoggedIn)
{
case 0: return 1; // No admin script present that holds the LoggedIn status of a player, so allow a command to be used
case 1: return 1; // The player logged in properly by entering his password, allow commands to be used
case -1: return 0; // There is an admin script present, but the player hasn't entered his password yet, so block all commands
// This prevents executing the commands using F6 during login with an admin-account before entering a password
}
// In any other case, block all commands
return 0;
}
// This function tries to cetermine if the player is in jail
INT_IsPlayerJailed(playerid)
{
// Setup local variables
new Jailed;
// Try to determine if the player is jailed
Jailed = CallRemoteFunction("Admin_IsPlayerJailed", "i", playerid);
// Check if the player is jailed
switch (Jailed)
{
case 0: return 0; // No admin script present, so there is no jail either, player cannot be jailed in this case
case 1: return 1; // The player is jailed, so return "1"
case -1: return 0; // There is an admin script present, but the player isn't jailed
}
// In any other case, return "0" (player not jailed)
return 0;
}
// ******************************************************************************************************************************
// External functions to be used from within other filterscripts or gamemode (these aren't called anywhere inside this script)
// These functions can be called from other filterscripts or the gamemode to get data from the housing filterscript
// ******************************************************************************************************************************
// ******************************************************************************************************************************
// Functions that need to be placed in the gamemode or filterscript which holds the playerdata
// Only needed when the server uses server-sided money, otherwise the normal money is used
// ******************************************************************************************************************************
/*
// This function is used to get the player's money
forward Admin_GetPlayerMoney(playerid);
public Admin_GetPlayerMoney(playerid)
{
return APlayerData[playerid][PlayerMoney];
}
// This function is used to get the player's money
forward Admin_GivePlayerMoney(playerid, Money);
public Admin_GivePlayerMoney(playerid, Money)
{
// Add the given money to the player's account
APlayerData[playerid][PlayerMoney] = APlayerData[playerid][PlayerMoney] + Money;
// Return that the function had success
return 1;
}
// This function is used to get the player's admin-level
forward Admin_GetPlayerAdminLevel(playerid);
public Admin_GetPlayerAdminLevel(playerid)
{
return APlayerData[playerid][AdminLevel];
}
// This function is used to determine if the player has logged in (he succesfully entered his password)
forward Admin_IsPlayerLoggedIn(playerid);
public Admin_IsPlayerLoggedIn(playerid)
{
if (APlayerData[playerid][LoggedIn] == true)
return 1; // The player has logged in succesfully
else
return -1; // The player hasn't logged in (yet)
}
// This function is used to determine if a player is jailed
forward Admin_IsPlayerJailed(playerid);
public Admin_IsPlayerJailed(playerid)
{
// Check if a player has jaimtime left
if (APlayerData[playerid][PlayerJailed] == true)
return 1; // The player is still jailed
else
return -1; // The player is not jailed
}
*/
I've used it before, there's no bug with it at all, or at least, I've not detected any bug on it's use.
1) Are you using this on a PPC gamemode? If yes, then, remove it, since PPC got it incorporated to its self.
2) Are you sure the dialogs are not messed up? Be sure there's not another dialog with same ID as this.
First : Thats show me the dialog when I do /createbizz , Second I press on one option like 24/7 and than theres no pickup and nothing and how can I see if I use PPCGameMod ? And if I do maybe u have one more bizz system to give me ?