Rupert\'s entrance system (bejárat rendszer)
v1.0
Be szeretném mutatni másik rendszerem, a \"Rupert\'s entrance system\"-et. A lényege, hogy adminként ti raktok le különbözõ bejáratokat interiorokhoz. Ilyen pl. a pizzéria, vagy a fegyverbolt.
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 mappa a \"scriptfiles\" mappán belül: \'Entrances\'
A parancsok:
/makent - Létrehoz egy entrance-t. Két paraméter KELL: [iD] és [stílus]. Az ID nagyon fontos! Nézd meg az \'Entrances\" mappában, hogy létezik-e az ID, avagy sem. Több féle stílus van. Mindegyiknek más az interiorja. Megtekintésükhöz: /style.
/entorol - A közeledben lévõ bejáratot törli.
Maximum 500 bejárat lehet, de ezt át lehet állítani a scripten belül.
Letöltés:http://www.solidfiles.com/d/ae18c7b0e7/Képek:http://kepfeltoltes.hu/121215/306945414sa-mp-012_www.kepfeltoltes.hu_.png[/img]
http://kepfeltoltes.hu/121215/1049382140sa-mp-013_www.kepfeltoltes.hu_.png[/img]
http://kepfeltoltes.hu/121215/949802152sa-mp-014_www.kepfeltoltes.hu_.png[/img]
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)))
#define MAX_ENTRANCES 500
#pragma unused ret_memcpy
// ENTRANCE ENUM
enum Entrance
{
ID,
style,
Float:X,
Float:Y,
Float:Z,
Float:kX,
Float:kY,
Float:kZ,
interior
}
new Text3D:entext[MAX_ENTRANCES];
new Text3D:entext2[MAX_ENTRANCES];
new stri[256];
new eInfo[MAX_ENTRANCES][Entrance];
new entek;
new entben[MAX_PLAYERS];
new mentben[MAX_PLAYERS];
new Float:kx[MAX_PLAYERS];
new Float:ky[MAX_PLAYERS];
new Float:kz[MAX_PLAYERS];
CMD:styles(playerid, params[])
{
SCM(playerid, COLOR_GREY, \"1 - bolt\");
SCM(playerid, COLOR_GREY, \"2 - kocsma\");
SCM(playerid, COLOR_GREY, \"3 - fegyóbolt\");
SCM(playerid, COLOR_GREY, \"4 - edzõterem\");
SCM(playerid, COLOR_GREY, \"5 - rendõrség\");
SCM(playerid, COLOR_GREY, \"6 - kórház\");
SCM(playerid, COLOR_GREY, \"7. benzinkút\");
SCM(playerid, COLOR_GREY, \"8.- gyorskajálda\");
SCM(playerid, COLOR_GREY, \"9. - bank\");
SCM(playerid, COLOR_GREY, \"10. szervíz telep\");
SCM(playerid, COLOR_GREY, \"11 - mûszaki bolt\");
SCM(playerid, COLOR_GREY, \"12 - ruhabolt\");
return 1;
}
CMD:entorol(playerid, params[])
{
new hazacska;
hazacska = MelyikEntrance(playerid);
if(!IsPlayerAdmin(playerid)) return SCM(playerid, COLOR_RED, \"Nem vagy admin.\");
if(hazacska == -1) return SCM(playerid, COLOR_GREY, \"Nincs entrance a közelben.\");
RemoveEntrance(hazacska);
SCM(playerid, COLOR_WHITE, \"Entrance törölve.\");
return 1;
}
CMD:makent(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: /makent [iD!!!] [style] <- /styles\");
CreateEntrance(id, px, py, pz, ar);
SCM(playerid, COLOR_WHITE, \"Entrance létrehozva.\");
return 1;
}
CMD:bemegye(playerid, params[])
{
new hazacska = MelyikEntrance(playerid);
if(hazacska)
{
SetPlayerInterior(playerid, eInfo[hazacska][interior]);
SetPlayerPos(playerid, eInfo[hazacska][kX], eInfo[hazacska][kY], eInfo[hazacska][kZ]);
SetPlayerVirtualWorld(playerid, eInfo[hazacska][iD]);
entben[playerid] = 1;
kx[playerid] = eInfo[hazacska][X];
ky[playerid] = eInfo[hazacska][Y];
kz[playerid] = eInfo[hazacska][Z];
mentben[playerid] = eInfo[hazacska][iD];
}
return 1;
}
public OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\" Rupert\'s entrance system loaded.\");
print(\"--------------------------------------\\n\");
entek = 0;
LoadEntrances();
DisableInteriorEnterExits();
printf(\"Összes entrance: %d!\", entek);
print(\"---------------------------------------------------\");
print(\"---------------------------------------------------\");
return 1;
}
public OnFilterScriptExit()
{
entek = 0;
SaveEntrances();
return 1;
}
public OnPlayerConnect(playerid)
{
entben[playerid] = 0;
mentben[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 entrance rendszer!\");
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
entben[playerid] = 0;
mentben[playerid] = 0;
kx[playerid] = 0;
ky[playerid] = 0;
kz[playerid] = 0;
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(pressed(KEY_SECONDARY_ATTACK) && entben[playerid] == 1)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, eInfo[mentben[playerid]][kX], eInfo[mentben[playerid]][kY], eInfo[mentben[playerid]][kZ]))
{
SetPlayerPos(playerid, kx[playerid], ky[playerid], kz[playerid]);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
entben[playerid] = 0;
}
}
new entecske = MelyikEntrance(playerid);
if(pressed(KEY_SECONDARY_ATTACK) && entecske)
{
cmd_bemegye(playerid, \"\");
}
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
stock CreateEntrance(id, Float:x, Float:y, Float:z, stylee)
{
new eFile[128];
format(eFile, 128, \"/Entrances/%d.ini\", id);
if(dini_Exists(eFile)) return printf(\"%d ID ház létezik!!\", id);
dini_Create(eFile);
dini_FloatSet(eFile, \"X\", x);
dini_FloatSet(eFile, \"Y\", y);
dini_FloatSet(eFile, \"Z\", z);
dini_IntSet(eFile, \"Style\", stylee);
eInfo[id][iD] = id;
eInfo[id][X] = dini_Float(eFile, \"X\");
eInfo[id][Y] = dini_Float(eFile, \"Y\");
eInfo[id][Z] = dini_Float(eFile, \"Z\");
eInfo[id][style] = dini_Int(eFile, \"Style\");
if(stylee == 1)
{
eInfo[id][kX] = -25.884498;
eInfo[id][kY] = -185.868988;
eInfo[id][kZ] = 1003.546875;
eInfo[id][interior] = 17;
format(stri, 256, \"Üzlet\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 2)
{
eInfo[id][kX] = 501.980987;
eInfo[id][kY] = -70.052810;
eInfo[id][kZ] = 998.757812;
eInfo[id][interior] = 11;
format(stri, 256, \"Bár\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 3)
{
eInfo[id][kX] = 296.919982;
eInfo[id][kY] = -108.071998;
eInfo[id][kZ] = 1001.515625;
eInfo[id][interior] = 6;
format(stri, 256, \"Fegyverüzlet\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 4)
{
eInfo[id][kX] = 772.111999;
eInfo[id][kY] = -3.898649;
eInfo[id][kZ] = 1000.728820;
eInfo[id][interior] = 5;
format(stri, 256, \"Edzõterem\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 5)
{
eInfo[id][kX] = 246.783996;
eInfo[id][kY] = 63.900199;
eInfo[id][kZ] = 1003.640625;
eInfo[id][interior] = 6;
format(stri, 256, \"Rendõrség\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 7)
{
eInfo[id][kX] = 663.836242;
eInfo[id][kY] = -575.605407;
eInfo[id][kZ] = 16.343263;
eInfo[id][interior] = 0;
format(stri, 256, \"Benzinkút\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee ==
{
eInfo[id][kX] = 372.2733;
eInfo[id][kY] = -133.5175;
eInfo[id][kZ] = 1001.4922;
eInfo[id][interior] = 5;
format(stri, 256, \"Gyorskajálda\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 9)
{
eInfo[id][kX] = 2305.2834;
eInfo[id][kY] = -15.9918;
eInfo[id][kZ] = 26.7422;
eInfo[id][interior] = 0;
format(stri, 256, \"Bank\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 10)
{
eInfo[id][kX] = 2570.8916;
eInfo[id][kY] = -1302.0453;
eInfo[id][kZ] = 1044.1250;
eInfo[id][interior] = 2;
format(stri, 256, \"Autó mûhely\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 11)
{
eInfo[id][kX] = -2240.468505;
eInfo[id][kY] = 137.060440;
eInfo[id][kZ] = 1035.414062;
eInfo[id][interior] = 6;
format(stri, 256, \"Mûszaki bolt\\nBelépéshez nyomj ENTER-t.\");
}
if(stylee == 12)
{
eInfo[id][kX] = 207.737991;
eInfo[id][kY] = -109.019996;
eInfo[id][kZ] = 1005.132812;
eInfo[id][interior] = 15;
format(stri, 256, \"Ruhabolt\\nBelépéshez nyomj ENTER-t.\");
}
dini_IntSet(eFile, \"Interior\", eInfo[id][interior]);
dini_FloatSet(eFile, \"kX\", eInfo[id][kX]);
dini_FloatSet(eFile, \"kY\", eInfo[id][kY]);
dini_FloatSet(eFile, \"kZ\", eInfo[id][kZ]);
entext2[id] = Create3DTextLabel(\"Nyomj ENTER-t.\", -1, eInfo[id][kX], eInfo[id][kY], eInfo[id][kZ], 30, id, 0);
entext[id] = Create3DTextLabel(stri, -1, x, y, z, 30, 0, 0);
entek++;
return 1;
}
stock LoadEntrance(id)
{
new eFile[128];
format(eFile, 128, \"/Entrances/%d.ini\", id);
if(!dini_Exists(eFile)) return 0;
eInfo[id][iD] = id;
eInfo[id][X] = dini_Float(eFile, \"X\");
eInfo[id][Y] = dini_Float(eFile, \"Y\");
eInfo[id][Z] = dini_Float(eFile, \"Z\");
eInfo[id][kX] = dini_Float(eFile, \"kX\");
eInfo[id][kY] = dini_Float(eFile, \"kY\");
eInfo[id][kZ] = dini_Float(eFile, \"kZ\");
eInfo[id][interior] = dini_Int(eFile, \"Interior\");
eInfo[id][style] = dini_Int(eFile, \"Style\");
if(eInfo[id][style] == 1) format(stri, 256, \"Üzlet\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 2) format(stri, 256, \"Kocsma\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 3) format(stri, 256, \"Fegyverüzlet\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 4) format(stri, 256, \"Edzõterem\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 5) format(stri, 256, \"Rendõrség\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 7) format(stri, 256, \"Benzinkút\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == format(stri, 256, \"Gyorskajálda\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 9) format(stri, 256, \"Bank\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 10) format(stri, 256, \"Autó mûhely\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 11) format(stri, 256, \"Mûszaki bolt\\nBelépéshez nyomj ENTER-t.\");
if(eInfo[id][style] == 12) format(stri, 256, \"Ruhabolt\\nBelépéshez nyomj ENTER-t.\");
entext[id] = Create3DTextLabel(stri, -1, eInfo[id][X], eInfo[id][Y], eInfo[id][Z], 30, 0, 0);
entext2[id] = Create3DTextLabel(\"Nyomj ENTER-t.\", -1, eInfo[id][kX], eInfo[id][kY], eInfo[id][kZ], 30, id, 0);
printf(\"%d ID entrance betöltve!\", id);
entek++;
return 1;
}
stock SaveEntrance(id)
{
new eFile[128];
format(eFile, 128, \"/Entrances/%d.ini\", id);
if(!dini_Exists(eFile)) return 0;
dini_FloatSet(eFile, \"X\", eInfo[id][X]);
dini_FloatSet(eFile, \"Y\", eInfo[id][Y]);
dini_FloatSet(eFile, \"Z\", eInfo[id][Z]);
dini_FloatSet(eFile, \"kX\", eInfo[id][kX]);
dini_FloatSet(eFile, \"kY\", eInfo[id][kY]);
dini_FloatSet(eFile, \"kZ\", eInfo[id][kZ]);
dini_IntSet(eFile, \"Interior\", eInfo[id][interior]);
dini_IntSet(eFile, \"Style\", eInfo[id][style]);
printf(\"%d ID entrance elmentve!\", id);
return 1;
}
stock RemoveEntrance(id)
{
new eFile[128];
format(eFile, 128, \"/Entrances/%d.ini\", id);
if(!dini_Exists(eFile)) return 0;
dini_Remove(eFile);
printf(\"%d ID entrance törölve.\", id);
eInfo[id][X] = 0;
eInfo[id][Y] = 0;
eInfo[id][Z] = 0;
entek--;
Delete3DTextLabel(entext[id]);
Delete3DTextLabel(entext2[id]);
return 1;
}
stock LoadEntrances()
{
for(new i=0;i<MAX_ENTRANCES;i++)
{
LoadEntrance(i);
}
return 1;
}
stock SaveEntrances()
{
for(new i=0;i<MAX_ENTRANCES;i++)
{
SaveEntrance(i);
}
return 1;
}
stock MelyikEntrance(playerid)
{
for(new i;i<MAX_ENTRANCES;i++)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, eInfo[X], eInfo[Y], eInfo[Z])) return i;
}
return -1;
}
stock pName(id)
{
new name[24];
GetPlayerName(id, name, 24);
return name;
}