Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define FILTERSCRIPT
- #include <a_samp>
- #include <SII>
- #include <zcmd>
- #include <sscanf2>
- #include <streamer>
- #define PRESSED(%0) \
- (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
- #define COLOR_YELLOW 0xFFFF00AA
- #define COLOR_WHITE 0xFFFFFFFF
- #define COLOR_GREY 0xB4B5B7FF
- #define MAX_DOORS 500
- enum dInfo
- {
- dName[128],
- dPickup,
- dPickupModel,
- Float: dEnterX,
- Float: dEnterY,
- Float: dEnterZ,
- Float: dExitX,
- Float: dExitY,
- Float: dExitZ,
- Text3D: dLabel,
- dInt,
- dExitVW,
- dExitInt,
- dEnterVW,
- dEnterInt
- }
- new DoorInfo[MAX_DOORS][dInfo];
- new DoorIDTaken[MAX_DOORS];
- stock LoadDoors()
- {
- new dStr[128];
- new file[128];
- for(new idx=1; idx<MAX_DOORS; idx++)
- {
- format(file, sizeof(file), "Doors/%d.ini", idx);
- if(fexist(file) && INI_Open(file))
- {
- DoorInfo[idx][dPickupModel] = INI_ReadInt("PickupModel");
- DoorInfo[idx][dEnterX] = INI_ReadFloat("EnterX");
- DoorInfo[idx][dEnterY] = INI_ReadFloat("EnterY");
- DoorInfo[idx][dEnterZ] = INI_ReadFloat("EnterZ");
- DoorInfo[idx][dExitX] = INI_ReadFloat("ExitX");
- DoorInfo[idx][dExitY] = INI_ReadFloat("ExitY");
- DoorInfo[idx][dExitZ] = INI_ReadFloat("ExitZ");
- DoorInfo[idx][dInt] = INI_ReadInt("Int");
- DoorInfo[idx][dExitVW] = INI_ReadInt("ExitVW");
- DoorInfo[idx][dExitInt] = INI_ReadInt("ExitInt");
- DoorInfo[idx][dEnterVW] = INI_ReadInt("EnterVW");
- DoorInfo[idx][dEnterInt] = INI_ReadInt("EnterInt");
- INI_ReadString(DoorInfo[idx][dName],"Name", 128);
- format(dStr, sizeof(dStr), "[%s]\nID: %d\nPress C to enter.",DoorInfo[idx][dName], idx);
- DoorInfo[idx][dLabel] = CreateDynamic3DTextLabel(dStr, COLOR_YELLOW, DoorInfo[idx][dEnterX], DoorInfo[idx][dEnterY], DoorInfo[idx][dEnterZ], 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
- DoorInfo[idx][dPickup] = CreateDynamicPickup(DoorInfo[idx][dPickupModel], 23, DoorInfo[idx][dEnterX], DoorInfo[idx][dEnterY], DoorInfo[idx][dEnterZ], 0, 0, -1, 70.0);
- DoorIDTaken[idx] = 1;
- INI_Close();
- }
- }
- return 1;
- }
- SaveDoors()
- {
- new file[128];
- for(new i= 1; i < MAX_DOORS; i++)
- {
- if(DoorIDTaken[i] == 0) continue;
- format(file, sizeof(file), "Doors/%d.ini", i);
- if(INI_Open(file))
- {
- INI_WriteInt("PickupModel",DoorInfo[i][dPickupModel]);
- INI_WriteFloat("EnterX",DoorInfo[i][dEnterX]);
- INI_WriteFloat("EnterY",DoorInfo[i][dEnterY]);
- INI_WriteFloat("EnterZ",DoorInfo[i][dEnterZ]);
- INI_WriteFloat("ExitX",DoorInfo[i][dExitX]);
- INI_WriteFloat("ExitY",DoorInfo[i][dExitY]);
- INI_WriteFloat("ExitZ",DoorInfo[i][dExitZ]);
- INI_WriteInt("Int",DoorInfo[i][dInt]);
- INI_WriteInt("ExitVW",DoorInfo[i][dExitVW]);
- INI_WriteInt("ExitInt",DoorInfo[i][dExitInt]);
- INI_WriteInt("EnterVW",DoorInfo[i][dEnterVW]);
- INI_WriteInt("EnterInt",DoorInfo[i][dEnterInt]);
- INI_WriteString("Name", DoorInfo[i][dName]);
- INI_Save();
- INI_Close();
- }
- }
- return 1;
- }
- stock GetAvailableID()
- {
- for(new i = 1; i<MAX_DOORS; i++)
- {
- if(DoorIDTaken[i] == 0) return i;
- }
- return -1;
- }
- stock IsValidPickupModel(modelid) // Credits to creator
- {
- static modeldat[] =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,
- -515899393, -134217729, -1, -1, 33554431, -1, -1, -1, -14337, -1, -33,
- 127, 0, 0, 0, 0, 0, -8388608, -1, -1, -1, -16385, -1, -1, -1, -1, -1,
- -1, -1, -33, -1, -771751937, -1, -9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 33554431, -25, -1, -1, -1, -1, -1, -1,
- -1073676289, -2147483648, 34079999, 2113536, -4825600, -5, -1, -3145729,
- -1, -16777217, -63, -1, -1, -1, -1, -201326593, -1, -1, -1, -1, -1,
- -257, -1, 1073741823, -133122, -1, -1, -65, -1, -1, -1, -1, -1, -1,
- -2146435073, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1073741823, -64, -1,
- -1, -1, -1, -2635777, 134086663, 0, -64, -1, -1, -1, -1, -1, -1, -1,
- -536870927, -131069, -1, -1, -1, -1, -1, -1, -1, -1, -16384, -1,
- -33554433, -1, -1, -1, -1, -1, -1610612737, 524285, -128, -1,
- 2080309247, -1, -1, -1114113, -1, -1, -1, 66977343, -524288, -1, -1, -1,
- -1, -2031617, -1, 114687, -256, -1, -4097, -1, -4097, -1, -1,
- 1010827263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32768, -1, -1, -1, -1, -1,
- 2147483647, -33554434, -1, -1, -49153, -1148191169, 2147483647,
- -100781080, -262145, -57, 134217727, -8388608, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1048577, -1, -449, -1017, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1835009, -2049, -1, -1, -1, -1, -1, -1,
- -8193, -1, -536870913, -1, -1, -1, -1, -1, -87041, -1, -1, -1, -1, -1,
- -1, -209860, -1023, -8388609, -2096897, -1, -1048577, -1, -1, -1, -1,
- -1, -1, -897, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1610612737,
- -3073, -28673, -1, -1, -1, -1537, -1, -1, -13, -1, -1, -1, -1, -1985,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1056964609, -1, -1, -1,
- -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -236716037, -1, -1, -1, -1, -1, -1, -1, -536870913, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -2097153, -2109441, -1, 201326591, -4194304, -1, -1,
- -241, -1, -1, -1, -1, -1, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -32768, -1, -1, -1, -2, -671096835, -1, -8388609, -66323585, -13,
- -1793, -32257, -247809, -1, -1, -513, 16252911, 0, 0, 0, -131072,
- 33554383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8356095, 0, 0, 0, 0, 0,
- 0, -256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -268435449, -1, -1, -2049, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 92274627, -65536, -2097153, -268435457, 591191935, 1, 0, -16777216, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 127
- };
- if ((modelid >= 0) && ((modelid / 32) < sizeof (modeldat)) && (modeldat[modelid / 32] & (1 << (modelid % 32))))
- {
- return 1;
- }
- // EDITED FOR 0.3c, 0.3d & 0.3e OBJECTS
- switch (modelid)
- {
- case 0, 331, 333..339, 341, 318..321, 325, 326, 342..344, 346..353, 355..370, 372,
- 18632..18645, 18646..18658, 18659..18667, 18668..19299, 19301..19515, 18631:
- {
- return 1;
- }
- case 19516..19521: // 0.3x RC2-4 objects
- {
- return 1;
- }
- }
- return 0;
- }
- #if defined FILTERSCRIPT
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Dynamic Door System by FeRRum");
- print("--------------------------------------\n");
- LoadDoors();
- return 1;
- }
- public OnFilterScriptExit()
- {
- SaveDoors();
- return 1;
- }
- #else
- main()
- {
- print("\n----------------------------------");
- print(" Dynamic Door System by FeRRum");
- print("----------------------------------\n");
- }
- #endif
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if (strcmp("/mycommand", cmdtext, true, 10) == 0)
- {
- // Do something here
- return 1;
- }
- return 0;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(PRESSED(KEY_CROUCH))
- {
- for(new i = 0; i < sizeof(DoorInfo); i++)
- {
- if(IsPlayerInRangeOfPoint(playerid,3.0,DoorInfo[i][dEnterX],DoorInfo[i][dEnterY],DoorInfo[i][dEnterZ]))
- {
- if(DoorInfo[i][dExitX] == 0) return SendClientMessage(playerid, COLOR_GREY, "No interior set up!");
- SetPlayerPos(playerid, DoorInfo[i][dExitX],DoorInfo[i][dExitY],DoorInfo[i][dExitZ]);
- SetPlayerInterior(playerid, DoorInfo[i][dExitInt]);
- SetPlayerVirtualWorld(playerid, DoorInfo[i][dExitVW]);
- }
- else if(IsPlayerInRangeOfPoint(playerid,3.0,DoorInfo[i][dExitX],DoorInfo[i][dExitY],DoorInfo[i][dExitZ]))
- {
- SetPlayerPos(playerid, DoorInfo[i][dEnterX],DoorInfo[i][dEnterY],DoorInfo[i][dEnterZ]);
- SetPlayerInterior(playerid, DoorInfo[i][dEnterInt]);
- SetPlayerVirtualWorld(playerid, DoorInfo[i][dEnterVW]);
- }
- }
- }
- return 1;
- }
- CMD:createdoor(playerid, params[])
- {
- if(IsPlayerAdmin(playerid))
- {
- new doorname[128], Float: dPos[3], string[254];
- if(sscanf(params, "s[128]", doorname)) return SendClientMessage(playerid, COLOR_WHITE, "Usage: /createdoor [name]");
- new id = GetAvailableID();
- GetPlayerPos(playerid, dPos[0], dPos[1], dPos[2]);
- DoorIDTaken[id] = 1;
- DoorInfo[id][dEnterX] = dPos[0];
- DoorInfo[id][dEnterY] = dPos[1];
- DoorInfo[id][dEnterZ] = dPos[2];
- DoorInfo[id][dExitX] = 0.0;
- DoorInfo[id][dExitY] = 0.0;
- DoorInfo[id][dExitZ] = 0.0;
- DoorInfo[id][dInt] = 0;
- DoorInfo[id][dExitVW] = 0;
- DoorInfo[id][dExitInt] = 0;
- DoorInfo[id][dEnterVW] = GetPlayerVirtualWorld(playerid);
- DoorInfo[id][dEnterInt] = GetPlayerInterior(playerid);
- DoorInfo[id][dPickupModel] = 19130;
- DoorInfo[id][dName] = doorname;
- format(string, sizeof(string), "[%s]\nID: %d\nPress C to enter.",DoorInfo[id][dName], id);
- DoorInfo[id][dLabel] = CreateDynamic3DTextLabel(string, COLOR_YELLOW, DoorInfo[id][dEnterX], DoorInfo[id][dEnterY], DoorInfo[id][dEnterZ], 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 50.0);
- DoorInfo[id][dPickup] = CreateDynamicPickup(19130, 23, dPos[0], dPos[1], dPos[2], 0, 0, -1, 50.0);
- SaveDoors();
- return 1;
- }
- else
- {
- SendClientMessage(playerid,COLOR_GREY,"You're not a rcon admin!");
- }
- return 1;
- }
- CMD:editdoor(playerid, params[])
- {
- if(IsPlayerAdmin(playerid))
- {
- new string[128], option[32], id, amount, Float: Pos[3];
- if(sscanf(params, "ds[32]D(10)", id, option, amount))
- {
- SendClientMessage(playerid, COLOR_WHITE, "USAGE: /editdoor [doorid] [name] [amount]");
- SendClientMessage(playerid, COLOR_WHITE, "Available names: exterior, interior, pickup, delete");
- return 1;
- }
- if (id < 1 || id > MAX_DOORS)
- {
- format(string, sizeof(string), "ID cannot be below 1 or above %d.", MAX_DOORS);
- SendClientMessage(playerid, COLOR_GREY, string);
- return 1;
- }
- if(!DoorIDTaken[id])
- {
- SendClientMessage(playerid, COLOR_GREY, "ID not taken.");
- return 1;
- }
- if(strcmp(option, "exterior", true) == 0)
- {
- new dname[128];
- GetPlayerPos(playerid, Pos[0],Pos[1],Pos[2]);
- DoorInfo[id][dEnterX] = Pos[0];
- DoorInfo[id][dEnterY] = Pos[1];
- DoorInfo[id][dEnterZ] = Pos[2];
- DoorInfo[id][dEnterVW] = GetPlayerVirtualWorld(playerid);
- DoorInfo[id][dEnterInt] = GetPlayerInterior(playerid);
- DestroyDynamicPickup(DoorInfo[id][dPickup]);
- DestroyDynamic3DTextLabel(DoorInfo[id][dLabel]);
- format(dname, sizeof(dname), "[%s]\nID: %d\nPress C to enter.",DoorInfo[id][dName], id);
- DoorInfo[id][dLabel] = CreateDynamic3DTextLabel(dname, COLOR_YELLOW, DoorInfo[id][dEnterX], DoorInfo[id][dEnterY], DoorInfo[id][dEnterZ], 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 50.0);
- DoorInfo[id][dPickup] = CreateDynamicPickup(DoorInfo[id][dPickupModel], 23, Pos[0], Pos[1], Pos[2], 0, 0, -1, 50.0);
- SaveDoors();
- }
- else if(strcmp(option, "interior", true) == 0)
- {
- GetPlayerPos(playerid, Pos[0],Pos[1],Pos[2]);
- DoorInfo[id][dExitX] = Pos[0];
- DoorInfo[id][dExitY] = Pos[1];
- DoorInfo[id][dExitZ] = Pos[2];
- DoorInfo[id][dExitVW] = GetPlayerVirtualWorld(playerid) + 2000;
- DoorInfo[id][dExitInt] = GetPlayerInterior(playerid);
- SaveDoors();
- }
- else if(strcmp(option, "pickup", true) == 0)
- {
- DestroyDynamicPickup(DoorInfo[id][dPickup]);
- if(!IsValidPickupModel(amount)) return 1;
- DoorInfo[id][dPickupModel] = amount;
- DoorInfo[id][dPickup] = CreateDynamicPickup(amount, 23, DoorInfo[id][dEnterX], DoorInfo[id][dEnterY], DoorInfo[id][dEnterZ], 0, 0, -1, 50.0);
- SaveDoors();
- }
- else if(strcmp(option, "delete", true) == 0)
- {
- new file[128];
- DoorIDTaken[id] = 0;
- DoorInfo[id][dEnterX] = 0.0;
- DoorInfo[id][dEnterY] = 0.0;
- DoorInfo[id][dEnterZ] = 0.0;
- DoorInfo[id][dExitX] = 0.0;
- DoorInfo[id][dExitY] = 0.0;
- DoorInfo[id][dExitZ] = 0.0;
- DoorInfo[id][dExitVW] = 0;
- DoorInfo[id][dExitInt] = 0;
- DoorInfo[id][dEnterVW] = 0;
- DoorInfo[id][dEnterInt] = 0;
- DoorInfo[id][dPickupModel] = 0;
- DestroyDynamic3DTextLabel(DoorInfo[id][dLabel]);
- DestroyDynamicPickup(DoorInfo[id][dPickup]);
- SendClientMessage(playerid, COLOR_WHITE, "Door System: Door Deleted!");
- SaveDoors();
- format(file, sizeof(file), "Doors/%d.ini", id);
- if(fexist(file)) fremove(file);
- }
- }
- else
- {
- SendClientMessage(playerid,COLOR_GREY,"You're not a rcon admin!");
- }
- return 1;
- }
- CMD:doorname(playerid, params[])
- {
- new string[128], id, doorname[128];
- if(IsPlayerAdmin(playerid))
- {
- if(sscanf(params, "ds[128]", id, doorname)) return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /doorname [doorid] [name]");
- if (id < 1 || id > MAX_DOORS)
- {
- format(string, sizeof(string), "ID cannot be below 1 or above %d.", MAX_DOORS);
- SendClientMessage(playerid, COLOR_GREY, string);
- return 1;
- }
- if(!DoorIDTaken[id])
- {
- SendClientMessage(playerid, COLOR_GREY, "ID not taken.");
- return 1;
- }
- DoorInfo[id][dName] = doorname;
- DestroyDynamic3DTextLabel(DoorInfo[id][dLabel]);
- format(string, sizeof(string), "[%s]\nID: %d\nPress C to enter.",DoorInfo[id][dName], id);
- DoorInfo[id][dLabel] = CreateDynamic3DTextLabel(string, COLOR_YELLOW, DoorInfo[id][dEnterX], DoorInfo[id][dEnterY], DoorInfo[id][dEnterZ], 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 50.0);
- SaveDoors();
- }
- else
- {
- SendClientMessage(playerid,COLOR_GREY,"You're not a rcon admin!");
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement