entexit.pwn 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  1. #include <YSI\y_hooks>
  2. /* Jingles:
  3. DDoor / Houses / Businesses pickup model rework.
  4. Enter/exit by pressing F/Enter or using /enter or /exit.
  5. Put:
  6. CreateDynamicDoor_int(doorid); under stock CreateDynamicDoor(doorid);
  7. CreateHouse_int(houseid) under stock CreateHouse(houseid);
  8. CreateBusiness_int(businessid) under stock CreateBusiness(businessid);
  9. And it'll hopefully work like a charm! :)
  10. */
  11. #define ENTRANCE_SHORTCUT KEY_NO
  12. new iNewEnterSystem, DoorTimer[MAX_PLAYERS];
  13. /*
  14. new g_iEntranceID[MAX_PLAYERS],
  15. g_iEntranceAID[MAX_PLAYERS];
  16. */
  17. hook OnPlayerConnect(playerid) {
  18. DoorTimer[playerid] = gettime();
  19. return 1;
  20. }
  21. hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  22. if(newkeys & ENTRANCE_SHORTCUT) {
  23. if(iNewEnterSystem) EntExit_GetID_New(playerid);
  24. else EntExit_GetID(playerid);
  25. }
  26. return 1;
  27. }
  28. // New Method:
  29. stock EntExit_GetID_New(playerid) {
  30. new szAreaID[1];
  31. GetPlayerDynamicAreas(playerid, szAreaID, sizeof(szAreaID));
  32. if(szAreaID[0] != INVALID_STREAMER_ID) {
  33. new iData = Streamer_GetIntData(STREAMER_TYPE_AREA, szAreaID[0], E_STREAMER_EXTRA_ID);
  34. if(szAreaID[0] == DDoorsInfo[iData][ddAreaID]) return DDoor_Enter(playerid, iData);
  35. else if(szAreaID[0] == DDoorsInfo[iData][ddAreaID_int]) return DDoor_Exit(playerid, iData);
  36. else if(szAreaID[0] == HouseInfo[iData][hAreaID][0]) return House_Enter(playerid, iData);
  37. else if(szAreaID[0] == HouseInfo[iData][hAreaID][1]) return House_Exit(playerid, iData);
  38. else if(szAreaID[0] == Businesses[iData][bAreaID][0]) return Business_Enter(playerid, iData);
  39. else if(szAreaID[0] == Businesses[iData][bAreaID][1]) return Business_Exit(playerid, iData);
  40. else if(szAreaID[0] == GarageInfo[iData][gar_AreaID]) return Garage_Enter(playerid, iData);
  41. else if(szAreaID[0] == GarageInfo[iData][gar_AreaID_int]) return Garage_Exit(playerid, iData);
  42. else EntExit_GetID(playerid); // Old method
  43. /*
  44. switch(szData[0]) {
  45. case STREAMER_AREATYPE_DOOR: {
  46. if(szAreaID[0] == DDoorsInfo[szData[1]][ddAreaID]) DDoor_Enter(playerid, szData[1]);
  47. if(szAreaID[0] == DDoorsInfo[szData[1]][ddAreaID_int]) DDoor_Exit(playerid, szData[1]);
  48. }
  49. case STREAMER_AREATYPE_HOUSE: {
  50. if(szAreaID[0] == HouseInfo[szData[1]][hAreaID][0]) House_Enter(playerid, szData[1]);
  51. if(szAreaID[0] == HouseInfo[szData[1]][hAreaID][1]) House_Exit(playerid, szData[1]);
  52. }
  53. case STREAMER_AREATYPE_BUSINESS: {
  54. if(szAreaID[0] == Businesses[szData[1]][bAreaID][0]) Business_Enter(playerid, szData[1]);
  55. if(szAreaID[0] == Businesses[szData[1]][bAreaID][1]) Business_Exit(playerid, szData[1]);
  56. }
  57. case STREAMER_AREATYPE_GARAGE: {
  58. if(szAreaID[0] == GarageInfo[szData[1]][gar_AreaID]) Garage_Enter(playerid, szData[1]);
  59. if(szAreaID[0] == GarageInfo[szData[1]][gar_AreaID_int]) Garage_Exit(playerid, szData[1]);
  60. }
  61. }
  62. */
  63. }
  64. return 1;
  65. }
  66. //Old method
  67. EntExit_GetID(playerid) {
  68. for(new i; i < MAX_DDOORS; ++i) {
  69. if(IsPlayerInRangeOfPoint(playerid, 2.0, DDoorsInfo[i][ddExteriorX], DDoorsInfo[i][ddExteriorY], DDoorsInfo[i][ddExteriorZ]) &&
  70. PlayerInfo[playerid][pVW] == DDoorsInfo[i][ddExteriorVW] && PlayerInfo[playerid][pInt] == DDoorsInfo[i][ddExteriorInt])
  71. return DDoor_Enter(playerid, i);
  72. if(IsPlayerInRangeOfPoint(playerid, 2.0, DDoorsInfo[i][ddInteriorX], DDoorsInfo[i][ddInteriorY], DDoorsInfo[i][ddInteriorZ]) &&
  73. PlayerInfo[playerid][pVW] == DDoorsInfo[i][ddInteriorVW] && PlayerInfo[playerid][pInt] == DDoorsInfo[i][ddInteriorInt])
  74. return DDoor_Exit(playerid, i);
  75. }
  76. for(new i; i < MAX_HOUSES; ++i) {
  77. if(IsPlayerInRangeOfPoint(playerid, 2.0, HouseInfo[i][hExteriorX], HouseInfo[i][hExteriorY], HouseInfo[i][hExteriorZ]) &&
  78. PlayerInfo[playerid][pVW] == HouseInfo[i][hExtVW] && PlayerInfo[playerid][pInt] == HouseInfo[i][hExtIW]) {
  79. return House_Enter(playerid, i);
  80. }
  81. if(IsPlayerInRangeOfPoint(playerid, 2.0, HouseInfo[i][hInteriorX], HouseInfo[i][hInteriorY], HouseInfo[i][hInteriorZ]) &&
  82. PlayerInfo[playerid][pVW] == HouseInfo[i][hIntVW] && PlayerInfo[playerid][pInt] == HouseInfo[i][hIntIW]) {
  83. return House_Exit(playerid, i);
  84. }
  85. }
  86. for(new i; i < MAX_GARAGES; ++i) {
  87. if(IsPlayerInRangeOfPoint(playerid, 2.0, GarageInfo[i][gar_ExteriorX], GarageInfo[i][gar_ExteriorY], GarageInfo[i][gar_ExteriorZ]) &&
  88. PlayerInfo[playerid][pVW] == GarageInfo[i][gar_ExteriorVW]) {
  89. return Garage_Enter(playerid, i);
  90. }
  91. if(IsPlayerInRangeOfPoint(playerid, 2.0, GarageInfo[i][gar_InteriorX], GarageInfo[i][gar_InteriorY], GarageInfo[i][gar_InteriorZ]) &&
  92. PlayerInfo[playerid][pVW] == GarageInfo[i][gar_InteriorVW]) {
  93. return Garage_Exit(playerid, i);
  94. }
  95. }
  96. for(new i; i < MAX_BUSINESSES; ++i) {
  97. if(IsPlayerInRangeOfPoint(playerid, 2.0, Businesses[i][bExtPos][0], Businesses[i][bExtPos][1], Businesses[i][bExtPos][2])) {
  98. if(PlayerInfo[playerid][pLevel] < 3 && Businesses[i][bType] == 13) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "Sadly, you can't enter the Casino");
  99. return Business_Enter(playerid, i);
  100. }
  101. if(IsPlayerInRangeOfPoint(playerid, 2.0, Businesses[i][bIntPos][0], Businesses[i][bIntPos][1], Businesses[i][bIntPos][2])) {
  102. if(Businesses[i][bVW] == 0 && PlayerInfo[playerid][pVW] == BUSINESS_BASE_VW + i) return Business_Exit(playerid, i);
  103. if(PlayerInfo[playerid][pLevel] < 3 && Businesses[i][bType] == 13) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "Sadly, you can't enter the Casino");
  104. else if(PlayerInfo[playerid][pVW] == Businesses[i][bVW]) return Business_Exit(playerid, i);
  105. }
  106. }
  107. if(!IsPlayerInAnyVehicle(playerid)) {
  108. if(InsidePlane[playerid] != INVALID_VEHICLE_ID) return Vehicle_Exit(playerid);
  109. new iVehModel;
  110. for(new i = 0; i < MAX_VEHICLES; i++) {
  111. iVehModel = GetVehicleModel(i);
  112. if((iVehModel == 508 || iVehModel == 519 || iVehModel == 553 || iVehModel == 570) && IsPlayerInRangeOfVehicle(playerid, i, 5.0)) return Vehicle_Enter(playerid, i);
  113. }
  114. }
  115. return 1;
  116. }
  117. CMD:entersystem(playerid, params[]) {
  118. if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
  119. if(iNewEnterSystem) {
  120. iNewEnterSystem = 0;
  121. SendClientMessageEx(playerid, COLOR_GRAD1, "You turned off the new enter/exit system.");
  122. }
  123. else {
  124. iNewEnterSystem = 1;
  125. SendClientMessageEx(playerid, COLOR_GRAD1, "You turned on the new enter/exit system.");
  126. }
  127. return 1;
  128. }
  129. CMD:enter(playerid) {
  130. if(iNewEnterSystem) EntExit_GetID_New(playerid);
  131. else EntExit_GetID(playerid);
  132. return 1;
  133. }
  134. CMD:exit(playerid) {
  135. if(iNewEnterSystem) EntExit_GetID_New(playerid);
  136. else EntExit_GetID(playerid);
  137. return 1;
  138. }
  139. /*
  140. Process_Entrance(playerid, areaid) {
  141. if(GetPVarType(playerid, "IsInArena")) return 1;
  142. if(IsPlayerInAnyDynamicArea(playerid)) {
  143. for(new i = 0; i < MAX_DDOORS; i++) {
  144. if(DDoorsInfo[i][ddAreaID] == areaid) return DDoor_Enter(playerid, i);
  145. if(DDoorsInfo[i][ddAreaID_int] == areaid) return DDoor_Exit(playerid, i);
  146. }
  147. for(new i = 0; i < MAX_HOUSES; i++) {
  148. if(HouseInfo[i][hAreaID][0] == areaid) return House_Enter(playerid, i);
  149. if(HouseInfo[i][hAreaID][1] == areaid) return House_Exit(playerid, i);
  150. }
  151. for(new i = 0; i < MAX_GARAGES; i++) {
  152. if(GarageInfo[i][gar_AreaID] == areaid) return Garage_Enter(playerid, i);
  153. if(GarageInfo[i][gar_AreaID_int] == areaid) return Garage_Exit(playerid, i);
  154. }
  155. for(new i = 0; i < MAX_BUSINESSES; i++) {
  156. if(Businesses[i][bAreaID][0] == areaid) return Business_Enter(playerid, i);
  157. if(Businesses[i][bAreaID][1] == areaid) return Business_Exit(playerid, i);
  158. }
  159. }
  160. if(!IsPlayerInAnyVehicle(playerid)) {
  161. if(InsidePlane[playerid] != INVALID_VEHICLE_ID) return Vehicle_Exit(playerid);
  162. new vehModel;
  163. for(new i = 0; i < MAX_VEHICLES; i++) {
  164. vehModel = GetVehicleModel(i);
  165. if((vehModel == 508 || vehModel == 519 || vehModel == 553) && IsPlayerInRangeOfVehicle(playerid, i, 5.0)) return Vehicle_Enter(playerid, i);
  166. }
  167. }
  168. return 1;
  169. }*/
  170. /*
  171. public OnPlayerEnterDynamicArea(playerid, areaid) {
  172. // printf("DEBUG: %d entered area %d", playerid, areaid);
  173. new i = GetIDFromArea(areaid);
  174. // printf("DEBUG: Area %d was detected as a door area: ID: %d, VW: %d, Int: %d.", areaid, i, Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_WORLD_ID), Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_INTERIOR_ID));
  175. g_iEntranceAID[playerid] = areaid;
  176. g_iEntranceID[playerid] = i;
  177. if(i < sizeof(iVehExits)) {
  178. if(iVehExits[i] == areaid) {
  179. SetPVarInt(playerid, "VEHA_ID", i);
  180. }
  181. }
  182. if(i < MAX_VEHICLES) {
  183. if(iVehEnterAreaID[i] == areaid) {
  184. // printf("DEBUG: Area %d was detected as a vehicle area.", areaid);
  185. SetPVarInt(playerid, "VEHA_ID", i);
  186. }
  187. }
  188. return 1;
  189. }
  190. */
  191. /*
  192. public OnPlayerLeaveDynamicArea(playerid, areaid) {
  193. printf("DEBUG: %d left area %d.", playerid, areaid);
  194. DeletePVar(playerid, "VEHA_ID");
  195. ENT_DelVar(playerid);
  196. return 1;
  197. }
  198. ENT_DelVar(playerid) {
  199. g_iEntranceID[playerid] = -1;
  200. g_iEntranceAID[playerid] = -1;
  201. }
  202. */
  203. hook OnPlayerStateChange(playerid, newstate, oldstate) {
  204. if(newstate == PLAYER_STATE_PASSENGER) {
  205. new iVehID = GetPlayerVehicleID(playerid);
  206. if(iVehID == 570) Vehicle_Enter(playerid, iVehID);
  207. }
  208. }
  209. stock Vehicle_Enter(playerid, i) {
  210. if(CarryCrate[playerid] != -1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You can't take crates into this type of interior!");
  211. ClearAnimationsEx(playerid);
  212. switch(GetVehicleModel(i)) {
  213. case 508: { // Journey
  214. SetPlayerPos(playerid, 2820.2109,1527.8270,-48.9141+2500);
  215. Player_StreamPrep(playerid,2820.2109,1527.8270,-48.9141+2500, FREEZE_TIME);
  216. SetPlayerFacingAngle(playerid, 270.0);
  217. PlayerInfo[playerid][pInt] = 1;
  218. SetPlayerInterior(playerid, 1);
  219. }
  220. case 519: { // Shamal
  221. SetPlayerPos(playerid, 2.509036, 23.118730, 1199.593750);
  222. SetPlayerFacingAngle(playerid, 82.14);
  223. PlayerInfo[playerid][pInt] = 1;
  224. SetPlayerInterior(playerid, 1);
  225. }
  226. case 553: { // Nevada
  227. SetPlayerPos(playerid, 315.9396, 973.2628, 1961.5985);
  228. SetPlayerFacingAngle(playerid, 2.7);
  229. PlayerInfo[playerid][pInt] = 9;
  230. SetPlayerInterior(playerid, 9);
  231. }
  232. case 570: {
  233. Player_StreamPrep(playerid, 2022.0273, 2235.2402, 2103.9536+2500, FREEZE_TIME);
  234. SetPlayerFacingAngle(playerid, 0);
  235. SetCameraBehindPlayer(playerid);
  236. SetPlayerInterior(playerid, 15);
  237. }
  238. }
  239. SetCameraBehindPlayer(playerid);
  240. PlayerInfo[playerid][pVW] = i;
  241. SetPlayerVirtualWorld(playerid, i);
  242. InsidePlane[playerid] = i;
  243. SetPVarInt(playerid, "InsideCar", 1);
  244. return 1;
  245. }
  246. stock Vehicle_Exit(playerid) {
  247. if(!IsAPlane(InsidePlane[playerid]) && !GetPVarType(playerid, "InsideCar")) {
  248. PlayerInfo[playerid][pAGuns][GetWeaponSlot(46)] = 46;
  249. GivePlayerValidWeapon(playerid, 46);
  250. SetPlayerPos(playerid, 0.000000, 0.000000, 420.000000); // lol nick
  251. }
  252. else {
  253. new Float:X, Float:Y, Float:Z;
  254. GetVehiclePos(InsidePlane[playerid], X, Y, Z);
  255. if(!IsAPlane(PlayerInfo[playerid][pVW]) || !GetPVarInt(playerid, "air_Mode"))
  256. {
  257. SetPlayerPos(playerid, X-1.00, Y+3.00, Z);
  258. Player_StreamPrep(playerid, X-1.00, Y+3.00,Z, FREEZE_TIME);
  259. }
  260. else
  261. {
  262. SetPlayerPos(playerid, X-2.7912, Y+3.2304, Z);
  263. Player_StreamPrep(playerid, X-2.7912,Y+3.2304,Z, FREEZE_TIME);
  264. if(Z > 50.0) {
  265. PlayerInfo[playerid][pAGuns][GetWeaponSlot(46)] = 46;
  266. GivePlayerValidWeapon(playerid, 46);
  267. }
  268. }
  269. }
  270. new iTemp = Streamer_GetIntData(STREAMER_TYPE_AREA, iVehEnterAreaID[PlayerInfo[playerid][pVW]], E_STREAMER_WORLD_ID);
  271. DeletePVar(playerid, "InsideCar");
  272. PlayerInfo[playerid][pVW] = iTemp;
  273. SetPlayerVirtualWorld(playerid, iTemp);
  274. PlayerInfo[playerid][pInt] = 0;
  275. SetPlayerInterior(playerid, 0);
  276. InsidePlane[playerid] = INVALID_VEHICLE_ID;
  277. return 1;
  278. }
  279. DDoor_Enter(playerid, i)
  280. {
  281. if(GetPVarType(playerid, "StreamPrep")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now. Wait for streaming to finish.");
  282. if(gettime() < DoorTimer[playerid]) return SendClientMessageEx(playerid, COLOR_GREY, "You must wait %d seconds before being able to enter this door.", DoorTimer[playerid]-gettime());
  283. if(DDoorsInfo[i][ddVIP] > 0 && PlayerInfo[playerid][pDonateRank] < DDoorsInfo[i][ddVIP])
  284. {
  285. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, you are not a high enough VIP level.");
  286. return 1;
  287. }
  288. if(DDoorsInfo[i][ddFamed] > 0 && PlayerInfo[playerid][pFamed] < DDoorsInfo[i][ddFamed]) {
  289. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, you're not a high enough famed level.");
  290. return 1;
  291. }
  292. if(DDoorsInfo[i][ddDPC] > 0 && PlayerInfo[playerid][pDedicatedPlayer] < 2) {
  293. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, you are not a high enough Dedicated Player.");
  294. return 1;
  295. }
  296. if(DDoorsInfo[i][ddAllegiance] > 0) {
  297. if(!(0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) || arrGroupData[PlayerInfo[playerid][pMember]][g_iAllegiance] != DDoorsInfo[i][ddAllegiance]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, this door is nation restricted.");
  298. else if(PlayerInfo[playerid][pRank] < DDoorsInfo[i][ddRank]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not high enough rank to enter this door.");
  299. }
  300. if(DDoorsInfo[i][ddGroupType] > 0) {
  301. if(!(0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) || arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] != DDoorsInfo[i][ddGroupType] && arrGroupData[PlayerInfo[playerid][pMember]][g_iAllegiance] != DDoorsInfo[i][ddAllegiance]) {
  302. return SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, this door is faction restricted.");
  303. }
  304. else if(PlayerInfo[playerid][pRank] < DDoorsInfo[i][ddRank]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not high enough rank to enter this door.");
  305. }
  306. if(DDoorsInfo[i][ddFaction] != INVALID_GROUP_ID) {
  307. if(PlayerInfo[playerid][pMember] != DDoorsInfo[i][ddFaction]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, this door is faction restricted.");
  308. else if(PlayerInfo[playerid][pRank] < DDoorsInfo[i][ddRank]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not high enough rank to enter this door.");
  309. }
  310. if(DDoorsInfo[i][ddAdmin] > 0 && PlayerInfo[playerid][pAdmin] < DDoorsInfo[i][ddAdmin]) {
  311. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, you are not a high enough admin level.");
  312. return 1;
  313. }
  314. if(DDoorsInfo[i][ddWanted] > 0 && PlayerInfo[playerid][pWantedLevel] != 0) {
  315. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, this door restricts those with wanted levels.");
  316. return 1;
  317. }
  318. if(DDoorsInfo[i][ddLocked] == 1) {
  319. return SendClientMessageEx(playerid, COLOR_GRAD2, "This door is currently locked.");
  320. }
  321. PlayerInfo[playerid][pInt] = DDoorsInfo[i][ddInteriorInt];
  322. SetPlayerInterior(playerid,DDoorsInfo[i][ddInteriorInt]);
  323. PlayerInfo[playerid][pVW] = DDoorsInfo[i][ddInteriorVW];
  324. SetPlayerVirtualWorld(playerid, DDoorsInfo[i][ddInteriorVW]);
  325. if(DDoorsInfo[i][ddVehicleAble] > 0 && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
  326. new iVeh = GetPlayerVehicleID(playerid);
  327. SetVehiclePos(iVeh, DDoorsInfo[i][ddInteriorX],DDoorsInfo[i][ddInteriorY],DDoorsInfo[i][ddInteriorZ]);
  328. SetVehicleZAngle(iVeh, DDoorsInfo[i][ddInteriorA]);
  329. SetVehicleVirtualWorld(iVeh, DDoorsInfo[i][ddInteriorVW]);
  330. LinkVehicleToInterior(iVeh, DDoorsInfo[i][ddInteriorInt]);
  331. /*
  332. if(IsValidDynamicArea(iVehEnterAreaID[iVeh])) {
  333. Streamer_SetIntData(STREAMER_TYPE_AREA, iVehEnterAreaID[iVeh], E_STREAMER_WORLD_ID, iVeh);
  334. }
  335. */
  336. if(GetPVarInt(playerid, "tpForkliftTimer") > 0)
  337. {
  338. SetPVarInt(playerid, "tpJustEntered", 1);
  339. new Float: pX, Float: pY, Float: pZ;
  340. GetPlayerPos(playerid, pX, pY, pZ);
  341. SetPVarFloat(playerid, "tpForkliftX", pX);
  342. SetPVarFloat(playerid, "tpForkliftY", pY);
  343. SetPVarFloat(playerid, "tpForkliftZ", pZ);
  344. }
  345. if(DynVeh[GetPlayerVehicleID(playerid)] != -1)
  346. {
  347. new vw[1];
  348. vw[0] = GetVehicleVirtualWorld(GetPlayerVehicleID(playerid));
  349. if(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][0][gv_iAttachedObjectModel] != INVALID_OBJECT_ID)
  350. {
  351. Streamer_SetArrayData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][0][gv_iAttachedObjectID], E_STREAMER_WORLD_ID, vw[0]);
  352. }
  353. if(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][1][gv_iAttachedObjectModel] != INVALID_OBJECT_ID)
  354. {
  355. Streamer_SetArrayData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][1][gv_iAttachedObjectID], E_STREAMER_WORLD_ID, vw[0]);
  356. }
  357. }
  358. foreach(new passenger : Player)
  359. {
  360. if(passenger != playerid)
  361. {
  362. if(IsPlayerInVehicle(passenger, GetPlayerVehicleID(playerid)))
  363. {
  364. SetPlayerInterior(passenger,DDoorsInfo[i][ddInteriorInt]);
  365. PlayerInfo[passenger][pInt] = DDoorsInfo[i][ddInteriorInt];
  366. PlayerInfo[passenger][pVW] = DDoorsInfo[i][ddInteriorVW];
  367. SetPlayerVirtualWorld(passenger, DDoorsInfo[i][ddInteriorVW]);
  368. }
  369. }
  370. }
  371. }
  372. else {
  373. SetPlayerPos(playerid,DDoorsInfo[i][ddInteriorX],DDoorsInfo[i][ddInteriorY],DDoorsInfo[i][ddInteriorZ]);
  374. SetPlayerFacingAngle(playerid,DDoorsInfo[i][ddInteriorA]);
  375. SetCameraBehindPlayer(playerid);
  376. }
  377. if(DDoorsInfo[i][ddCustomInterior]) Player_StreamPrep(playerid, DDoorsInfo[i][ddInteriorX],DDoorsInfo[i][ddInteriorY],DDoorsInfo[i][ddInteriorZ], FREEZE_TIME);
  378. DoorTimer[playerid] = gettime()+2;
  379. return 1;
  380. }
  381. DDoor_Exit(playerid, i)
  382. {
  383. if(GetPVarType(playerid, "StreamPrep")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now. Wait for streaming to finish.");
  384. if(gettime() < DoorTimer[playerid]) return SendClientMessageEx(playerid, COLOR_GREY, "You must wait %d seconds before being able to exit this door.", DoorTimer[playerid]-gettime());
  385. if(DDoorsInfo[i][ddVIP] > 0 && PlayerInfo[playerid][pDonateRank] < DDoorsInfo[i][ddVIP])
  386. {
  387. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, you are not a high enough VIP level.");
  388. return 1;
  389. }
  390. if(DDoorsInfo[i][ddFamed] > 0 && PlayerInfo[playerid][pFamed] < DDoorsInfo[i][ddFamed]) {
  391. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, you're not a high enough famed level.");
  392. return 1;
  393. }
  394. if(DDoorsInfo[i][ddDPC] > 0 && PlayerInfo[playerid][pRewardHours] < 150) {
  395. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, you are not a Dedicated Player.");
  396. return 1;
  397. }
  398. if(DDoorsInfo[i][ddAllegiance] > 0) {
  399. if(!(0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) || arrGroupData[PlayerInfo[playerid][pMember]][g_iAllegiance] != DDoorsInfo[i][ddAllegiance]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, this door is nation restricted.");
  400. else if(PlayerInfo[playerid][pRank] < DDoorsInfo[i][ddRank]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not high enough rank to enter this door.");
  401. }
  402. if(DDoorsInfo[i][ddGroupType] > 0) {
  403. if(!(0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) || arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] != DDoorsInfo[i][ddGroupType] && arrGroupData[PlayerInfo[playerid][pMember]][g_iAllegiance] != DDoorsInfo[i][ddAllegiance]) {
  404. return SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, this door is faction restricted.");
  405. }
  406. else if(PlayerInfo[playerid][pRank] < DDoorsInfo[i][ddRank]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not high enough rank to enter this door.");
  407. }
  408. if(DDoorsInfo[i][ddFaction] != INVALID_GROUP_ID) {
  409. if(PlayerInfo[playerid][pMember] != DDoorsInfo[i][ddFaction]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, this door is faction restricted.");
  410. else if(PlayerInfo[playerid][pRank] < DDoorsInfo[i][ddRank]) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not high enough rank to enter this door.");
  411. }
  412. if(DDoorsInfo[i][ddAdmin] > 0 && PlayerInfo[playerid][pAdmin] < DDoorsInfo[i][ddAdmin]) {
  413. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, you are not a high enough admin level.");
  414. return 1;
  415. }
  416. if(DDoorsInfo[i][ddWanted] > 0 && PlayerInfo[playerid][pWantedLevel] != 0) {
  417. SendClientMessageEx(playerid, COLOR_GRAD2, "You can not enter, this door restricts those with wanted levels.");
  418. return 1;
  419. }
  420. if(DDoorsInfo[i][ddLocked] == 1) {
  421. return SendClientMessageEx(playerid, COLOR_GRAD2, "This door is currently locked.");
  422. }
  423. SetPlayerInterior(playerid,DDoorsInfo[i][ddExteriorInt]);
  424. PlayerInfo[playerid][pInt] = DDoorsInfo[i][ddExteriorInt];
  425. SetPlayerVirtualWorld(playerid, DDoorsInfo[i][ddExteriorVW]);
  426. PlayerInfo[playerid][pVW] = DDoorsInfo[i][ddExteriorVW];
  427. // SetPlayerToTeamColor(playerid);
  428. if(DDoorsInfo[i][ddVehicleAble] > 0 && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
  429. SetVehiclePos(GetPlayerVehicleID(playerid), DDoorsInfo[i][ddExteriorX],DDoorsInfo[i][ddExteriorY],DDoorsInfo[i][ddExteriorZ]);
  430. SetVehicleZAngle(GetPlayerVehicleID(playerid), DDoorsInfo[i][ddExteriorA]);
  431. SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), DDoorsInfo[i][ddExteriorVW]);
  432. LinkVehicleToInterior(GetPlayerVehicleID(playerid), DDoorsInfo[i][ddExteriorInt]);
  433. if(GetPVarInt(playerid, "tpForkliftTimer") > 0)
  434. {
  435. SetPVarInt(playerid, "tpJustEntered", 1);
  436. new Float: pX, Float: pY, Float: pZ;
  437. GetPlayerPos(playerid, pX, pY, pZ);
  438. SetPVarFloat(playerid, "tpForkliftX", pX);
  439. SetPVarFloat(playerid, "tpForkliftY", pY);
  440. SetPVarFloat(playerid, "tpForkliftZ", pZ);
  441. }
  442. if(DynVeh[GetPlayerVehicleID(playerid)] != -1)
  443. {
  444. new vw[1];
  445. vw[0] = GetVehicleVirtualWorld(GetPlayerVehicleID(playerid));
  446. if(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][0][gv_iAttachedObjectModel] != INVALID_OBJECT_ID)
  447. {
  448. Streamer_SetArrayData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][0][gv_iAttachedObjectID], E_STREAMER_WORLD_ID, vw[0]);
  449. }
  450. if(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][1][gv_iAttachedObjectModel] != INVALID_OBJECT_ID)
  451. {
  452. Streamer_SetArrayData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][1][gv_iAttachedObjectID], E_STREAMER_WORLD_ID, vw[0]);
  453. }
  454. }
  455. foreach(new passenger: Player)
  456. {
  457. if(passenger != playerid)
  458. {
  459. if(IsPlayerInVehicle(passenger, GetPlayerVehicleID(playerid)))
  460. {
  461. SetPlayerInterior(passenger,DDoorsInfo[i][ddExteriorInt]);
  462. PlayerInfo[passenger][pInt] = DDoorsInfo[i][ddExteriorInt];
  463. PlayerInfo[passenger][pVW] = DDoorsInfo[i][ddExteriorVW];
  464. SetPlayerVirtualWorld(passenger, DDoorsInfo[i][ddExteriorVW]);
  465. }
  466. }
  467. }
  468. }
  469. else {
  470. SetPlayerPos(playerid,DDoorsInfo[i][ddExteriorX],DDoorsInfo[i][ddExteriorY],DDoorsInfo[i][ddExteriorZ]);
  471. SetPlayerFacingAngle(playerid, DDoorsInfo[i][ddExteriorA]);
  472. SetCameraBehindPlayer(playerid);
  473. }
  474. if(DDoorsInfo[i][ddCustomExterior]) Player_StreamPrep(playerid, DDoorsInfo[i][ddExteriorX],DDoorsInfo[i][ddExteriorY],DDoorsInfo[i][ddExteriorZ], FREEZE_TIME);
  475. if(GetPVarType(playerid, "BusinessesID")) DeletePVar(playerid, "BusinessesID");
  476. DoorTimer[playerid] = gettime()+2;
  477. return 1;
  478. }
  479. House_Enter(playerid, i) {
  480. if(PlayerInfo[playerid][pPhousekey] == i || PlayerInfo[playerid][pPhousekey2] == i || HouseInfo[i][hLock] == 0 || PlayerInfo[playerid][pRenting] == i) {
  481. if(gettime() < DoorTimer[playerid]) return SendClientMessageEx(playerid, COLOR_GREY, "You must wait %d seconds before being able to enter this door.", DoorTimer[playerid]-gettime());
  482. if(GetPVarType(playerid, "StreamPrep")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now. Wait for streaming to finish.");
  483. House_VistorCheck(i);
  484. SetPlayerInterior(playerid,HouseInfo[i][hIntIW]);
  485. PlayerInfo[playerid][pInt] = HouseInfo[i][hIntIW];
  486. PlayerInfo[playerid][pVW] = HouseInfo[i][hIntVW];
  487. SetPlayerVirtualWorld(playerid,HouseInfo[i][hIntVW]);
  488. SetPlayerPos(playerid,HouseInfo[i][hInteriorX],HouseInfo[i][hInteriorY],HouseInfo[i][hInteriorZ]);
  489. SetPlayerFacingAngle(playerid,HouseInfo[i][hInteriorA]);
  490. SetCameraBehindPlayer(playerid);
  491. GameTextForPlayer(playerid, "~w~Welcome Home", 5000, 1);
  492. if(HouseInfo[i][h_iLights] == 1) TextDrawShowForPlayer(playerid, g_tHouseLights);
  493. if(HouseInfo[i][hCustomInterior] == 1) Player_StreamPrep(playerid, HouseInfo[i][hInteriorX],HouseInfo[i][hInteriorY],HouseInfo[i][hInteriorZ], FREEZE_TIME);
  494. DoorTimer[playerid] = gettime()+2;
  495. }
  496. else GameTextForPlayer(playerid, "~r~Locked", 5000, 1);
  497. return 1;
  498. }
  499. House_Exit(playerid, i) {
  500. if(GetPVarType(playerid, "StreamPrep")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now. Wait for streaming to finish.");
  501. if(gettime() < DoorTimer[playerid]) return SendClientMessageEx(playerid, COLOR_GREY, "You must wait %d seconds before being able to exit this door.", DoorTimer[playerid]-gettime());
  502. if(GetPVarType(playerid, PVAR_FURNITURE)) cmd_furniture(playerid, "");
  503. House_VistorCheck(i);
  504. SetPlayerInterior(playerid,0);
  505. PlayerInfo[playerid][pInt] = 0;
  506. SetPlayerPos(playerid,HouseInfo[i][hExteriorX],HouseInfo[i][hExteriorY],HouseInfo[i][hExteriorZ]);
  507. SetPlayerFacingAngle(playerid, HouseInfo[i][hExteriorA]);
  508. SetCameraBehindPlayer(playerid);
  509. SetPlayerVirtualWorld(playerid, HouseInfo[i][hExtVW]);
  510. PlayerInfo[playerid][pVW] = HouseInfo[i][hExtVW];
  511. PlayerInfo[playerid][pInt] = HouseInfo[i][hExtIW];
  512. SetPlayerInterior(playerid, HouseInfo[i][hExtIW]);
  513. TextDrawHideForPlayer(playerid, g_tHouseLights);
  514. if(HouseInfo[i][hCustomExterior]) Player_StreamPrep(playerid, HouseInfo[i][hExteriorX],HouseInfo[i][hExteriorY],HouseInfo[i][hExteriorZ], FREEZE_TIME);
  515. DoorTimer[playerid] = gettime()+2;
  516. return 1;
  517. }
  518. Business_Enter(playerid, i)
  519. {
  520. if(Businesses[i][bExtPos][1] == 0.0) return SendClientMessageEx(playerid, COLOR_WHITE, "You cannot enter this business.");
  521. if(Businesses[i][bStatus]) {
  522. if(GetPVarType(playerid, "StreamPrep")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now. Wait for streaming to finish.");
  523. if(gettime() < DoorTimer[playerid]) return SendClientMessageEx(playerid, COLOR_GREY, "You must wait %d seconds before being able to exit this door.", DoorTimer[playerid]-gettime());
  524. if (Businesses[i][bType] == BUSINESS_TYPE_GYM)
  525. {
  526. if (Businesses[i][bGymEntryFee] > 0 && PlayerInfo[playerid][pCash] < Businesses[i][bGymEntryFee])
  527. {
  528. GameTextForPlayer(playerid, "~r~You need more money to enter this gym", 5000, 1);
  529. return 1;
  530. }
  531. }
  532. SetPVarInt(playerid, "BusinessesID", i);
  533. if(Businesses[i][bVW] == 0) SetPlayerVirtualWorld(playerid, BUSINESS_BASE_VW + i), PlayerInfo[playerid][pVW] = BUSINESS_BASE_VW + i;
  534. else SetPlayerVirtualWorld(playerid, Businesses[i][bVW]), PlayerInfo[playerid][pVW] = Businesses[i][bVW];
  535. SetPlayerInterior(playerid,Businesses[i][bInt]);
  536. SetPlayerPos(playerid,Businesses[i][bIntPos][0],Businesses[i][bIntPos][1],Businesses[i][bIntPos][2]);
  537. SetPlayerFacingAngle(playerid, Businesses[i][bIntPos][3]);
  538. SetCameraBehindPlayer(playerid);
  539. PlayerInfo[playerid][pInt] = Businesses[i][bInt];
  540. if(Businesses[i][bCustomInterior]) Player_StreamPrep(playerid, Businesses[i][bIntPos][0], Businesses[i][bIntPos][1], Businesses[i][bIntPos][2], FREEZE_TIME);
  541. if (Businesses[i][bType] == BUSINESS_TYPE_GYM)
  542. {
  543. new string[50];
  544. format(string, sizeof(string), "You entered a gym and were charged $%i.", Businesses[i][bGymEntryFee]);
  545. SendClientMessageEx(playerid, COLOR_WHITE, string);
  546. GivePlayerCash(playerid, -Businesses[i][bGymEntryFee]);
  547. Businesses[i][bSafeBalance] += Businesses[i][bGymEntryFee];
  548. if (Businesses[i][bGymType] == 1)
  549. {
  550. SendClientMessageEx(playerid, COLOR_WHITE, "Type /beginswimming to start using the swimming pool.");
  551. SendClientMessageEx(playerid, COLOR_WHITE, "Type /joinboxing to join the boxing queue.");
  552. }
  553. else if (Businesses[i][bGymType] == 2)
  554. {
  555. SendClientMessageEx(playerid, COLOR_WHITE, "Type /beginparkour to begin the bike parkour track.");
  556. }
  557. }
  558. DoorTimer[playerid] = gettime()+2;
  559. }
  560. else GameTextForPlayer(playerid, "~r~Closed", 5000, 1);
  561. return 1;
  562. }
  563. Business_Exit(playerid, i)
  564. {
  565. if(GetPVarType(playerid, "StreamPrep")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now. Wait for streaming to finish.");
  566. if(gettime() < DoorTimer[playerid]) return SendClientMessageEx(playerid, COLOR_GREY, "You must wait %d seconds before being able to exit this door.", DoorTimer[playerid]-gettime());
  567. SetPlayerInterior(playerid, 0);
  568. SetPlayerVirtualWorld(playerid, 0);
  569. SetPlayerPos(playerid,Businesses[i][bExtPos][0],Businesses[i][bExtPos][1],Businesses[i][bExtPos][2]);
  570. SetPlayerFacingAngle(playerid, Businesses[i][bExtPos][3]);
  571. SetCameraBehindPlayer(playerid);
  572. PlayerInfo[playerid][pInt] = 0;
  573. PlayerInfo[playerid][pVW] = 0;
  574. DeletePVar(playerid, "BusinessesID");
  575. if(Businesses[i][bCustomExterior]) Player_StreamPrep(playerid, Businesses[i][bExtPos][0], Businesses[i][bExtPos][1], Businesses[i][bExtPos][2], FREEZE_TIME);
  576. DoorTimer[playerid] = gettime()+2;
  577. return 1;
  578. }
  579. Garage_Enter(playerid, i) {
  580. if(GarageInfo[i][gar_Locked] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "This garage is currently locked.");
  581. if(GetPVarType(playerid, "StreamPrep")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now. Wait for streaming to finish.");
  582. if(gettime() < DoorTimer[playerid]) return SendClientMessageEx(playerid, COLOR_GREY, "You must wait %d seconds before being able to enter this door.", DoorTimer[playerid]-gettime());
  583. PlayerInfo[playerid][pVW] = GarageInfo[i][gar_InteriorVW];
  584. SetPlayerVirtualWorld(playerid, GarageInfo[i][gar_InteriorVW]);
  585. SetPlayerInterior(playerid, 1);
  586. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  587. {
  588. SetVehiclePos(GetPlayerVehicleID(playerid), GarageInfo[i][gar_InteriorX], GarageInfo[i][gar_InteriorY], GarageInfo[i][gar_InteriorZ]);
  589. SetVehicleZAngle(GetPlayerVehicleID(playerid), GarageInfo[i][gar_InteriorA]);
  590. SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), GarageInfo[i][gar_InteriorVW]);
  591. LinkVehicleToInterior(GetPlayerVehicleID(playerid), 1);
  592. if(GetPVarInt(playerid, "tpForkliftTimer") > 0)
  593. {
  594. SetPVarInt(playerid, "tpJustEntered", 1);
  595. new Float: pX, Float: pY, Float: pZ;
  596. GetPlayerPos(playerid, pX, pY, pZ);
  597. SetPVarFloat(playerid, "tpForkliftX", pX);
  598. SetPVarFloat(playerid, "tpForkliftY", pY);
  599. SetPVarFloat(playerid, "tpForkliftZ", pZ);
  600. }
  601. if(GetPVarInt(playerid, "tpDeliverVehTimer") > 0) SetPVarInt(playerid, "tpJustEntered", 1);
  602. if(DynVeh[GetPlayerVehicleID(playerid)] != -1)
  603. {
  604. new vw[1];
  605. vw[0] = GetVehicleVirtualWorld(GetPlayerVehicleID(playerid));
  606. if(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][0][gv_iAttachedObjectModel] != INVALID_OBJECT_ID)
  607. {
  608. Streamer_SetArrayData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][0][gv_iAttachedObjectID], E_STREAMER_WORLD_ID, vw[0]);
  609. }
  610. if(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][1][gv_iAttachedObjectModel] != INVALID_OBJECT_ID)
  611. {
  612. Streamer_SetArrayData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][1][gv_iAttachedObjectID], E_STREAMER_WORLD_ID, vw[0]);
  613. }
  614. }
  615. foreach(new passenger : Player)
  616. {
  617. if(passenger != playerid)
  618. {
  619. if(IsPlayerInVehicle(passenger, GetPlayerVehicleID(playerid)))
  620. {
  621. SetPlayerInterior(passenger, 1);
  622. PlayerInfo[passenger][pInt] = 1;
  623. PlayerInfo[passenger][pVW] = GarageInfo[i][gar_InteriorVW];
  624. SetPlayerVirtualWorld(passenger, GarageInfo[i][gar_InteriorVW]);
  625. }
  626. }
  627. }
  628. }
  629. else
  630. {
  631. SetPlayerPos(playerid, GarageInfo[i][gar_InteriorX], GarageInfo[i][gar_InteriorY], GarageInfo[i][gar_InteriorZ]);
  632. SetPlayerFacingAngle(playerid, GarageInfo[i][gar_InteriorA]);
  633. SetCameraBehindPlayer(playerid);
  634. }
  635. Player_StreamPrep(playerid, GarageInfo[i][gar_InteriorX], GarageInfo[i][gar_InteriorY], GarageInfo[i][gar_InteriorZ], FREEZE_TIME);
  636. DoorTimer[playerid] = gettime()+2;
  637. return 1;
  638. }
  639. Garage_Exit(playerid, i) {
  640. if(GetPVarType(playerid, "StreamPrep")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now. Wait for streaming to finish.");
  641. if(gettime() < DoorTimer[playerid]) return SendClientMessageEx(playerid, COLOR_GREY, "You must wait %d seconds before being able to exit this door.", DoorTimer[playerid]-gettime());
  642. SetPlayerInterior(playerid, GarageInfo[i][gar_ExteriorInt]);
  643. PlayerInfo[playerid][pInt] = GarageInfo[i][gar_ExteriorInt];
  644. SetPlayerVirtualWorld(playerid, GarageInfo[i][gar_ExteriorVW]);
  645. PlayerInfo[playerid][pVW] = GarageInfo[i][gar_ExteriorVW];
  646. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  647. {
  648. SetVehiclePos(GetPlayerVehicleID(playerid), GarageInfo[i][gar_ExteriorX], GarageInfo[i][gar_ExteriorY], GarageInfo[i][gar_ExteriorZ]);
  649. SetVehicleZAngle(GetPlayerVehicleID(playerid), GarageInfo[i][gar_ExteriorA]);
  650. SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), GarageInfo[i][gar_ExteriorVW]);
  651. LinkVehicleToInterior(GetPlayerVehicleID(playerid), GarageInfo[i][gar_ExteriorInt]);
  652. if(GetPVarInt(playerid, "tpForkliftTimer") > 0)
  653. {
  654. SetPVarInt(playerid, "tpJustEntered", 1);
  655. new Float: pX, Float: pY, Float: pZ;
  656. GetPlayerPos(playerid, pX, pY, pZ);
  657. SetPVarFloat(playerid, "tpForkliftX", pX);
  658. SetPVarFloat(playerid, "tpForkliftY", pY);
  659. SetPVarFloat(playerid, "tpForkliftZ", pZ);
  660. }
  661. if(DynVeh[GetPlayerVehicleID(playerid)] != -1)
  662. {
  663. new vw[1];
  664. vw[0] = GetVehicleVirtualWorld(GetPlayerVehicleID(playerid));
  665. if(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][0][gv_iAttachedObjectModel] != INVALID_OBJECT_ID)
  666. {
  667. Streamer_SetArrayData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][0][gv_iAttachedObjectID], E_STREAMER_WORLD_ID, vw[0]);
  668. }
  669. if(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][1][gv_iAttachedObjectModel] != INVALID_OBJECT_ID)
  670. {
  671. Streamer_SetArrayData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][1][gv_iAttachedObjectID], E_STREAMER_WORLD_ID, vw[0]);
  672. }
  673. }
  674. foreach(new passenger : Player)
  675. {
  676. if(passenger != playerid)
  677. {
  678. if(IsPlayerInVehicle(passenger, GetPlayerVehicleID(playerid)))
  679. {
  680. SetPlayerInterior(passenger,GarageInfo[i][gar_ExteriorInt]);
  681. PlayerInfo[passenger][pInt] = GarageInfo[i][gar_ExteriorInt];
  682. PlayerInfo[passenger][pVW] = GarageInfo[i][gar_ExteriorVW];
  683. SetPlayerVirtualWorld(passenger, GarageInfo[i][gar_ExteriorVW]);
  684. }
  685. }
  686. }
  687. }
  688. else
  689. {
  690. SetPlayerPos(playerid, GarageInfo[i][gar_ExteriorX], GarageInfo[i][gar_ExteriorY], GarageInfo[i][gar_ExteriorZ]);
  691. SetPlayerFacingAngle(playerid, GarageInfo[i][gar_ExteriorA]);
  692. SetCameraBehindPlayer(playerid);
  693. }
  694. if(GarageInfo[i][gar_CustomExterior]) Player_StreamPrep(playerid, GarageInfo[i][gar_ExteriorX], GarageInfo[i][gar_ExteriorY], GarageInfo[i][gar_ExteriorZ], FREEZE_TIME);
  695. DoorTimer[playerid] = gettime()+2;
  696. return 1;
  697. }