Rupert\'s house system
v1.0
Be szeretném mutatni egyik kedvenc scriptemet, amit most nyilvánosságra hozok; ez a házrendszerem.
Szükséges függvénykönyvtárak a futtatáshoz:
a_samp
dini
dutils
sscanf2
zcmd
Szükséges plugin: sscanf
Szükséges mappák a \"scriptfiles\" mappán belül: \'Hazak\'
A parancsok (csak adminok használhatják):
/haz - Létrehoz egy házat. Két paraméter KELL: [iD] és [stílus]. Az ID nagyon fontos! Nézd meg a \"Haz\" mappában, hogy létezik-e az ID, avagy sem. Stílus háromféle lehet: 1 - lepukkant ház; 2 - átlagos ház; 3 - luxus ház. Mindegyiknek más az interiorja, illetve ára.
/haztorol - A közeledben lévõ házat törli.
Maximum 500 ház lehet, de ezt át lehet állítani a scripten belül.
A ház ajtajában, ha megnyomod az ALT-ot, három lehetõség van:
ha a ház a tiéd: be tudod zárni/ki tudod nyitni az ajtót; be tudsz menni, illetve ki tudsz jönni; eladhatod a házat.
ha nem a tiéd, és másé: megpróbálhatsz bemenni az ajtón; ha zárva van az ajtó, természetesen nem fog sikerülni.
ha senkié: megveheted a házat, ha van elég pénzed rá.
Minden játékosnak
korlátlan háza lehet!
Letöltés: http://www.solidfiles.com/d/ebfa165563/ Videó:http://www.youtube.com/watch?v=ulhk6MH4-Xg&feature=youtu.beKépek:[hs width=300 height=300]
http://kepfeltoltes.hu/121213/820354195sa-mp-008_www.kepfeltoltes.hu_.png[/hs]
[hs width=300 height=300]
http://kepfeltoltes.hu/121213/1161592360sa-mp-009_www.kepfeltoltes.hu_.png[/hs]
[hs width=300 height=300]
http://kepfeltoltes.hu/121213/770814429sa-mp-011_www.kepfeltoltes.hu_.png[/hs]
Kód:
/*
KÉSZÍTETTE RUPERT! KÉRLEK, NE TÖRÖLD KI A NEVEMET MEGEMLÍTÕ ÜZENETET!
*/
#include <a_samp>
#include <dini>
#include <dutils>
#include <dudb>
#include <sscanf2>
#include <zcmd>
// SZÍNEK
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xff0000AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_GRREN 0x00ff2bAA
#define COLOR_LORANGE 0xebbf3bAA
#define SCM SendClientMessage
#define pressed(%0)\\
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
// DIALOGOK
#define hazikoo 50
#define hazikoo2 60
#define hazikoo3 70
#define hazikoo4 80
#define hazikoo5 90
#define MAX_HOUSES 500
#pragma unused ret_memcpy
// HÁZ ENUM
enum House
{
ID,
style,
Owner[24],
Float:X,
Float:Y,
Float:Z,
Ar,
Float:kX,
Float:kY,
Float:kZ,
interior,
nyitva
}
new Text3D:haztext2[MAX_HOUSES];
new Text3D:haztext[MAX_HOUSES];
new stri[256];
new hInfo[MAX_HOUSES][House];
new hazak;
new hazban[MAX_PLAYERS];
new mhazban[MAX_PLAYERS];
new Float:kx[MAX_PLAYERS];
new Float:ky[MAX_PLAYERS];
new Float:kz[MAX_PLAYERS];
bool:IsPlayerHaveHazkulcs(playerid, hazid)
{
if(strcmp(pName(playerid), hInfo[hazid][Owner], true) == 0) return true;
return false;
}
CMD:haztorol(playerid, params[])
{
new hazacska;
hazacska = MelyikHaz(playerid);
if(!IsPlayerAdmin(playerid)) return SCM(playerid, COLOR_RED, \"Nem vagy admin.\");
if(hazacska == -1) return SCM(playerid, COLOR_GREY, \"Nincs ház a közelben.\");
RemoveHouse(hazacska);
SCM(playerid, COLOR_WHITE, \"Ház törölve.\");
return 1;
}
CMD:haz(playerid, params[])
{
new Float:px, Float:py, Float:pz, ar, id;
GetPlayerPos(playerid, px, py, pz);
if(!IsPlayerAdmin(playerid)) return SCM(playerid, COLOR_RED, \"Nem vagy admin!\");
if(sscanf(params, \"dd\", id, ar)) return SCM(playerid, COLOR_GREY, \"Használat: /haz [iD!!!] [style (1-3)]\");
CreateHouse(id, px, py, pz, ar);
SCM(playerid, COLOR_WHITE, \"Ház létrehozva.\");
return 1;
}
CMD:bemegy(playerid, params[])
{
new hazacska = MelyikHaz(playerid);
if(hazacska)
{
if(hInfo[hazacska][Ar] == 0)
{
if(hInfo[hazacska][nyitva] == 0) return SCM(playerid, COLOR_RED, \"Az ajtó zárva van!\");
SetPlayerInterior(playerid, hInfo[hazacska][interior]);
SetPlayerPos(playerid, hInfo[hazacska][kX], hInfo[hazacska][kY], hInfo[hazacska][kZ]);
SetPlayerVirtualWorld(playerid, hInfo[hazacska][iD]);
hazban[playerid] = 1;
kx[playerid] = hInfo[hazacska][X];
ky[playerid] = hInfo[hazacska][Y];
kz[playerid] = hInfo[hazacska][Z];
mhazban[playerid] = hInfo[hazacska][iD];
}
}
return 1;
}
CMD:kimegy(playerid, params[])
{
if(hazban[playerid] == 0) return 0;
if(hInfo[mhazban[playerid]][nyitva] == 0) return SCM(playerid, COLOR_RED, \"Az ajtó zárva van!\");
SetPlayerPos(playerid, kx[playerid], ky[playerid], kz[playerid]);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
hazban[playerid] = 0;
return 1;
}
public OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\" Rupert\'s house system loaded.\");
print(\"--------------------------------------\\n\");
hazak = 0;
LoadHouses();
DisableInteriorEnterExits();
printf(\"Összes ház: %d!\", hazak);
print(\"---------------------------------------------------\");
print(\"---------------------------------------------------\");
return 1;
}
public OnFilterScriptExit()
{
SaveHouses();
hazak = 0;
return 1;
}
public OnPlayerConnect(playerid)
{
hazban[playerid] = 0;
mhazban[playerid] = 0;
kx[playerid] = 0;
ky[playerid] = 0;
kz[playerid] = 0;
SCM(playerid, COLOR_GRREN, \"A szerveren megtalálható a Rupert által készített házrendszer!\");
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
hazban[playerid] = 0;
mhazban[playerid] = 0;
kx[playerid] = 0;
ky[playerid] = 0;
kz[playerid] = 0;
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(pressed(KEY_WALK) && hazban[playerid] == 1)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[mhazban[playerid]][kX], hInfo[mhazban[playerid]][kY], hInfo[mhazban[playerid]][kZ]))
{
if(IsPlayerHaveHazkulcs(playerid, mhazban[playerid]))
{
ShowPlayerDialog(playerid, hazikoo3, DIALOG_STYLE_LIST, \"Ház infó\", \"Kimegy\\nKinyitás\\nBezárás\", \"Rendben\", \"Mégsem\");
}
else ShowPlayerDialog(playerid, hazikoo5, DIALOG_STYLE_LIST, \"Ház infó\", \"Kimegy\", \"Rendben\", \"Mégsem\");
}
}
new hazacska = MelyikHaz(playerid);
if(pressed(KEY_WALK) && hazacska)
{
if(hInfo[hazacska][Ar] > 0)
{
ShowPlayerDialog(playerid, hazikoo, DIALOG_STYLE_LIST, \"Ház infó\",\"Ház megvétele\", \"Rendben\", \"Mégsem\");
}
else if(IsPlayerHaveHazkulcs(playerid, hazacska))
{
ShowPlayerDialog(playerid, hazikoo2, DIALOG_STYLE_LIST, \"Ház infó\", \"Bemegy\\nKinyitás\\nBezárás\\nHáz eladása\", \"Rendben\",\"Mégsem\");
}
else
{
ShowPlayerDialog(playerid, hazikoo4, DIALOG_STYLE_LIST, \"Ház infó\", \"Megpróbálok bemenni\", \"Rendben\",\"Mégsem\");
}
}
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == hazikoo)
{
if(!response) return 0;
if(listitem == 0)
{
new hazacska = MelyikHaz(playerid);
if(GetPlayerMoney(playerid) < hInfo[hazacska][Ar]) return SCM(playerid, COLOR_RED, \"Nincs elég pénzed!\");
hInfo[hazacska][Owner] = pName(playerid);
GivePlayerMoney(playerid, -hInfo[hazacska][Ar]);
hInfo[hazacska][Ar] = 0;
SCM(playerid, COLOR_YELLOW, \"Ház megvéve!\");
SaveHouse(hazacska);
format(stri, 256, \"A ház tulajdonosa:\\n%s\\nNyomj ALT-ot.\", hInfo[hazacska][Owner]);
Update3DTextLabelText(haztext[hazacska], -1, stri);
}
}
if(dialogid == hazikoo2)
{
new hazacska = MelyikHaz(playerid);
if(!response) return 0;
if(listitem == 0)
{
cmd_bemegy(playerid, \"\");
}
else if(listitem == 1)
{
hInfo[hazacska][nyitva] = 1;
SCM(playerid, COLOR_GREEN, \"Ajtó kinyitva.\");
}
else if(listitem == 2)
{
hInfo[hazacska][nyitva] = 0;
SCM(playerid, COLOR_GREEN, \"Ajtó bezárva.\");
}
else if(listitem == 3)
{
GivePlayerMoney(playerid, 5000);
format(hInfo[hazacska][Owner], 24, \"%s\", \"\");
if(hInfo[hazacska][style] == 1) hInfo[hazacska][Ar] = 5000;
if(hInfo[hazacska][style] == 2) hInfo[hazacska][Ar] = 10000;
if(hInfo[hazacska][style] == 3) hInfo[hazacska][Ar] = 25000;
SCM(playerid, COLOR_YELLOW, \"Ház eladva!\");
format(stri, 256, \"A ház eladó! Ára:\\n%d$\\n Nyomj ALT-ot.\", hInfo[hazacska][Ar]);
SaveHouse(hazacska);
Update3DTextLabelText(haztext[hazacska], -1, stri);
}
}
if(dialogid == hazikoo3)
{
if(!response) return 0;
if(listitem == 0)
{
cmd_kimegy(playerid, \"\");
}
else if(listitem == 1)
{
hInfo[mhazban[playerid]][nyitva] = 1;
SCM(playerid, COLOR_GREEN, \"Ajtó kinyitva.\");
}
else if(listitem == 2)
{
hInfo[mhazban[playerid]][nyitva] = 0;
SCM(playerid, COLOR_GREEN, \"Ajtó bezárva.\");
}
}
if(dialogid == hazikoo4)
{
if(!response) return 0;
cmd_bemegy(playerid, \"\");
}
if(dialogid == hazikoo5)
{
if(!response) return 0;
cmd_kimegy(playerid, \"\");
}
return 1;
}
CreateHouse(id, Float:x, Float:y, Float:z, stylee)
{
new hFile[128];
format(hFile, 128, \"/Hazak/%d.ini\", id);
if(dini_Exists(hFile)) return printf(\"%d ID ház létezik!!\", id);
dini_Create(hFile);
dini_Set(hFile, \"Owner\", \"\");
dini_FloatSet(hFile, \"X\", x);
dini_FloatSet(hFile, \"Y\", y);
dini_FloatSet(hFile, \"Z\", z);
dini_IntSet(hFile, \"Style\", stylee);
if(stylee == 1)
{
dini_IntSet(hFile, \"Ar\", 5000);
dini_IntSet(hFile, \"Interior\", 1);
dini_FloatSet(hFile, \"kX\", 223.043991);
dini_FloatSet(hFile, \"kY\", 1289.259888);
dini_FloatSet(hFile, \"kZ\", 1082.199951);
}
if(stylee == 2)
{
dini_IntSet(hFile, \"Ar\", 10000);
dini_IntSet(hFile, \"Interior\", 2);
dini_FloatSet(hFile, \"kX\", 225.756989 );
dini_FloatSet(hFile, \"kY\", 1240.000000 );
dini_FloatSet(hFile, \"kZ\", 1082.149902 );
}
if(stylee == 3)
{
dini_IntSet(hFile, \"Ar\", 25000);
dini_IntSet(hFile, \"Interior\", 3);
dini_FloatSet(hFile, \"kX\", 235.508994 );
dini_FloatSet(hFile, \"kY\", 1189.169897 );
dini_FloatSet(hFile, \"kZ\", 1080.339966 );
}
dini_IntSet(hFile, \"Nyitva\", 0);
hInfo[id][iD] = id;
hInfo[id][X] = dini_Float(hFile, \"X\");
hInfo[id][Y] = dini_Float(hFile, \"Y\");
hInfo[id][Z] = dini_Float(hFile, \"Z\");
hInfo[id][Ar] = dini_Int(hFile, \"Ar\");
hInfo[id][kX] = dini_Float(hFile, \"kX\");
hInfo[id][kY] = dini_Float(hFile, \"kY\");
hInfo[id][kZ] = dini_Float(hFile, \"kZ\");
hInfo[id][style] = dini_Int(hFile, \"Style\");
hInfo[id][interior] = dini_Int(hFile, \"Interior\");
printf(\"%d ID ház betöltve!\", id);
format(stri, 256, \"ID:%d\\nA ház eladó! Ára:\\n%d$\\n Nyomj ALT-ot.\", id, hInfo[id][Ar]);
haztext2[id] = Create3DTextLabel(\"Nyomj ALT-ot.\", -1, hInfo[id][kX], hInfo[id][kY], hInfo[id][kZ], 30, id, 0);
haztext[id] = Create3DTextLabel(stri, -1, x, y, z, 30, 0, 0);
hazak++;
return 1;
}
LoadHouse(id)
{
new hFile[128];
format(hFile, 128, \"/Hazak/%d.ini\", id);
if(!dini_Exists(hFile)) return 0;
hInfo[id][iD] = id;
format(hInfo[id][Owner], 24, \"%s\", dini_Get(hFile, \"Owner\"));
hInfo[id][X] = dini_Float(hFile, \"X\");
hInfo[id][Y] = dini_Float(hFile, \"Y\");
hInfo[id][Z] = dini_Float(hFile, \"Z\");
hInfo[id][Ar] = dini_Int(hFile, \"Ar\");
hInfo[id][kX] = dini_Float(hFile, \"kX\");
hInfo[id][kY] = dini_Float(hFile, \"kY\");
hInfo[id][kZ] = dini_Float(hFile, \"kZ\");
hInfo[id][interior] = dini_Int(hFile, \"Interior\");
hInfo[id][style] = dini_Int(hFile, \"Style\");
hInfo[id][nyitva] = dini_Int(hFile, \"Nyitva\");
if(hInfo[id][Ar] == 0)
{
format(stri, 256, \"ID:%d\\nA ház tulajdonosa:\\n%s\\nNyomj ALT-ot.\", id, hInfo[id][Owner]);
haztext[id] = Create3DTextLabel(stri, -1, hInfo[id][X], hInfo[id][Y], hInfo[id][Z], 30, 0, 0);
}
else
{
format(stri, 256, \"ID:%d\\nA ház eladó! Ára:\\n%d$\\n Nyomj ALT-ot.\", id, hInfo[id][Ar]);
haztext[id] = Create3DTextLabel(stri, -1, hInfo[id][X], hInfo[id][Y], hInfo[id][Z], 30, 0, 0);
}
haztext2[id] = Create3DTextLabel(\"Nyomj ALT-ot.\", -1, hInfo[id][kX], hInfo[id][kY], hInfo[id][kZ], 30, id, 0);
printf(\"%d ID ház betöltve!\", id);
hazak++;
return 1;
}
SaveHouse(id)
{
new hFile[128];
format(hFile, 128, \"/Hazak/%d.ini\", id);
if(!dini_Exists(hFile)) return 0;
dini_Set(hFile, \"Owner\", hInfo[id][Owner]);
dini_FloatSet(hFile, \"X\", hInfo[id][X]);
dini_FloatSet(hFile, \"Y\", hInfo[id][Y]);
dini_FloatSet(hFile, \"Z\", hInfo[id][Z]);
dini_IntSet(hFile, \"Ar\", hInfo[id][Ar]);
dini_IntSet(hFile, \"Nyitva\", hInfo[id][nyitva]);
printf(\"%d ID ház elmentve!\", id);
return 1;
}
RemoveHouse(id)
{
new hFile[128];
format(hFile, 128, \"/Hazak/%d.ini\", id);
if(!dini_Exists(hFile)) return 0;
dini_Remove(hFile);
printf(\"%d ID ház törölve.\", id);
hInfo[id][X] = 0;
hInfo[id][Y] = 0;
hInfo[id][Z] = 0;
hInfo[id][Ar] = 0;
hInfo[id][nyitva] = 0;
hazak--;
Delete3DTextLabel(haztext[id]);
Delete3DTextLabel(haztext2[id]);
return 1;
}
stock LoadHouses()
{
for(new i=0;i<MAX_HOUSES;i++)
{
LoadHouse(i);
}
return 1;
}
stock SaveHouses()
{
for(new i=0;i<MAX_HOUSES;i++)
{
SaveHouse(i);
}
return 1;
}
stock MelyikHaz(playerid)
{
for(new i;i<MAX_HOUSES;i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, hInfo[X], hInfo[Y], hInfo[Z])) return i;
}
return -1;
}
stock pName(id)
{
new name[24];
GetPlayerName(id, name, 24);
return name;
}