09.06.2012, 04:56
(
Last edited by JhnzRep; 19/11/2015 at 01:53 PM.
)
(DISCLAIMER - THIS SHIT PROBABLY WON'T WORK AS IT IS, BUT CAN HELP YOU BUILD YOUR OWN BUSINESS SYSTEM.)
Introduction
Credits:
Skills needed:
Items needed:
Includes/Defines/Code
You will need this included:
You will need this defined:
You will need this new Defines:
We will need to create a enum:
Put this under your PlayerInfo enum:
Okay now let's get to the actual code.
You will need this under public OnGameModeInit():
You will need this under public OnGameModeExit():
You will now need to create a public function(Not going to explain this much, I expect you know how to save stuff using y_ini):
Now you will need a loading function(As stated above, this tutorial assumes you understand loading/saving in y_ini. If you do not read up on other tutorials):
Okay now to the actual commands.
The first command we need is "/createbiz":
The "/deletebiz" command:
Now we will need the info of a business to be displayed when you step on the pickup.
We now need to create a stock, to find what businesstype it is:
Okay we will need another important function, to find out if the player is near a business:
Heres how you will lock your business:
A command to enter the business(Also used to exit):
Here is the command to buy a business:
Here is the command to sell a business:
Command to set the business name:
Now heres a example of what you can do with this script, for example a skin change command:
You will need to create a directory in your script files called "Business" for this to work.
Business System
Introduction
Credits:
Code:
Y_Ini - Y_less YCMD - Y_Less Streamer - Incognito Jack_Leslie - Some functions are based off of his Bone County RP script.
Code:
You must know how to use YCMD(ZCMD is fine too I guess) You must be pretty good with y_ini
Code:
YCMD Y_ini Incognito Streamer A register system Time to learn all of this
You will need this included:
pawn Code:
#include <YSI\y_commands>
#include <YSI\y_ini>
pawn Code:
#define SCM SendClientMessage //Saves time
#define BPATH "/Business/%i.ini" //Defines the path y_ini will use to find the .ini file we need.
//The below colors do not have to be used, but you will need to edit the script if you choose not to use them.
#define NEWBIE_COLOR 0x7DAEFFFF
#define TCOLOR_WHITE 0xFFFFFF00
#define COLOR_GRAD1 0xB4B5B7FF
#define COLOR_GRAD2 0xBFC0C2FF
#define COLOR_GRAD3 0xCBCCCEFF
#define COLOR_GRAD4 0xD8D8D8FF
#define COLOR_GRAD5 0xE3E3E3FF
#define COLOR_GRAD6 0xF0F0F0FF
#define COLOR_FADE1 0xE6E6E6E6
#define COLOR_FADE2 0xC8C8C8C8
#define COLOR_FADE3 0xAAAAAAAA
#define COLOR_FADE4 0x8C8C8C8C
#define COLOR_FADE5 0x6E6E6E6E
#define COLOR_PURPLE 0xC2A2DAAA
#define COLOR_RED 0xAA3333AA
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_BLACK 0x000001FF
#define COLOR_BLUE 0x007BD0FF
#define COLOR_LIGHTORANGE 0xFFA100FF
#define COLOR_FLASH 0xFF000080
#define COLOR_LIGHTRED 0xFF6347AA
#define COLOR_LIGHTBLUE 0x01FCFFC8
#define COLOR_LIGHTGREEN 0x9ACD32AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_LIGHTYELLOW 0xFFFF91FF
#define COLOR_YELLOW2 0xF5DEB3AA
#define COLOR_WHITE 0xFFFFFFAA
pawn Code:
new InsideBiz;[MAX_PLAYERS]//This define will be used later to find out what business we are in.
pawn Code:
enum bInfo {
bOwned,
bPrice,
bOwner[MAX_PLAYER_NAME],
bType,
bLocked,
bMoney,
Float:bEntranceX,
Float:bEntranceY,
Float:bEntranceZ,
Float:bEntranceA,
Float:bExitX,
Float:bExitY,
Float:bExitZ,
Float:bExitA,
bInt,
bWorld,
bInsideInt,
bInsideWorld,
bInsideIcon,
bOutsideIcon,
bName[128]
}
new BusinessInfo[200][bInfo];//We are creating a define to use for our Enum.
pawn Code:
BizID// You'll also have to save this, and load this..I expect you know how to do this.
You will need this under public OnGameModeInit():
pawn Code:
new str[40];
for(new idx = 1; idx < sizeof(BusinessInfo); idx++)//Creates a loop, that goes through all of the businesses.
{
format(str, sizeof(str), BPATH, idx);//formats the file path, with the biz ID
INI_ParseFile(str, "loadbiz_%s", .bExtra = true, .extra = idx );//This is very hard to explain, but it basically loads the info from the file(More in Y_Less y_ini tutorial.)
BusinessInfo[idx][bOutsideIcon] = CreateDynamicPickup(1272, 1, BusinessInfo[idx][bEntranceX], BusinessInfo[idx][bEntranceY], BusinessInfo[idx][bEntranceZ], BusinessInfo[idx][bWorld]); //Creates a pickup at the business entrance.
BusinessInfo[idx][bInsideIcon] = CreateDynamicPickup(1272, 1, BusinessInfo[idx][bExitX], BusinessInfo[idx][bExitY], BusinessInfo[idx][bExitZ], BusinessInfo[idx][bInsideWorld]); //Creates a pickup at the exit(Inside the interior)
}
pawn Code:
for(new id = 1; id < sizeof(BusinessInfo); id++)//Loops through the businesses.
{
if(BusinessInfo[id][bPrice] == 0) break;//Breaks the loop if the price is 0(Meaning it doesn't exist)
SaveBusiness(id);//Calls the SaveBusiness function.
}
pawn Code:
forward SaveBusiness(id);
public SaveBusiness(id)
{
new file4[40];
format(file4, sizeof(file4), BPATH, id);
new INI:File = INI_Open(file4);
INI_SetTag(File,"data");
INI_WriteInt(File,"bOwned", BusinessInfo[id][bOwned]);
INI_WriteInt(File,"bPrice", BusinessInfo[id][bPrice]);
INI_WriteString(File,"bOwner", BusinessInfo[id][bOwner]);
INI_WriteInt(File,"bType", BusinessInfo[id][bType]);
INI_WriteInt(File,"bLocked", BusinessInfo[id][bLocked]);
INI_WriteInt(File,"bMoney", BusinessInfo[id][bMoney]);
INI_WriteFloat(File,"bEntranceX", BusinessInfo[id][bEntranceX]);
INI_WriteFloat(File,"bEntranceY", BusinessInfo[id][bEntranceY]);
INI_WriteFloat(File,"bEntranceZ", BusinessInfo[id][bEntranceZ]);
INI_WriteFloat(File,"bEntranceA", BusinessInfo[id][bEntranceA]);
INI_WriteFloat(File,"bExitX", BusinessInfo[id][bExitX]);
INI_WriteFloat(File,"bExitY", BusinessInfo[id][bExitY]);
INI_WriteFloat(File,"bExitZ", BusinessInfo[id][bExitZ]);
INI_WriteFloat(File,"bExitA", BusinessInfo[id][bExitA]);
INI_WriteInt(File,"bInt", BusinessInfo[id][bInt]);
INI_WriteInt(File,"bWorld", BusinessInfo[id][bWorld]);
INI_WriteInt(File,"bInsideInt", BusinessInfo[id][bInsideInt]);
INI_WriteInt(File,"bInsideWorld", BusinessInfo[id][bInsideWorld]);
INI_WriteString(File,"bName", BusinessInfo[id][bName]);
INI_Close(File);
return 1;
}
pawn Code:
forward loadbiz_data(idx, name[], value[]);
public loadbiz_data(idx, name[], value[])
{
INI_Int("bOwned", BusinessInfo[idx][bOwned]);
INI_Int("bPrice", BusinessInfo[idx][bPrice]);
INI_String("bOwner", BusinessInfo[idx][bOwner], 24);
INI_Int("bType", BusinessInfo[idx][bType]);
INI_Int("bLocked", BusinessInfo[idx][bLocked]);
INI_Int("bMoney", BusinessInfo[idx][bMoney]);
INI_Float("bEntranceX", BusinessInfo[idx][bEntranceX]);
INI_Float("bEntranceY", BusinessInfo[idx][bEntranceY]);
INI_Float("bEntranceZ", BusinessInfo[idx][bEntranceZ]);
INI_Float("bEntranceA", BusinessInfo[idx][bEntranceA]);
INI_Float("bExitX", BusinessInfo[idx][bExitX]);
INI_Float("bExitY", BusinessInfo[idx][bExitY]);
INI_Float("bExitZ", BusinessInfo[idx][bExitZ]);
INI_Float("bExitA", BusinessInfo[idx][bExitA]);
INI_Int("bInt", BusinessInfo[idx][bInt]);
INI_Int("bWorld", BusinessInfo[idx][bWorld]);
INI_Int("bInsideInt", BusinessInfo[idx][bInsideInt]);
INI_Int("bInsideWorld", BusinessInfo[idx][bInsideWorld]);
INI_String("bName", BusinessInfo[idx][bName], 128);
return 1;
}
The first command we need is "/createbiz":
pawn Code:
YCMD:createbiz(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SCM(playerid, COLOR_GREY, "You aren't authorized to use this command!");//Checks if player is a RCON admin..Change this with your admin system.
new price, level, id, int, world, string[128], Float:Xi, Float:Yi, Float:Zi, inti;//All the new defines we will need.
if(sscanf(params, "dddfff", price, level, inti, Xi, Yi, Zi)) return SendClientMessage(playerid, COLOR_GREY, "YCMD: /createbiz [price] [type] [interior] [X] [Y] [Z]");//d stands for integer, f stands for float.
if(level < 0 || level > 4) return SendClientMessage(playerid, COLOR_GREY, "YCMD: Type cannot go below 0, or above 10.");//
if(price < 10000) return SendClientMessage(playerid, COLOR_GREY, "YCMD: Price cannot go below $10,000.");// Check if the price is below 1000, if it is it will return a message saying it.
for(new h = 1;h < sizeof(BusinessInfo);h++)//Loops through all the businesses
{
if(BusinessInfo[h][bPrice] == 0)//Checks if the price of a business is 0.
{
id = h;
break;//It stops looping if it is.
}
}
new Float:X,Float:Y,Float:Z,Float:A;//More new defines.
GetPlayerPos(playerid, X, Y, Z);//Gets your player position, and saves it into floats.
GetPlayerFacingAngle(playerid, A);//Gets your facing angle, and saves it into a float.
int = GetPlayerInterior(playerid);//Gets your interior, and saves it into a integer.
world = GetPlayerVirtualWorld(playerid);//Gets your Virtual World, and saves it into a integer
BusinessInfo[id][bInsideInt] = inti;
BusinessInfo[id][bExitX] = Xi;
BusinessInfo[id][bExitY] = Yi;
BusinessInfo[id][bExitZ] = Zi;
BusinessInfo[id][bOwned] = 0;
BusinessInfo[id][bPrice] = price;
BusinessInfo[id][bType] = level;
BusinessInfo[id][bEntranceX] = X;
BusinessInfo[id][bEntranceY] = Y;
BusinessInfo[id][bEntranceZ] = Z;
BusinessInfo[id][bEntranceA] = A;
BusinessInfo[id][bLocked] = 1;
BusinessInfo[id][bInt] =int;
BusinessInfo[id][bWorld] =world;
BusinessInfo[id][bInsideWorld] =id;
format(string, sizeof(string), "None");
strmid(BusinessInfo[id][bName], string, 0, strlen(string), 255);
if(BusinessInfo[id][bOutsideIcon]) DestroyDynamicPickup(BusinessInfo[id][bOutsideIcon]);
if(BusinessInfo[id][bInsideIcon]) DestroyDynamicPickup(BusinessInfo[id][bInsideIcon]);
BusinessInfo[id][bOutsideIcon] = CreateDynamicPickup(1272, 1, BusinessInfo[id][bEntranceX], BusinessInfo[id][bEntranceY], BusinessInfo[id][bEntranceZ], BusinessInfo[id][bWorld]);//Creates a pickup at your location
BusinessInfo[id][bInsideIcon] = CreateDynamicPickup(1272, 1, BusinessInfo[id][bExitX], BusinessInfo[id][bExitY], BusinessInfo[id][bExitZ], BusinessInfo[id][bInsideWorld]);//Creates a pickup at your location
new file4[40];
format(file4, sizeof(file4), BPATH, id);
new INI:File = INI_Open(file4);
INI_SetTag(File,"data");
INI_WriteInt(File,"bOwned", BusinessInfo[id][bOwned]);
INI_WriteInt(File,"bPrice", BusinessInfo[id][bPrice]);
INI_WriteString(File,"bOwner", BusinessInfo[id][bOwner]);
INI_WriteInt(File,"bType", BusinessInfo[id][bType]);
INI_WriteInt(File,"bLocked", BusinessInfo[id][bLocked]);
INI_WriteInt(File,"bMoney", BusinessInfo[id][bMoney]);
INI_WriteFloat(File,"bEntranceX", BusinessInfo[id][bEntranceX]);
INI_WriteFloat(File,"bEntranceY", BusinessInfo[id][bEntranceY]);
INI_WriteFloat(File,"bEntranceZ", BusinessInfo[id][bEntranceZ]);
INI_WriteFloat(File,"bEntranceA", BusinessInfo[id][bEntranceA]);
INI_WriteFloat(File,"bExitX", BusinessInfo[id][bExitX]);
INI_WriteFloat(File,"bExitY", BusinessInfo[id][bExitY]);
INI_WriteFloat(File,"bExitZ", BusinessInfo[id][bExitZ]);
INI_WriteFloat(File,"bExitA", BusinessInfo[id][bExitA]);
INI_WriteInt(File,"bInt", BusinessInfo[id][bInt]);
INI_WriteInt(File,"bWorld", BusinessInfo[id][bWorld]);
INI_WriteInt(File,"bInsideInt", BusinessInfo[id][bInsideInt]);
INI_WriteInt(File,"bInsideWorld", BusinessInfo[id][bInsideWorld]);
INI_WriteString(File,"bName", BusinessInfo[id][bName]);
INI_Close(File);
return 1;
}
pawn Code:
YCMD:deletebiz(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return 1; // Checks if a player is a RCON admin, again change this to your admin system.
new id;
if(sscanf(params, "d", id)) return SendClientMessage(playerid, COLOR_GREY, "YCMD: /deletebiz [id]");
if(BusinessInfo[id][bOwned] == 1) return SCM(playerid, COLOR_GREY, "This biz is owned.");//Checks if the biz is owned, if it is it won't allow it to be deleted.
//Below it resets all the biz enum info.
BusinessInfo[id][bOwned] = 0;
BusinessInfo[id][bPrice] = 0;
BusinessInfo[id][bOwner] = 0;
BusinessInfo[id][bType] = 0;
BusinessInfo[id][bLocked] = 0;
BusinessInfo[id][bName] = 0;
BusinessInfo[id][bMoney] = 0;
BusinessInfo[id][bEntranceX] = 0;
BusinessInfo[id][bEntranceY] = 0;
BusinessInfo[id][bEntranceZ] = 0;
BusinessInfo[id][bEntranceA] = 0;
BusinessInfo[id][bExitX] = 0;
BusinessInfo[id][bExitY] = 0;
BusinessInfo[id][bExitZ] = 0;
BusinessInfo[id][bExitA] = 0;
BusinessInfo[id][bInt] = 0;
BusinessInfo[id][bWorld] = 0;
if(BusinessInfo[id][bOutsideIcon]) DestroyDynamicPickup(BusinessInfo[id][bOutsideIcon]);//Destroys the pickup.
new string[128];
format(string, sizeof(string), BPATH, id);
fremove(string);
return 1;
}
pawn Code:
public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
new string[256];
for(new b = 1;b < sizeof(BusinessInfo);b++)// Loopd through all the businesses again.
{
if(pickupid == BusinessInfo[b][bOutsideIcon])//Checks if it's a biz pickup.
{
if(BusinessInfo[b][bOwned] == 0)//Checks if it is owned.
{
format(string, sizeof(string), "~g~Name:~w~%s~n~~w~This business is ~g~for sale!~n~~r~Price:~g~%i~n~BizType:~w~%s~n~~g~BizID:~w~%i", BusinessInfo[b][bName], BusinessInfo[b][bPrice], BusinessType(b), b);//Formats a string with all the info.
GameTextForPlayer(playerid, string, 3000, 3);
}
if(BusinessInfo[b][bOwned] == 1)//Checks if it owned.
{
format(string, sizeof(string), "~g~Name:~w~%s~n~~g~Owner:~w~%s~n~~g~BizType:~w~%s ~n~~g~BizID:~w~%i", BusinessInfo[b][bName], BusinessInfo[b][bOwner], BusinessType(b), b);//Formats a string with all the info.
GameTextForPlayer(playerid, string, 3000, 3);
}
}
}
return 1;
}
pawn Code:
stock BusinessType(b)// creates a stock.
{
new string[30];
switch(BusinessInfo[b][bType])//You should know what switch is.
{
case 4: string = "24/7";
case 3: string = "Club";
case 2: string = "Bar";
case 1: string = "Clothes Shop";
}
return string;
}
pawn Code:
IsPlayerNearBizEnt(playerid)
{
for(new b = 1; b < sizeof(BusinessInfo); b++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, BusinessInfo[b][bEntranceX], BusinessInfo[b][bEntranceY], BusinessInfo[b][bEntranceZ])) return b;
}
return -1;
}
pawn Code:
YCMD:lockbiz(playerid, params[])
{
new id = IsPlayerNearBizEnt(playerid);//Uses the function to find if player is near a biz!
if(id != PlayerInfo[playerid][BizID]) return SCM(playerid, COLOR_GREY, "This isn't your biz!");
if(BusinessInfo[id][bLocked] == 1)
{
BusinessInfo[id][bLocked] = 0;
GameTextForPlayer(playerid, "Biz ~g~unlocked!", 3000, 3);
}
else
{
BusinessInfo[id][bLocked] = 1;
GameTextForPlayer(playerid, "Biz ~r~locked!", 3000, 3);
}
return 1;
}
pawn Code:
YCMD:enter(playerid, params[])
{
for(new b = 1; b < sizeof(BusinessInfo); b++)//Loops through all the businesses.
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, BusinessInfo[b][bEntranceX], BusinessInfo[b][bEntranceY], BusinessInfo[b][bEntranceZ]))//Checks if player is near the entrance.
{
if(BusinessInfo[b][bLocked] == 1) return SendClientMessage(playerid, COLOR_GREY, "This Business is locked!");//Checks it it is locked/
SetPlayerPos(playerid, BusinessInfo[b][bExitX], BusinessInfo[b][bExitY], BusinessInfo[b][bExitZ]);
SetPlayerFacingAngle(playerid, BusinessInfo[b][bExitA]);
SetPlayerInterior(playerid, BusinessInfo[b][bInsideInt]);
SetPlayerVirtualWorld(playerid, BusinessInfo[b][bInsideWorld]);
InsideBiz[playerid] = b;
return 1;
}
if(IsPlayerInRangeOfPoint(playerid, 2.0, BusinessInfo[b][bExitX], BusinessInfo[b][bExitY], BusinessInfo[b][bExitZ]) && GetPlayerVirtualWorld(playerid) == BusinessInfo[b][bInsideWorld])//Checks if player is in near the exit.
{
SetPlayerPos(playerid, BusinessInfo[b][bEntranceX], BusinessInfo[b][bEntranceY], BusinessInfo[b][bEntranceZ]);
SetPlayerFacingAngle(playerid, BusinessInfo[b][bEntranceA]);
SetPlayerInterior(playerid, BusinessInfo[b][bInt]);
SetPlayerVirtualWorld(playerid, BusinessInfo[b][bWorld]);
InsideBiz[playerid] = 0;
return 1;
}
}
return 1;
}
pawn Code:
YCMD:buybiz(playerid, params[])
{
new id = IsPlayerNearBizEnt(playerid);
if(id == -1 || id == 0) return SendClientMessage(playerid, COLOR_GREY, "You are not near a biz");
if(BusinessInfo[id][bOwned] != 0 || BusinessInfo[id][bPrice] == 0) return SendClientMessage(playerid, COLOR_GREY, "This biz is not for sale.");
if(PlayerInfo[playerid][BizID] != 0) return SendClientMessage(playerid, COLOR_LIGHTRED, "You already own a biz.");
if(PlayerInfo[playerid][Money] < BusinessInfo[id][bPrice]) return SendClientMessage(playerid, COLOR_LIGHTRED, "Sorry, you can not afford this biz.");
PlayerInfo[playerid][BizID] = id;
PlayerInfo[playerid][Money] -= BusinessInfo[id][bPrice];
GivePlayerMoney(playerid, -BusinessInfo[id][bPrice]);
BusinessInfo[id][bLocked] = 0;
BusinessInfo[id][bOwned] = 1;
BusinessInfo[id][bOwner] = RemoveUnderScore(playerid);
SendClientMessage(playerid, COLOR_YELLOW, "Congratulations on your new biz! Use /bizhelp to get help, or /ask!");
return 1;
}
pawn Code:
YCMD:sellbiz(playerid, params[])
{
new id = PlayerInfo[playerid][BizID];
if(PlayerInfo[playerid][BizID] == 0) return SCM(playerid, COLOR_GREY, "You don't own a biz!");
BusinessInfo[id][bOwned] = 0;
BusinessInfo[id][bOwner] = 0;
BusinessInfo[id][bLocked] = 1;
PlayerInfo[playerid][Money] = BusinessInfo[id][bPrice];
PlayerInfo[playerid][BizID] = 0;
SCM(playerid, COLOR_YELLOW, "Business sold!");
return 1;
}
pawn Code:
YCMD:bizsetname(playerid, params[])
{
new name[128];
if(sscanf(params, "s[128]", name)) return SCM(playerid, COLOR_GREY, "/bizsetname [name]");
if(PlayerInfo[playerid][BizID] == 0) return SCM(playerid, COLOR_GREY, "You don't own a biz!");
BusinessInfo[PlayerInfo[playerid][BizID]][bName] = name;
SCM(playerid, COLOR_YELLOW, "Business name changed!");
return 1;
}
pawn Code:
YCMD:clothes(playerid, params[])
{
new skin;
if(sscanf(params, "i", skin)) return SCM(playerid, COLOR_GREY, "YCMD:/skin [skinid]");
if(PlayerInfo[playerid][Money] < 100) return SCM(playerid, COLOR_GREY, "You need atleast 100%!");
if(BusinessInfo[InsideBiz[playerid]][bType] != 1) return SCM(playerid, COLOR_GREY, "You need to be in clothes shop!");
if(1 > skin || 299 < skin || skin == 288 || skin == 287 || skin == 286 || skin == 285 || skin == 284 || skin == 283 || skin == 282 || skin == 281 || skin == 280 || skin == 279 || skin == 278 || skin == 277 || skin == 276 || skin == 275 || skin == 274) return SCM(playerid, COLOR_GREY, "Invalid skin ID!");
SetPlayerSkin(playerid, skin);
PlayerInfo[playerid][Skin] = skin;
GivePlayerMoney(playerid, -100);
BusinessInfo[InsideBiz[playerid]][bMoney] += 100;
return 1;
}
Conclusion
Some parts re not explained, this tutorial is not aimed at newbies. If you need anything explained, please post on here.
This script is HIGHLY customisable, You get to choose the interior, price, and type! You can create your own commands to this, such as "/buy" for the 24/7.
Comment/rate.
Some parts re not explained, this tutorial is not aimed at newbies. If you need anything explained, please post on here.
This script is HIGHLY customisable, You get to choose the interior, price, and type! You can create your own commands to this, such as "/buy" for the 24/7.
Comment/rate.