/* Dynamic Entrance System By Infinity90 - Enjoy! Note: You need to be a rcon amdin to use the commands (/doors & /doorname) */ #include #include #include #include #define MAX_DOORS 350 #define COLOR_GREEN 0x33AA33AA #define COLOR_RED 0xFF0000C8 #define COLOR_YELLOW 0xFFFF00AA #define COLOR_BLUE 0x4468BBC8 enum DoorInfo { Pickup, Float:Ex, Float:Ey, Float:Ez, Float:Ix, Float:Iy, Float:Iz, Interior, Text3D:Text, dText[128], dActive, Eworld, Iworld, Eint, Iint } new dInfo[MAX_DOORS][DoorInfo]; BootDoors() { new dPosition[14][64]; new filestring[256]; new str[128]; new File: file = fopen("doors.cfg", io_read); if (file) { new idx; while (idx < sizeof(dInfo)) { fread(file, filestring); splits(filestring, dPosition, '|'); strmid(dInfo[idx][dText], dPosition[0], 0, strlen(dPosition[0]), 128); dInfo[idx][Pickup] = strval(dPosition[1]); dInfo[idx][Ex] = floatstr(dPosition[2]); dInfo[idx][Ey] = floatstr(dPosition[3]); dInfo[idx][Ez] = floatstr(dPosition[4]); dInfo[idx][Ix] = floatstr(dPosition[5]); dInfo[idx][Iy] = floatstr(dPosition[6]); dInfo[idx][Iz] = floatstr(dPosition[7]); dInfo[idx][Interior] = strval(dPosition[8]); dInfo[idx][dActive] = strval(dPosition[9]); dInfo[idx][Eworld] = strval(dPosition[10]); dInfo[idx][Iworld] = strval(dPosition[11]); dInfo[idx][Eint] = strval(dPosition[12]); dInfo[idx][Iint] = strval(dPosition[13]); if(dInfo[idx][dActive] == 0) { format(str,sizeof(str),"Door ID %d\nPress C to enter.",idx); dInfo[idx][Text] = CreateDynamic3DTextLabel(str, COLOR_YELLOW, dInfo[idx][Ex], dInfo[idx][Ey], dInfo[idx][Ez],10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, dInfo[idx][Eworld], dInfo[idx][Eint], -1); dInfo[idx][Pickup] = CreateDynamicPickup(1239, 23, dInfo[idx][Ex], dInfo[idx][Ey], dInfo[idx][Ez], 0, 0, -1); } else { format(str,sizeof(str),"Door ID %d\nPress C to enter.\n%s",idx,dInfo[idx][dText]); dInfo[idx][Text] = CreateDynamic3DTextLabel(str, COLOR_YELLOW, dInfo[idx][Ex], dInfo[idx][Ey], dInfo[idx][Ez],15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, dInfo[idx][Eworld], dInfo[idx][Eint], -1); CreateDynamicPickup(dInfo[idx][Pickup], 23, dInfo[idx][Ex], dInfo[idx][Ey], dInfo[idx][Ez], 0, 0, -1); } idx++; printf("%d doors loaded!",idx); } fclose(file); } return 1; } SaveDoors() { new FileStr[512], File: fHandle = fopen("doors.cfg", io_write); for(new id; id < MAX_DOORS; id++) { format(FileStr, sizeof(FileStr), "%s|%d|%f|%f|%f|%f|%f|%f|%d|%d|%d|%d|%d|%d\r\n\n",dInfo[id][dText],dInfo[id][Pickup],dInfo[id][Ex],dInfo[id][Ey],dInfo[id][Ez],dInfo[id][Ix],dInfo[id][Iy],dInfo[id][Iz],dInfo[id][Interior],dInfo[id][dActive],dInfo[id][Eworld],dInfo[id][Iworld],dInfo[id][Eint],dInfo[id][Iint]); fwrite(fHandle, FileStr); } return fclose(fHandle); } stock IsKeyJustDown(key, newkeys, oldkeys) { if((newkeys & key) && !(oldkeys & key)) return 1; return 0; } public OnFilterScriptInit() { BootDoors(); return 1; } public OnFilterScriptExit() { return 1; } CMD:doorpickup(playerid,params[]) { if(IsPlayerAdmin(playerid)) { new doorid,pickup; if(sscanf(params,"dd",doorid,pickup)) return SendClientMessage(playerid,-2,"USAGE: /doorpickup [doorid] [pickup]"); { DestroyDynamicPickup(dInfo[doorid][Pickup]); dInfo[doorid][Pickup] = pickup; CreateDynamicPickup(pickup, 23, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez], 0, 0, -1); SendClientMessage(playerid,COLOR_RED,"Door pickup changed!"); SaveDoors(); } } else { SendClientMessage(playerid,-2,"You're not a rcon admin!"); } return 1; } CMD:doorname(playerid,params[]) { if(IsPlayerAdmin(playerid)) { new doorid,str[128]; if(sscanf(params,"ds[128]",doorid,params)) return SendClientMessage(playerid,-2,"USAGE: /doorname [doorid] [text]"); { DestroyDynamic3DTextLabel(dInfo[doorid][Text]); dInfo[doorid][dText] = format(str,sizeof(str),"Door ID %d\nPress C to enter.\n%s",doorid,params); dInfo[doorid][Text] = CreateDynamic3DTextLabel(str, COLOR_YELLOW, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez],15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, dInfo[doorid][Eworld], dInfo[doorid][Eint], -1); SaveDoors(); } } else { SendClientMessage(playerid,-2,"You're not a rcon admin!"); } return 1; } CMD:doors(playerid,params[]) { if(IsPlayerAdmin(playerid)) { new option[32],doorid,Float:Pos[3],str[128]; if(sscanf(params,"ds[32]",doorid,option)) { SendClientMessage(playerid, -2, " USAGE: /doors [doorid] [option] [amount]"); SendClientMessage(playerid, -2, " Options: exterior interior delete"); return 1; } if(doorid >= MAX_DOORS) { SendClientMessage(playerid, -2, "Invalid Door!"); return 1; } GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]); if(strcmp(option, "exterior", true) == 0) { if(dInfo[doorid][dActive] == 0) { SendClientMessage(playerid,-2,"You have successfully created a new door [Exterior]"); dInfo[doorid][Ex] = Pos[0]; dInfo[doorid][Ey] = Pos[1]; dInfo[doorid][Ez] = Pos[2]; dInfo[doorid][Eworld] = GetPlayerVirtualWorld(playerid); dInfo[doorid][Eint] = GetPlayerInterior(playerid); dInfo[doorid][dActive] = 1; format(str,sizeof(str),"Door ID %d\nPress C to enter.",doorid); dInfo[doorid][Text] = CreateDynamic3DTextLabel(str, COLOR_YELLOW, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez],10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, dInfo[doorid][Eworld], dInfo[doorid][Eint], -1); dInfo[doorid][Pickup] = CreateDynamicPickup(1239, 23, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez], 0, 0, -1); dInfo[doorid][Pickup] = 1239; } else { DestroyDynamic3DTextLabel(dInfo[doorid][Text]); DestroyDynamicPickup(dInfo[doorid][Pickup]); dInfo[doorid][Ex] = Pos[0]; dInfo[doorid][Ey] = Pos[1]; dInfo[doorid][Ez] = Pos[2]; dInfo[doorid][Eworld] = GetPlayerVirtualWorld(playerid); dInfo[doorid][Eint] = GetPlayerInterior(playerid); format(str,sizeof(str),"Door ID %d\nPress C to enter.",doorid); dInfo[doorid][Text] = CreateDynamic3DTextLabel(str, COLOR_YELLOW, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez],10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, dInfo[doorid][Eworld], dInfo[doorid][Eint], -1); dInfo[doorid][Pickup] = CreateDynamicPickup(1239, 23, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez], 0, 0, -1); dInfo[doorid][Pickup] = 1239; SendClientMessage(playerid,-2,"Door edited [Exterior]"); } } else if(strcmp(option, "interior", true) == 0) { if(dInfo[doorid][dActive] == 0) { SendClientMessage(playerid,-2,"You have successfully created a new door [Interior]"); dInfo[doorid][Ix] = Pos[0]; dInfo[doorid][Iy] = Pos[1]; dInfo[doorid][Iz] = Pos[2]; dInfo[doorid][Iworld] = GetPlayerVirtualWorld(playerid); dInfo[doorid][Iint] = GetPlayerInterior(playerid); } else { dInfo[doorid][Ix] = Pos[0]; dInfo[doorid][Iy] = Pos[1]; dInfo[doorid][Iz] = Pos[2]; dInfo[doorid][Iworld] = GetPlayerVirtualWorld(playerid); dInfo[doorid][Iint] = GetPlayerInterior(playerid); SendClientMessage(playerid,-2,"Door edited [Interior]"); } } else if(strcmp(option, "delete", true) == 0) { dInfo[doorid][Ex] = 0; dInfo[doorid][Ey] = 0; dInfo[doorid][Ez] = -10; dInfo[doorid][Ix] = 0; dInfo[doorid][Iy] = 0; dInfo[doorid][Iz] = 0; DestroyDynamic3DTextLabel(dInfo[doorid][Text]); DestroyDynamicPickup(dInfo[doorid][Pickup]); SendClientMessage(playerid,COLOR_RED,"Door deleted!"); } SaveDoors(); } else { SendClientMessage(playerid,-2,"You're not a rcon admin!"); } return 1; } /*CMD:enter(playerid,params[]) { for(new i = 0; i < sizeof(dInfo); i++) { if(IsPlayerInRangeOfPoint(playerid,3.0,dInfo[i][Ex],dInfo[i][Ey],dInfo[i][Ez])) { SetPlayerPos(playerid, dInfo[i][Ix],dInfo[i][Iy],dInfo[i][Iz]); SetPlayerInterior(playerid, dInfo[i][Iint]); SetPlayerVirtualWorld(playerid, dInfo[i][Iworld]); } } return 1; } CMD:exit(playerid,params[]) { for(new i = 0; i < sizeof(dInfo); i++) { if(IsPlayerInRangeOfPoint(playerid,3.0,dInfo[i][Ix],dInfo[i][Iy],dInfo[i][Iz])) { SetPlayerPos(playerid, dInfo[i][Ex],dInfo[i][Ey],dInfo[i][Ez]); SetPlayerInterior(playerid, dInfo[i][Eint]); SetPlayerVirtualWorld(playerid, dInfo[i][Eworld]); } } return 1; }*/ public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(IsKeyJustDown(KEY_CROUCH, newkeys, oldkeys)) { for(new i = 0; i < sizeof(dInfo); i++) { if(IsPlayerInRangeOfPoint(playerid,3.0,dInfo[i][Ex],dInfo[i][Ey],dInfo[i][Ez])) { SetPlayerPos(playerid, dInfo[i][Ix],dInfo[i][Iy],dInfo[i][Iz]); SetPlayerInterior(playerid, dInfo[i][Iint]); SetPlayerVirtualWorld(playerid, dInfo[i][Iworld]); } else if(IsPlayerInRangeOfPoint(playerid,3.0,dInfo[i][Ix],dInfo[i][Iy],dInfo[i][Iz])) { SetPlayerPos(playerid, dInfo[i][Ex],dInfo[i][Ey],dInfo[i][Ez]); SetPlayerInterior(playerid, dInfo[i][Eint]); SetPlayerVirtualWorld(playerid, dInfo[i][Eworld]); } } } return 1; } forward splits(const strsrc[], strdest[][], delimiter); public splits(const strsrc[], strdest[][], delimiter) { new i, li; new aNum; new len; while(i <= strlen(strsrc)){ if(strsrc[i]==delimiter || i==strlen(strsrc)){ len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; li = i+1; aNum++; } i++; } return 1; }