Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <a_mysql>
- #include <YSI\y_iterate>
- #include <streamer>
- #include <izcmd>
- #define MAX_HOUSES 100
- #define COLOR_LIGHTBLUE 0x33CCFFAA
- #define IsNull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
- #define forex(%0,%1) for(new %0 = 0; %0 < %1; %0++)
- #define SEM(%0,%1); SendClientMessage(%0,COLOR_GREY,%1);
- #define function%0(%1) \
- forward%0(%1); public%0(%1)
- #define INVALID_HOUSE_ID -1
- new Database;
- enum hinfo
- {
- ORM:ORM_ID,
- ID,
- OwnerID,
- Owner[MAX_PLAYER_NAME],
- Float:Spawn[4],
- Price
- }
- new HouseInfo[MAX_HOUSES][hinfo];
- new HousePickup[MAX_HOUSES];
- new Text3D:HouseLabel[MAX_HOUSES];
- new Iterator:Houses<MAX_HOUSES>;
- public OnFilterScriptInit()
- {
- mysql_pquery(Database,"SELECT * FROM `house_info` ORDER BY `houseid` ASC","House_Load","");
- }
- public OnFilterScriptExit()
- {
- foreach(new houseid : Houses)
- {
- orm_update(HouseInfo[houseid][ORM_ID]);
- orm_destroy(HouseInfo[houseid][ORM_ID]);
- }
- return 1;
- }
- function House_Load()
- {
- new rows = cache_get_row_count(Database);
- if(rows != 0)
- {
- forex(row,rows)
- {
- new houseid = cache_get_row_int(row,0,Database);
- new ORM:ormid = HouseInfo[houseid][ORM_ID] = orm_create("house_info",Database);
- orm_addvar_int(ormid,HouseInfo[houseid][ID],"houseid");
- orm_addvar_int(ormid,HouseInfo[houseid][OwnerID],"ownerid");
- orm_addvar_string(ormid,HouseInfo[houseid][Owner],MAX_PLAYER_NAME,"owner");
- orm_addvar_float(ormid,HouseInfo[houseid][Spawn][0],"x");
- orm_addvar_float(ormid,HouseInfo[houseid][Spawn][1],"y");
- orm_addvar_float(ormid,HouseInfo[houseid][Spawn][2],"z");
- orm_addvar_float(ormid,HouseInfo[houseid][Spawn][3],"a");
- orm_addvar_int(ormid,HouseInfo[houseid][Price],"price");
- orm_apply_cache(ormid,row);
- orm_setkey(ormid,"houseid");
- House_Create(houseid,INVALID_PLAYER_ID);
- }
- }
- return 1;
- }
- function House_Create(houseid,playerid)
- {
- new string[256];
- if(HouseInfo[houseid][OwnerID] == 0)
- {
- HousePickup[houseid] = CreateDynamicPickup(1273,23,HouseInfo[houseid][Spawn][0],HouseInfo[houseid][Spawn][1],HouseInfo[houseid][Spawn][2],0,0);
- format(string,sizeof(string),"[id:%d]\n{ff0000}FOR SALE\n{ffffff}Price: {ffff00}$%d\n{ffffff}Use '{ffff00}/house buy{ffffff}' to purchase this house",houseid,HouseInfo[houseid][Price]);
- }
- else
- {
- HousePickup[houseid] = CreateDynamicPickup(1272,23,HouseInfo[houseid][Spawn][0],HouseInfo[houseid][Spawn][1],HouseInfo[houseid][Spawn][2],0,0);
- format(string,sizeof(string),"[id:%d]\n{ffffff}Owner: {ffff00}%s",houseid,HouseInfo[houseid][Owner]);
- }
- HouseLabel[houseid] = CreateDynamic3DTextLabel(string,0x00FFFFAA,HouseInfo[houseid][Spawn][0],HouseInfo[houseid][Spawn][1],(HouseInfo[houseid][Spawn][2]+1.0),15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,0,0);
- Iter_Add(Houses,houseid);
- if(playerid != INVALID_PLAYER_ID)
- {
- format(string,144,"HOUSE: {ffffff}House with {ffff00}id %d {ffffff}has been created!",houseid);
- SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
- }
- return 1;
- }
- stock GetPlayerNearestHouse(playerid)
- {
- foreach(new houseid : Houses)
- {
- if(IsPlayerInRangeOfPoint(playerid,3.0,HouseInfo[houseid][Spawn][0],HouseInfo[houseid][Spawn][1],HouseInfo[houseid][Spawn][2])) return houseid;
- }
- return INVALID_HOUSE_ID;
- }
- stock GetPlayerHouse(playerid)
- {
- foreach(new houseid : Houses)
- {
- if(HouseInfo[houseid][OwnerID] == AccountInfo[playerid][ID]) return houseid;
- }
- return INVALID_HOUSE_ID;
- }
- SSCANF:housemenu(string[])
- {
- if(!strcmp(string,"create",true)) return 1;
- if(!strcmp(string,"add",true)) return 1;
- if(!strcmp(string,"make",true)) return 1;
- if(!strcmp(string,"remove",true)) return 2;
- if(!strcmp(string,"delete",true)) return 2;
- if(!strcmp(string,"destroy",true)) return 2;
- if(!strcmp(string,"price",true)) return 3;
- if(!strcmp(string,"setprice",true)) return 3;
- if(!strcmp(string,"sell",true)) return 4;
- if(!strcmp(string,"asell",true)) return 4;
- if(!strcmp(string,"buy",true)) return 5;
- if(!strcmp(string,"purchase",true)) return 5;
- if(!strcmp(string,"sell",true)) return 6;
- return 0;
- }
- CMD:house(playerid,params[])
- {
- new action,string[128];
- if(sscanf(params,"k<housemenu>S()[128]",action,string)) return SEM(playerid,"<USAGE>: /house [create/delete/price/asell/buy/sell]");
- else
- {
- switch(action)
- {
- case 1:
- {
- new price,houseid;
- if(IsNull(string)) return SEM(playerid,"<USAGE>: /house create [price]");
- price = strval(string);
- if(price < 1) return SEM(playerid,"ERROR: Price cannot go below $1");
- if(Iter_Free(Houses) == -1) return SEM(playerid,"ERROR: No free house slot available!");
- HouseInfo[houseid][ID] = houseid = Iter_Free(Houses);
- HouseInfo[houseid][OwnerID] = 0;
- GetPlayerPos(playerid,HouseInfo[houseid][Spawn][0],HouseInfo[houseid][Spawn][1],HouseInfo[houseid][Spawn][2]);
- GetPlayerFacingAngle(playerid,HouseInfo[houseid][Spawn][3]);
- HouseInfo[houseid][Price] = price;
- new ORM:ormid = HouseInfo[houseid][ORM_ID] = orm_create("house_info",Database);
- orm_addvar_int(ormid,HouseInfo[houseid][ID],"houseid");
- orm_addvar_int(ormid,HouseInfo[houseid][OwnerID],"ownerid");
- orm_addvar_string(ormid,HouseInfo[houseid][Owner],MAX_PLAYER_NAME,"owner");
- orm_addvar_float(ormid,HouseInfo[houseid][Spawn][0],"x");
- orm_addvar_float(ormid,HouseInfo[houseid][Spawn][1],"y");
- orm_addvar_float(ormid,HouseInfo[houseid][Spawn][2],"z");
- orm_addvar_float(ormid,HouseInfo[houseid][Spawn][3],"a");
- orm_addvar_int(ormid,HouseInfo[houseid][Price],"price");
- orm_insert(ormid,"House_Create","dd",houseid,playerid);
- orm_setkey(ormid,"houseid");
- }
- case 2:
- {
- if(IsNull(string)) return SEM(playerid,"<USAGE>: /house delete [houseid]");
- new houseid = strval(string);
- if(Iter_Contains(Houses,houseid))
- {
- format(string,sizeof(string),"HOUSE: {ffffff}House with {ffff00}id %d {ffffff}has been deleted!",houseid);
- SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
- DestroyDynamicPickup(HousePickup[houseid]);
- DestroyDynamic3DTextLabel(HouseLabel[houseid]);
- orm_delete(HouseInfo[houseid][ORM_ID],true);
- Iter_Remove(Houses,houseid);
- }
- else SEM(playerid,"ERROR: Invalid houseid!");
- }
- case 3:
- {
- new houseid,price;
- if(sscanf(string,"dd",houseid,price)) return SEM(playerid,"<USAGE>: /house price [houseid] [price]");
- if(price < 1) return SEM(playerid,"ERROR: Price cannot go below $1");
- if(Iter_Contains(Houses,houseid))
- {
- HouseInfo[houseid][Price] = price;
- orm_update(HouseInfo[houseid][ORM_ID]);
- if(HouseInfo[houseid][OwnerID] == 0)
- {
- new longString[256];
- format(longString,sizeof(longString),"[id:%d]\n{ff0000}FOR SALE\n{ffffff}Price: {ffff00}$%d\n{ffffff}Use '{ffff00}/house buy{ffffff}' to purchase this house",houseid,HouseInfo[houseid][Price]);
- UpdateDynamic3DTextLabelText(HouseLabel[houseid],0x00FFFFAA,longString);
- }
- format(string,sizeof(string),"HOUSE: {ffffff}House with {ffff00}id %d {ffffff}price has been changed to {00ff00}$%d",houseid,price);
- SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
- }
- else SEM(playerid,"ERROR: Invalid houseid!");
- }
- case 4:
- {
- if(IsNull(string)) return SEM(playerid,"<USAGE>: /house delete [houseid]");
- new houseid = strval(string);
- if(Iter_Contains(Houses,houseid))
- {
- if(HouseInfo[houseid][OwnerID] != 0)
- {
- new longString[256];
- HouseInfo[houseid][OwnerID] = 0;
- orm_update(HouseInfo[houseid][ORM_ID]);
- format(longString,sizeof(longString),"[id:%d]\n{ff0000}FOR SALE\n{ffffff}Price: {ffff00}$%d\n{ffffff}Use '{ffff00}/house buy{ffffff}' to purchase this house",houseid,HouseInfo[houseid][Price]);
- Streamer_SetIntData(STREAMER_TYPE_PICKUP,HousePickup[houseid],E_STREAMER_MODEL_ID,1273);
- UpdateDynamic3DTextLabelText(HouseLabel[houseid],0x00FFFFAA,longString);
- format(string,sizeof(string),"HOUSE: {ffffff}House with {ffff00}id %d {ffffff}has been put up for sale",houseid);
- SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
- }
- else SEM(playerid,"ERROR: This house is not owned by anybody!");
- }
- else SEM(playerid,"ERROR: Invalid houseid!");
- }
- case 5:
- {
- if(GetPlayerHouse(playerid) == INVALID_HOUSE_ID)
- {
- new houseid = GetPlayerNearestHouse(playerid);
- if(houseid == INVALID_HOUSE_ID) return SEM(playerid,"ERROR: You are not near any houses!");
- if(HouseInfo[houseid][OwnerID] == 0)
- {
- new playername[MAX_PLAYER_NAME];
- if(GetPlayerCash(playerid) < HouseInfo[houseid][Price]) return SEM(playerid,"ERROR: You dont have enough money!"); // ini perlu diubah mungkin kondisinya
- GivePlayerCash(playerid,-HouseInfo[houseid][Price]);
- GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
- HouseInfo[houseid][OwnerID] = PlayerInfo[playerid][ID];
- strmid(HouseInfo[houseid][Owner],playername,0,strlen(playername),MAX_PLAYER_NAME);
- orm_update(HouseInfo[houseid][ORM_ID]);
- format(string,sizeof(string),"[id:%d]\n{ffffff}Owner: {ffff00}%s",houseid,HouseInfo[houseid][Owner]);
- Streamer_SetIntData(STREAMER_TYPE_PICKUP,HousePickup[houseid],E_STREAMER_MODEL_ID,1272);
- UpdateDynamic3DTextLabelText(HouseLabel[houseid],0x00FFFFAA,string);
- }
- else SEM(playerid,"ERROR: This house is not for sell!");
- }
- else SEM(playerid,"ERROR: You already own a house!");
- }
- case 6:
- {
- if(GetPlayerHouse(playerid) != INVALID_HOUSE_ID)
- {
- if(strcmp(string,"confirm",true))
- {
- format(string,sizeof(string),"HOUSE: {ffffff}You are about to sell your house for {ffff00}$%d",(HouseInfo[houseid][Price]/2));
- SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
- SendClientMessage(playerid,COLOR_LIGHTBLUE,"HINT: {ffffff}Use command '{ffff00}/house sell confirm{ffffff}' to confirm sell");
- }
- else
- {
- new longString[256];
- GivePlayerCash(playerid,(HouseInfo[houseid][Price]/2));
- HouseInfo[houseid][OwnerID] = 0;
- orm_update(HouseInfo[houseid][ORM_ID]);
- format(longString,sizeof(longString),"[id:%d]\n{ff0000}FOR SALE\n{ffffff}Price: {ffff00}$%d\n{ffffff}Use '{ffff00}/house buy{ffffff}' to purchase this house",houseid,HouseInfo[houseid][Price]);
- Streamer_SetIntData(STREAMER_TYPE_PICKUP,HousePickup[houseid],E_STREAMER_MODEL_ID,1273);
- UpdateDynamic3DTextLabelText(HouseLabel[houseid],0x00FFFFAA,longString);
- }
- }
- else SEM(playerid,"ERROR: You do not have any house!");
- }
- default: SEM(playerid,"<USAGE>: /house [create/delete/price/asell/buy/sell]");
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement