Jump to content
  • 0

pomoc House System


Afellay

Dotaz

Zdravim, ako by som spravil do House system ukladanie cez Dini alebo cez dudb aby to fungovalo a este ako auta k spawnu ked si kupim dom aby som si mohol k domu vybrat jedno auto a aby som ho mohol ja použivat a nikto iní :) moc sa v pawnu skoro nerozumiem

 

 

#include <a_samp>
#include <icons_streamer.pwn>
#include <TDB>

#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,Vlastnik,Dialog,Zamek,WiW,Float:auto_x,Float:auto_y,Float:auto_z,Float:auto_face,auto_dialog
};

new HouseInfo[MAX_HOUSES][HOUSE_DATA];
new HouseCount = 0;
new MajitelDomu[MAX_HOUSES][MAX_PLAYERS];
new AutoDomu[MAX_HOUSES];
forward GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z);
forward IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius);
forward AddHouse(const h_Name[], Float:pX, Float:pY, Float:pZ, Float:iX, Float:iY, Float:iZ, ii, Cenik, iddialogu, VW, Float:a_x, Float:a_y, Float:a_z, Float:a_face, a_dialog);

public IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius)
{
if(GetPlayerDistanceToPointEx(playerid,x,y,z) < radius) return 1;
return 0;
}
public GetPlayerDistanceToPointEx(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);
}

public AddHouse(const h_Name[], Float:pX, Float:pY, Float:pZ, Float:iX, Float:iY, Float:iZ, ii, Cenik, iddialogu, VW, Float:a_x, Float:a_y, Float:a_z, Float:a_face, a_dialog)
{
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][WiW] = VW;

HouseInfo[HouseCount][Vlastnik] = 0;
HouseInfo[HouseCount][Zamek] = 0;

CreatePickup(1273,1,pX, pY, pZ);
HouseInfo[HouseCount][Dialog] = iddialogu;

HouseInfo[HouseCount][auto_x] = a_x;
HouseInfo[HouseCount][auto_y] = a_y;
HouseInfo[HouseCount][auto_z] = a_z;
HouseInfo[HouseCount][auto_face] = a_face;
HouseInfo[HouseCount][auto_dialog] = a_dialog;

HouseCount ++;
}else{
print("{C}");
}
return 1;
}

public OnFilterScriptInit()
{
TdOnGameModeInt();
AddHouse("Dum 1", 2126.6511,-1319.9645,26.6240, 225.8965,1022.1873,1084.0156, 7, 35010, 681, 24, 2136.1165,-1318.8456,24.6143,0.2171, 680);
return 1;
}

public OnPlayerConnect(playerid)
{
for(new h=0;h {
CreateMapIcon(31, COLOR_GREEN, HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z]);
}
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
ResetMapIconVariables(playerid);
for(new h=0;h {
new buyyng[150];
format(buyyng, 150, "Cena: %d",HouseInfo[h][Cena]);
Create3DTextLabel(buyyng,0x00FF00FF,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z] + 3,80.0,0);
}
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
for(new h=0;h {
if(IsPlayerInSphere(playerid,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z],2) == 1)
{
ShowPlayerDialog(playerid,HouseInfo[h][Dialog],DIALOG_STYLE_LIST,"Dům","Koupit\nProdat\nZamknout\nOdemknout\nInformace o domu\nVstoupit\nKoupit / Zmenit auto","Použít","Nic");
}
}
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if((newkeys & (KEY_WALK | KEY_SPRINT)) == (KEY_WALK | KEY_SPRINT))
{
for(new h=0;h {
if(IsPlayerInSphere(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 OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
for(new h=0;h {
if(dialogid == HouseInfo[h][Dialog])
{
if(response == 1)
{
if(listitem == 0)
{
if(GetPlayerMoney(playerid) <= HouseInfo[h][Cena]) return SendClientMessage(playerid, 0xFFFFFFFF, "Máš málo peněz !");
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]);
SendClientMessage(playerid, 0xFFFFFFFF, "Pořidil jsi si dům !");
}
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);
}
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 zamknut !");
}
else if(listitem == 3)
{
if(MajitelDomu[h][playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům není tvůj !");
SendClientMessage(playerid, 0xFFFFFFFF, "Dům odemknut !");
HouseInfo[h][Zamek] = 1;
}
else if(listitem == 4)
{
SendClientMessage(playerid, 0xFFFFFFFF, "Informace o domu:");
if(HouseInfo[h][Zamek] == 0)
{
SendClientMessage(playerid,0xFFFFFFFF,"Zámek: Zamknutý.");
}else{
SendClientMessage(playerid,0xFFFFFFFF,"Zámek: Odemknutý.");
}
if (HouseInfo[h][Vlastnik] == 0)
{
SendClientMessage(playerid,0xFFFFFFFF,"K Prodeji: Ano");
}else{
SendClientMessage(playerid,0xFFFFFFFF,"K Prodeji: Ne");
}
}
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]);
SendDrawMessage(playerid, "Dum opustis ~r~L.ALT~w~ + ~r~Mezernik~w~ !");
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]);
SendDrawMessage(playerid, "Dum opustis ~r~L.ALT~w~ + ~r~Mezernik~w~ !");
}
else if(listitem == 6)
{
if(MajitelDomu[h][playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům není tvůj !");
ShowPlayerDialog(playerid,HouseInfo[h][auto_dialog],DIALOG_STYLE_LIST,"Koupit auto k domu","Admiral - 200$\nPCJ-600 - 150$\nTornado - 350$\nGreenwood - 250$\nHustler - 130$\nClover - 150$","Koupit","Nic");
}
}
}
if(dialogid == HouseInfo[h][auto_dialog])
{
if(response == 1)
{
if(listitem == 0)
{
if(GetPlayerMoney(playerid) < 200) return SendClientMessage(playerid, 0xFFFFFFFF, "Potřebuješ 200$ !");
DestroyVehicle(AutoDomu[h]);
AutoDomu[h] = AddStaticVehicle(445,HouseInfo[h][auto_x],HouseInfo[h][auto_z],HouseInfo[h][auto_z],HouseInfo[h][auto_face],35,35);
}
else if(listitem == 1)
{
if(GetPlayerMoney(playerid) < 150) return SendClientMessage(playerid, 0xFFFFFFFF, "Potřebuješ 150$ !");
DestroyVehicle(AutoDomu[h]);
AutoDomu[h] = AddStaticVehicle(522,HouseInfo[h][auto_x],HouseInfo[h][auto_z],HouseInfo[h][auto_z],HouseInfo[h][auto_face],35,35);
}
else if(listitem == 2)
{
if(GetPlayerMoney(playerid) < 350) return SendClientMessage(playerid, 0xFFFFFFFF, "Potřebuješ 350$ !");
DestroyVehicle(AutoDomu[h]);
AutoDomu[h] = AddStaticVehicle(576,HouseInfo[h][auto_x],HouseInfo[h][auto_z],HouseInfo[h][auto_z],HouseInfo[h][auto_face],35,35);
}
else if(listitem == 3)
{
if(GetPlayerMoney(playerid) < 250) return SendClientMessage(playerid, 0xFFFFFFFF, "Potřebuješ 250$ !");
DestroyVehicle(AutoDomu[h]);
AutoDomu[h] = AddStaticVehicle(492,HouseInfo[h][auto_x],HouseInfo[h][auto_z],HouseInfo[h][auto_z],HouseInfo[h][auto_face],35,35);
}
else if(listitem == 4)
{
if(GetPlayerMoney(playerid) < 130) return SendClientMessage(playerid, 0xFFFFFFFF, "Potřebuješ 130$ !");
DestroyVehicle(AutoDomu[h]);
AutoDomu[h] = AddStaticVehicle(545,HouseInfo[h][auto_x],HouseInfo[h][auto_z],HouseInfo[h][auto_z],HouseInfo[h][auto_face],35,35);
}
else if(listitem == 5)
{
if(GetPlayerMoney(playerid) < 150) return SendClientMessage(playerid, 0xFFFFFFFF, "Potřebuješ 150$ !");
DestroyVehicle(AutoDomu[h]);
AutoDomu[h] = AddStaticVehicle(542,HouseInfo[h][auto_x],HouseInfo[h][auto_z],HouseInfo[h][auto_z],HouseInfo[h][auto_face],122,113);
}
}
}
}
return 1;
}

 

Zde je Cod :)

Ten TDB je asi nejaký infobox 

Link to comment
Share on other sites

20 odpovědí na tuto otázku

Recommended Posts

  • 0

Však co řešíš máš tam ukládání do jiného souboru tudíž lépe přehlednější a plus rychlejší :) jelikož dini a dudb jsou starý a pomalý systémy :) a auta tam máš takže nevím co řešíš :)

Link to comment
Share on other sites

  • 0

Pokud pawnu nerozumíš respektive  neznáš syntax tak je zbytečné ti tady cokoliv opravovat jediné co ti poradím je začni dělat lehké skripty typu příkazy rúzné funkce šprtej wikinu a porozhlédni se tu po foře je tu spousta návodú na začátky...

Link to comment
Share on other sites

  • 0

nj tak ako spravim mam prikaz dam že /info a tam budem mat ID domu že mam kupený ako v RZE ;)

 

To uděláš tak že pokut máš tento HS vložený v módu tak jen pomocí podmínky ;)

 

 

Jaker prečo by to bolo rýchlejšie pri viacerých súboroch než pri jednom?

 

jelikož dini a dudb je zastaralý systém přes něj ti dobrý módy nejedou mají většinou vlastní tak jako tento HS...

Link to comment
Share on other sites

  • 0

Zápis do viacero súborov nemôže byť nikdy rýchlejší než zápis do jedného súboru (samozrejme nie diplomové práce).
Iba ak by používal dini, tak by to bolo jedno, že či ide o zápis do dvoch súborov, alebo do jedného, kvôli tomu ako dini funguje.
*Dudb nepoznám.

Link to comment
Share on other sites

  • 0

To nejde o to, že čo je lepšie a čo ti povie lepší pawner (:lol:), ale o to, že zápis do viacerých súborov nemôže byť rýchlejší než zápis do jedného.
Šak si vytvor súbor na disku čo má 20 MB a vytvor si 20000 súborov po 1 KB.
Uvidíš čo bude rýchlejšie. 

Link to comment
Share on other sites

  • 0

Takže udělej si to že si ten systém z FS přeneseš do módu tak aby neházel errory a ani warningy :) a pak si zjisti funkci která zjišťuje id domu a nastav si podmínku tak ayb to vypaslo do /info id domu :)

Link to comment
Share on other sites

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...