Guest User

Untitled

a guest
Jul 23rd, 2011
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.72 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. forward Timer();
  4. forward SetPlayerPosWithObjects(playerid,Float:x,Float:y,Float:z);
  5.  
  6. enum object_info
  7. {
  8. modelid,
  9. Float:ox,
  10. Float:oy,
  11. Float:oz,
  12. Float:orx,
  13. Float:ory,
  14. Float:orz,
  15. Float:viewdist
  16. }
  17.  
  18. new Objects[][object_info] = {
  19. // {modelid,x,y,z,rotx,roty,rotz,viewdistance}
  20. // todos os parâmetros são os mesmos que criar o objeto, exceto que há um parâmetro viewdistance adicionais. Esta é a distância
  21. // um jogador deve ser o de ver o objeto
  22. {983, 2301.2490, 1403.4020, 42.5040, 0.0000, 0.0000, -90.0000, 200.0},
  23. {983, 2307.6940, 1403.3830, 42.5040, 0.0000, 0.0000, -90.0000, 200.0},
  24. {983, 2314.0680, 1403.3830, 42.5040, 0.0000, 0.0000, -90.0000, 200.0},
  25. {9833, 2297.6200, 1505.8890, 38.6240, 0.0000, 0.0000, 0.0000, 200.0},
  26. {9833, 2297.3420, 1509.4380, 38.6240, 0.0000, 0.0000, 0.0000, 200.0},
  27. {9833, 2296.9950, 1512.2400, 38.6240, 0.0000, 0.0000, 0.0000, 200.0},
  28. {9833, 2297.3700, 1514.7610, 38.6240, 0.0000, 0.0000, 0.0000, 200.0},
  29. {9833, 2296.5410, 1521.8440, 38.6240, 0.0000, 0.0000, 0.0000, 200.0},
  30. {9833, 2297.2150, 1517.2890, 38.6240, 0.0000, 0.0000, 0.0000, 200.0},
  31. {3749, 2327.2800, 1401.5610, 47.6790, 0.0000, 0.0000, 0.0000, 200.0},
  32. {983, 2353.4780, 1403.5850, 42.5040, 0.0000, 0.0000, -90.0000, 200.0},
  33. {983, 2347.0640, 1403.5560, 42.5040, 0.0000, 0.0000, -90.0000, 200.0},
  34. {983, 2340.5620, 1403.5500, 42.5040, 0.0000, 0.0000, -90.0000, 200.0},
  35. {979, 2312.0750, 1403.6850, 36.2560, 0.0000, 0.0000, -180.0000, 200.0},
  36. {979, 2303.0090, 1403.6270, 36.2560, 0.0000, 0.0000, -180.0000, 200.0},
  37. {979, 2301.7500, 1403.5850, 36.2560, 0.0000, 0.0000, -180.0000, 200.0},
  38. {978, 2312.9030, 1502.9900, 29.8710, 0.0000, 0.0000, 0.0000, 200.0},
  39. {978, 2303.5280, 1502.9740, 29.8640, 0.0000, 0.0000, 0.0000, 200.0},
  40. {979, 2301.8120, 1404.3150, 23.4710, 0.0000, 0.0000, 180.4820, 200.0},
  41. {979, 2311.1880, 1404.4080, 23.4710, 0.0000, 0.0000, 180.4820, 200.0},
  42. {979, 2302.4910, 1502.9590, 17.0640, 0.0000, 0.0000, 0.0000, 200.0},
  43. {979, 2311.8910, 1502.9420, 17.0640, 0.0000, 0.0000, 0.0000, 200.0},
  44. {981, 2328.6000, 1470.2590, 10.7720, 0.0000, 0.0000, -90.0000, 200.0},
  45. {981, 2328.4470, 1486.7860, 10.7720, 0.0000, 0.0000, -90.0000, 200.0},
  46. {981, 2328.3700, 1439.5680, 10.7970, 0.0000, 0.0000, -90.0000, 200.0},
  47. {981, 2328.3720, 1418.5490, 10.7720, 0.0000, 0.0000, -90.0000, 200.0},
  48. {981, 2336.1080, 1485.4780, 10.7720, 0.0000, 0.0000, -271.3410, 200.0},
  49. {981, 2336.7400, 1475.0010, 11.0660, 0.0000, -0.8590, -271.3410, 200.0},
  50. {981, 2336.3230, 1451.7810, 10.7720, 0.0000, 0.0000, 90.0000, 200.0},
  51. {981, 2336.2260, 1422.6340, 10.7720, 0.0000, 0.0000, 90.0000, 200.0},
  52. {1320, 2337.3890, 1408.1880, 11.3050, 0.0000, 0.0000, 90.0000, 200.0},
  53. {1238, 2338.3560, 1393.5400, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  54. {1238, 2339.2170, 1394.8230, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  55. {1238, 2340.2350, 1395.9910, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  56. {1238, 2341.3310, 1397.4430, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  57. {1238, 2342.4850, 1398.7390, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  58. {1238, 2343.5840, 1400.1670, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  59. {1238, 2344.8590, 1400.2660, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  60. {1238, 2345.7610, 1400.2170, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  61. {1238, 2346.9850, 1400.2910, 10.1380, 0.0000, 0.0000, 0.0000, 200.0},
  62. {1262, 2332.7750, 1403.1300, 42.5800, 0.0000, 0.0000, -168.7500, 200.0},
  63. {1262, 2327.4030, 1403.0850, 42.5800, 0.0000, 0.0000, -168.7500, 200.0},
  64. {1262, 2321.6540, 1403.0850, 42.5800, 0.0000, 0.0000, -172.1880, 200.0},
  65. {978, 2333.3010, 1393.3990, 10.6610, 0.0000, 0.0000, 0.0000, 200.0},
  66. {978, 2333.2250, 1405.7080, 10.6610, 0.0000, 0.0000, -157.5000, 200.0},
  67. {1362, 2344.3580, 1396.6800, 10.4190, 0.0000, 0.0000, 0.0000, 200.0},
  68. {2038, 2349.3500, 1393.7640, 14.4070, 0.0000, 0.0000, 0.0000, 200.0},
  69. {3461, 2344.3550, 1396.8270, 9.3430, 0.0000, 0.0000, 0.0000, 200.0},
  70. {3374, 2295.3620, 1518.0070, 30.5170, 0.0000, 0.0000, 0.0000, 200.0},
  71. {3374, 2298.6320, 1517.9690, 30.5170, 0.0000, 0.0000, 0.0000, 200.0},
  72. {3374, 2302.2140, 1517.9730, 30.5170, 0.0000, 0.0000, 0.0000, 200.0},
  73. {3374, 2306.2250, 1517.9280, 30.5170, 0.0000, 0.0000, 0.0000, 200.0},
  74. {3374, 2308.9630, 1517.8620, 30.5170, 0.0000, 0.0000, 0.0000, 200.0},
  75. {3374, 2311.8060, 1517.8910, 30.5170, 0.0000, 0.0000, 0.0000, 200.0},
  76. {3374, 2315.7860, 1517.8830, 30.5170, 0.0000, 0.0000, 0.0000, 200.0},
  77. {3374, 2319.4320, 1517.8920, 30.5170, 0.0000, 0.0000, 0.0000, 200.0},
  78. {3374, 2295.6660, 1389.1080, 36.9160, 0.0000, 0.0000, 90.0000, 200.0},
  79. {3374, 2298.9690, 1389.1740, 36.9160, 0.0000, 0.0000, 90.0000, 200.0},
  80. {3374, 2301.7500, 1389.2970, 36.9160, 0.0000, 0.0000, 90.0000, 200.0},
  81. {3374, 2305.7710, 1389.3480, 36.9160, 0.0000, 0.0000, 90.0000, 200.0},
  82. {3374, 2309.3240, 1389.4220, 36.9160, 0.0000, 0.0000, 90.0000, 200.0},
  83. {3374, 2313.3370, 1389.4110, 36.9160, 0.0000, 0.0000, 90.0000, 200.0},
  84. {3374, 2316.6250, 1389.4910, 36.9930, 0.0000, 0.0000, 90.0000, 200.0},
  85. {3374, 2318.8170, 1389.3210, 36.9100, 0.0000, 0.0000, 90.0000, 200.0},
  86. {3374, 2295.5440, 1388.7880, 24.1190, 0.0000, 0.0000, 90.0000, 200.0},
  87. {3374, 2299.4860, 1388.9370, 24.1190, 0.0000, 0.0000, 90.0000, 200.0},
  88. {3374, 2303.3370, 1389.2110, 24.1190, 0.0000, 0.0000, 90.0000, 200.0},
  89. {3374, 2307.3560, 1389.2610, 24.1190, 0.0000, 0.0000, 90.0000, 200.0},
  90. {3374, 2310.4860, 1389.1870, 24.1190, 0.0000, 0.0000, 90.0000, 200.0},
  91. {3374, 2312.7640, 1389.4170, 24.1240, 0.0000, 0.0000, 90.0000, 200.0},
  92. };
  93.  
  94. enum player_info
  95. {
  96. objid[sizeof(Objects)],
  97. bool:view[sizeof(Objects)]
  98. }
  99. new Player[MAX_PLAYERS][player_info];
  100.  
  101. //------------------------------------------------------------------------------
  102.  
  103. bool:IsInReach(Float:x,Float:y,Float:z,Float:x2,Float:y2,Float:z2,Float:dist)
  104. {
  105. x = (x > x2) ? x - x2 : x2 - x;
  106. if(x > dist) return false;
  107. y = (y > y2) ? y - y2 : y2 - y;
  108. if(y > dist) return false;
  109. z = (z > z2) ? z - z2 : z2 - z;
  110. if(z > dist) return false;
  111. return true;
  112. }
  113.  
  114. //------------------------------------------------------------------------------
  115.  
  116. new timer;
  117.  
  118. public OnFilterScriptInit()
  119. {
  120. print("---\nLoaded xObjects\n---");
  121. timer = SetTimer("Timer",500,1);
  122. return 1;
  123. }
  124.  
  125. public OnFilterScriptExit()
  126. {
  127. for(new i = 0; i < MAX_PLAYERS; i++)
  128. {
  129. for(new o = 0; o < sizeof(Objects); o++)
  130. {
  131. if(Player[i][view][o])
  132. {
  133. Player[i][view][o] = false;
  134. DestroyPlayerObject(i,Player[i][objid][o]);
  135. }
  136. }
  137. }
  138.  
  139. KillTimer(timer);
  140. }
  141.  
  142. //------------------------------------------------------------------------------
  143.  
  144. public OnPlayerConnect(playerid)
  145. {
  146. for(new i = 0; i < sizeof(Objects); i++) Player[playerid][view][i] = false;
  147. }
  148.  
  149. public OnPlayerDisconnect(playerid)
  150. {
  151. for(new i = 0; i < sizeof(Objects); i++)
  152. {
  153. if(Player[playerid][view][i])
  154. {
  155. Player[playerid][view][i] = false;
  156. DestroyPlayerObject(playerid,Player[playerid][objid][i]);
  157. }
  158. }
  159. }
  160.  
  161. //------------------------------------------------------------------------------
  162.  
  163. public Timer()
  164. {
  165. for(new i = 0; i < MAX_PLAYERS; i++)
  166. if(IsPlayerConnected(i))
  167. PlayerObjectUpdate(i);
  168. }
  169.  
  170. PlayerObjectUpdate(playerid)
  171. {
  172. new Float:pos[3];
  173. GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
  174. for(new i = 0; i < sizeof(Objects); i++)
  175. {
  176. if(!Player[playerid][view][i])
  177. {
  178. if(IsInReach(pos[0],pos[1],pos[2],Objects[i][ox],Objects[i][oy],Objects[i][oz],Objects[i][viewdist]))
  179. {
  180. Player[playerid][view][i] = true;
  181. Player[playerid][objid][i] = CreatePlayerObject(playerid,Objects[i][modelid],Objects[i][ox],Objects[i][oy],Objects[i][oz],Objects[i][orx],Objects[i][ory],Objects[i][orz]);
  182. }
  183. } else if(!IsInReach(pos[0],pos[1],pos[2],Objects[i][ox],Objects[i][oy],Objects[i][oz],Objects[i][viewdist]))
  184. {
  185. Player[playerid][view][i] = false;
  186. DestroyPlayerObject(playerid,Player[playerid][objid][i]);
  187. }
  188. }
  189. }
  190.  
  191. public SetPlayerPosWithObjects(playerid,Float:x,Float:y,Float:z)
  192. {
  193. for(new i = 0; i < sizeof(Objects); i++)
  194. {
  195. if(!Player[playerid][view][i])
  196. {
  197. if(IsInReach(x,y,z,Objects[i][ox],Objects[i][oy],Objects[i][oz],Objects[i][viewdist]))
  198. {
  199. Player[playerid][view][i] = true;
  200. Player[playerid][objid][i] = CreatePlayerObject(playerid,Objects[i][modelid],Objects[i][ox],Objects[i][oy],Objects[i][oz],Objects[i][orx],Objects[i][ory],Objects[i][orz]);
  201. }
  202. } else if(!IsInReach(x,y,z,Objects[i][ox],Objects[i][oy],Objects[i][oz],Objects[i][viewdist]))
  203. {
  204. Player[playerid][view][i] = false;
  205. DestroyPlayerObject(playerid,Player[playerid][objid][i]);
  206. }
  207. }
  208. SetPlayerPos(playerid,Float:x,Float:y,Float:z);
  209. }
  210.  
  211. public OnPlayerSpawn(playerid)
  212. PlayerObjectUpdate(playerid);
Advertisement
Add Comment
Please, Sign In to add comment