Skip to content

Instantly share code, notes, and snippets.

@TICHOJEBEC
Forked from Dayrion/bizSystem.pwn
Created January 8, 2020 22:56
Show Gist options
  • Save TICHOJEBEC/11a90902bf1af62e2dd4f9f0cfe87951 to your computer and use it in GitHub Desktop.
Save TICHOJEBEC/11a90902bf1af62e2dd4f9f0cfe87951 to your computer and use it in GitHub Desktop.
Biz system for SA:MP multiplayer servers.
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ===========================================================================================================================================================================================
// Dynamic Biz System - Dayrion - v2.3
// ===========================================================================================================================================================================================
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#define FILTERSCRIPT
#include <a_samp>
#include <a_mysql>
#include <izcmd>
#include <sscanf2>
#include <YSI_data\y_foreach>
#include <YSI\y_va>
#include <easyDialog>
#tryinclude <streamer>
#if defined STREAMER_TYPE_PICKUP && defined STREAMER_TYPE_3D_TEXT_LABEL && defined STREAMER_TYPE_OBJECT
#define Streamer_Plugin true
#else
#define Streamer_Plugin false
#endif
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#define RED 0xFF0000FF
#define WHITE 0xFFFFFFFF
#define BLUE 0x99CCFFFF
#define LBLUE 0x99D6FFFF
#define GREEN 0x008000FF
#define BROWN 0x9E3E3EFF
#define RED_U "{FF0000}"
#define WHITE_U "{FFFFFF}"
#define BLUE_U "{66A3FF}"
#define LBLUE_U "{99D6FF}"
#define GREEN_U "{39AC39}"
#define BROWN_U "{9E3E3E}"
#define LGOLD_U "{ffc34d}"
#define X11_CORNSILK_2 0xEEE8CDFF
#define X11_PEACH_PUFF_2 0xEECBADFF
#define X11_NAVAJO_WHITE_2 0xEECFA1FF
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#define MAX_BIZ 100 // Number of biz
#define MAX_INTERIOR 50
#define MAX_BALANCE 1000000 // Max amount of money in a biz
#define MAX_OBJECTS_PER_BIZ 50
#define MAX_BIZ_NAME MAX_PLAYER_NAME*2 // The max lengh of a biz's name
#define INVALID_BIZ_ID (MAX_BIZ+10)*2 // Don't change this
/* Recommanded pickup ID :
» 19523 - 19524 - 1275 - 1247 - 1273 - 19132 - 19522*/
#define ICON_BIZ_LOCKED 19133
#define ICON_BIZ_OPEN 1318
#define ICON_BIZ_PENDING_OPEN 1272
#define ICON_BIZ_PENDING_CLOSED 19523
#define ICON_BIZ_INTERIOR 1239
#define VERSION_FS "2.3"
#define PUBLIC:%0(%1) forward %0(%1); public %0(%1)
#define FPRINT "[FS - BIZ] "
#define INVALID_BIZ_MSG "Invalid biz ID!"
#define PLAYER_HAVE_BIZ "You have already a biz."
#define PLAYER_HAVE_NOT_BIZ "You don't have already a biz."
#define NOT_NEAR_A_BIZ "You are not near a biz."
#define NOT_INSIDE_A_BIZ "You are not inside the biz."
#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_DATABASE "myserver"
#define MYSQL_PASSWORD ""
#define SQL_TABLE_OBJECTS "Biz_Object"
#define SQL_TABLE_DATA "Biz_Data"
#define SQL_TABLE_INVESTOR "Biz_Investor"
#define SQL_TABLE_INTERIOR "Biz_CustomInterior"
#define DIALOG(%0) Dialog:%0(playerid, response, listitem, inputtext[])
#define IsValidBiz(%0) Iter_Contains(It_Biz, %0)
#define IsValidInvestor(%0) Iter_Contains(It_Investor, %0)
#define IsValidInterior(%0) Iter_Contains(It_Interior, %0)
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Please, don't remove/change this.
#if MAX_BIZ_NAME < 12
#error "MAX_BIZ_NAME is too short. [Min 12]"
#endif
#if MAX_BALANCE < 1
#error "MAX_BALANCE need to be higher than 1$"
#endif
#if MAX_BIZ < 1
#error "MAX_BIZ need to be higher than 0"
#endif
#if !Streamer_Plugin && MAX_OBJECTS_PER_BIZ > 1000
#error "You can't have more than 1000 objects if you don't use a streamer plugin."
#endif
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Redefining strval(string[]) - Credits : Dayrion
strval_(const source[])
{
new
i,
number,
secondNumber,
bool: negative;
if (source[0] == '-')
{
negative = true;
i = 1;
}
for (new length = strlen(source); i < length; i++)
{
if (!('0' <= source[i] <= '9'))
return 0;
secondNumber = (number*10) + source[i] - '0';
if(cellmax - number <= secondNumber <= 0 || secondNumber <= 0)
return 0;
else number = (number*10) + source[i] - '0';
}
return negative ? -number : number;
}
#if defined _ALS_strval
#undef strval
#else
#define _ALS_strval
#endif
#define strval strval_
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ===========================================================================================================================================================================================
// Variables
// ===========================================================================================================================================================================================
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
enum E_BIZ_VALUES
{
bSQLID,
bPickupID,
bPickupEnter,
bType,
bInterior,
bLevel,
bPrice,
bVW,
bEVW,
bEInt,
bSafe,
bObjects,
bEnterPrice,
bool:bOpen,
bool:bBought,
bool:bInvestor,
bool:bCreated,
Float:bX,
Float:bY,
Float:bZ,
Float:beX,
Float:beY,
Float:beZ,
bOwner[MAX_PLAYER_NAME],
bName[MAX_BIZ_NAME],
Text3D:bLabelID,
Text3D:bLabelEnterID
};
enum E_INVESTOR_VALUES
{
iSQLID,
iName[MAX_PLAYER_NAME],
bool:iInves,
bool:iSafe,
bool:iLock,
bool:iEnterPrice,
bool:iRename,
bool:iDeposit,
bool:iWithdraw
};
enum E_BIZ_INTERIOR_TYPE
{
Float:X,
Float:Y,
Float:Z,
Interior,
Name[50],
Type
};
enum E_CUSTOM_INTERIOR
{
i_SQLID,
Float:i_X,
Float:i_Y,
Float:i_Z,
i_Interior,
i_Name[50]
};
enum E_OBJECTS
{
oSQLID,
oBiz,
oID,
oSID,
oInterior,
oVirtualWorld,
Float:oX,
Float:oY,
Float:oZ,
Float:oRX,
Float:oRY,
Float:oRZ,
Float:oDrawDistance
}
enum E_PLAYER_VARS
{
BizCreating,
InteriorCreating,
ObjectEditing,
LastBizVisited
}
// ============================================================================================================================================================================================
static const BizData[][E_BIZ_INTERIOR_TYPE] =
{
// {x, y, z, interiorid, name, type} -> to know what each type is, check InteriorName - You can also add type with name - IF YOU ADD A TYPE; CHANGE LINE 505
{772.111999,-3.898649,1000.728820, 5, "LS Gym", 1},
{774.213989,-48.924297,1000.585937, 6, "SF Gym", 1},
{773.579956,-77.096694,1000.655029, 7, "LV Gym", 1},
{-25.884498,-185.868988,1003.546875, 17, "24/7 1 - (Need mapping)", 2},
{6.091179,-29.271898,1003.549438, 10, "24/7 2 - (Need mapping)", 2},
{-30.946699,-89.609596,1003.546875, 18, "24/7 3 - (Need mapping)", 2},
{-25.132598,-139.066986,1003.546875, 16, "24/7 4", 2},
{-27.312299,-29.277599,1003.557250, 4, "24/7 5 - (Need a bit of mapping)", 2},
{-26.691598,-55.714897,1003.546875, 6, "24/7 6", 2},
{286.148986,-40.644397,1001.515625, 1, "Ammunation 1", 3},
{286.800994,-82.547599,1001.515625, 4, "Ammunation 2", 3},
{296.6996,-110.8405,1001.5156, 6, "Ammunation 3", 3},
{316.524993,-167.706985,999.593750, 6, "Ammunation 4", 3},
{-100.4078,-24.5987,1000.7188, 3, "Sex Shop", 4},
{963.418762,2108.292480,1011.030273, 1, "Meat Factory", 4},
{-2240.468505,137.060440,1035.414062, 6, "Zero's RC Shop", 4},
{207.737991,-109.019996,1005.132812, 15, "Binco", 5},
{204.332992,-166.694992,1000.523437, 14, "Didier Sachs", 5},
{207.054992,-138.804992,1003.507812, 3, "Prolaps", 5},
{203.777999,-48.492397,1001.804687, 1, "Suburban", 5},
{226.293991,-7.431529,1002.210937, 5, "Victim", 5},
{161.391006,-93.159156,1001.804687, 18, "Zip", 5},
{501.980987,-69.150199,998.757812, 11, "Bar", 6},
{-227.027999,1401.229980,27.765625, 18, "Lil' probe inn", 6},
{457.304748,-88.428497,999.554687, 4, "Jay's diner", 6},
{363.4929,-74.7067,1001.5078, 10, "Burger Shot", 6},
{364.9168,-11.0500,1001.8516, 9, "Clukin' Bell", 6},
{372.3154,-132.9696,1001.4922, 5, "Well Stacked pizza", 6},
{377.3160,-192.9741,1000.6401, 17, "Rusty Browns donuts", 6}
};
static const InteriorName[][] =
{
"Custom Interior",
"Sport",
"24/7",
"Ammunation",
"Shop",
"Clothes Shop",
"Food Chain"
};
static const OpenFormatBiz[][] =
{
"Closed",
"Open"
};
// ============================================================================================================================================================================================
new
CurrentMaxBizID,
CurrentMaxCustomInterior,
NumberOfInterior,
CurrentMaxObjects,
BizVW = 214799999,
BizInfo[MAX_BIZ][E_BIZ_VALUES],
BizInv[MAX_BIZ][E_INVESTOR_VALUES],
BizInterior[MAX_INTERIOR][E_CUSTOM_INTERIOR],
BizObjects[MAX_OBJECTS][E_OBJECTS],
p_Biz[MAX_PLAYERS][E_PLAYER_VARS],
MySQL:MySQL,
Iterator:It_Biz<MAX_BIZ>,
Iterator:It_Investor<MAX_BIZ>,
Iterator:It_Interior<MAX_INTERIOR>,
Iterator:It_Objects<MAX_OBJECTS>;
forward bool:PlayerHasABiz(playerid);
forward bool:IsValidObjectModel(modelid);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ===========================================================================================================================================================================================
// Callback
// ===========================================================================================================================================================================================
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
public OnFilterScriptInit()
{
print("\n==================================");
print("» Biz FilterScript [Version "VERSION_FS"] «");
print("==================================\n");
mysql_global_options(DUPLICATE_CONNECTIONS, true);
MySQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);
if(MySQL == MYSQL_INVALID_HANDLE || mysql_errno(MySQL) != 0)
{
print("\n==================================");
print("[FS - ERROR] Unable to connect to MYSQL.");
print("[FS - ERROR] Host: "MYSQL_HOST" | Database: "MYSQL_DATABASE" | User: "MYSQL_USER" | Password: Hidden");
print("[FS - ERROR] Please, to avoid any MySQL Errors or involuntary crashs; unload this filterscript. (Biz FilterScript [Version "VERSION_FS"])");
print("\n==================================");
return 1;
}
for(new i; i < MAX_BIZ; i++)
{
BizInfo[i][bPickupID] =
BizInfo[i][bPickupEnter] =
_:BizInfo[i][bLabelID] =
_:BizInfo[i][bLabelEnterID] = -1;
}
foreach(new i : Player)
{
p_Biz[i][LastBizVisited] = INVALID_BIZ_ID;
p_Biz[i][BizCreating] =
p_Biz[i][InteriorCreating] =
p_Biz[i][ObjectEditing] = -1;
}
new query[1200];
format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `"SQL_TABLE_DATA"` (`SQLID` INTEGER PRIMARY KEY AUTO_INCREMENT, `Type` SMALLINT NOT NULL DEFAULT '0', `Interior` INT NOT NULL DEFAULT '0', `Level` INT NOT NULL DEFAULT '0', `Price` INT NOT NULL DEFAULT '0',");
strcat(query, " `Safe` SMALLINT NOT NULL DEFAULT '0', `EnterPrice` INT NOT NULL DEFAULT '0', `VW` INT NOT NULL DEFAULT '0', `Bought` TINYINT NOT NULL DEFAULT '0', `Open` TINYINT NOT NULL DEFAULT '0', `Investor` SMALLINT NOT NULL DEFAULT '0', `Objects` SMALLINT NOT NULL DEFAULT '0',");
strcat(query, " `X` FLOAT NOT NULL DEFAULT '0.0', `Y` FLOAT NOT NULL DEFAULT '0.0', `Z` FLOAT NOT NULL DEFAULT '0.0', `eX` FLOAT NOT NULL DEFAULT '0.0', `eY` FLOAT NOT NULL DEFAULT '0.0', `eZ` FLOAT NOT NULL DEFAULT '0.0', `eVW` INT NOT NULL DEFAULT '0', `eInter` SMALLINT NOT NULL DEFAULT '0',");
strcat(query, " `Owner` VARCHAR(25) NOT NULL DEFAULT 'None', `BizName` VARCHAR(50) NOT NULL DEFAULT 'None')");
mysql_pquery(MySQL, query);
format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `"SQL_TABLE_INVESTOR"` (`SQLID` INTEGER PRIMARY KEY, `Safe` SMALLINT NOT NULL DEFAULT '0', `Lock` SMALLINT NOT NULL DEFAULT '0', `EnterPrice` SMALLINT NOT NULL DEFAULT '0', `Rename` SMALLINT NOT NULL DEFAULT '0', `Deposit` SMALLINT NOT NULL DEFAULT '0',");
strcat(query, " `Withdraw` SMALLINT NOT NULL DEFAULT '0', `Name` VARCHAR(25) NOT NULL DEFAULT '')");
mysql_pquery(MySQL, query);
format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `"SQL_TABLE_INTERIOR"` (`SQLID` INTEGER PRIMARY KEY AUTO_INCREMENT, `X` FLOAT NOT NULL DEFAULT '0.0', `Y` FLOAT NOT NULL DEFAULT '0.0', `Z` FLOAT NOT NULL DEFAULT '0.0', `InteriorID` INT NOT NULL DEFAULT '0', `Name` VARCHAR(50) NOT NULL DEFAULT 'NoName')");
mysql_pquery(MySQL, query);
format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `"SQL_TABLE_OBJECTS"` (`SQLID` INTEGER PRIMARY KEY AUTO_INCREMENT, `X` FLOAT NOT NULL DEFAULT '0.0', `Y` FLOAT NOT NULL DEFAULT '0.0', `Z` FLOAT NOT NULL DEFAULT '0.0', `rX` FLOAT NOT NULL DEFAULT '0.0', `rY` FLOAT NOT NULL DEFAULT '0.0', `rZ` FLOAT NOT NULL DEFAULT '0.0', \
`DrawDistance` FLOAT NOT NULL DEFAULT '0.0', `Biz` SMALLINT NOT NULL DEFAULT '0', `ID` SMALLINT NOT NULL DEFAULT '0', `Interior` SMALLINT NOT NULL DEFAULT '0', `VirtualWorld` INT NOT NULL DEFAULT '0')");
mysql_pquery(MySQL, query);
print(FPRINT"MYSQL Tables sucessfuly created if needed.");
mysql_tquery(MySQL, "SELECT * FROM "SQL_TABLE_DATA" ORDER BY SQLID", "OnBizsLoading");
mysql_tquery(MySQL, "SELECT * FROM "SQL_TABLE_INVESTOR" ORDER BY SQLID", "OnInvestorsLoading");
mysql_tquery(MySQL, "SELECT * FROM "SQL_TABLE_INTERIOR" ORDER BY SQLID", "OnCustomInteriorLoading");
mysql_tquery(MySQL, "SELECT * FROM "SQL_TABLE_OBJECTS" ORDER BY SQLID", "OnObjectsLoading");
print(FPRINT"MYSQL Tables sucessfuly loaded.");
print(FPRINT"Filterscript sucessfuly loaded");
return 1;
}
public OnPlayerConnect(playerid)
{
p_Biz[playerid][LastBizVisited] = INVALID_BIZ_ID;
p_Biz[playerid][BizCreating] =
p_Biz[playerid][InteriorCreating] =
p_Biz[playerid][ObjectEditing] = -1;
return 1;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PUBLIC:OnBizsLoading()
{
new temporaire,
number,
nbBiz = cache_num_rows();
if(!nbBiz)
return print(FPRINT"No bizs loaded.");
for(new i; i != nbBiz; i++)
{
cache_get_value_int(i, "SQLID", temporaire); // SQLID
BizInfo[temporaire][bSQLID] = CurrentMaxBizID = temporaire;
cache_get_value_int(i, "Type", BizInfo[temporaire][bType]);
cache_get_value_int(i, "Level", BizInfo[temporaire][bLevel]);
cache_get_value_int(i, "Price", BizInfo[temporaire][bPrice]);
cache_get_value_int(i, "Safe", BizInfo[temporaire][bSafe]);
cache_get_value_int(i, "EnterPrice", BizInfo[temporaire][bEnterPrice]);
cache_get_value_int(i, "VW", BizInfo[temporaire][bVW]);
cache_get_value_int(i, "Interior", BizInfo[temporaire][bInterior]);
cache_get_value_int(i, "Objects", BizInfo[temporaire][bObjects]);
cache_get_value_int(i, "eVW", BizInfo[temporaire][bEVW]);
cache_get_value_int(i, "eInter", BizInfo[temporaire][bEInt]);
cache_get_value_float(i, "X", BizInfo[temporaire][bX]);
cache_get_value_float(i, "Y", BizInfo[temporaire][bY]);
cache_get_value_float(i, "Z", BizInfo[temporaire][bZ]);
cache_get_value_float(i, "eX", BizInfo[temporaire][beX]);
cache_get_value_float(i, "eY", BizInfo[temporaire][beY]);
cache_get_value_float(i, "eZ", BizInfo[temporaire][beZ]);
cache_get_value_int(i, "Bought", bool:BizInfo[temporaire][bBought]);
cache_get_value_int(i, "Open", bool:BizInfo[temporaire][bOpen]);
cache_get_value_int(i, "Investor", bool:BizInfo[temporaire][bInvestor]);
BizInfo[temporaire][bCreated] = true;
Iter_Add(It_Biz, temporaire);
cache_get_value(i, "Owner", BizInfo[temporaire][bOwner], MAX_PLAYER_NAME);
cache_get_value(i, "BizName", BizInfo[temporaire][bName], MAX_BIZ_NAME);
if(BizInfo[temporaire][bEnterPrice] != 0 && !BizInfo[temporaire][bBought])
BizInfo[temporaire][bEnterPrice] = 0, printf(FPRINT"Loading... | Biz %i | Price enter resetted");
number++;
}
BizVW = BizInfo[CurrentMaxBizID][bVW];
printf(FPRINT"%i bizs loaded (max ID: %i)", number, CurrentMaxBizID);
return 1;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PUBLIC:OnInvestorsLoading()
{
new temporaire;
for(new i, j = cache_num_rows(); i != j; i++)
{
cache_get_value_int(i, "SQLID", temporaire);
BizInv[temporaire][iSQLID] = temporaire;
BizInv[temporaire][iInves] = true;
cache_get_value_int(i, "Safe", bool:BizInv[temporaire][iSafe]);
cache_get_value_int(i, "Lock", bool:BizInv[temporaire][iLock]);
cache_get_value_int(i, "EnterPrice", bool:BizInv[temporaire][iEnterPrice]);
cache_get_value_int(i, "Rename", bool:BizInv[temporaire][iRename]);
cache_get_value_int(i, "Deposit", bool:BizInv[temporaire][iDeposit]);
cache_get_value_int(i, "Withdraw", bool:BizInv[temporaire][iWithdraw]);
cache_get_value(i, "Name", BizInv[temporaire][iName], MAX_PLAYER_NAME);
Iter_Add(It_Investor, temporaire);
SetBizInfos(temporaire, false, true, true, true, true);
}
print(FPRINT"Investors's data loaded");
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PUBLIC:OnCustomInteriorLoading()
{
new temporaire;
for(new i, j = cache_num_rows(); i != j; i++)
{
cache_get_value_int(i, "SQLID", temporaire);
BizInterior[temporaire][i_SQLID] = CurrentMaxCustomInterior = temporaire;
cache_get_value_float(i, "X", BizInterior[temporaire][i_X]);
cache_get_value_float(i, "Y", BizInterior[temporaire][i_Y]);
cache_get_value_float(i, "Z", BizInterior[temporaire][i_Z]);
cache_get_value_int(i, "InteriorID", BizInterior[temporaire][i_Interior]);
cache_get_value(i, "Name", BizInterior[temporaire][i_Name], MAX_BIZ_NAME);
NumberOfInterior++;
Iter_Add(It_Interior, temporaire);
}
printf(FPRINT"Custom interiors loaded (maxID: %i)!", CurrentMaxCustomInterior);
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PUBLIC:OnObjectsLoading()
{
new temporaire[E_OBJECTS],
index;
for(new i, j = cache_num_rows(); i != j; i++)
{
cache_get_value_int(i, "SQLID", temporaire[oSQLID]);
cache_get_value_int(i, "Biz", temporaire[oBiz]);
cache_get_value_int(i, "ID", temporaire[oID]);
cache_get_value_int(i, "Interior", temporaire[oInterior]);
cache_get_value_int(i, "VirtualWorld", temporaire[oVirtualWorld]);
cache_get_value_float(i, "X", temporaire[oX]);
cache_get_value_float(i, "Y", temporaire[oY]);
cache_get_value_float(i, "Z", temporaire[oZ]);
cache_get_value_float(i, "rX", temporaire[oRX]);
cache_get_value_float(i, "rY", temporaire[oRY]);
cache_get_value_float(i, "rZ", temporaire[oRZ]);
cache_get_value_float(i, "DrawDistance", temporaire[oDrawDistance]);
#if !Streamer_Plugin
temporaire[oSID] = CreateObject(temporaire[oID], temporaire[oX], temporaire[oY], temporaire[oZ], temporaire[oRX], temporaire[oRX], temporaire[oRX], temporaire[oDrawDistance]);
#else
temporaire[oSID] = CreateDynamicObject(temporaire[oID], temporaire[oX], temporaire[oY], temporaire[oZ], temporaire[oRX], temporaire[oRY], temporaire[oRZ], temporaire[oVirtualWorld], temporaire[oInterior], .drawdistance = temporaire[oDrawDistance]);
#endif
index = temporaire[oSID];
BizObjects[index] = temporaire;
BizObjects[index][oSQLID] = CurrentMaxObjects = temporaire[oSQLID];
Iter_Add(It_Objects, index);
}
printf(FPRINT"Objects on mapping loaded (number of objects: %i)!", CurrentMaxObjects);
}
// ============================================================================================================================================================================================
public OnFilterScriptExit()
{
foreach(new i : It_Biz)
{
#if !Streamer_Plugin
Delete3DTextLabel(BizInfo[i][bLabelID]);
Delete3DTextLabel(BizInfo[i][bLabelEnterID]);
DestroyPickup(BizInfo[i][bPickupID]);
DestroyPickup(BizInfo[i][bPickupEnter]);
#else
DestroyDynamic3DTextLabel(BizInfo[i][bLabelID]);
DestroyDynamic3DTextLabel(BizInfo[i][bLabelEnterID]);
DestroyDynamicPickup(BizInfo[i][bPickupID]);
DestroyDynamicPickup(BizInfo[i][bPickupEnter]);
#endif
SaveBizData(i);
SaveInvestorData(i);
}
new query[200];
foreach(new i : It_Interior)
{
mysql_format(MySQL, query, sizeof(query), "UPDATE `"SQL_TABLE_INTERIOR"` SET `X` = '%f', `Y` = '%f', `Z` = '%f', `InteriorID` = '%i', `Name` = '%e' WHERE `SQLID` = '%i'",
BizInterior[i][i_X], BizInterior[i][i_Y], BizInterior[i][i_Z], BizInterior[i][i_Interior], BizInterior[i][i_Name], BizInterior[i][i_SQLID]);
mysql_pquery(MySQL, query);
}
foreach(new i : Player)
{
if(p_Biz[i][LastBizVisited] != INVALID_BIZ_ID)
{
if(!IsValidBiz(p_Biz[i][LastBizVisited]))
continue;
SetPlayerPos(i, BizInfo[p_Biz[i][LastBizVisited]][bX], BizInfo[p_Biz[i][LastBizVisited]][bY], BizInfo[p_Biz[i][LastBizVisited]][bZ]);
#if Streamer_Plugin
SetPlayerInterior(i, BizInfo[p_Biz[i][LastBizVisited]][bEInt]);
SetPlayerVirtualWorld(i, BizInfo[p_Biz[i][LastBizVisited]][bEVW]);
#else
SetPlayerInterior(i, 0);
SetPlayerVirtualWorld(i, 0);
#endif
ErrorMsg(i, "An administrator has unloaded the filterscript, you have been teleported out of the biz.");
printf(FPRINT"Unloading ... | Player %s | Teleported out of a biz (ID:%i)", GetName(i, true), p_Biz[i][LastBizVisited]);
}
}
foreach(new i : It_Objects)
{
#if Streamer_Plugin
DestroyDynamicObject(i);
#else
DestroyObject(i);
#endif
SaveObject(i);
ResetObjectData(i);
}
mysql_close(MySQL);
print(FPRINT"Filterscript sucessfuly unloaded");
return 1;
}
// ============================================================================================================================================================================================
public OnObjectMoved(objectid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 0;
}
// ============================================================================================================================================================================================
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
if(p_Biz[playerid][LastBizVisited] != INVALID_BIZ_ID && newinteriorid == 0)
{
SetTimerEx("TeleChecking", 1000, false, "i", playerid);
}
return 1;
}
// ============================================================================================================================================================================================
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if((newkeys == KEY_SECONDARY_ATTACK) && (oldkeys == 0) && IsNearABiz(playerid))
{
new bizid = GetNearestBiz(playerid),
pBiz = GetPlayerBiz(playerid);
if(pBiz != bizid && !IsPlayerAdmin(playerid) && !BizInfo[bizid][bBought])
return ErrorMsg(playerid, "This biz is closed.");
if(BizInfo[bizid][bEnterPrice] > GetPlayerMoney(playerid) && pBiz != bizid)
return ErrorMsg(playerid, "You don't have enough money to enter in this biz.");
EnterInABiz(playerid, bizid);
if(!BizInfo[bizid][bBought] || pBiz == bizid || BizInfo[bizid][bEnterPrice] == 0)
return 1;
SetMoneyGameText(playerid, -BizInfo[bizid][bEnterPrice]);
GivePlayerMoney(playerid, -BizInfo[bizid][bEnterPrice]);
BizInfo[bizid][bSafe] += BizInfo[bizid][bEnterPrice];
}
if((newkeys == KEY_SECONDARY_ATTACK) && (oldkeys == 0) && p_Biz[playerid][LastBizVisited] != INVALID_BIZ_ID && IsPlayerInRangeOfPoint(playerid, 3, BizInfo[p_Biz[playerid][LastBizVisited]][beX], BizInfo[p_Biz[playerid][LastBizVisited]][beY], BizInfo[p_Biz[playerid][LastBizVisited]][beZ]))
{
ExitABiz(playerid, p_Biz[playerid][LastBizVisited]);
}
return 1;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ===========================================================================================================================================================================================
// Commands
// ===========================================================================================================================================================================================
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CMD:createbiz(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return 0;
new price,
level,
interior,
Float:x,
Float:y,
Float:z,
str[451 + EOS],
str1[100];
if(sscanf(params,"iii", interior, level, price))
{
SCM(playerid, LBLUE, "[USE] /createbiz [type] [level] [price]");
format(str, sizeof(str), "{33adff}[USE] "LBLUE_U"/createbiz [type] [level] [price]\n\
"LGOLD_U"type: "LBLUE_U"Which type of buisness it will be\n\
"LGOLD_U"level: "LBLUE_U"Level (score) required to buy this biz\n\
"LGOLD_U"price: "LBLUE_U"Money required to buy this biz.\n\nSort of type (biz):");
for(new i; i < sizeof(InteriorName); i++)
{
format(str1, sizeof(str1), LGOLD_U"\nType %i : "WHITE_U"%s", i, InteriorName[i]);
strcat(str, str1);
}
Dialog_Show(playerid, createbizhelp, DIALOG_STYLE_MSGBOX, "Help for /createbiz", str, "Ok", "");
return 1;
}
if(GetNearestBiz(playerid) != INVALID_BIZ_ID)
return ErrorMsg(playerid, "The biz is too close to another. (Nearest Biz -> ID:%i)", GetNearestBiz(playerid));
if(!(0 <= interior <= 6))
return ErrorMsg(playerid, "Wrong interior ID (%i). [only 0-6]", interior); // Change 6 if you added more type!
if(!interior && !NumberOfInterior)
return ErrorMsg(playerid, "There is no custom interior available. You need to create one at least.");
if(price < 10)
return ErrorMsg(playerid, "The price need to be at least 10$.");
if(level < 1)
return ErrorMsg(playerid, "The level need to be at least 1.");
new query[250];
mysql_format(MySQL, query, sizeof(query), "INSERT INTO `"SQL_TABLE_DATA"` (`X`, `Y`, `Z`, `Type`) VALUES ('%f', '%f', '%f', '%i')", x, y, z, interior);
mysql_tquery(MySQL, query, "OnBizCreated", "iiiifff", playerid, price, level, interior, x, y, z);
return 1;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PUBLIC:OnBizCreated(playerid, price, level, interior, Float:x, Float:y, Float:z)
{
GetPlayerPos(playerid, x, y, z);
CurrentMaxBizID = cache_insert_id();
new str[200],
str1[200];
BizVW++;
BizInfo[CurrentMaxBizID][bX] = x;
BizInfo[CurrentMaxBizID][bY] = y;
BizInfo[CurrentMaxBizID][bZ] = z;
BizInfo[CurrentMaxBizID][bOpen] =
BizInfo[CurrentMaxBizID][bCreated] = true;
BizInfo[CurrentMaxBizID][bPrice] = price;
BizInfo[CurrentMaxBizID][bSQLID] = CurrentMaxBizID;
BizInfo[CurrentMaxBizID][bType] = interior;
BizInfo[CurrentMaxBizID][bLevel] = level;
BizInfo[CurrentMaxBizID][bVW] = BizVW;
BizInfo[CurrentMaxBizID][bEVW] = GetPlayerVirtualWorld(playerid);
BizInfo[CurrentMaxBizID][bEInt] = GetPlayerInterior(playerid);
format(BizInfo[CurrentMaxBizID][bOwner], MAX_PLAYER_NAME, "None");
format(BizInfo[CurrentMaxBizID][bName], MAX_BIZ_NAME, "%s", InteriorName[interior]);
p_Biz[playerid][BizCreating] = CurrentMaxBizID;
AnnonceMsg(playerid, "You have creeated a biz ! Biz ID: %i - Price : %i$ - Level required %i", CurrentMaxBizID, price, level);
mysql_format(MySQL, str, sizeof(str), "INSERT INTO `"SQL_TABLE_INVESTOR"` (`SQLID`, `Name`) VALUES ('%i', '%e')", (BizInv[CurrentMaxBizID][iSQLID] = CurrentMaxBizID), "None");
mysql_pquery(MySQL, str);
ResetInvestorData(CurrentMaxBizID);
if(interior)
{
for(new i, j = sizeof(BizData); i < j; i++)
{
if(BizData[i][Type] != interior)
continue;
format(str, sizeof(str), "\n%i - %s", i, BizData[i][Name]);
strcat(str1, str);
}
}
else
{
foreach(new i : It_Interior)
{
format(str, sizeof(str), "\n%i - %s", i, BizInterior[i][i_Name]);
strcat(str1, str);
}
}
Dialog_Show(playerid, DIALOG_CREATEBIZ, DIALOG_STYLE_LIST, InteriorName[interior], str1, "Choose", "Cancel");
return 1;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DIALOG(DIALOG_CREATEBIZ)
{
if(!response)
{
goto failed;
failed:
{
ResetBizData(p_Biz[playerid][BizCreating], false);
p_Biz[playerid][BizCreating] = -1;
return 1;
}
}
if(BizInfo[p_Biz[playerid][BizCreating]][bType])
{
listitem += FirstIntID(BizInfo[p_Biz[playerid][BizCreating]][bType]);
if(BizInfo[p_Biz[playerid][BizCreating]][bInterior] >= INVALID_BIZ_ID)
{
printf(FPRINT"Error during choosing an interior! (Biz ID: %i & Player: %s)", p_Biz[playerid][BizCreating], GetName(playerid, true));
goto failed;
return 1;
}
BizInfo[p_Biz[playerid][BizCreating]][bInterior] = listitem;
BizInfo[p_Biz[playerid][BizCreating]][beX] = BizData[listitem][X];
BizInfo[p_Biz[playerid][BizCreating]][beY] = BizData[listitem][Y];
BizInfo[p_Biz[playerid][BizCreating]][beZ] = BizData[listitem][Z];
}
else
{
listitem++;
new a;
foreach(new i : It_Interior)
{
a++;
if(a == listitem)
{
BizInfo[p_Biz[playerid][BizCreating]][bInterior] = BizInterior[i][i_SQLID];
BizInfo[p_Biz[playerid][BizCreating]][beX] = BizInterior[i][i_X];
BizInfo[p_Biz[playerid][BizCreating]][beY] = BizInterior[i][i_Y];
BizInfo[p_Biz[playerid][BizCreating]][beZ] = BizInterior[i][i_Z];
format(BizInfo[p_Biz[playerid][BizCreating]][bName], MAX_BIZ_NAME, "%s", BizInterior[i][i_Name]);
break;
}
}
}
DestroyPickup(BizInfo[p_Biz[playerid][BizCreating]][bPickupID]);
SetBizInfos(p_Biz[playerid][BizCreating], true, true, true, true, true);
SaveBizData(p_Biz[playerid][BizCreating]);
EnterInABiz(playerid, p_Biz[playerid][BizCreating]);
p_Biz[playerid][BizCreating] = -1;
return 1;
}
// ============================================================================================================================================================================================
CMD:destroybiz(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return 0;
new bizid;
if(sscanf(params, "i", bizid))
return SCM(playerid, LBLUE, "[USE] /destroybiz [bizid] [-1: ALL]");
if(!IsValidBiz(bizid) && bizid != -1)
return ErrorMsg(playerid, INVALID_BIZ_MSG);
if(bizid != -1)
{
foreach(new i : Player)
{
if(p_Biz[i][LastBizVisited] == bizid)
{
SetPlayerPos(i, BizInfo[p_Biz[i][LastBizVisited]][bX], BizInfo[p_Biz[i][LastBizVisited]][bY], BizInfo[p_Biz[i][LastBizVisited]][bZ]);
SetPlayerInterior(i, 0);
SetPlayerVirtualWorld(i, 0);
ErrorMsg(i, "An administrator has destroyed the biz, you have been teleported out of the biz.");
printf(FPRINT"Admin | Player: %s | Teleported out of a biz (ID:%i) - Biz destroyed", GetName(i, true), p_Biz[i][LastBizVisited]);
}
}
ResetBizData(bizid);
AdminMsg(playerid, "You have destroyed the biz ID %i!", bizid);
}
else
{
foreach(new i : It_Biz)
{
foreach(new j : Player)
{
if(p_Biz[j][LastBizVisited] == i)
{
SetPlayerPos(j, BizInfo[p_Biz[j][LastBizVisited]][bX], BizInfo[p_Biz[j][LastBizVisited]][bY], BizInfo[p_Biz[j][LastBizVisited]][bZ]);
SetPlayerInterior(j, 0);
SetPlayerVirtualWorld(j, 0);
ErrorMsg(j, "An administrator has destroyed the biz, you have been teleported out of the biz.");
printf(FPRINT"Admin | Player: %s | Teleported out of a biz (ID:%i)", GetName(j, true), p_Biz[j][LastBizVisited]);
}
}
ResetBizData(i);
}
CurrentMaxBizID = 0;
AdminMsg(playerid, "You have destroyed all biz.");
}
return 1;
}
// ============================================================================================================================================================================================
CMD:buybiz(playerid, params[])
{
if(PlayerHasABiz(playerid))
return ErrorMsg(playerid, PLAYER_HAVE_BIZ);
new bizid = GetNearestBiz(playerid);
if(bizid == INVALID_BIZ_ID)
return ErrorMsg(playerid, NOT_NEAR_A_BIZ);
if(BizInfo[bizid][bBought])
return ErrorMsg(playerid, "This biz have a owner.");
if(GetPlayerMoney(playerid) < BizInfo[bizid][bPrice])
return ErrorMsg(playerid, "You need %i$ for buy this biz (Missing money: "RED_U"%i${CC0000})", BizInfo[bizid][bPrice], BizInfo[bizid][bPrice]-GetPlayerMoney(playerid));
if(GetPlayerScore(playerid) < BizInfo[bizid][bLevel])
return ErrorMsg(playerid, "You need to be at least level %i", BizInfo[bizid][bLevel]);
format(BizInfo[bizid][bOwner], MAX_PLAYER_NAME, "%s", GetName(playerid));
BizInfo[bizid][bOpen] =
BizInfo[bizid][bBought] = true;
ResetInvestorData(bizid);
SetBizInfos(bizid, true, true, false, true);
GivePlayerMoney(playerid, -BizInfo[bizid][bPrice]);
if(BizInfo[bizid][bType])
AnnonceMsg(playerid, "You have bought this biz! It cost %i$ and it's a the shop is: %s", BizInfo[bizid][bPrice], InteriorName[BizInfo[bizid][bType]][0]);
else
AnnonceMsg(playerid, "You have bought this biz! It cost %i$ and it's a the shop is: %s", BizInfo[bizid][bPrice], BizInterior[BizInfo[bizid][bInterior]][i_Name]);
return 1;
}
// ============================================================================================================================================================================================
CMD:managebiz(playerid)
{
// if(!PlayerHasABiz(playerid))
// return 1;
return !PlayerHasABiz(playerid) ? ErrorMsg(playerid, PLAYER_HAVE_NOT_BIZ) : Dialog_Show(playerid, DIALOG_INFO_BIZ, DIALOG_STYLE_TABLIST, "Info", "View informations of your biz\nChange the enter price \t\t%i$\nOpen/Lock your biz\t\t%s\nDeposit money\nWithdraw money\nRename your biz", "Choose", "Cancel", BizInfo[GetPlayerBiz(playerid)][bEnterPrice], OpenFormatBiz[BizInfo[GetPlayerBiz(playerid)][bOpen]][0]);
}
DIALOG(DIALOG_INFO_BIZ)
{
if(!response)
return 1;
new bizid = GetPlayerBiz(playerid);
if(bizid == INVALID_BIZ_ID) return Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", WHITE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 03", "Ok", "");
switch(listitem)
{
case 0:
{
new str[550];
format(str, sizeof(str),
LGOLD_U"- Biz ID: "WHITE_U"%i\n\
"LGOLD_U"- Owner: "WHITE_U"%s\n\
"LGOLD_U"- Door: "WHITE_U"%s\n\
"LGOLD_U"- Resale price: "WHITE_U"%i$\n\
"LGOLD_U"- Safe: "WHITE_U"%i$\n\
"LGOLD_U"- Name: "WHITE_U"%s\n\
"LGOLD_U"- Investor: "WHITE_U"%s\n\
"LGOLD_U"- Object(s): "WHITE_U"%i", BizInfo[bizid][bSQLID], BizInfo[bizid][bOwner], OpenFormatBiz[BizInfo[bizid][bOpen]], floatround(BizInfo[bizid][bPrice]/2, floatround_round), BizInfo[bizid][bSafe], BizInfo[bizid][bName], BizInv[bizid][iName], BizInfo[bizid][bObjects]);
Dialog_Show(playerid, DIALOG_INFO1, DIALOG_STYLE_MSGBOX, "Info biz", str, "Ok", "");
}
case 1:
{
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_PRICECHANGER, DIALOG_STYLE_INPUT, "Change the price enter", "Change the enter price", "Confirm", "Cancel");
}
case 2:
{
if(GetNearestBiz(playerid) != bizid && p_Biz[playerid][LastBizVisited] != bizid)
return ErrorMsg(playerid, "You are too far away from your biz.");
if(BizInfo[bizid][bOpen])
{
BizInfo[bizid][bOpen] = false;
DestroyPickup(BizInfo[bizid][bPickupID]);
SCM(playerid, RED, "You have locked your biz.");
SetBizInfos(bizid, .save = true, .pID = true);
}
else
{
BizInfo[bizid][bOpen] = true;
DestroyPickup(BizInfo[bizid][bPickupID]);
SCM(playerid, GREEN, "You have opened your biz.");
SetBizInfos(bizid, .save = true, .pID = true);
}
}
case 3:
{
if(p_Biz[playerid][LastBizVisited] != bizid)
return ErrorMsg(playerid, NOT_INSIDE_A_BIZ);
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_DEPOSIT, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to deposit it.", "Confirm", "Cancel");
}
case 4:
{
if(p_Biz[playerid][LastBizVisited] != bizid)
return ErrorMsg(playerid, NOT_INSIDE_A_BIZ);
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_WITHDRAW, DIALOG_STYLE_INPUT, "Withdraw money", "Set the amount of money to withdraw it.", "Confirm", "Cancel");
}
case 5:
{
if(p_Biz[playerid][LastBizVisited] != bizid && GetNearestBiz(playerid) != bizid)
return ErrorMsg(playerid, NOT_INSIDE_A_BIZ);
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_NAME, DIALOG_STYLE_INPUT, "Name your biz", "Enter a name for your biz.", "Confirm", "Cancel");
}
default : Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", WHITE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 04", "Ok", "");
}
return 1;
}
// ============================================================================================================================================================================================
CMD:closestbiz(playerid)
{
if(!IsPlayerAdmin(playerid))
return 0;
new a = GetNearestBiz(playerid);
return a == INVALID_BIZ_ID ? ErrorMsg(playerid, NOT_NEAR_A_BIZ) : AdminMsg(playerid, "The closest biz is ID %i - Name : '%s'", a, BizInfo[a][bName]);
}
// ============================================================================================================================================================================================
CMD:sellbiz(playerid)
{
if(!PlayerHasABiz(playerid))
return ErrorMsg(playerid, PLAYER_HAVE_NOT_BIZ);
if(GetNearestBiz(playerid) != GetPlayerBiz(playerid))
return ErrorMsg(playerid, "You need to be near your biz to do that.");
new bizid = GetNearestBiz(playerid);
BizInfo[bizid][bBought] = false;
BizInfo[bizid][bSafe] =
BizInfo[bizid][bEnterPrice] = 0;
format(BizInfo[bizid][bOwner], MAX_PLAYER_NAME, "None");
if(!BizInfo[bizid][bType])
format(BizInfo[bizid][bName], MAX_BIZ_NAME, "%s", BizInterior[BizInfo[bizid][bInterior]][i_Name]);
else
format(BizInfo[bizid][bName], MAX_BIZ_NAME, "%s", InteriorName[BizInfo[bizid][bType]][0]);
GivePlayerMoney(playerid, BizInfo[bizid][bPrice]/2);
AnnonceMsg(playerid, "You have sold your biz for %i$.", BizInfo[bizid][bPrice]/2);
SetBizInfos(bizid, true, true, false, true);
return 1;
}
// ============================================================================================================================================================================================
CMD:editbiz(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return 0;
new bizid;
if(sscanf(params, "i", bizid))
return SCM(playerid, LBLUE, "[USE] /modifybiz [bizid]");
if(!IsValidBiz(bizid))
return ErrorMsg(playerid, INVALID_BIZ_MSG);
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_INFO_BIZ_ADMIN, DIALOG_STYLE_TABLIST, "Info biz", "View informations of the biz\nChange the enter price \t%i\nOpen/Lock the biz\t%s\nChange the balance\nRename the biz\nSell the biz\nChange the interior\nChange the biz's type", "Choose", "Cancel", bizid, BizInfo[bizid][bEnterPrice], OpenFormatBiz[BizInfo[bizid][bOpen]]);
return 1;
}
DIALOG(DIALOG_INFO_BIZ_ADMIN)
{
if(!IsPlayerAdmin(playerid))
return Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", WHITE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 05", "Ok", "");
new bizid = p_Biz[playerid][BizCreating];
if(response)
{
switch(listitem)
{
case 0:
{
new str[350];
format(str, sizeof(str),
LGOLD_U"- Biz ID: "WHITE_U"%i\n\
"LGOLD_U"- Owner : "WHITE_U"%s\n\
"LGOLD_U"- Door : "WHITE_U"%s\n\
"LGOLD_U"- Resale price : "WHITE_U"%i$\n\
"LGOLD_U"- Safe : "WHITE_U"%i$\n\
"LGOLD_U"- Name : "WHITE_U"%s\n\
"LGOLD_U"- Investor : "WHITE_U"%s", BizInfo[bizid][bSQLID], BizInfo[bizid][bOwner], OpenFormatBiz[BizInfo[bizid][bOpen]], floatround(BizInfo[bizid][bPrice]/2, floatround_round), BizInfo[bizid][bSafe], BizInfo[bizid][bName], BizInv[bizid][iName]);
Dialog_Show(playerid, DIALOG_INFO1, DIALOG_STYLE_MSGBOX, "Info biz", str, "Ok", "");
}
case 1: Dialog_Show(playerid, DIALOG_PRICECHANGER, DIALOG_STYLE_INPUT, "Change the price enter", "Change the enter price.\nActually : %i$", "Confirm", "Cancel", BizInfo[bizid][bEnterPrice]);
case 2:
{
if(BizInfo[bizid][bOpen])
{
BizInfo[bizid][bOpen] = false;
DestroyPickup(BizInfo[bizid][bPickupID]);
SCM(playerid, RED, "You have closed this biz.");
SetBizInfos(bizid, .save = true, .pID = true);
}
else
{
BizInfo[bizid][bOpen] = true;
DestroyPickup(BizInfo[bizid][bPickupID]);
SCM(playerid, GREEN, "You have opened this biz.");
SetBizInfos(bizid, .save = true, .pID = true);
}
}
case 3: Dialog_Show(playerid, DIALOG_BALANCE, DIALOG_STYLE_INPUT, "Modify balance", "Modify the current balance.\nActually : %i$", "Confirm", "Cancel", BizInfo[bizid][bSafe]);
case 4: Dialog_Show(playerid, DIALOG_NAME, DIALOG_STYLE_INPUT, "Name your biz", "Enter a name for the biz ID:%i (Actually : '%s')", "Confirm", "Cancel", bizid, BizInfo[bizid][bName]);
case 5:
{
if(!BizInfo[bizid][bBought])
return ErrorMsg(playerid, "This biz is free and can't be sell right now.");
BizInfo[bizid][bBought] = false;
format(BizInfo[bizid][bOwner], MAX_PLAYER_NAME, "None");
format(BizInfo[bizid][bName], MAX_BIZ_NAME, "None");
BizInfo[bizid][bSafe] = 0;
GivePlayerMoney(playerid, BizInfo[bizid][bPrice]/2);
SetBizInfos(bizid, true, false, false, true);
AdminMsg(playerid, "You have correctly sold biz ID:%i", bizid);
}
case 6:
{
new str1[100], str[100];
if(BizInfo[bizid][bType])
{
for(new i, j = sizeof(BizData); i < j; i++)
{
if(BizData[i][Type] != BizInfo[bizid][bType])
continue;
format(str, sizeof(str), "\n%i - %s", i, BizData[i][Name]);
strcat(str1, str);
}
}
else
{
if(!NumberOfInterior)
return ErrorMsg(playerid, "There is no custom interior available. You need to create one at least.");
for(new i; i < CurrentMaxCustomInterior; i++)
{
if(!IsValidInterior(i))
continue;
format(str, sizeof(str), "\n%i - %s", i, BizInterior[i][i_Name]);
strcat(str1, str);
}
}
Dialog_Show(playerid, DIALOG_MODIFY_INTERIOR, DIALOG_STYLE_LIST, InteriorName[BizInfo[bizid][bType]][0], str1, "Choose", "Cancel");
}
case 7:
{
new str[250],
str1[120];
for(new i; i < sizeof(InteriorName); i++)
{
format(str1, sizeof(str1), LGOLD_U"Type %i : "WHITE_U"%s\n", i, InteriorName[i][0]);
strcat(str, str1);
}
Dialog_Show(playerid, DIALOG_MODIFY_TYPE, DIALOG_STYLE_LIST, "Change the biz's type", str, "Ok", "Cancel");
}
default : Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", LBLUE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 06", "Ok", "");
}
if(!BizInfo[bizid][bBought])
SCM(playerid, RED, "[Admin] Be careful, nobody bought this biz!");
}
else
p_Biz[playerid][BizCreating] = -1;
return 1;
}
DIALOG(DIALOG_MODIFY_INTERIOR)
{
if(!response)
return Dialog_Show(playerid, DIALOG_INFO_BIZ_ADMIN, DIALOG_STYLE_TABLIST, "Info biz", "View informations of the biz\nChange the enter price \t%i\nOpen/Lock the biz\t%s\nChange the balance\nRename the biz\nSell the biz\nChange the interior\nChange the biz's type", "Choose", "Cancel", p_Biz[playerid][BizCreating], BizInfo[p_Biz[playerid][BizCreating]][bEnterPrice], OpenFormatBiz[BizInfo[p_Biz[playerid][BizCreating]][bOpen]]);
listitem = (listitem) + FirstIntID(BizInfo[p_Biz[playerid][BizCreating]][bType]);
BizInfo[p_Biz[playerid][BizCreating]][bInterior] = listitem;
if(BizInfo[p_Biz[playerid][BizCreating]][bInterior] >= INVALID_BIZ_ID)
{
Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", LBLUE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 11", "Ok", "");
p_Biz[playerid][BizCreating] = -1;
return 1;
}
BizInfo[p_Biz[playerid][BizCreating]][beX] = BizData[listitem][X];
BizInfo[p_Biz[playerid][BizCreating]][beY] = BizData[listitem][Y];
BizInfo[p_Biz[playerid][BizCreating]][beZ] = BizData[listitem][Z];
if(!BizInfo[p_Biz[playerid][BizCreating]][bBought])
format(BizInfo[p_Biz[playerid][BizCreating]][bName], MAX_BIZ_NAME, "%s", BizInfo[p_Biz[playerid][BizCreating]][bType] ? InteriorName[BizInfo[p_Biz[playerid][BizCreating]][bType]][0] : BizInterior[BizInfo[p_Biz[playerid][BizCreating]][bInterior]][i_Name]);
SetBizInfos(p_Biz[playerid][BizCreating], true, true, true, true, true);
p_Biz[playerid][BizCreating] = -1;
return 1;
}
DIALOG(DIALOG_MODIFY_TYPE)
{
if(!response)
return Dialog_Show(playerid, DIALOG_INFO_BIZ_ADMIN, DIALOG_STYLE_TABLIST, "Info biz", "View informations of the biz\nChange the enter price \t%i\nOpen/Lock the biz\t%s\nChange the balance\nRename the biz\nSell the biz\nChange the interior\nChange the biz's type", "Choose", "Cancel", p_Biz[playerid][BizCreating], BizInfo[p_Biz[playerid][BizCreating]][bEnterPrice], OpenFormatBiz[BizInfo[p_Biz[playerid][BizCreating]][bOpen]]);
if(!NumberOfInterior && !listitem)
return ErrorMsg(playerid, "There is no custom interior available. You need to create one at least.");
BizInfo[p_Biz[playerid][BizCreating]][bType] = listitem;
new str1[300],
str[200];
if(BizInfo[p_Biz[playerid][BizCreating]][bType])
{
for(new i, j = sizeof(BizData); i < j; i++)
{
if(BizData[i][Type] != BizInfo[p_Biz[playerid][BizCreating]][bType])
continue;
format(str, sizeof(str), "\n%i - %s", i, BizData[i][Name]);
strcat(str1, str);
}
}
else
{
foreach(new i : It_Interior)
{
format(str, sizeof(str), "\n%i - %s", i, BizInterior[i][i_Name]);
strcat(str1, str);
}
}
Dialog_Show(playerid, DIALOG_MODIFY_INTERIOR, DIALOG_STYLE_LIST, InteriorName[BizInfo[p_Biz[playerid][BizCreating]][bType]], str1, "Choose", "");
return 1;
}
// ============================================================================================================================================================================================
CMD:makeinvestor(playerid, params[])
{
if(!PlayerHasABiz(playerid))
return ErrorMsg(playerid, PLAYER_HAVE_NOT_BIZ);
new target, bizid = GetPlayerBiz(playerid);
if(sscanf(params, "i", target))
return SCM(playerid, LBLUE, "[USE] /makeinvestor [playerid] [-1 : Cancel investor]");
if(!IsPlayerConnected(target) && target != -1)
return ErrorMsg(playerid, "This player isn't connected or be more accurate in the name.");
if(target == playerid) return ErrorMsg(playerid, "You can't make yourself as an investor.");
if(target == -1)
{
if(IsPlayerConnected(target))
AnnonceMsg(target, "You are no longer an investor of the %s's biz (%s)", GetName(playerid), BizInfo[bizid][bName]);
AnnonceMsg(playerid, "%s has been removed of your investor.", BizInv[bizid][iName]);
ResetInvestorData(bizid);
SetBizInfos(bizid, true, false, false, true);
return 1;
}
if(BizInv[bizid][iInves])
return ErrorMsg(playerid, "You have already an investor : %s", BizInv[bizid][iName]);
format(BizInv[bizid][iName], MAX_PLAYER_NAME, "%s", GetName(target));
BizInv[bizid][iInves] =
BizInv[bizid][iSafe] = true;
AnnonceMsg(playerid, "%s is now the new investor in your biz ('%s')", GetName(target), BizInfo[bizid][bName]);
AnnonceMsg(target, "%s made you the new investor in his/her biz ('%s')", GetName(target), BizInfo[bizid][bName]);
SetBizInfos(bizid, true, false, false, true);
return 1;
}
// ============================================================================================================================================================================================
CMD:editinvestor(playerid)
{
if(!PlayerHasABiz(playerid))
return ErrorMsg(playerid, PLAYER_HAVE_NOT_BIZ);
if(!IsValidInvestor(GetPlayerBiz(playerid)))
return ErrorMsg(playerid, "You don't have investor.");
ShowDialogInvPerm(playerid, GetPlayerBiz(playerid));
return 1;
}
// ============================================================================================================================================================================================
CMD:aeditinvestor(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return 0;
new bizid;
if(sscanf(params, "i", bizid))
return SCM(playerid, LBLUE, "[USE] /amodifinvestor [bizid]");
if(!IsValidBiz(bizid))
return ErrorMsg(playerid, INVALID_BIZ_MSG);
if(!IsValidInvestor(bizid))
return ErrorMsg(playerid, "This biz doesn't have an investor.");
ShowDialogInvPerm(playerid, bizid);
return 1;
}
// ============================================================================================================================================================================================
CMD:ibiz(playerid)
{
if(GetInvestorBizID(playerid) == INVALID_BIZ_ID)
return ErrorMsg(playerid, "You are not an investor of a biz.");
ShowDialogInvestor(playerid, GetInvestorBizID(playerid));
return 1;
}
// ============================================================================================================================================================================================
CMD:asetinvestor(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return 0;
new bizid,
name[MAX_PLAYER_NAME];
if(sscanf(params, "is[24]", bizid, name))
return SCM(playerid, LBLUE, "[USE] /asetinvestor [bizid] [name]");
if(!IsValidBiz(bizid))
return ErrorMsg(playerid, INVALID_BIZ_MSG);
format(BizInv[bizid][iName], MAX_PLAYER_NAME, "%s", name);
new target = GetIDByName(name);
if(IsPlayerConnected(target))
AnnonceMsg(target, "An admin made you investor of the biz %s (Owner: %s) !", BizInfo[bizid][bName], BizInfo[bizid][bOwner]);
if(IsPlayerConnected((target = GetIDByName(BizInfo[bizid][bOwner]))))
AnnonceMsg(target, "An admin made %s an investor of your biz !", name);
SetBizInfos(bizid, true, false, false, true);
return 1;
}
// ============================================================================================================================================================================================
CMD:gotobiz(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return 0;
new bizid;
if(sscanf(params, "i", bizid))
return SCM(playerid, LBLUE, "[USE] /gotobiz [bizid]");
if(!IsValidBiz(bizid))
return ErrorMsg(playerid, INVALID_BIZ_MSG);
SetPlayerPos(playerid, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ]);
#if Streamer_Plugin
SetPlayerInterior(playerid, BizInfo[bizid][bEInt]);
SetPlayerVirtualWorld(playerid, BizInfo[bizid][bEVW]);
#else
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
#endif
AdminMsg(playerid, "You teleported on biz ID %i.", bizid);
return 1;
}
// ============================================================================================================================================================================================
CMD:createinterior(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return 0;
new b_Name[MAX_BIZ_NAME];
if(sscanf(params, "s[50]", b_Name))
return SCM(playerid, LBLUE, "[Use] /createinterior [Name]");
new Float:x,
Float:y,
Float:z,
query[300];
GetPlayerPos(playerid, x, y, z);
mysql_format(MySQL, query, sizeof(query), "INSERT INTO `"SQL_TABLE_INTERIOR"` (`Name`, `X`, `Y`, `Z`, `InteriorID`) VALUES ('%e', '%f', '%f', '%f', '%i')", b_Name, x, y, z, GetPlayerInterior(playerid));
mysql_tquery(MySQL, query, "OnPlayerCreateCustomInterior", "iifffs", playerid, GetPlayerInterior(playerid), x, y, z, b_Name);
return 1;
}
PUBLIC:OnPlayerCreateCustomInterior(playerid, interior, Float:x, Float:y, Float:z, name[MAX_BIZ_NAME])
{
CurrentMaxCustomInterior = cache_insert_id();
BizInterior[CurrentMaxCustomInterior][i_SQLID] = CurrentMaxCustomInterior;
BizInterior[CurrentMaxCustomInterior][i_X] = x;
BizInterior[CurrentMaxCustomInterior][i_Y] = y;
BizInterior[CurrentMaxCustomInterior][i_Z] = z;
format(BizInterior[CurrentMaxCustomInterior][i_Name], MAX_BIZ_NAME, "%s", name);
BizInterior[CurrentMaxCustomInterior][i_Interior] = interior;
AnnonceMsg(playerid, "You have created a new interior called %s.", name);
Iter_Add(It_Interior, CurrentMaxCustomInterior);
NumberOfInterior++;
return 1;
}
// ============================================================================================================================================================================================
CMD:editinterior(playerid, params[])
{
if(!CurrentMaxCustomInterior)
return ErrorMsg(playerid, "There is no custom interior available. You need to create one at least.");
new interior;
if(sscanf(params, "i", interior))
{
SCM(playerid, LBLUE, "[Use] /editinterior [interior id]");
SCM(playerid, LBLUE, "[Use] Type -1 as [interior id] to delete all interiors.");
cmd_interiorlist(playerid);
return 1;
}
if(!IsValidInterior(interior) && interior != -1)
return ErrorMsg(playerid, "This interior id doesn't exist (id: %i).", interior);
if(interior == -1)
{
AdminMsg(playerid, "All interiors will be deleted. It can take a time.");
for(new i; i <= CurrentMaxCustomInterior; i++)
{
if(!IsValidInterior(i))
continue;
new query[170];
mysql_format(MySQL, query, sizeof(query), "DELETE FROM `"SQL_TABLE_INTERIOR"` WHERE `SQLID` = '%d'", BizInterior[i][i_SQLID]);
mysql_pquery(MySQL, query);
KickPlayersFromAnInterior(i);
ResetInteriorData(i);
}
AdminMsg(playerid, "You have deleted all interior.");
NumberOfInterior = CurrentMaxCustomInterior = 0;
return 1;
}
Dialog_Show(playerid, DIALOG_EDIT_INTERIOR, DIALOG_STYLE_LIST, BizInterior[interior][i_Name], "- Rename the interior\n- Moove the interior's enter at your current position\n- Delete the interior", "Select", "Cancel");
p_Biz[playerid][InteriorCreating] = interior;
return 1;
}
DIALOG(DIALOG_EDIT_INTERIOR)
{
if(!response)
return 1;
new bizid = p_Biz[playerid][InteriorCreating];
switch(listitem)
{
case 0 : Dialog_Show(playerid, DIALOG_INTERIOR_RENAME, DIALOG_STYLE_INPUT, BizInterior[bizid][i_Name], "Rename the interior name.", "Ok", "Cancel", BizInterior[bizid][i_Name]);
case 1 :
{
AdminMsg(playerid, "You moved the interior '%s' at your current positions & interior !", BizInterior[bizid][i_Name]);
new Float:x,
Float:y,
Float:z;
GetPlayerPos(playerid, x, y, z);
BizInterior[bizid][i_X] = x;
BizInterior[bizid][i_Y] = y;
BizInterior[bizid][i_Z] = z;
BizInterior[bizid][i_Interior] = GetPlayerInterior(playerid);
foreach(new i : Player)
{
if(p_Biz[i][LastBizVisited] == INVALID_BIZ_ID)
continue;
if(BizInfo[p_Biz[i][LastBizVisited]][bInterior] == bizid)
{
SetPlayerPos(i, x, y, z);
SetPlayerInterior(i, BizInterior[bizid][i_Interior]);
AnnonceMsg(i, "An administrator changes the interior %s, you have been teleported.", BizInterior[bizid][i_Name]);
}
}
new query[200];
mysql_format(MySQL, query, sizeof(query), "UPDATE `"SQL_TABLE_INTERIOR"` SET `X` = '%f', `Y` = '%f', `Z` = '%f', `InteriorID` = '%i' WHERE `SQLID` = '%i'", x, y, z, BizInterior[bizid][i_Interior], BizInterior[bizid][i_SQLID]);
mysql_pquery(MySQL, query);
p_Biz[playerid][InteriorCreating] = -1;
}
case 2:
{
AdminMsg(playerid, "You have deleted the interior '%s' !", BizInterior[bizid][i_Name]);
Iter_Remove(It_Interior, bizid);
KickPlayersFromAnInterior(bizid);
NumberOfInterior--;
new query[80];
mysql_format(MySQL, query, sizeof(query), "DELETE FROM `"SQL_TABLE_INTERIOR"` WHERE `SQLID` = '%d'", BizInterior[bizid][i_SQLID]);
mysql_pquery(MySQL, query);
ResetInteriorData(bizid);
p_Biz[playerid][InteriorCreating] = -1;
}
}
return 1;
}
DIALOG(DIALOG_INTERIOR_RENAME)
{
if(!response)
return 1;
if(strlen(inputtext) > MAX_BIZ_NAME)
return Dialog_Show(playerid, DIALOG_INTERIOR_RENAME, DIALOG_STYLE_INPUT, BizInterior[p_Biz[playerid][InteriorCreating]][i_Name], "Rename the interior name.\n"RED_U"The name is too long.", "Ok", "Cancel", BizInterior[p_Biz[playerid][InteriorCreating]][i_Name]);
SCMF(playerid, X11_PEACH_PUFF_2, "You renamed the interior : '%s' -> '%s'", BizInterior[p_Biz[playerid][InteriorCreating]][i_Name], inputtext);
format(BizInterior[p_Biz[playerid][InteriorCreating]][i_Name], MAX_BIZ_NAME, "%s", inputtext);
new query[250];
mysql_format(MySQL, query, sizeof(query), "UPDATE `"SQL_TABLE_INTERIOR"` SET `Name` = '%e' WHERE `SQLID` = '%i'", inputtext, BizInterior[p_Biz[playerid][InteriorCreating]][i_SQLID]);
mysql_pquery(MySQL, query);
foreach(new i : It_Biz)
SetBizInfos(i, .lID = true);
p_Biz[playerid][InteriorCreating] = -1;
return 1;
}
// ============================================================================================================================================================================================
CMD:interiorlist(playerid)
{
if(!IsPlayerAdmin(playerid))
return 0;
new str[100],
str1[250];
foreach(new i : It_Interior)
{
format(str, sizeof(str), "ID: %i » %s\n", i, BizInterior[i][i_Name]);
strcat(str1, str);
}
Dialog_Show(playerid, NOTHING, DIALOG_STYLE_MSGBOX, "All custom interiors", str1, "Ok", "");
return 1;
}
// ============================================================================================================================================================================================
CMD:biz_object(playerid, params[])
{
if(!PlayerHasABiz(playerid))
return ErrorMsg(playerid, "You don't own a biz.");
new p_biz = GetPlayerBiz(playerid);
if(p_Biz[playerid][LastBizVisited] != p_biz)
return ErrorMsg(playerid, "You must be in your own biz.");
new s_cmd[7],
parameter[10];
if(sscanf(params, "s[7]S()[10]", s_cmd, parameter))
return SCM(playerid, LBLUE, "[Use] /objects [create/move/delete/list]");
if(!strcmp(s_cmd, "create"))
{
if((BizInfo[p_biz][bObjects] + 1) >= MAX_OBJECTS_PER_BIZ)
return ErrorMsg(playerid, "You can't create more object in your biz.");
new modelid,
Float:DrawDistance;
if(sscanf(parameter, "iF(20.0)", modelid, DrawDistance))
return SCM(playerid, LBLUE, "[Use] /cobject [modelid] [Optional: DrawDistance]");
if(!IsValidObjectModel(modelid))
return ErrorMsg(playerid, "Invalid object model ID.");
new Float:x,
Float:y,
Float:z,
vw, int;
GetPlayerPos(playerid, x, y, z);
#if Streamer_Plugin
p_Biz[playerid][ObjectEditing] = CreateDynamicObject(modelid, x, y, z, 0.0, 0.0, 0.0, (vw = GetPlayerVirtualWorld(playerid)), (int = GetPlayerInterior(playerid)), .drawdistance = DrawDistance);
SCM(playerid, LBLUE, "» You can edit the object. Press Echap to cancel your edition.");
SelectObject(playerid);
#else
p_Biz[playerid][ObjectEditing] = CreateObject(modelid, x, y, z, 0.0, 0.0, 0.0, DrawDistance);
SCM(playerid, LBLUE, "» You can edit the object. Press Echap to cancel your edition.");
SelectObject(playerid);
#endif
new query[450];
mysql_format(MySQL, query, sizeof(query), "INSERT INTO `"SQL_TABLE_OBJECTS"` (`X`, `Y`, `Z`, `rX`, `rY`, `rZ`) VALUES ('%f', '%f', '%f', '%f', '%f', '%f')", x, y, z, 0.0, 0.0, 0.0);
mysql_tquery(MySQL, query, "OnObjectCreated", "iiiiif", p_Biz[playerid][ObjectEditing], modelid, p_biz, vw, int, DrawDistance);
BizInfo[p_biz][bObjects]++;
return 1;
}
else if(!strcmp("move", s_cmd))
{
if(!BizInfo[p_biz][bObjects])
return ErrorMsg(playerid, "You don't have any objects in your biz.");
SCM(playerid, LBLUE, "» You can edit the object. Press Echap to cancel your edition.");
SelectObject(playerid);
return 1;
}
else if(!strcmp("delete", s_cmd))
{
if(!BizInfo[p_biz][bObjects])
return ErrorMsg(playerid, "You don't have any objects in your biz.");
SCM(playerid, LBLUE, "You can delete any objects");
SelectObject(playerid);
p_Biz[playerid][ObjectEditing] = 0;
return 1;
}
else if(!strcmp("list", s_cmd))
{
if(!BizInfo[p_biz][bObjects])
return ErrorMsg(playerid, "You don't have any objects in your biz.");
new
str[300],
s_str[100];
foreach(new i : It_Objects)
{
format(s_str, sizeof(s_str), LGOLD_U"» Object ID "WHITE_U"%i "LGOLD_U"\tModel : "WHITE_U"%i\n", i, BizObjects[i][oID]);
strcat(str, s_str);
}
format(s_str, sizeof(s_str), "Biz's object (total: %i)", BizInfo[p_biz][bObjects]);
Dialog_Show(playerid, BizInfo[p_biz][bVW], DIALOG_STYLE_MSGBOX, s_str, str, "Ok", "", BizInfo[p_biz][bObjects]);
return 1;
}
else
return ErrorMsg(playerid, "Incorrect parameter.");
}
#if !defined Streamer_Plugin
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
if(!BizObjects[objectid][oID] && p_Biz[playerid][ObjectEditing] != -1)
return ErrorMsg(playerid, "This object cannot be edited by the filterscipt.");
if(BizObjects[objectid][oBiz] != GetPlayerBiz(playerid) && p_Biz[playerid][ObjectEditing] != -1)
return ErrorMsg(playerid, "You can't select an object which is not from your biz.");
if(!p_Biz[playerid][ObjectEditing])
{
new query[60];
DestroyObject(objectid);
mysql_format(MySQL, query, sizeof(query), "DELETE FROM `"SQL_TABLE_OBJECTS"` WHERE `SQLID` = '%d'", BizObjects[objectid][oSQLID]);
mysql_pquery(MySQL, query);
ResetObjectData(objectid);
p_Biz[playerid][ObjectEditing] = -1;
CancelEdit(playerid);
BizInfo[GetPlayerBiz(playerid)][bObjects]--;
}
else
{
p_Biz[playerid][ObjectEditing] = objectid;
EditObject(playerid, objectid);
}
return 1;
}
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
new Float:oldX, Float:oldY, Float:oldZ,
Float:oldRotX, Float:oldRotY, Float:oldRotZ;
if(!playerobject && p_Biz[playerid][ObjectEditing] > -1)
{
if(response == EDIT_RESPONSE_FINAL)
{
SetDynamicObjectPos(objectid, x, y, z);
SetDynamicObjectRot(objectid, rx, ry, rz);
BizObjects[objectid][oX] = x;
BizObjects[objectid][oY] = y;
BizObjects[objectid][oZ] = z;
BizObjects[objectid][oRX] = rx;
BizObjects[objectid][oRY] = ry;
BizObjects[objectid][oRZ] = rz;
SaveObject(objectid);
p_Biz[playerid][ObjectEditing] = -1;
}
if(response == EDIT_RESPONSE_CANCEL)
{
GetDynamicObjectPos(objectid, oldX, oldY, oldZ);
GetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
BizObjects[objectid][oX] = oldX;
BizObjects[objectid][oY] = oldY;
BizObjects[objectid][oZ] = oldZ;
BizObjects[objectid][oRX] = oldRotX;
BizObjects[objectid][oRY] = oldRotY;
BizObjects[objectid][oRZ] = oldRotZ;
SetDynamicObjectPos(objectid, oldX, oldY, oldZ);
SetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
SaveObject(objectid);
p_Biz[playerid][ObjectEditing] = -1;
}
}
}
#else
public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
{
if(!BizObjects[objectid][oID] && p_Biz[playerid][ObjectEditing] != -1)
return ErrorMsg(playerid, "This object cannot be edited by the filterscipt.");
if(BizObjects[objectid][oBiz] != GetPlayerBiz(playerid) && p_Biz[playerid][ObjectEditing] != -1)
return ErrorMsg(playerid, "You can't select an object which is not from your biz.");
if(!p_Biz[playerid][ObjectEditing])
{
new query[60];
DestroyDynamicObject(objectid);
mysql_format(MySQL, query, sizeof(query), "DELETE FROM `"SQL_TABLE_OBJECTS"` WHERE `SQLID` = '%d'", BizObjects[objectid][oSQLID]);
mysql_pquery(MySQL, query);
ResetObjectData(objectid);
p_Biz[playerid][ObjectEditing] = -1;
CancelEdit(playerid);
BizInfo[GetPlayerBiz(playerid)][bObjects]--;
}
else
{
p_Biz[playerid][ObjectEditing] = objectid;
EditDynamicObject(playerid, objectid);
}
return 1;
}
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
new Float:oldX, Float:oldY, Float:oldZ,
Float:oldRotX, Float:oldRotY, Float:oldRotZ;
if(p_Biz[playerid][ObjectEditing] > -1)
{
if(response == EDIT_RESPONSE_FINAL && p_Biz[playerid][ObjectEditing] > -1)
{
SetDynamicObjectPos(objectid, x, y, z);
SetDynamicObjectRot(objectid, rx, ry, rz);
BizObjects[objectid][oX] = x;
BizObjects[objectid][oY] = y;
BizObjects[objectid][oZ] = z;
BizObjects[objectid][oRX] = rx;
BizObjects[objectid][oRY] = ry;
BizObjects[objectid][oRZ] = rz;
SaveObject(objectid);
p_Biz[playerid][ObjectEditing] = -1;
}
if(response == EDIT_RESPONSE_CANCEL && p_Biz[playerid][ObjectEditing] > -1)
{
GetDynamicObjectPos(objectid, oldX, oldY, oldZ);
GetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
BizObjects[objectid][oX] = oldX;
BizObjects[objectid][oY] = oldY;
BizObjects[objectid][oZ] = oldZ;
BizObjects[objectid][oRX] = oldRotX;
BizObjects[objectid][oRY] = oldRotY;
BizObjects[objectid][oRZ] = oldRotZ;
SetDynamicObjectPos(objectid, oldX, oldY, oldZ);
SetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
SaveObject(objectid);
p_Biz[playerid][ObjectEditing] = -1;
}
}
}
#endif
PUBLIC:OnObjectCreated(objectid, modelid, bizid, VirtualWorld, interior, Float:Drawdistance)
{
CurrentMaxObjects = cache_insert_id();
BizObjects[objectid][oSQLID] = CurrentMaxObjects;
BizObjects[objectid][oID] = modelid;
BizObjects[objectid][oBiz] = bizid;
BizObjects[objectid][oVirtualWorld] = VirtualWorld;
BizObjects[objectid][oInterior] = interior;
BizObjects[objectid][oDrawDistance] = Drawdistance;
Iter_Add(It_Objects, objectid);
}
// ============================================================================================================================================================================================
// ALIAS:
CMD:b_o(playerid, params[])
return cmd_biz_object(playerid, params);
CMD:biz(playerid)
return cmd_managebiz(playerid);
CMD:cinterior(playerid, params[])
return cmd_createinterior(playerid, params);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ===========================================================================================================================================================================================
// Dialogs
// ===========================================================================================================================================================================================
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DIALOG(DIALOG_INVESTOR)
{
if(!response) return 1;
new bizid = GetInvestorBizID(playerid);
if(bizid == INVALID_BIZ_ID)
return Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", WHITE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 09", "Ok", "");
switch(listitem)
{
case 0:
{
if(!BizInv[bizid][iSafe])
return ShowDialogInvestor(playerid, bizid), ErrorMsg(playerid, "You are not allowed to do that.");
new str[250];
format(str, sizeof(str),
LGOLD_U"- Biz ID: "WHITE_U"%i\n\
"LGOLD_U"- Owner : "WHITE_U"%s\n\
"LGOLD_U"- Door : "WHITE_U"%s\n\
"LGOLD_U"- Resale price : "WHITE_U"%i$\n\
"LGOLD_U"- Safe : "WHITE_U"%i$\n\
"LGOLD_U"- Investor : "WHITE_U"%s", BizInfo[bizid][bSQLID], BizInfo[bizid][bOwner], OpenFormatBiz[BizInfo[bizid][bOpen]], floatround(BizInfo[bizid][bPrice]/2, floatround_round), BizInfo[bizid][bSafe], BizInv[bizid][iName]);
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_INFO, DIALOG_STYLE_MSGBOX, "Info biz", str, "Ok", "Back");
}
case 2:
{
if(!BizInv[bizid][iEnterPrice])
return ShowDialogInvestor(playerid, bizid), ErrorMsg(playerid, "You are not allowed to do that.");
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_PRICECHANGER, DIALOG_STYLE_INPUT, "Change the price enter", "Change the enter price", "Confirm", "Cancel");
}
case 1:
{
if(!BizInv[bizid][iLock])
return ShowDialogInvestor(playerid, bizid), ErrorMsg(playerid, "You are not allowed to do that.");
if(GetNearestBiz(playerid) != bizid && p_Biz[playerid][LastBizVisited] != bizid) return ErrorMsg(playerid, "You are too far away from the biz.");
if(BizInfo[bizid][bOpen])
{
BizInfo[bizid][bOpen] = false;
DestroyPickup(BizInfo[bizid][bPickupID]);
SCM(playerid, RED, "You have locked the biz.");
SetBizInfos(bizid, .pID = true);
}
else
{
BizInfo[bizid][bOpen] = true;
DestroyPickup(BizInfo[bizid][bPickupID]);
SCM(playerid, GREEN, "You have opened the biz.");
SetBizInfos(bizid, .pID = true);
}
}
case 4:
{
if(!BizInv[bizid][iDeposit])
return ShowDialogInvestor(playerid, bizid), ErrorMsg(playerid, "You are not allowed to do that.");
if(p_Biz[playerid][LastBizVisited] != bizid)
return ErrorMsg(playerid, "You need to be inside in the biz to do that.");
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_DEPOSIT, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to deposit it.", "Confirm", "Cancel");
}
case 5:
{
if(!BizInv[bizid][iWithdraw]) return ShowDialogInvestor(playerid, bizid), ErrorMsg(playerid, "You are not allowed to do that.");
if(p_Biz[playerid][LastBizVisited] != bizid)
return ErrorMsg(playerid, "You need to be inside in the biz to do that.");
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_WITHDRAW, DIALOG_STYLE_INPUT, "Withdraw money", "Set the amount of money to withdraw it.", "Confirm", "Cancel");
}
case 3:
{
if(!BizInv[bizid][iRename]) return ShowDialogInvestor(playerid, bizid), ErrorMsg(playerid, "You are not allowed to do that.");
if(p_Biz[playerid][LastBizVisited] != bizid && GetNearestBiz(playerid) != bizid) return ErrorMsg(playerid, "You have to far away from the biz.");
p_Biz[playerid][BizCreating] = bizid;
Dialog_Show(playerid, DIALOG_NAME, DIALOG_STYLE_INPUT, "Name your biz", "Enter a name for your biz.", "Confirm", "Cancel");
}
default : Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", WHITE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 10", "Ok", "");
}
return 1;
}
// ============================================================================================================================================================================================
DIALOG(DIALOG_MODIFY_INVESTOR)
{
if(!response) return 1;
new bizid = p_Biz[playerid][BizCreating];
if(p_Biz[playerid][BizCreating] == -1) return Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", WHITE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 08", "Ok", "");
switch(listitem)
{
case 0:
{
if(!BizInv[bizid][iSafe])
{
BizInv[bizid][iSafe] = true;
SCMF(playerid, GREEN, "%s can now access to the biz's informations.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
else
{
BizInv[bizid][iSafe] = false;
SCMF(playerid, RED, "%s can not anymore access to the biz's informations.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
}
case 1:
{
if(!BizInv[bizid][iLock])
{
BizInv[bizid][iLock] = true;
SCMF(playerid, GREEN, "%s can lock your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
else
{
BizInv[bizid][iLock] = false;
SCMF(playerid, RED, "%s can not anymore lock your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
}
case 2:
{
if(!BizInv[bizid][iEnterPrice])
{
BizInv[bizid][iEnterPrice] = true;
SCMF(playerid, GREEN, "%s can modify the enter price of your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
else
{
BizInv[bizid][iEnterPrice] = false;
SCMF(playerid, RED, "%s can not anymore modify the enter price of your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
}
case 3:
{
if(!BizInv[bizid][iRename])
{
BizInv[bizid][iRename] = true;
SCMF(playerid, GREEN, "%s can now rename your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
else
{
BizInv[bizid][iRename] = false;
SCMF(playerid, RED, "%s can not anymore rename your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
}
case 4:
{
if(!BizInv[bizid][iDeposit])
{
BizInv[bizid][iDeposit] = true;
SCMF(playerid, GREEN, "%s can deposit in your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
else
{
BizInv[bizid][iDeposit] = false;
SCMF(playerid, RED, "%s can not anymore deposit in your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
}
case 5:
{
if(!BizInv[bizid][iWithdraw])
{
BizInv[bizid][iWithdraw] = true;
SCMF(playerid, GREEN, "%s can withdraw in your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
else
{
BizInv[bizid][iWithdraw] = false;
SCMF(playerid, RED, "%s can not anymore withdraw in your biz.", BizInv[bizid][iName]);
ShowDialogInvPerm(playerid, bizid);
}
}
default : return Dialog_Show(playerid, ERROR, DIALOG_STYLE_MSGBOX, "Unknown", WHITE_U"An error occured. Take a screenshoot [F8] and inform Dayrion.\nError ID: 07", "Ok", "");
}
return 1;
}
// ============================================================================================================================================================================================
DIALOG(DIALOG_INFO)
{
if(response)
{
p_Biz[playerid][BizCreating] = -1;
}
else
{
if(!strcmp(BizInv[p_Biz[playerid][BizCreating]][iName], GetName(playerid)) && p_Biz[playerid][BizCreating] != -1) cmd_ibiz(playerid);
else cmd_managebiz(playerid);
}
return 1;
}
// ============================================================================================================================================================================================
DIALOG(DIALOG_PRICECHANGER)
{
if(response)
{
if(!BizInfo[p_Biz[playerid][BizCreating]][bBought]) return ErrorMsg(playerid, "Nobody have buy this biz, you can't change the enter price.");
if(strval(inputtext) > cellmax || strval(inputtext) < 0) return Dialog_Show(playerid, DIALOG_PRICECHANGER, DIALOG_STYLE_INPUT, "Change the price enter", "Change the enter price\n"RED_U"The value should be between 1$ & %i$", "Confirm", "Cancel", cellmax);
SCMF(playerid, X11_NAVAJO_WHITE_2, "You have changed the enter price : %i$ -> %i$", BizInfo[p_Biz[playerid][BizCreating]][bEnterPrice], strval(inputtext));
BizInfo[p_Biz[playerid][BizCreating]][bEnterPrice] = strval(inputtext);
SetBizInfos(p_Biz[playerid][BizCreating], true, false, false, true);
p_Biz[playerid][BizCreating] = -1;
}
return 1;
}
// ============================================================================================================================================================================================
DIALOG(DIALOG_DEPOSIT)
{
if(response)
{
if(strval(inputtext) == 0) return Dialog_Show(playerid, DIALOG_DEPOSIT, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to deposit it.\n"RED_U"Please use only numeric values or wrong values [Between: 1$-%i$]", "Confirm", "Cancel", cellmax);
if(strval(inputtext) > GetPlayerMoney(playerid)) return Dialog_Show(playerid, DIALOG_DEPOSIT, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to deposit it.\n"RED_U"You don't have this amount of money.", "Confirm", "Cancel");
if(strval(inputtext) < 0) return Dialog_Show(playerid, DIALOG_DEPOSIT, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to deposit it.\n"RED_U"Please use only positive values.", "Confirm", "Cancel");
if(strval(inputtext) + BizInfo[p_Biz[playerid][BizCreating]][bSafe] > MAX_BALANCE) return Dialog_Show(playerid, DIALOG_DEPOSIT, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to deposit it.\n"RED_U"This amount exceed the limit.", "Confirm", "Cancel");
BizInfo[p_Biz[playerid][BizCreating]][bSafe] += strval(inputtext);
SCMF(playerid, X11_CORNSILK_2, "You deposit %i$. (Balance : %i$)", strval(inputtext), BizInfo[p_Biz[playerid][BizCreating]][bSafe]);
GivePlayerMoney(playerid, -strval(inputtext));
SetMoneyGameText(playerid, -strval(inputtext));
if(BizInv[p_Biz[playerid][BizCreating]][iInves])
{
if(!IsPlayerConnectedByName(BizInv[p_Biz[playerid][BizCreating]][iName]) || !IsPlayerConnectedByName(BizInfo[p_Biz[playerid][BizCreating]][bOwner]))
{
p_Biz[playerid][BizCreating] = -1;
return 1;
}
else
{
GivePlayerMoney(GetIDByName(BizInv[p_Biz[playerid][BizCreating]][iName]), floatround(strval(inputtext)*0.1));
if(IsPlayerConnectedByName(BizInfo[p_Biz[playerid][BizCreating]][bOwner]))
SCMF(GetIDByName(BizInfo[p_Biz[playerid][BizCreating]][bOwner]), RED, "%s won %i$.", BizInv[p_Biz[playerid][BizCreating]][iName], floatround(strval(inputtext)*0.1), strval(inputtext));
SetMoneyGameText(playerid, strval(inputtext));
p_Biz[playerid][BizCreating] = -1;
return 1;
}
}
}
return 1;
}
// ============================================================================================================================================================================================
DIALOG(DIALOG_WITHDRAW)
{
if(response)
{
if(strval(inputtext) == 0) return Dialog_Show(playerid, DIALOG_WITHDRAW, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to withdraw it.\n"RED_U"Please use only numeric values.", "Confirm", "Cancel");
if(strval(inputtext) > BizInfo[p_Biz[playerid][BizCreating]][bSafe]) return Dialog_Show(playerid, DIALOG_WITHDRAW, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to withdraw it.\n"RED_U"You don't have this amount of money in your biz.", "Confirm", "Cancel");
if(strval(inputtext) < 0) return Dialog_Show(playerid, DIALOG_WITHDRAW, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to withdraw it.\n"RED_U"Please use only positive values.", "Confirm", "Cancel");
if(BizInfo[p_Biz[playerid][BizCreating]][bSafe] - strval(inputtext) < 0) return Dialog_Show(playerid, DIALOG_WITHDRAW, DIALOG_STYLE_INPUT, "Deposit money", "Set the amount of money to withdraw it.\n"RED_U"You don't have this money on your biz.", "Confirm", "Cancel");
BizInfo[p_Biz[playerid][BizCreating]][bSafe] -= strval(inputtext);
SetMoneyGameText(playerid, strval(inputtext));
SCMF(playerid, X11_CORNSILK_2, "You withdraw %i$. (Balance : %i$)", strval(inputtext), BizInfo[p_Biz[playerid][BizCreating]][bSafe]);
GivePlayerMoney(playerid, strval(inputtext));
p_Biz[playerid][BizCreating] = -1;
}
return 1;
}
// ============================================================================================================================================================================================
DIALOG(DIALOG_NAME)
{
if(response)
{
if(strlen(inputtext) > MAX_BIZ_NAME && IsPlayerAdmin(playerid)) return Dialog_Show(playerid, DIALOG_NAME, DIALOG_STYLE_INPUT, "Name your biz", "Enter a name for the biz ID:%i (Actually: '%s').\n"RED_U"The name is too long.", "Confirm", "Cancel", p_Biz[playerid][BizCreating], BizInfo[p_Biz[playerid][BizCreating]][bName]);
else if(strlen(inputtext) > MAX_BIZ_NAME && !IsPlayerAdmin(playerid)) return Dialog_Show(playerid, DIALOG_NAME, DIALOG_STYLE_INPUT, "Name your biz", "Enter a name for your biz.\n"RED_U"The name is too long.", "Confirm", "Cancel");
SCMF(playerid, X11_PEACH_PUFF_2, "You renamed your biz : '%s' -> '%s'", BizInfo[p_Biz[playerid][BizCreating]][bName], inputtext);
format(BizInfo[p_Biz[playerid][BizCreating]][bName], MAX_BIZ_NAME, inputtext);
SetBizInfos(p_Biz[playerid][BizCreating], true, false, false, true);
p_Biz[playerid][BizCreating] = -1;
}
return 1;
}
// ============================================================================================================================================================================================
DIALOG(DIALOG_BALANCE)
{
if(response)
{
if(strval(inputtext) == 0) return Dialog_Show(playerid, DIALOG_BALANCE, DIALOG_STYLE_INPUT, "Modify balance", "Modify the current balance.\nActually : %i$\n"RED_U"Please use only numeric values [Between: 1$-%i$].", "Confirm", "Cancel", BizInfo[p_Biz[playerid][BizCreating]][bSafe], cellmax);
if(strval(inputtext) < 0) return Dialog_Show(playerid, DIALOG_BALANCE, DIALOG_STYLE_INPUT, "Deposit money", "Modify the current balance.\nActually : %i$\n"RED_U"Please use only positive values.", "Confirm", "Cancel", BizInfo[p_Biz[playerid][BizCreating]][bSafe]);
AdminMsg(playerid, "You have changed the current balance of the biz ID:%i » %i$ -> %i$", p_Biz[playerid][BizCreating], BizInfo[p_Biz[playerid][BizCreating]][bSafe], strval(inputtext));
BizInfo[p_Biz[playerid][BizCreating]][bSafe] = strval(inputtext);
p_Biz[playerid][BizCreating] = -1;
return 1;
}
else p_Biz[playerid][BizCreating] = -1;
return 1;
}
// ============================================================================================================================================================================================
// ===========================================================================================================================================================================================
// Functions
// ===========================================================================================================================================================================================
// ============================================================================================================================================================================================
SaveBizData(bizid)
{
if(!IsValidBiz(bizid))
return 1;
new query[750];
strcat(query, "UPDATE `"SQL_TABLE_DATA"` SET `Type` = '%i', `Interior` = '%i', `Level` = '%i', `Price` = '%i', `Safe` = '%i', `EnterPrice` = '%i', `VW` = '%i', `Bought` = '%i', `Open` = '%i', `Investor` = '%i', `Objects` = '%i',");
strcat(query, " `X` = '%0.5f', `Y` = '%0.5f', `Z` = '%0.5f', `eX` = '%0.5f', `eY` = '%0.5f', `eZ` = '%0.5f', `eVW` = '%i', `eInter` = '%i', `Owner` = '%e', `BizName` = '%e' WHERE SQLID = '%i'");
mysql_format(MySQL, query, sizeof(query), query, BizInfo[bizid][bType], BizInfo[bizid][bInterior], BizInfo[bizid][bLevel], BizInfo[bizid][bPrice], BizInfo[bizid][bSafe], BizInfo[bizid][bEnterPrice], BizInfo[bizid][bVW], BizInfo[bizid][bBought],
BizInfo[bizid][bOpen], BizInfo[bizid][bInvestor], BizInfo[bizid][bObjects], BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], BizInfo[bizid][beX], BizInfo[bizid][beY], BizInfo[bizid][beZ], BizInfo[bizid][bEVW], BizInfo[bizid][bEInt], BizInfo[bizid][bOwner], BizInfo[bizid][bName], BizInfo[bizid][bSQLID]);
mysql_pquery(MySQL, query);
return 1;
}
// ============================================================================================================================================================================================
SaveObject(objectid)
{
#if Streamer_Plugin
if(!IsValidDynamicObject(objectid))
return 1;
#else
if(!IsValidObject(objectid))
return 1;
#endif
new query[300];
mysql_format(MySQL, query, sizeof(query), "UPDATE `"SQL_TABLE_OBJECTS"` SET `Biz` = '%i', `ID` = '%i', `Interior` = '%i', `VirtualWorld` = '%i', `X` = '%0.5f', `Y` = '%0.5f', `Z` = '%0.5f', `rX` = '%0.5f', `rY` = '%0.5f', `rZ` = '%0.5f', `DrawDistance` = '%0.5f' WHERE SQLID = '%i'",
BizObjects[objectid][oBiz], BizObjects[objectid][oID], BizObjects[objectid][oInterior], BizObjects[objectid][oVirtualWorld], BizObjects[objectid][oX], BizObjects[objectid][oY], BizObjects[objectid][oZ], BizObjects[objectid][oRX], BizObjects[objectid][oRY], BizObjects[objectid][oRZ],
BizObjects[objectid][oDrawDistance], BizObjects[objectid][oSQLID]);
mysql_tquery(MySQL, query);
return 1;
}
// ============================================================================================================================================================================================
ResetObjectData(objectid)
{
new reset_obj[E_OBJECTS];
BizObjects[objectid] = reset_obj;
// BizObjects[objectid][oSID] =
// BizObjects[objectid][oSQLID] =
// BizObjects[objectid][oBiz] =
// BizObjects[objectid][oVirtualWorld] =
// BizObjects[objectid][oInterior] =
// BizObjects[objectid][oID] = 0;
// BizObjects[objectid][oX] =
// BizObjects[objectid][oY] =
// BizObjects[objectid][oZ] =
// BizObjects[objectid][oRX] =
// BizObjects[objectid][oRY] =
// BizObjects[objectid][oRZ] =
// BizObjects[objectid][oDrawDistance] = 0.0;
}
// ============================================================================================================================================================================================
FirstIntID(typeid)
{
for(new i, j = sizeof(BizData); i < j; i++)
{
if(BizData[i][Type] != typeid)
continue;
return i;
}
return INVALID_BIZ_ID;
}
// ============================================================================================================================================================================================
ResetBizData(bizid, label = true)
{
new query[60];
mysql_format(MySQL, query, sizeof(query), "DELETE FROM `"SQL_TABLE_INVESTOR"` WHERE `SQLID` = '%d'", BizInv[bizid][iSQLID]);
mysql_pquery(MySQL, query);
if(label)
{
#if !Streamer_Plugin
Delete3DTextLabel(BizInfo[bizid][bLabelID]);
Delete3DTextLabel(BizInfo[bizid][bLabelEnterID]);
DestroyPickup(BizInfo[bizid][bPickupID]);
DestroyPickup(BizInfo[bizid][bPickupEnter]);
#else
DestroyDynamic3DTextLabel(BizInfo[bizid][bLabelID]);
DestroyDynamic3DTextLabel(BizInfo[bizid][bLabelEnterID]);
DestroyDynamicPickup(BizInfo[bizid][bPickupID]);
DestroyDynamicPickup(BizInfo[bizid][bPickupEnter]);
#endif
}
new reset_bizData[E_BIZ_VALUES];
reset_bizData[bSQLID] = bizid;
BizInfo[bizid] = reset_bizData;
BizInfo[bizid][bInterior] =
BizInfo[bizid][bPickupID] =
BizInfo[bizid][bPickupEnter] =
_:BizInfo[bizid][bLabelID] =
_:BizInfo[bizid][bLabelEnterID] = -1;
BizInfo[bizid][bOpen] = true;
format(BizInfo[bizid][bOwner], MAX_PLAYER_NAME, "None");
format(BizInfo[bizid][bName], MAX_BIZ_NAME, "None");
mysql_format(MySQL, query, sizeof(query), "DELETE FROM `"SQL_TABLE_DATA"` WHERE `SQLID` = '%d'", BizInfo[bizid][bSQLID]);
mysql_pquery(MySQL, query);
}
// ============================================================================================================================================================================================
SaveInvestorData(bizid)
{
if(!(IsValidInvestor(bizid) && IsValidBiz(bizid)))
return 1;
new query[350];
mysql_format(MySQL, query, sizeof(query), "UPDATE `"SQL_TABLE_INVESTOR"` SET `Safe` = '%i', `Lock` = '%i', `EnterPrice` = '%i', `Rename` = '%i', `Deposit` = '%i', `Withdraw` = '%i', `Name` = '%e' WHERE SQLID = '%i'",
BizInv[bizid][iSafe], BizInv[bizid][iLock], BizInv[bizid][iEnterPrice], BizInv[bizid][iRename], BizInv[bizid][iDeposit], BizInv[bizid][iWithdraw], BizInv[bizid][iName], BizInv[bizid][iSQLID]);
mysql_pquery(MySQL, query);
return 1;
}
ResetInteriorData(interiorid)
{
if(!IsValidInterior(interiorid))
return 1;
BizInterior[interiorid][i_X] =
BizInterior[interiorid][i_Y] =
BizInterior[interiorid][i_Z] = 0.0;
BizInterior[interiorid][i_SQLID] =
BizInterior[interiorid][i_Interior] = 0;
format(BizInterior[interiorid][i_Name], MAX_BIZ_NAME, "NoName");
return 1;
}
// ============================================================================================================================================================================================
bool:PlayerHasABiz(playerid)
{
static
name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
foreach(new i : It_Biz)
{
if(!strcmp(name, BizInfo[i][bOwner]))
return true;
}
return false;
}
// ============================================================================================================================================================================================
GetName(const playerid, id = false)
{
static
str[MAX_PLAYER_NAME+9];
GetPlayerName(playerid, str, sizeof(str));
if(id)
format(str, sizeof(str), "%s (ID: %i)", str, playerid);
return str;
}
// ============================================================================================================================================================================================
SCMF(playerid, couleur, const msg[], va_args<>)
{
static
string[145];
va_format(string, sizeof(string), msg, va_start<3>);
return SendClientMessage(playerid, couleur, string);
}
SCM(playerid, color, const msg[])
return SendClientMessage(playerid, color, msg);
// ============================================================================================================================================================================================
ErrorMsg(playerid, const msg[], va_args<>)
{
new message[190];
static const premsg[] = "[Error] %s";
if(numargs() == 2)
return SCMF(playerid, 0xCC0000FF, premsg, msg);
va_format(message, sizeof(message), msg, va_start<2>);
return SCMF(playerid, 0xCC0000FF, "[Error] %s", message);
}
AdminMsg(playerid, const msg[], va_args<>)
{
new message[190];
static const premsg[] = "» [Admin]{ffb31a} %s";
if(numargs() == 2)
return SCMF(playerid, 0xFF0000FF, premsg, msg);
va_format(message, sizeof(message), msg, va_start<2>);
return SCMF(playerid, 0xFF0000FF, "» [Admin]{ffb31a} %s", message);
}
AnnonceMsg(playerid, const message[], va_args<>)
{
static msg[190];
static const premsg[] = "[Biz info] {b3e0ff}%s";
if(numargs() == 2) return SCMF(playerid, 0x66a3ffff, premsg, message);
va_format(msg, sizeof(msg), message, va_start<2>);
return SCMF(playerid, 0x66a3ffff, premsg, msg);
}
// ============================================================================================================================================================================================
SetBizInfos(bizid, bool:save = false, bool:pID = false, bool:pEnter = false, bool:lID = false, bool:lEnter = false)
{
if(!BizInfo[bizid][bCreated])
return printf(FPRINT"An error occured during setting infos of the biz ID: %i | Error ID: 07", bizid);
static
str[120];
#if !Streamer_Plugin
if(pID)
{
if(BizInfo[bizid][bPickupID] != -1)
DestroyPickup(BizInfo[bizid][bPickupID]);
if(!BizInfo[bizid][bBought])
{
if(BizInfo[bizid][bOpen])
BizInfo[bizid][bPickupID] = CreatePickup(ICON_BIZ_PENDING_OPEN, 1, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], -1);
else
BizInfo[bizid][bPickupID] = CreatePickup(ICON_BIZ_PENDING_CLOSED, 1, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], -1);
}
else
{
if(BizInfo[bizid][bOpen])
BizInfo[bizid][bPickupID] = CreatePickup(ICON_BIZ_OPEN, 1, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], -1);
else
BizInfo[bizid][bPickupID] = CreatePickup(ICON_BIZ_LOCKED, 1, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], -1);
}
}
if(pEnter)
{
if(BizInfo[bizid][bPickupEnter] != -1)
DestroyPickup(BizInfo[bizid][bPickupEnter]);
BizInfo[bizid][bPickupEnter] = CreatePickup(ICON_BIZ_INTERIOR, 1, BizInfo[bizid][beX], BizInfo[bizid][beY], BizInfo[bizid][beZ], BizInfo[bizid][bVW]);
}
if(lID)
{
if(!BizInfo[bizid][bBought])
format(str, sizeof(str), "~ FOR SALE ~\n"LBLUE_U"%s\nLevel : "WHITE_U"%i\n"LBLUE_U"Price : "WHITE_U"%i$", BizInfo[bizid][bName], BizInfo[bizid][bLevel], BizInfo[bizid][bPrice]);
else
format(str, sizeof(str), "%s\nOwner : "WHITE_U"%s\n"LBLUE_U"Enter price : "WHITE_U"%i$\n"LBLUE_U"Investor : "WHITE_U"%s", BizInfo[bizid][bName], BizInfo[bizid][bOwner], BizInfo[bizid][bEnterPrice], BizInv[bizid][iName]);
if(_:BizInfo[bizid][bLabelID] != -1)
Delete3DTextLabel(BizInfo[bizid][bLabelID]);
BizInfo[bizid][bLabelID] = Create3DTextLabel(str, LBLUE, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], 20.0, 0, 0);
}
if(lEnter)
{
if(_:BizInfo[bizid][bLabelEnterID] != -1)
Delete3DTextLabel(BizInfo[bizid][bLabelEnterID]);
BizInfo[bizid][bLabelEnterID] = Create3DTextLabel("~ Press F to exit ~", WHITE, BizInfo[bizid][beX], BizInfo[bizid][beY], BizInfo[bizid][beZ], 20.0, BizInfo[bizid][bVW], 0);
}
#else
if(pID)
{
if(BizInfo[bizid][bPickupID] != -1)
DestroyDynamicPickup(BizInfo[bizid][bPickupID]);
if(!BizInfo[bizid][bBought])
{
if(BizInfo[bizid][bOpen])
BizInfo[bizid][bPickupID] = CreateDynamicPickup(ICON_BIZ_PENDING_OPEN, 1, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], .worldid = BizInfo[bizid][bEVW], .interiorid = BizInfo[bizid][bEInt]);
else
BizInfo[bizid][bPickupID] = CreateDynamicPickup(ICON_BIZ_PENDING_CLOSED, 1, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], .worldid = BizInfo[bizid][bEVW], .interiorid = BizInfo[bizid][bEInt]);
}
else
{
if(BizInfo[bizid][bOpen])
BizInfo[bizid][bPickupID] = CreateDynamicPickup(ICON_BIZ_OPEN, 1, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], .worldid = BizInfo[bizid][bEVW], .interiorid = BizInfo[bizid][bEInt]);
else
BizInfo[bizid][bPickupID] = CreateDynamicPickup(ICON_BIZ_LOCKED, 1, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], .worldid = BizInfo[bizid][bEVW], .interiorid = BizInfo[bizid][bEInt]);
}
}
if(pEnter)
{
if(BizInfo[bizid][bPickupEnter] != -1)
DestroyDynamicPickup(BizInfo[bizid][bPickupEnter]);
BizInfo[bizid][bPickupEnter] = CreateDynamicPickup(ICON_BIZ_INTERIOR, 1, BizInfo[bizid][beX], BizInfo[bizid][beY], BizInfo[bizid][beZ], .worldid = BizInfo[bizid][bVW]);
}
if(lID)
{
if(!BizInfo[bizid][bBought])
format(str, sizeof(str), "~ FOR SALE ~\n"LBLUE_U"%s\nLevel : "WHITE_U"%i\n"LBLUE_U"Price : "WHITE_U"%i$", BizInfo[bizid][bName], BizInfo[bizid][bLevel], BizInfo[bizid][bPrice]);
else
format(str, sizeof(str), "%s\nOwner : "WHITE_U"%s\n"LBLUE_U"Enter price : "WHITE_U"%i$\n"LBLUE_U"Investor : "WHITE_U"%s", BizInfo[bizid][bName], BizInfo[bizid][bOwner], BizInfo[bizid][bEnterPrice], BizInv[bizid][iName]);
if(_:BizInfo[bizid][bLabelID] != -1)
DestroyDynamic3DTextLabel(BizInfo[bizid][bLabelID]);
BizInfo[bizid][bLabelID] = CreateDynamic3DTextLabel(str, LBLUE, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ], 20.0, .worldid = BizInfo[bizid][bEVW], .interiorid = BizInfo[bizid][bEInt]);
}
if(lEnter)
{
if(_:BizInfo[bizid][bLabelEnterID] != -1)
DestroyDynamic3DTextLabel(BizInfo[bizid][bLabelEnterID]);
BizInfo[bizid][bLabelEnterID] = CreateDynamic3DTextLabel("~ Press F to exit ~", WHITE, BizInfo[bizid][beX], BizInfo[bizid][beY], BizInfo[bizid][beZ], 20.0, .worldid = BizInfo[bizid][bVW]);
}
#endif
if(save)
SaveBizData(bizid);
return 1;
}
// ============================================================================================================================================================================================
GetNearestBiz(playerid)
{
new near = INVALID_BIZ_ID,
p_int = GetPlayerInterior(playerid),
p_vw = GetPlayerVirtualWorld(playerid);
foreach(new i : It_Biz)
{
#if Streamer_Plugin
if(BizInfo[i][bEInt] != p_int || BizInfo[i][bEVW] != p_vw)
continue;
#endif
if(!IsPlayerInRangeOfPoint(playerid, 3.0, BizInfo[i][bX], BizInfo[i][bY], BizInfo[i][bZ]))
continue;
near = i;
}
return near;
}
// ============================================================================================================================================================================================
IsNearABiz(playerid)
return GetNearestBiz(playerid) == INVALID_BIZ_ID ? false : true;
// ============================================================================================================================================================================================
EnterInABiz(playerid, bizid)
{
new IntA = BizInfo[bizid][bInterior];
if(BizInfo[bizid][bType])
{
SetPlayerPos(playerid, BizData[IntA][X], BizData[IntA][Y], BizData[IntA][Z]);
SetPlayerInterior(playerid, BizData[IntA][Interior]);
}
else
{
SetPlayerPos(playerid, BizInterior[IntA][i_X], BizInterior[IntA][i_Y], BizInterior[IntA][i_Z]);
SetPlayerInterior(playerid, BizInterior[IntA][i_Interior]);
}
SetPlayerVirtualWorld(playerid, BizInfo[bizid][bVW]);
p_Biz[playerid][LastBizVisited] = bizid;
return 1;
}
// ============================================================================================================================================================================================
ExitABiz(playerid, bizid)
{
#if Streamer_Plugin
SetPlayerInterior(playerid, BizInfo[bizid][bEInt]);
SetPlayerVirtualWorld(playerid, BizInfo[bizid][bEVW]);
#else
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
#endif
SetPlayerPos(playerid, BizInfo[bizid][bX], BizInfo[bizid][bY], BizInfo[bizid][bZ]);
p_Biz[playerid][LastBizVisited] = INVALID_BIZ_ID;
return 1;
}
// ============================================================================================================================================================================================
GetPlayerBiz(playerid)
{
new biz = INVALID_BIZ_ID;
foreach(new i : It_Biz)
{
if(!strcmp(BizInfo[i][bOwner], GetName(playerid)))
biz = i;
else
continue;
}
return biz;
}
// ============================================================================================================================================================================================
forward TeleChecking(playerid);
public TeleChecking(playerid)
{
if(GetPlayerInterior(playerid) > 0 && GetPlayerVirtualWorld(playerid) > 214799999)
return 1;
SCMF(playerid, RED, "An error occured. You left a biz by teleportation.");
printf(FPRINT"Admin | %s left a biz by teleportation | p_Biz ID:[LastBizVisited]%i", GetName(playerid, true), p_Biz[playerid][LastBizVisited]);
p_Biz[playerid][LastBizVisited] = INVALID_BIZ_ID;
return 1;
}
// ============================================================================================================================================================================================
IsPlayerConnectedByName(const name[])
{
foreach(new i : Player)
{
if(strcmp(name, GetName(i))) continue;
return true;
}
return false;
}
// ============================================================================================================================================================================================
GetIDByName(const name[])
{
foreach(new i : Player)
{
if(!strcmp(GetName(i), name))
return i;
}
printf("[FS] Error : No player found for the name '%s'.", name);
return INVALID_PLAYER_ID;
}
// ============================================================================================================================================================================================
ShowDialogInvPerm(playerid, bizid)
{
new final[1000], str[150];
if(BizInv[bizid][iSafe]) format(str, sizeof(str), "Access to biz's informations : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), WHITE_U "Access to biz's informations : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iLock]) format(str, sizeof(str), "\nCan lock the biz : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nCan lock the biz : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iEnterPrice]) format(str, sizeof(str), "\nModfiy the enter price : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nModfiy the enter price : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iRename]) format(str, sizeof(str), "\nRename the biz : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nRename the biz : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iDeposit]) format(str, sizeof(str), "\nCan deposit : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nCan deposit : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iWithdraw]) format(str, sizeof(str), "\nCan withdraw : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nCan withdraw : "RED_U"Unauthorized"), strcat(final, str);
format(str, sizeof(str), WHITE_U "Modify investor's rights of %s", BizInv[bizid][iName]);
Dialog_Show(playerid, DIALOG_MODIFY_INVESTOR, DIALOG_STYLE_LIST, str, final, "Choose", "Cancel");
p_Biz[playerid][BizCreating] = bizid;
return 1;
}
// ============================================================================================================================================================================================
ShowDialogInvestor(playerid, bizid)
{
new final[1000], str[150];
if(BizInv[bizid][iSafe]) format(str, sizeof(str), "Access to biz's informations : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), WHITE_U "Access to biz's informations : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iLock]) format(str, sizeof(str), "\nCan lock the biz : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nCan lock the biz : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iEnterPrice]) format(str, sizeof(str), "\nModfiy the enter price : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nModfiy the enter price : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iRename]) format(str, sizeof(str), "\nRename the biz : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nRename the biz : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iDeposit]) format(str, sizeof(str), "\nCan deposit : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nCan deposit : "RED_U"Unauthorized"), strcat(final, str);
if(BizInv[bizid][iWithdraw]) format(str, sizeof(str), "\nCan withdraw : "GREEN_U"Authorized"), strcat(final, str);
else format(str, sizeof(str), "\nCan withdraw : "RED_U"Unauthorized"), strcat(final, str);
format(str, sizeof(str), WHITE_U "Info the %s's biz.", BizInfo[bizid][bOwner]);
Dialog_Show(playerid, DIALOG_INVESTOR, DIALOG_STYLE_LIST, str, final, "Choose", "Cancel");
return 1;
}
// ============================================================================================================================================================================================
ResetInvestorData(bizid)
{
format(BizInv[bizid][iName], MAX_PLAYER_NAME, "Nobody");
new reset_investor[E_INVESTOR_VALUES];
BizInv[bizid] = reset_investor;
SaveInvestorData(bizid);
return 1;
}
// ============================================================================================================================================================================================
GetInvestorBizID(playerid)
{
foreach(new i : It_Investor)
{
if(strcmp(GetName(playerid), BizInv[i][iName]))
continue;
return i;
}
return INVALID_BIZ_ID;
}
// ============================================================================================================================================================================================
SetMoneyGameText(playerid, amount)
{
new str[10];
if(amount < 0)
format(str, sizeof(str), "~r~%-i$", amount);
else
format(str, sizeof(str), "~g~+%i$", amount);
GameTextForPlayer(playerid, str, 1, 1);
return 1;
}
// ============================================================================================================================================================================================
KickPlayersFromAnInterior(interiorid)
{
new id;
foreach(new i : It_Biz)
{
if(BizInfo[i][bInterior] != interiorid)
continue;
foreach(new p : Player)
{
if(p_Biz[p][LastBizVisited] == i)
{
SetPlayerPos(p, BizInfo[p_Biz[p][LastBizVisited]][bX], BizInfo[p_Biz[p][LastBizVisited]][bY], BizInfo[p_Biz[p][LastBizVisited]][bZ]);
#if Streamer_Plugin
SetPlayerInterior(p, BizInfo[p_Biz[p][LastBizVisited]][bEInt]);
SetPlayerVirtualWorld(p, BizInfo[p_Biz[p][LastBizVisited]][bEVW]);
#else
SetPlayerInterior(p, 0);
SetPlayerVirtualWorld(p, 0);
#endif
ErrorMsg(p, "An administrator has deleted this interior, you have been teleported out of the biz.");
printf(FPRINT"%s has been teleported out of the biz : %i - An admin deleted an interior", GetName(p, true), p_Biz[i][LastBizVisited]);
p_Biz[p][LastBizVisited] = -1;
}
}
BizInfo[i][bInterior] = BizInfo[i][bType] = 1;
BizInfo[i][beX] = BizData[1][X];
BizInfo[i][beY] = BizData[1][Y];
BizInfo[i][beZ] = BizData[1][Z];
format(BizInfo[i][bName], MAX_BIZ_NAME, "Deleted_Interior");
SetBizInfos(i, true, _, true, true, true);
if(BizInfo[i][bBought])
if(IsPlayerConnected((id = GetIDByName(BizInfo[i][bOwner]))))
AnnonceMsg(id, "The interior of your biz has been deleted. Contact an administrator to change it. The new interior is %s.", BizData[1][Name]);
}
}
// ============================================================================================================================================================================================
bool:IsValidObjectModel(modelid)
{
switch(modelid)
{
case 615 .. 661 : return true;
case 664 : return true;
case 669 .. 698 : return true;
case 700 .. 792 : return true;
case 800 .. 906 : return true;
case 910 .. 964 : return true;
case 966 .. 998 : return true;
case 1000 .. 1193 : return true;
case 1207 .. 1325 : return true;
case 1327 .. 1572 : return true;
case 1574 .. 1698 : return true;
case 1700 .. 2882 : return true;
case 2885 .. 3135 : return true;
case 3167 .. 3175 : return true;
case 3178 : return true;
case 3187 : return true;
case 3193 : return true;
case 3214 : return true;
case 3221 : return true;
case 3241 .. 3244 : return true;
case 3246 : return true;
case 3249 .. 3250 : return true;
case 3252 .. 3253 : return true;
case 3255 .. 3265 : return true;
case 3267 .. 3347 : return true;
case 3350 .. 3415 : return true;
case 3417 .. 3428 : return true;
case 3430 .. 3609 : return true;
case 3612 .. 3783 : return true;
case 3785 .. 3869 : return true;
case 3872 .. 3882 : return true;
case 3884 .. 3888 : return true;
case 3890 .. 3973 : return true;
case 3975 .. 4541 : return true;
case 4550 .. 4762 : return true;
case 4806 .. 5084 : return true;
case 5086 .. 5089 : return true;
case 5105 .. 5375 : return true;
case 5390 .. 5682 : return true;
case 5703 .. 6010 : return true;
case 6035 .. 6253 : return true;
case 6255 .. 6257 : return true;
case 6280 .. 6347 : return true;
case 6349 .. 6525 : return true;
case 6863 .. 7392 : return true;
case 7415 .. 7973 : return true;
case 7978 .. 9193 : return true;
case 9205 .. 9267 : return true;
case 9269 .. 9478 : return true;
case 9482 .. 10310 : return true;
case 10315 .. 10744 : return true;
case 10750 .. 11417 : return true;
case 11420 .. 11753 : return true;
case 12800 .. 13563 : return true;
case 13590 .. 13667 : return true;
case 13672 .. 13890 : return true;
case 14383 .. 14528 : return true;
case 14530 .. 14554 : return true;
case 14556 : return true;
case 14558 .. 14643 : return true;
case 14650 .. 14657 : return true;
case 14660 .. 14695 : return true;
case 14699 .. 14728 : return true;
case 14735 .. 14765 : return true;
case 14770 .. 14856 : return true;
case 14858 .. 14883 : return true;
case 14885 .. 14898 : return true;
case 14900 .. 14903 : return true;
case 15025 .. 15064 : return true;
case 16000 .. 16790 : return true;
case 17000 .. 17474 : return true;
case 17500 .. 17974 : return true;
case 17976 : return true;
case 17978 : return true;
case 18000 .. 18036 : return true;
case 18038 .. 18102 : return true;
case 18104 .. 18105 : return true;
case 18109 : return true;
case 18112 : return true;
case 18200 .. 18859 : return true;
case 18862 .. 19198 : return true;
case 19200 .. 19274 : return true;
case 19277 .. 19595 : return true;
case 19597 .. 19999 : return true;
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment