30.01.2014, 19:48
Dear Guys,
I'm trying to make a system which allows a player to rent a room, and then spawn there each time he logs in.
I've created a system which saves the house's x, y, z positions, virtual room and interior using dini. And I've succeeded in finding a way to load it.
The problem is, the user loads in the house, but can't exit. Could someone help me please?
House Rentroom Function / Save housespawn position function
House Spawnpos load function
House /enter function
House Exit function
I'm trying to make a system which allows a player to rent a room, and then spawn there each time he logs in.
I've created a system which saves the house's x, y, z positions, virtual room and interior using dini. And I've succeeded in finding a way to load it.
The problem is, the user loads in the house, but can't exit. Could someone help me please?
House Rentroom Function / Save housespawn position function
Код:
if(strcmp(cmd, "/rentroom", true) == 0)
{
if(IsPlayerConnected(playerid))
{
new Float:oldposx, Float:oldposy, Float:oldposz;
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
for(new h = 0; h < sizeof(HouseInfo); h++)
{
if(IsPlayerInRangeOfPoint(playerid,5.0, HouseInfo[h][hExteriorX], HouseInfo[h][hExteriorY], HouseInfo[h][hExteriorZ]) && HouseInfo[h][hOwned] == 1 && HouseInfo[h][hRentabil] == 1)
{
// if(PlayerInfo[playerid][pPhousekey] != 0 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0)
// {
// SendClientMessage(playerid, COLOR_WHITE, " You already own a House!");
// return 1;
// }
if(GetPlayerMoney(playerid) > HouseInfo[h][hRent])
{
PlayerInfo[playerid][pPhousekey] = h;
GivePlayerMoney(playerid,-HouseInfo[h][hRent]);
HouseInfo[h][hCash] = HouseInfo[h][hCash]+HouseInfo[h][hRent];
SetPlayerInterior(playerid,HouseInfo[h][hInteriorID]);
SetPlayerPos(playerid,HouseInfo[h][hInteriorX],HouseInfo[h][hInteriorY],HouseInfo[h][hInteriorZ]);
GameTextForPlayer(playerid, "~w~Welcome Home~n~You can exit at any time by moving to this door and typing /exit", 5000, 3);
PlayerInfo[playerid][pInt] = HouseInfo[h][hInteriorID];
PlayerInfo[playerid][pVirtualWorld] = HouseInfo[h][hVirWorld];
SetPlayerVirtualWorld(playerid, HouseInfo[h][hVirWorld]);
PlayerInfo[playerid][InHouse] = h;
SendClientMessage(playerid, COLOR_WHITE, "You can enter and exit here anytime.");
SendClientMessage(playerid, COLOR_WHITE, "Type /help to review the new property help section.");
new file[128], pname[MAX_PLAYER_NAME];
new Float:x, Float:y, Float:z, Interior[ MAX_PLAYERS ], VirtualWorld[ MAX_PLAYERS ];
GetPlayerName(playerid, pname, sizeof(pname));
format(file, sizeof(file), "\\SavePos\\%s.ini", pname);
if(!dini_Exists(file))
dini_Create(file);
GetPlayerPos(playerid, x, y, z);
dini_FloatSet(file, "posX", HouseInfo[h][hInteriorX]);
dini_FloatSet(file, "posY", HouseInfo[h][hInteriorY]);
dini_FloatSet(file, "posZ", HouseInfo[h][hInteriorZ]);
dini_IntSet(file, "Interior", HouseInfo[h][hInteriorID]);
dini_IntSet(file, "VirtualWorld", HouseInfo[h][hVirWorld]);
SaveHouse(h);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "You don't have the cash to rent this House!");
return 1;
}
}
}
}
return 1;
}
House Spawnpos load function
Код:
new file[128], pname[MAX_PLAYER_NAME]; new Float:x, Float:y, Float:z, HouseSpawnInterior, HouseVWorld; GetPlayerName(playerid, pname, sizeof(pname)); format(file, sizeof(file), "\\SavePos\\%s.ini", pname); x = dini_Float(file, "posX"); y = dini_Float(file, "posY"); z = dini_Float(file, "posZ"); HouseSpawnInterior = dini_Int(file, "Interior"); HouseVWorld = dini_Int(file, "VirtualWorld"); SetPlayerPos(playerid, x, y, z); SetPlayerInterior(playerid, HouseSpawnInterior); SetPlayerVirtualWorld(playerid, HouseVWorld);
House /enter function
Код:
if(strcmp(cmd, "/enter", true) == 0)
{
if(IsPlayerConnected(playerid))
{
new Float:shax, Float:shay, Float:shaz;
new Float:shbx, Float:shby, Float:shbz;
new Float:shcx, Float:shcy, Float:shcz;
GetVehiclePos(EnterableShamals[0], shax, shay, shaz);
GetVehiclePos(EnterableShamals[1], shbx, shby, shbz);
GetVehiclePos(EnterableShamals[2], shcx, shcy, shcz);
for(new i = 0; i < sizeof(HouseInfo); i++)
{
if(IsPlayerInRangeOfPoint(playerid, 3, HouseInfo[i][hExteriorX], HouseInfo[i][hExteriorY], HouseInfo[i][hExteriorZ]))
{
if(GetPlayerVirtualWorld( playerid) == 0)
{
if(HouseInfo[i][hLocked] == 0 || PlayerInfo[playerid][pScrew] >= 1)
{
if(PlayerInfo[playerid][pMask] == 1)
{
format(string, sizeof(string), "* Stranger has entered the house.");
}
else
{
format(string, sizeof(string), "* %s has entered the house.", sendername);
}
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
PlayerInfo[playerid][InHouse] = i;
SetPlayerInterior( playerid, HouseInfo[i][hInteriorID]);
SetPlayerVirtualWorld( playerid, HouseInfo[i][hVirWorld]);
PlayerInfo[playerid][pVirtualWorld] = HouseInfo[i][hVirWorld];
SetPlayerPos( playerid, HouseInfo[i][hInteriorX], HouseInfo[i][hInteriorY], HouseInfo[i][hInteriorZ]);
if(HouseInfo[i][hRadio] > 0 && HouseInfo[i][hRadio] <= RADIOS)
{
new cRadio = HouseInfo[i][hRadio];
switch(cRadio)
{
case 1:
{
StopAudioStreamForPlayer(playerid);
PlayAudioStreamForPlayer(playerid, "http://yp.shoutcast.com/sbin/tunein-station.pls?id=1281016");
}
case 2:
{
StopAudioStreamForPlayer(playerid);
PlayAudioStreamForPlayer(playerid, "http://yp.shoutcast.com/sbin/tunein-station.pls?id=1979774");
}
case 3:
{
StopAudioStreamForPlayer(playerid);
PlayAudioStreamForPlayer(playerid, "http://yp.shoutcast.com/sbin/tunein-station.pls?id=1283687");
}
}
}
for(new x = 0; x <MAX_PLAYERS; x++)
{
new id = PlayerInfo[x][pPhousekey];
if(HouseInfo[id][hAlarmSystem] == 1 && HouseInfo[id][hAlarmNumber] != 0 && AlarmOnline[id] == 0)
{
for(new a = 0; a <MAX_PLAYERS; a++)
{
if(IsPlayerConnected(a))
{
if(PlayerInfo[playerid][pScrew] >= 1 && HouseInfo[i][hLocked] == 1)
{
if(PlayerInfo[a][pPnumber] == HouseInfo[id][hAlarmNumber])
{
new success = random(4);
if(success == 1)
{
format(string, sizeof(string), "House Alarm: Someone has tryed to enter inside the house but failed!");
SendCopMessage(COLOR_DBLUE,string);
PlayerInfo[playerid][pScrew] -= 1;
SendClientMessage(playerid, COLOR_GREY, "You failed to enter inside the house, run!");
format(string, sizeof(string), "SMS: This is an automated message informing you that registrant %s's house alarm has been activated.",GetName(x));
SendClientMessage(a, COLOR_YELLOW, string);
if(IsACop(a))
{
SetPlayerCheckpoint(playerid, HouseInfo[i][hExteriorX], HouseInfo[i][hExteriorY], HouseInfo[i][hExteriorZ], 3.0);
CP[a] = 46488;
}
if(PlayerInfo[playerid][pWantedLevel] <= 6)
{
PlayerInfo[playerid][pWantedLevel] += 1;
SetPlayerWantedLevel(playerid, PlayerInfo[playerid][pWantedLevel]);
}
PlayerInfo[playerid][pVirtualWorld] = 0;
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, HouseInfo[i][hExteriorID]);
SetPlayerPos(playerid, HouseInfo[i][hExteriorX], HouseInfo[i][hExteriorY], HouseInfo[i][hExteriorZ]);
}
else
{
format(string, sizeof(string), "House Alarm: Someone has successfully entered inside the house!");
SendCopMessage(COLOR_DBLUE,string);
PlayerInfo[playerid][pScrew] -= 1;
if(IsACop(a))
{
SetPlayerCheckpoint(playerid, HouseInfo[i][hExteriorX], HouseInfo[i][hExteriorY], HouseInfo[i][hExteriorZ], 3.0);
CP[a] = 46488;
}
if(PlayerInfo[playerid][pWantedLevel] <= 6)
{
PlayerInfo[playerid][pWantedLevel] += 1;
SetPlayerWantedLevel(playerid, PlayerInfo[playerid][pWantedLevel]);
}
SendClientMessage(playerid, COLOR_GREY, "You successfully enter inside the house!");
format(string, sizeof(string), "SMS: This is an automated message informing you that registrant %s's house alarm has been activated.",GetName(x));
SendClientMessage(a, COLOR_YELLOW, string);
}
}
}
}
}
}
}
}
else
{
GameTextForPlayer(playerid, "~r~House is Locked!", 1000, 5);
}
}
}
}
Код:
for(new i = 0; i < sizeof(HouseInfo); i++)
{
if(IsPlayerInRangeOfPoint(playerid, 3, HouseInfo[PlayerInfo[playerid][InHouse]][hInteriorX], HouseInfo[PlayerInfo[playerid][InHouse]][hInteriorY], HouseInfo[PlayerInfo[playerid][InHouse]][hInteriorZ]))
{
if(GetPlayerVirtualWorld(playerid) > 0)
{
if(PlayerInfo[playerid][InHouse] != 0)
{
if(PlayerInfo[playerid][pMask] == 1)
{
format(string, sizeof(string), "* Stranger has left the house.");
}
else
{
format(string, sizeof(string), "* %s has left the house.", sendername);
}
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
PlayerInfo[playerid][pVirtualWorld] = 0;
SetPlayerVirtualWorld( playerid, 0 );
SetPlayerInterior( playerid, HouseInfo[PlayerInfo[playerid][InHouse]][hExteriorID]);
SetPlayerPos( playerid, HouseInfo[PlayerInfo[playerid][InHouse]][hExteriorX], HouseInfo[PlayerInfo[playerid][InHouse]][hExteriorY], HouseInfo[PlayerInfo[playerid][InHouse]][hExteriorZ]);
PlayerInfo[playerid][InHouse] = 0;
}
else
{
if(PlayerInfo[playerid][pMask] == 1)
{
format(string, sizeof(string), "* Stranger has left the house.");
}
else
{
format(string, sizeof(string), "* %s has left the house.", sendername);
}
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
PlayerInfo[playerid][pVirtualWorld] = 0;
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, HouseInfo[i][hExteriorID]);
SetPlayerPos(playerid, HouseInfo[i][hExteriorX], HouseInfo[i][hExteriorY], HouseInfo[i][hExteriorZ]);
}
StopAudioStreamForPlayer(playerid);
}
}
}

