Jump to content
  • 0

pomoc [Vyřešeno] House system


Jakub Kučera

Dotaz

Ahoj, mám house system od AvestX

//Vytvořil AvestX

#include <a_samp>
#define B_MODRA	        0x4169FFAA
#define COLOR_GREEN	    0x4169FFAA
#define MAX_HOUSES      50
#define MAX_HOUSES_NAME 20
enum HOUSE_DATA
{
	HouseName[MAX_HOUSES_NAME],
    Float:p_X,
    Float:p_Y,
    Float:p_Z,
    Float:i_X,
	Float:i_Y,
	Float:i_Z,
	iin,
	Cena,
	HouseID,
	Vlastnik,
	Dialogy,
	Zamek,
	WiW,
	h_pick
};
new HouseInfo[MAX_HOUSES][HOUSE_DATA];
new HouseCount = 0;
new MajitelDomu[MAX_HOUSES][MAX_PLAYERS];
forward GetPlayerDistanceToPointEx_H(playerid,Float:x,Float:y,Float:z);
forward IsPlayerInSphere_H(playerid,Float:x,Float:y,Float:z,radius);
forward AddHouse(const h_Name[], hid, Float:pX, Float:pY, Float:pZ, Float:iX, Float:iY, Float:iZ, ii, Cenik, iddialogu, VW);
forward House_OnPlayerPickUpPickup(playerid);
forward House_OnPlayerKeyStateChange(playerid, newkeys);
forward House_OnDialogResponse(playerid, dialogid, response, listitem);
forward House_OnPlayerUpdate(playerid);

public IsPlayerInSphere_H(playerid,Float:x,Float:y,Float:z,radius)
{
   if(GetPlayerDistanceToPointEx_H(playerid,x,y,z) < radius) return 1;
   return 0;
}
public GetPlayerDistanceToPointEx_H(playerid,Float:x,Float:y,Float:z)
{
	new Float:x1,Float:y1,Float:z12,Float:tmpdis;
	GetPlayerPos(playerid,x1,y1,z12);
	tmpdis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),2)
	+floatpower(floatabs(floatsub(y,y1)),2)+floatpower(floatabs(floatsub(z,z12)),2));
	return floatround(tmpdis);
}
stock H_OnGameModeInit()
{
	SetTimer("House_OnPlayerUpdate",300,1);
	return 1;
}
public AddHouse(const h_Name[], hid, Float:pX, Float:pY, Float:pZ, Float:iX, Float:iY, Float:iZ, ii, Cenik, iddialogu, VW)
{
	if(HouseCount < MAX_HOUSES)
		{
		    format(HouseInfo[HouseCount][HouseName] , MAX_HOUSES_NAME, "%s", h_Name);

			HouseInfo[HouseCount][p_X]        	 = pX;
			HouseInfo[HouseCount][p_Y]        	 = pY;
			HouseInfo[HouseCount][p_Z]        	 = pZ;
			HouseInfo[HouseCount][i_X]        	 = iX;
			HouseInfo[HouseCount][i_Y]        	 = iY;
			HouseInfo[HouseCount][i_Z]        	 = iZ;
			HouseInfo[HouseCount][iin]        	 = ii;
			HouseInfo[HouseCount][Cena]       	 = Cenik;
			HouseInfo[HouseCount][HouseID]       = hid;
			HouseInfo[HouseCount][WiW]        	 = VW;
			HouseInfo[HouseCount][Vlastnik] 	 = 0;
			HouseInfo[HouseCount][Zamek]    	 = 0;
		 	HouseInfo[HouseCount][h_pick]   	 = CreatePickup(1273,1,pX, pY, pZ);
		 	HouseInfo[HouseCount][Dialogy]   	 = iddialogu;

			HouseCount ++;
			}else{
			print("<!--  Kapacita AddHouse prekrocena, dum nebyl vytvoren  !-->");
		}
	return 1;
}
public House_OnPlayerPickUpPickup(playerid)
{
	for(new h=0;h<HouseCount;h++)
		{
		if(IsPlayerInSphere_H(playerid,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z],2) == 1)
			{
				ShowPlayerDialog(playerid,HouseInfo[h][Dialogy],DIALOG_STYLE_LIST,"Dům","Koupit\nProdat\nUzamknout\nOdemknout\nInformace o domu\nVstoupit","Použít","Nic");
			}
		}
	return 1;
}
public House_OnPlayerKeyStateChange(playerid, newkeys)
{
	if((newkeys & (KEY_WALK | KEY_SPRINT)) == (KEY_WALK | KEY_SPRINT))
   		{
		for(new h=0;h<HouseCount;h++)
					{
					if(IsPlayerInSphere_H(playerid,HouseInfo[h][i_X],HouseInfo[h][i_Y],HouseInfo[h][i_Z],10) == 1)
						{
						if(GetPlayerVirtualWorld(playerid) == HouseInfo[h][WiW])
						    {
							SetPlayerPos(playerid,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z]);
							SetPlayerInterior(playerid,0);
							SetPlayerVirtualWorld(playerid, 0);
  		        	}
				}
  			}
   		}
	return 1;
}
public House_OnDialogResponse(playerid, dialogid, response, listitem)
{
	for(new h=0;h<HouseCount;h++)
		{
		if(dialogid == HouseInfo[h][Dialogy])
			{
			if(response == 1)
				{
				if(listitem == 0)
					{
					            new cena[150];
							    format(cena, sizeof(cena), "Potřebuješ %d$ !",HouseInfo[h][Cena]);
								if(GetPlayerMoney(playerid) < HouseInfo[h][Cena]) return SendClientMessage(playerid, 0xFFFFFFFF, cena);
								if(HouseInfo[h][Vlastnik] == 1) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům již někdo vlastní !");
								HouseInfo[h][Vlastnik] = 1;
								MajitelDomu[h][playerid] = 1;
								GivePlayerMoney(playerid, -HouseInfo[h][Cena]);
								new cena2[150];
								format(cena2, 150, "Koupil jsi si dům za %d$ !", HouseInfo[h][Cena]);
								SendClientMessage(playerid, 0xFFFFFFFF, cena2);
								Dum[playerid] = HouseInfo[HouseCount][HouseID];
								DestroyPickup(HouseInfo[h][h_pick]);
								HouseInfo[h][h_pick] = CreatePickup(1272,1,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z]);
							}
						else if(listitem == 1)
							{
							    new cena[150];
								if(MajitelDomu[h][playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům není tvůj !");
								HouseInfo[h][Vlastnik] = 0;
								MajitelDomu[h][playerid] = 0;
								GivePlayerMoney(playerid, HouseInfo[h][Cena]);
								format(cena, sizeof(cena), "Dům prodán, bylo ti vráceno zpět %d$ !",HouseInfo[h][Cena]);
								SendClientMessage(playerid, 0xFFFFFFFF, cena);
								Dum[playerid] = 0;
								DestroyPickup(HouseInfo[h][h_pick]);
								HouseInfo[h][h_pick] = CreatePickup(1273,1,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z]);
							}
						else if(listitem == 2)
							{
								if(MajitelDomu[h][playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům není tvůj !");
								HouseInfo[h][Zamek] = 0;
								SendClientMessage(playerid, 0xFFFFFFFF, "Dům úspěšně uzamknut !");
							}
						else if(listitem == 3)
							{
								if(MajitelDomu[h][playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům není tvůj !");
								SendClientMessage(playerid, 0xFFFFFFFF, "Dům úspěšně odemknut !");
								HouseInfo[h][Zamek] = 1;
							}
						else if(listitem == 4)
							{
								SendClientMessage(playerid, 0xAA3333AA, "|===========================[   Dům   ]===========================|");
								if(HouseInfo[h][Zamek] == 0)
									{
								 		SendClientMessage(playerid,0xFFFFFFFF,"Stav zámku: Zamknutý.");
								 		}else{
								 		SendClientMessage(playerid,0xFFFFFFFF,"Stav zámku: Odemknutý.");
									}
									
								new cena[150];
								format(cena, 150, "Cena domu %d$",HouseInfo[h][Cena]);
								SendClientMessage(playerid,0xFFFFFFFF,cena);
									
								if (HouseInfo[h][Vlastnik] == 0)
									{
								 		SendClientMessage(playerid,0xFFFFFFFF,"Možnost odkoupení: Ano");
								 		}else{
								 		SendClientMessage(playerid,0xFFFFFFFF,"Možnost odkoupení: Ne");
									}
								SendClientMessage(playerid, 0xAA3333AA, "|===========================[   Dům   ]===========================|");
							}
						else if(listitem == 5)
							{
					 			if(MajitelDomu[h][playerid] == 1)
								{
									SetPlayerPos(playerid, HouseInfo[h][i_X],HouseInfo[h][i_Y],HouseInfo[h][i_Z]);
									SetPlayerInterior(playerid, HouseInfo[h][iin]);
									SetPlayerVirtualWorld(playerid, HouseInfo[h][WiW]);
									SendClientMessage(playerid,0xFFFFFFFF,"Dum opustíš L.ALT + SPACE");
									return 0;
								}
								else if(HouseInfo[h][Zamek] == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům je zamknut !");
								SetPlayerPos(playerid, HouseInfo[h][i_X],HouseInfo[h][i_Y],HouseInfo[h][i_Z]);
								SetPlayerInterior(playerid, HouseInfo[h][iin]);
								SetPlayerVirtualWorld(playerid, HouseInfo[h][WiW]);
								SendClientMessage(playerid,0xFFFFFFFF,"Dum opustíš L.ALT + SPACE");
							}
					}
				}
			}
 	return 1;
}

a trošku si ho upravuji, aby to hráči uložilo jeho dům.

 

A proto se chci zeptat, jak udělat ukládání ?

 

Absolutně nevím, jak to ukládat.

Jestli hráčovi do souboru pomocí id domu, ale nenapadá mě, jak nastavit, aby dům poté nešel koupit, protože hodnota vlastník se po odpojení vynuluje,

nebo to udělat, že si bude každý dům ukládat do svého souboru.

 

Absolutně tedy nechápu, jak to udělat.

 

Pomohl by mi nějaký názorný kód, nebo popis jak to mám udělat.

 

Děkuji za přečtení a užitečnou odpověď.

 

Link to comment
Share on other sites

1 odpověd na tuto otázku

Recommended Posts

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...