Advertisement
Guest User

Updated

a guest
Feb 8th, 2013
981
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.69 KB | None | 0 0
  1. /*
  2. Dynamic Entrance System
  3. By Infinity90 - Enjoy!
  4. Note: You need to be a rcon amdin to use the commands (/doors & /doorname)
  5. */
  6. #include <a_samp>
  7. #include <zcmd>
  8. #include <sscanf2>
  9. #include <streamer>
  10.  
  11. #define MAX_DOORS 350
  12.  
  13. #define COLOR_GREEN 0x33AA33AA
  14. #define COLOR_RED 0xFF0000C8
  15. #define COLOR_YELLOW 0xFFFF00AA
  16. #define COLOR_BLUE 0x4468BBC8
  17.  
  18. enum DoorInfo
  19. {
  20. Pickup,
  21. Float:Ex,
  22. Float:Ey,
  23. Float:Ez,
  24. Float:Ix,
  25. Float:Iy,
  26. Float:Iz,
  27. Interior,
  28. Text3D:Text,
  29. dText[128],
  30. dActive,
  31. Eworld,
  32. Iworld,
  33. Eint,
  34. Iint
  35. }
  36. new dInfo[MAX_DOORS][DoorInfo];
  37.  
  38. BootDoors()
  39. {
  40. new dPosition[14][64];
  41. new filestring[256];
  42. new str[128];
  43. new File: file = fopen("doors.cfg", io_read);
  44. if (file)
  45. {
  46. new idx;
  47. while (idx < sizeof(dInfo))
  48. {
  49. fread(file, filestring);
  50. splits(filestring, dPosition, '|');
  51. strmid(dInfo[idx][dText], dPosition[0], 0, strlen(dPosition[0]), 128);
  52. dInfo[idx][Pickup] = strval(dPosition[1]);
  53. dInfo[idx][Ex] = floatstr(dPosition[2]);
  54. dInfo[idx][Ey] = floatstr(dPosition[3]);
  55. dInfo[idx][Ez] = floatstr(dPosition[4]);
  56. dInfo[idx][Ix] = floatstr(dPosition[5]);
  57. dInfo[idx][Iy] = floatstr(dPosition[6]);
  58. dInfo[idx][Iz] = floatstr(dPosition[7]);
  59. dInfo[idx][Interior] = strval(dPosition[8]);
  60. dInfo[idx][dActive] = strval(dPosition[9]);
  61. dInfo[idx][Eworld] = strval(dPosition[10]);
  62. dInfo[idx][Iworld] = strval(dPosition[11]);
  63. dInfo[idx][Eint] = strval(dPosition[12]);
  64. dInfo[idx][Iint] = strval(dPosition[13]);
  65. if(dInfo[idx][dActive] == 0) {
  66. format(str,sizeof(str),"Door ID %d\nPress C to enter.",idx);
  67. 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);
  68. dInfo[idx][Pickup] = CreateDynamicPickup(1239, 23, dInfo[idx][Ex], dInfo[idx][Ey], dInfo[idx][Ez], 0, 0, -1);
  69. } else {
  70. format(str,sizeof(str),"Door ID %d\nPress C to enter.\n%s",idx,dInfo[idx][dText]);
  71. 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);
  72. CreateDynamicPickup(dInfo[idx][Pickup], 23, dInfo[idx][Ex], dInfo[idx][Ey], dInfo[idx][Ez], 0, 0, -1);
  73. }
  74. idx++;
  75. printf("%d doors loaded!",idx);
  76. }
  77. fclose(file);
  78. }
  79. return 1;
  80. }
  81.  
  82. SaveDoors() {
  83. new FileStr[512], File: fHandle = fopen("doors.cfg", io_write);
  84. for(new id; id < MAX_DOORS; id++) {
  85. 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]);
  86. fwrite(fHandle, FileStr); }
  87. return fclose(fHandle);
  88. }
  89.  
  90. stock IsKeyJustDown(key, newkeys, oldkeys) {
  91. if((newkeys & key) && !(oldkeys & key))
  92. return 1;
  93. return 0;
  94. }
  95. public OnFilterScriptInit()
  96. {
  97. BootDoors();
  98. return 1;
  99. }
  100. public OnFilterScriptExit()
  101. {
  102. return 1;
  103. }
  104.  
  105. CMD:doorpickup(playerid,params[]) {
  106. if(IsPlayerAdmin(playerid)) {
  107. new doorid,pickup;
  108. if(sscanf(params,"dd",doorid,pickup)) return SendClientMessage(playerid,-2,"USAGE: /doorpickup [doorid] [pickup]");
  109. {
  110. DestroyDynamicPickup(dInfo[doorid][Pickup]);
  111. dInfo[doorid][Pickup] = pickup;
  112. CreateDynamicPickup(pickup, 23, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez], 0, 0, -1);
  113. SendClientMessage(playerid,COLOR_RED,"Door pickup changed!");
  114. SaveDoors();
  115. }
  116. }
  117. else
  118. {
  119. SendClientMessage(playerid,-2,"You're not a rcon admin!");
  120. }
  121. return 1;
  122. }
  123. CMD:doorname(playerid,params[]) {
  124. if(IsPlayerAdmin(playerid)) {
  125. new doorid,str[128];
  126. if(sscanf(params,"ds[128]",doorid,params)) return SendClientMessage(playerid,-2,"USAGE: /doorname [doorid] [text]");
  127. {
  128. DestroyDynamic3DTextLabel(dInfo[doorid][Text]);
  129. dInfo[doorid][dText] = format(str,sizeof(str),"Door ID %d\nPress C to enter.\n%s",doorid,params);
  130. 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);
  131. SaveDoors();
  132. }
  133. }
  134. else
  135. {
  136. SendClientMessage(playerid,-2,"You're not a rcon admin!");
  137. }
  138. return 1;
  139. }
  140. CMD:doors(playerid,params[])
  141. {
  142. if(IsPlayerAdmin(playerid)) {
  143. new option[32],doorid,Float:Pos[3],str[128];
  144. if(sscanf(params,"ds[32]",doorid,option)) {
  145. SendClientMessage(playerid, -2, " USAGE: /doors [doorid] [option] [amount]");
  146. SendClientMessage(playerid, -2, " Options: exterior interior delete");
  147. return 1;
  148. }
  149. if(doorid >= MAX_DOORS) { SendClientMessage(playerid, -2, "Invalid Door!"); return 1; }
  150. GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
  151. if(strcmp(option, "exterior", true) == 0) {
  152. if(dInfo[doorid][dActive] == 0) {
  153. SendClientMessage(playerid,-2,"You have successfully created a new door [Exterior]");
  154. dInfo[doorid][Ex] = Pos[0];
  155. dInfo[doorid][Ey] = Pos[1];
  156. dInfo[doorid][Ez] = Pos[2];
  157. dInfo[doorid][Eworld] = GetPlayerVirtualWorld(playerid);
  158. dInfo[doorid][Eint] = GetPlayerInterior(playerid);
  159. dInfo[doorid][dActive] = 1;
  160. format(str,sizeof(str),"Door ID %d\nPress C to enter.",doorid);
  161. 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);
  162. dInfo[doorid][Pickup] = CreateDynamicPickup(1239, 23, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez], 0, 0, -1);
  163. dInfo[doorid][Pickup] = 1239;
  164. } else {
  165. DestroyDynamic3DTextLabel(dInfo[doorid][Text]);
  166. DestroyDynamicPickup(dInfo[doorid][Pickup]);
  167. dInfo[doorid][Ex] = Pos[0];
  168. dInfo[doorid][Ey] = Pos[1];
  169. dInfo[doorid][Ez] = Pos[2];
  170. dInfo[doorid][Eworld] = GetPlayerVirtualWorld(playerid);
  171. dInfo[doorid][Eint] = GetPlayerInterior(playerid);
  172. format(str,sizeof(str),"Door ID %d\nPress C to enter.",doorid);
  173. 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);
  174. dInfo[doorid][Pickup] = CreateDynamicPickup(1239, 23, dInfo[doorid][Ex], dInfo[doorid][Ey], dInfo[doorid][Ez], 0, 0, -1);
  175. dInfo[doorid][Pickup] = 1239;
  176. SendClientMessage(playerid,-2,"Door edited [Exterior]"); }
  177. }
  178. else if(strcmp(option, "interior", true) == 0) {
  179. if(dInfo[doorid][dActive] == 0) {
  180. SendClientMessage(playerid,-2,"You have successfully created a new door [Interior]");
  181. dInfo[doorid][Ix] = Pos[0];
  182. dInfo[doorid][Iy] = Pos[1];
  183. dInfo[doorid][Iz] = Pos[2];
  184. dInfo[doorid][Iworld] = GetPlayerVirtualWorld(playerid);
  185. dInfo[doorid][Iint] = GetPlayerInterior(playerid);
  186. } else {
  187. dInfo[doorid][Ix] = Pos[0];
  188. dInfo[doorid][Iy] = Pos[1];
  189. dInfo[doorid][Iz] = Pos[2];
  190. dInfo[doorid][Iworld] = GetPlayerVirtualWorld(playerid);
  191. dInfo[doorid][Iint] = GetPlayerInterior(playerid);
  192. SendClientMessage(playerid,-2,"Door edited [Interior]"); }
  193. }
  194. else if(strcmp(option, "delete", true) == 0) {
  195. dInfo[doorid][Ex] = 0;
  196. dInfo[doorid][Ey] = 0;
  197. dInfo[doorid][Ez] = -10;
  198. dInfo[doorid][Ix] = 0;
  199. dInfo[doorid][Iy] = 0;
  200. dInfo[doorid][Iz] = 0;
  201. DestroyDynamic3DTextLabel(dInfo[doorid][Text]);
  202. DestroyDynamicPickup(dInfo[doorid][Pickup]);
  203. SendClientMessage(playerid,COLOR_RED,"Door deleted!");
  204. }
  205. SaveDoors();
  206. } else { SendClientMessage(playerid,-2,"You're not a rcon admin!"); }
  207. return 1;
  208. }
  209.  
  210. /*CMD:enter(playerid,params[])
  211. {
  212. for(new i = 0; i < sizeof(dInfo); i++) {
  213. if(IsPlayerInRangeOfPoint(playerid,3.0,dInfo[i][Ex],dInfo[i][Ey],dInfo[i][Ez])) {
  214. SetPlayerPos(playerid, dInfo[i][Ix],dInfo[i][Iy],dInfo[i][Iz]); SetPlayerInterior(playerid, dInfo[i][Iint]); SetPlayerVirtualWorld(playerid, dInfo[i][Iworld]); }
  215. }
  216. return 1;
  217. }
  218.  
  219. CMD:exit(playerid,params[])
  220. {
  221. for(new i = 0; i < sizeof(dInfo); i++) {
  222. if(IsPlayerInRangeOfPoint(playerid,3.0,dInfo[i][Ix],dInfo[i][Iy],dInfo[i][Iz])) {
  223. SetPlayerPos(playerid, dInfo[i][Ex],dInfo[i][Ey],dInfo[i][Ez]); SetPlayerInterior(playerid, dInfo[i][Eint]); SetPlayerVirtualWorld(playerid, dInfo[i][Eworld]); }
  224. }
  225. return 1;
  226. }*/
  227.  
  228. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  229. if(IsKeyJustDown(KEY_CROUCH, newkeys, oldkeys)) {
  230. for(new i = 0; i < sizeof(dInfo); i++) {
  231. if(IsPlayerInRangeOfPoint(playerid,3.0,dInfo[i][Ex],dInfo[i][Ey],dInfo[i][Ez])) {
  232. SetPlayerPos(playerid, dInfo[i][Ix],dInfo[i][Iy],dInfo[i][Iz]); SetPlayerInterior(playerid, dInfo[i][Iint]); SetPlayerVirtualWorld(playerid, dInfo[i][Iworld]);
  233. }
  234. else if(IsPlayerInRangeOfPoint(playerid,3.0,dInfo[i][Ix],dInfo[i][Iy],dInfo[i][Iz])) {
  235. SetPlayerPos(playerid, dInfo[i][Ex],dInfo[i][Ey],dInfo[i][Ez]); SetPlayerInterior(playerid, dInfo[i][Eint]); SetPlayerVirtualWorld(playerid, dInfo[i][Eworld]);
  236. }
  237. }
  238. }
  239. return 1;
  240. }
  241.  
  242. forward splits(const strsrc[], strdest[][], delimiter);
  243. public splits(const strsrc[], strdest[][], delimiter) {
  244. new i, li;
  245. new aNum;
  246. new len;
  247. while(i <= strlen(strsrc)){
  248. if(strsrc[i]==delimiter || i==strlen(strsrc)){
  249. len = strmid(strdest[aNum], strsrc, li, i, 128);
  250. strdest[aNum][len] = 0;
  251. li = i+1;
  252. aNum++;
  253. }
  254. i++;
  255. }
  256. return 1;
  257. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement