goodidea82 Posted August 21, 2018 Share Posted August 21, 2018 (edited) On 8/20/2018 at 8:10 PM, HeicoDE said: Thank you very much, that's a great tool! My missing dependencies were MSVCP140D.dll, VCRuntime140D.dll & ucrtbased.dll, which are debug libraries of Visual Studio, so I fixed my issue by installing VS 2015 (I wanted to do that next anyway, lol). @goodidea82 We should compile the grgx.asi in release mode for SAxVCxLC, otherwise most users will not have functional garages, because most users have not installed VS. We could provide the debug version in an extra folder for... debugging ofc Good investigation! I will add the release version instead of the debug version once the saving problem is also solved. Please see the the link above 19.08.2018 where I have posted a zip with several variants. It contains 2 or 3 variants compiled as release version. Let's not add intermediate version of the grgx binarires to SAxVCxLC, because GIT stores the whole history. In otherwords, if someone does a checkout via git, he will download all those unnecessary intermediate binary grgx versions. This is not a problem with text files, because GIT stores only the delta/difference on text files, but binary files are stored as they are without compression. If we do this with binary files, the size of the GIT repository will grow fast and unnecessarily. I wrote a PM to Link to take a look at the log files. The thing is that (despite the missing hooks in the save system) the onLoad and onSave functions actually get called. I invested some work into this, but I may not have the time to work on it until it's finished. So anybody is welcome to help/continue. @HeicoDE: I have added your notice about grgx + SilentPath to the Troubleshooting items in the Readme of SAxVCxLC Edited August 21, 2018 by goodidea82 Link to comment Share on other sites More sharing options...
HeicoDE Posted August 22, 2018 Share Posted August 22, 2018 23 hours ago, goodidea82 said: I have added your notice about grgx + SilentPath to the Troubleshooting items in the Readme of SAxVCxLC Nice, thanks! Link to comment Share on other sites More sharing options...
goodidea82 Posted August 24, 2018 Share Posted August 24, 2018 (edited) More progress on the debugging. Link gave me the hint that it is possible to use a regular debugger. Maybe the Savesystem hooks can be further improved, but this not the problem at the moment, because the function onLoad and onSave get called. I have found out that the problem has to do with the garage coordinates. Either a) they are not defined correctly in the IPL file (in SAxVCxLC) or b) grgx has a wrong computation. When a vehicle is placed in a garage, then the following function is called (part of this is for the log-output so you can compare with the log-output further below): Spoiler void CCustomGarage::StoreAndRemoveCarsForThisGarage(CStoredCar*, signed int) { if(this->size == 0) return; this->ClearStoredCars(); size_t nStored = 0; CPools::VehiclePool->for_each([this, &nStored](CVehicle* pVehicle) { const RwV3D vehicleCoords = GetCoords(&pVehicle->__parent.__parent); const bool pointInGarage = this->IsPointWithinGarage(vehicleCoords); CDebugLog::Trace("\tGarage=%s. Car (%4.2f, %4.2f, %4.2f) Left=%4.2f, Right=%4.2f, Front=%4.2f, Back=%4.2f, Top=%4.2f, pointInGarage=%d", this->Name, vehicleCoords.x, vehicleCoords.y, vehicleCoords.z, this->Left, this->Right, this->Front, this->Back, this->TopZ, pointInGarage); if( pointInGarage ) { //Here follows the code to add the vehicle into the garage, but this is never called The function iterates over all vehicles (VehiclePool) and checks for every vehicle if it is in the garage. The result is stored in pointInGarage. The problem is that pointInGarage (computed by this->IsPointWithinGarage(vehicleCoords)) always evaluates to false as you can see in the log-output below. Spoiler Garage=man_sgr. Car (7990.59, -8664.71, 5.88) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7807.65, -8641.75, 5.83) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7801.36, -8687.27, 5.84) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Top=11.38, pointInGarage=0 IS INSIDE Garage=man_sgr. Car (7848.73, -8784.66, 7.62) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7977.23, -8733.25, 6.21) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Top=11.38, pointInGarage=0 The garage definition is: Parsing grge line: 7896.8 -8789.68 8.375 7887.93 -8789.71 7896.73 -8800.03 11.375 0 -1 man_sgr 2 3 3 # Vercetti Estate Save Garage Is GRGX: true CGarageBase constructed with size: 2 = 2 Added GRGX. Name: man_sgr However, in the log-output you can see the string IS INSIDE which was output by the following if-condition that I have built-in to check if the vehicle is in the garage: Spoiler void CCustomGarage::StoreAndRemoveCarsForThisGarage(CStoredCar*, signed int) { ... CPools::VehiclePool->for_each([this, &nStored](CVehicle* pVehicle) { const RwV3D vehicleCoords = GetCoords(&pVehicle->__parent.__parent); const bool pointInGarage = this->IsPointWithinGarage(vehicleCoords); CDebugLog::Trace("\tGarage=%s. Car (%4.2f, %4.2f, %4.2f) Left=%4.2f, Right=%4.2f, Front=%4.2f, Back=%4.2f, Top=%4.2f, pointInGarage=%d", this->Name, vehicleCoords.x, vehicleCoords.y, vehicleCoords.z, this->Left, this->Right, this->Front, this->Back, this->TopZ, pointInGarage); if (this->Left <= vehicleCoords.x && vehicleCoords.x <= this->Right && this->Front <= vehicleCoords.y && vehicleCoords.y <= this->Back && vehicleCoords.z <= this->TopZ ) { CDebugLog::Trace("\tIS INSIDE"); } if( pointInGarage ) { This means that either: 1. the built-in function this->IsPointWithinGarage(vehicleCoords) is not working. (I doubt that.) 2. grgx has confused the meaning of the variables this->Left, this->Right, this->Front, this->Back, this->TopZ, 3. The definition of the garage in the IPL file is not correct (wrong meaning/interpretation of the paramters) Here is the part documenting the IPL garage definition. Spoiler The task to create a GRGX by IPL is extremely simple, it's almost like creating a normal garage but with additional parameters. You should put the garage creation line inside a grge section (like a normal garage) and then we're done. The difference from the regular garage line and the grgx line is that grgx have more params, let's compare:Regular garage line:x1, y1, z1, x2, y2, x3, y3, z3, flags, type, nameGRGX garage line:x1, y1, z1, x2, y2, x3, y3, z3, flags, unused, name, num_cars, grgx_type, door_style As you can see, we just added some additional params, in that way we detect if it is a regular garage or a grgx garage being readed from the IPL! Right, now you should ask the meaning of those params, let me explain. Counter Identifier Type Description 1,2,3 Position 1 (Pos1) float[3] The garage rear bottom right coordinates 4,5 Position 2 (Depth) float[2] The garage front coordinates 6,7,8 Position 3 (Pos2) float[3] The garage rear upper left coordinates 9 Garage flags integer The garage flags (see below) 10 Unused integer This value is unused. it was the regular garage type. Please use -1 here! 11 Name char[8] A string which is used to manipulate the behaviour of garages through a script. The maximum number of characters for the garage name is 7!!! 12 Num Cars integer The maximum number of cars that this garage can store. Use -1 for unlimited number of vehicles. This value is ignored if the garage can't store vehicles 13 GRGX Type integer The garage type. GRGX type is different from regular garage types, (see here) 14 Door Style Flags integer Door style flags. (see below) Edited August 24, 2018 by goodidea82 PlatinumSerb and ural 2 Link to comment Share on other sites More sharing options...
Link2012 Posted August 24, 2018 Author Share Posted August 24, 2018 Very good! That's some really nice progress. Link to comment Share on other sites More sharing options...
goodidea82 Posted August 26, 2018 Share Posted August 26, 2018 (edited) I think the following must be checked 1. understand what Left, Right, Front, Back means, (and if the definition of CGarageData is correct) Spoiler #pragma pack(push, 1) struct CGarageData // sizeof=0x50 { RwV3D Position; RwV2D DirectionA; RwV2D DirectionB; float TopZ; float Width; float Depth; float Left; float Right; float Front; float Back; float DoorPosition; unsigned int TimeToOpen; CVehicle *pTargetCar; char Name[8]; unsigned char Type; char DoorState; char Flags; char OriginalType; }; 3. How Left, Right, Front, Back should be correctly computed from x1, y1, z1, x2, y2, x3, y3, z3 or in other words if your computation is correct: Spoiler CCustomGarage* CGarages::AddOneX(float x1, float y1, float z1, float frontX, float frontY, float x2, float y2, float z2, char type, int a10, char *name, char flags, int car_count, eGrgxGarageType gtype, unsigned int doorstyle, bool created_by_script) { float top, back, front, width, left, right, depth; float kx = frontX + x2 - x1; float ky = frontY + y2 - y1; top = z2; // find left { left = x1 >= frontX? frontX : x1; if(left >= x2) left = x2; if(left >= kx) left = kx; } // find right { right = x1 <= frontX? frontX : x1; if(right <= x2) right = x2; if(right <= kx) right = kx; } // find front { front = y1 >= frontY? frontY : y1; if(front >= y2) front = y2; if(front >= ky) front = ky; } // find back { back = y1 <= frontY? frontY : y1; if(back <= y2) back = y2; if(back <= ky) back = ky; } { if(gtype == IS_SCRIPT_GARAGE || created_by_script) car_count = -1; else if(car_count && !CCustomGarage::DoesThisGarageCanStoreVehicles(gtype)) car_count = 0; CCustomGarage* g = new CCustomGarage(car_count); CGarages::Garages().push_back(g); g->CreatedByScript = created_by_script; strncpy(g->Name, name, 8); g->Name[7] = 0; g->gType = gtype; g->OriginalType = (int8_t)(gtype); g->Position.x = x1; g->Position.y = y1; g->Position.z = z1; g->DirectionA.x = frontX - x1; g->DirectionA.y = frontY - y1; g->DirectionB.x = x2 - x1; g->DirectionB.y = y2 - y1; g->Left = left; g->Right = right; g->Back = back; g->Front = front; g->TopZ = top; width = sqrt( (g->DirectionA.y*g->DirectionA.y) + (g->DirectionA.x*g->DirectionA.x) ); depth = sqrt( (g->DirectionB.y*g->DirectionB.y) + (g->DirectionB.x*g->DirectionB.x) ); const float height = top - z1; g->Width = width; g->Depth = depth; g->DirectionA.x /= width; g->DirectionA.y /= width; g->DirectionB.x /= depth; g->DirectionB.y /= depth; float dotProduct = g->DirectionA.x * g->DirectionB.x + g->DirectionA.y * g->DirectionB.y; g->Flags = 0; //if(flags & FLAG_IPL_DOOR_GOES_UP_AND_ROTATE) g->Flags |= FLAG_GARAGE_DOOR_OPENS_UP_AND_ROTATE; //if(flags & FLAG_IPL_DOOR_GOES_IN) g->Flags |= FLAG_GARAGE_DOOR_GOES_IN; if(flags & FLAG_IPL_CAMERA_FOLLOWS_PLAYER) g->Flags |= FLAG_GARAGE_CAMERA_FOLLOWS_PLAYER; g->OriginalFlags = g->Flags; g->gStyle = doorstyle; g->OriginalStyle = doorstyle; CDebugLog::Trace( "\tAdded GRGX.\n" "\t\tName: %s\n" "\t\tCan store vehicle: %s\n" "\t\tIs Parking Garage: %s\n" "\t\tIs GARAGE_DONT_SAVE: %s\n" "\t\tWidth=%4.1f, Depth=%4.1f, Height=%4.1f, dotProduct(dirA, dirB)=%4.2f", g->Name, g->DoesThisGarageCanStoreVehicles() ? "true" : "false", g->IsParkingGarage() ? "true" : "false", (g->gStyle & GARAGE_DONT_SAVE)? "true" : "false", g->Width, g->Depth, height, dotProduct); return g; } 3. if and how this->IsPointWithinGarage(vehicleCoords) uses Left, Right, Front, Back from CGarageData. Spoiler IsPointWithinGarage is defined as char IsPointWithinGarage(RwV3D vec) { return CGarage__IsPointWithinGarage(this, 0, vec); } which calls the in build-in function DeclareFunc(0x448740, char (__fastcall *CGarage__IsPointWithinGarage)(CGarage *self, int dummy, RwV3D vec)); I have updated the code on GitHub to produce more information on the garages. Take a look: The additional Width, Depth, and Height on custom garages look reasonable. I also output the dotProduct between the directon vectors, and they are close to 0 (=orthogonal). Spoiler Log started Compiled date and time Aug 26 2018 @ 12:58:23 with compiler _MSC_VER = 1900 UNICODE encoding is NOT used. _CPPRTTI _DEBUG _DLL _MSC_BUILD 1 _MSVC_LANG 201402 _NATIVE_WCHAR_T_DEFINED _WCHAR_T_DEFINED _WIN32 CStreaming::aInfoForModel=3BD0020 ARRAY_ModelInfo (*(DWORD**)(0x40122D))=1A4C910 ARRAY_ModelInfo (*(DWORD**)(0x4C5538+3))=1A4C910 CGarages::Patch() with is HOODLUM: true Parsing grge line: 1640.37 -1520.07 12.5118 1647.6 -1520.07 1640.37 -1512.45 18.1245 5 1 mul_lan Is GRGX: false Parsing grge line: 1523.92 -1653.23 4.72837 1556.92 -1653.23 1523.92 -1633.23 12.2284 5 33 imp_la Is GRGX: false Parsing grge line: 1873.97 -2096.55 12.487 1880.88 -2096.55 1873.97 -2087.62 15.7681 5 1 duf_LAS Is GRGX: false Parsing grge line: 1843.91 -1858.8 12.3645 1857.1 -1858.8 1843.91 -1853.79 16.1118 1 2 lasbomb Is GRGX: false Parsing grge line: 1809.46 -2150.67 12.4283 1809.46 -2142.75 1798.82 -2150.67 16.4347 1 1 modgLAS Is GRGX: false Parsing grge line: 1694.8 -2088.7 12.3636 1703 -2088.7 1694.8 -2077.48 16.2236 5 31 carlas1 Is GRGX: false Parsing grge line: 2738.4 -2012.55 12.5759 2743.78 -2012.55 2738.4 -2004.41 17.8299 1 1 burg_lk Is GRGX: false Parsing grge line: 2640.78 -2049.99 12.543 2648.96 -2049.99 2640.78 -2039.55 16.206 1 1 modlast Is GRGX: false Parsing grge line: 2056.6 -1835.9 12.5443 2071.3 -1835.9 2056.6 -1826.97 18.5443 1 5 sprLAe Is GRGX: false Parsing grge line: 2502.31 -1699.36 12.4323 2508.61 -1699.36 2502.31 -1691.01 16.5666 1 16 cjsafe Is GRGX: false Parsing grge line: 1038.24 -1025.67 31.1027 1068.35 -1025.67 1038.24 -995.044 39.1027 1 1 bodLAwN Is GRGX: false Parsing grge line: 1021.81 -1018.71 30.9081 1021.81 -1029.53 1027.93 -1018.71 36.9081 1 5 sprLAe Is GRGX: false Parsing grge line: 491.103 -1747.55 9.45516 492.717 -1735.77 481.972 -1746.3 17.565 1 5 spLAw2 Is GRGX: false Parsing grge line: 319.326 -1768.93 3.35686 325.625 -1768.93 319.326 -1759.57 7.49114 1 17 beacsv Is GRGX: false Parsing grge line: 1352.58 -636.657 108.135 1359.02 -634.418 1349.56 -627.962 113.135 1 32 CEsafe1 Is GRGX: false Parsing grge line: -2728.53 212.295 3.45112 -2716.36 212.295 -2728.53 222.669 8.68705 1 5 mds1SFS Is GRGX: false Parsing grge line: -2735.46 60.7331 3.07005 -2725.82 60.7331 -2735.46 72.8828 7.92155 1 1 tbon Is GRGX: false Parsing grge line: -2454.02 -131.556 25.0886 -2442.38 -131.556 -2454.02 -113.935 29.8006 1 42 svgsfs1 Is GRGX: false Parsing grge line: -1941.04 251.714 33.4274 -1941.04 239.541 -1930.66 251.714 38.6634 1 1 mdsSFSe Is GRGX: false Parsing grge line: -1908.93 292.353 40.0413 -1908.93 277.989 -1900.11 292.353 45.539 1 5 sprsfse Is GRGX: false Parsing grge line: -2112.48 -21.214 34.303 -2102.48 -21.214 -2112.48 -11.214 40.303 1 1 brgSFSE Is GRGX: false Parsing grge line: -2043.1 118.609 27.821 -2021.91 118.609 -2043.1 129.609 32.821 1 41 LCKSfse Is GRGX: false Parsing grge line: -2057.35 150.803 27.8286 -2038.91 150.803 -2057.35 182.876 33.2286 1 1 hbgdSFS Is GRGX: false Parsing grge line: -1694.78 1033.15 44.1937 -1681.59 1033.15 -1694.78 1038.16 47.941 1 2 Is GRGX: false Parsing grge line: -1794.15 1429.69 4.37321 -1787.18 1429.69 -1794.15 1441.37 14.3732 1 1 Is GRGX: false Parsing grge line: -2171.43 649.416 49.8742 -2161.79 649.416 -2171.43 661.778 58.1902 3 1 fdorsfe Is GRGX: false Parsing grge line: -1790.97 1209.71 23.763 -1782.58 1209.71 -1790.97 1221.46 28.963 1 1 michdr Is GRGX: false Parsing grge line: -2108.92 886.553 75.566 -2101.36 886.553 -2108.92 896.807 80.166 7 39 sav1sfe Is GRGX: false Parsing grge line: -1652.78 647.502 -6.04924 -1617.92 647.502 -1652.78 671.973 0.713446 4 34 imp_sf Is GRGX: false Parsing grge line: -2430.13 1013.71 49.3413 -2421.2 1013.71 -2430.13 1027.76 55.3413 1 5 sprsfw Is GRGX: false Parsing grge line: -2699.12 821.489 49.0042 -2692.9 821.489 -2699.12 831.208 53.653 1 40 sav1sfw Is GRGX: false Parsing grge line: 2218.06 2448.06 -8.43807 2234.47 2448.06 2218.06 2467.56 -1.5463 5 35 imp_lv Is GRGX: false Parsing grge line: 1550.98 1155.36 8.97329 1621.82 1155.36 1550.98 1224.03 29.8005 4 44 vgshngr Is GRGX: false Parsing grge line: 2602.6 1438.84 9.8337 2616.4 1438.84 2602.6 1462.11 15.4891 1 1 vgElock Is GRGX: false Parsing grge line: 2389.6 1483.26 9.81843 2398.11 1483.26 2389.6 1497.84 15.6841 5 5 timy1 Is GRGX: false Parsing grge line: 2382.28 1044 9.8337 2391.14 1044 2382.28 1059.73 13.9338 1 1 vEcmod Is GRGX: false Parsing grge line: 2449.5 695.018 10.4742 2458.31 695.018 2449.5 700.227 12.9155 1 18 vEsvgrg Is GRGX: false Parsing grge line: 2002.96 2303.72 9.61706 2010.36 2303.72 2002.96 2317.59 13.9914 1 2 blob2 Is GRGX: false Parsing grge line: 1968.23 2157.88 9.59696 1983.32 2157.88 1968.23 2167.03 16.2367 1 5 blob1 Is GRGX: false Parsing grge line: 1408.65 1899.52 10.115 1417.55 1899.52 1408.65 1904.91 13.1693 1 30 blob6 Is GRGX: false Parsing grge line: 1269.2 2525.14 9.80013 1278.72 2525.14 1269.2 2534.49 12.9784 1 27 blob69 Is GRGX: false Parsing grge line: 929.554 2008.59 10.115 938.452 2008.59 929.554 2013.99 13.1693 1 28 blob7 Is GRGX: false Parsing grge line: -1424.11 2576.61 54.8156 -1416.85 2576.61 -1424.11 2590.84 60.8747 1 5 CNspray Is GRGX: false Parsing grge line: -103.636 1112.42 18.7017 -96.3613 1112.42 -103.636 1125.79 24.5489 1 5 CN2spry Is GRGX: false Parsing grge line: -364.439 1194.37 18.597 -356.214 1194.37 -364.439 1202.97 22.3812 1 24 cn2gar1 Is GRGX: false Parsing grge line: 430.059 2542.31 15.166 442.896 2542.31 430.059 2550.75 19.5951 1 25 cn2gar2 Is GRGX: false Parsing grge line: -397.297 2223.17 41.3824 -389.058 2225.38 -398.878 2229.07 44.6359 1 1 ghostdr Is GRGX: false Parsing grge line: 383.843 2433.28 15.166 426.012 2433.28 383.843 2476.13 24.6886 4 45 dhangar Is GRGX: false Parsing grge line: -2114.42 -2462.27 29.4809 -2109.36 -2466.37 -2111.68 -2458.88 32.3474 1 1 amumis Is GRGX: false Parsing grge line: 715.806 -462.403 14.9635 724.293 -462.403 715.806 -447.29 21.4398 1 5 CEspray Is GRGX: false Parsing grge line: 2227.6 168.649 26.4635 2234.93 168.649 2227.6 176.333 29.4635 1 29 burbdoo Is GRGX: false Parsing grge line: 783.155 -492.75 16.3361 789.029 -492.75 783.155 -485.118 19.3361 1 26 burbdo2 Is GRGX: false Parsing grge line: 7426.54 -9738.08 5.93358 7407.97 -9730.74 7415.37 -9765.58 12.1336 0 -1 army_wh 4 5 1 # Army Ware House - Vice Port Is GRGX: true CGarageBase constructed with size: 4 = 4 Added GRGX. Name: army_wh Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width=20.0, Depth=29.7, Height= 6.2, dotProduct(dirA, dirB)=0.01 Parsing grge line: 7367.37 -8358.41 5.10053 7377.25 -8363.65 7363.98 -8365.21 10.1005 0 -1 hai_pns 4 6 1 # Little Haiti Pay N Spray Shop Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: hai_pns Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width=11.2, Depth= 7.6, Height= 5.0, dotProduct(dirA, dirB)=0.03 Parsing grge line: 7336.01 -9513.27 5.89232 7344.01 -9515.39 7342.81 -9496.96 10.8923 0 -1 dk_pns 4 6 1 # Vice Port Pay N Spray Shop Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: dk_pns Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 8.3, Depth=17.7, Height= 5.0, dotProduct(dirA, dirB)=0.14 Parsing grge line: 8242.06 -9504.8 3.41874 8241.95 -9510.51 8252.68 -9503.81 9.81874 0 -1 wsh_pns 4 6 1 # Ocean Beach Pay N Spray Shop Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: wsh_pns Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.7, Depth=10.7, Height= 6.4, dotProduct(dirA, dirB)=-0.11 Parsing grge line: 8574.44 -7821.57 4.18716 8576.17 -7816.17 8563.91 -7819.41 10.5872 0 -1 nbe_pns 4 6 1 # Vice Point Pay N Spray Shop Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: nbe_pns Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.7, Depth=10.7, Height= 6.4, dotProduct(dirA, dirB)=-0.11 Parsing grge line: 7086.77 -9657.11 5.398 7090.46 -9647.93 7072.48 -9651.14 11.798 8 -1 8_bombs 1 9 1 # 8 Ball's Bomb Shop Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: 8_bombs Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 9.9, Depth=15.5, Height= 6.4, dotProduct(dirA, dirB)=0.01 Parsing grge line: 7194.82 -8724.13 5.32564 7195.97 -8731.97 7210.77 -8720.41 9.72564 0 -1 lh_stgr 1 3 3 # Cortez's Save Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: lh_stgr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 7.9, Depth=16.4, Height= 4.4, dotProduct(dirA, dirB)=-0.08 Parsing grge line: 8277.09 -9734.19 4.50861 8272.65 -9733.49 8276.68 -9740.85 8.20861 0 -1 wsh18sg 1 3 3 # Washinton Save Garage 1 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: wsh18sg Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 4.5, Depth= 6.7, Height= 3.7, dotProduct(dirA, dirB)=-0.09 Parsing grge line: 8549.41 -7847.36 7.219 8553.56 -7848.62 8551.29 -7839.51 10.714 0 -1 wsh18sg 1 3 3 # Washinton Save Garage 2 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: wsh18sg Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 4.3, Depth= 8.1, Height= 3.5, dotProduct(dirA, dirB)=-0.06 Parsing grge line: 7434.97 -6935.03 5.758 7440.58 -6932.84 7430.64 -6926.28 9.958 0 -1 linkssg 1 3 1 # Links View Apartment Save Garages. Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: linkssg Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 6.0, Depth= 9.8, Height= 4.2, dotProduct(dirA, dirB)=-0.09 Parsing grge line: 7402.52 -6946.02 5.455 7409.33 -6943.49 7396.56 -6931.49 10.655 0 -1 hc_sg1 1 3 1 # Hayman Condo Save Garage 1 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: hc_sg1 Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 7.3, Depth=15.7, Height= 5.2, dotProduct(dirA, dirB)=-0.03 Parsing grge line: 7425.88 -6937.96 5.535 7431.69 -6936.43 7421.45 -6929.3 9.935 0 -1 hc_sg2 1 3 1 # Hayman Condo Save Garage 2 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: hc_sg2 Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 6.0, Depth= 9.7, Height= 4.4, dotProduct(dirA, dirB)=-0.21 Parsing grge line: 7413.91 -6942.15 5.536 7417.14 -6941.04 7411.83 -6936.1 8.336 0 -1 hc_mcsg 4 3 16 # Hayman Condo Motor Cycle Save Garage Is GRGX: true CGarageBase constructed with size: 4 = 4 Added GRGX. Name: hc_mcsg Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 3.4, Depth= 6.4, Height= 2.8, dotProduct(dirA, dirB)=-0.00 Parsing grge line: 7896.8 -8789.68 8.375 7887.93 -8789.71 7896.73 -8800.03 11.375 0 -1 man_sgr 2 3 3 # Vercetti Estate Save Garage Is GRGX: true CGarageBase constructed with size: 2 = 2 Added GRGX. Name: man_sgr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 8.9, Depth=10.4, Height= 3.0, dotProduct(dirA, dirB)=0.01 Parsing grge line: 8700.03 -7609.45 5.202 8700.04 -7613.77 8707.81 -7609.26 8.802 0 -1 el_sank 2 3 3 # El Sanko Casa Save Garage Is GRGX: true CGarageBase constructed with size: 2 = 2 Added GRGX. Name: el_sank Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 4.3, Depth= 7.8, Height= 3.6, dotProduct(dirA, dirB)=-0.02 Parsing grge line: 8715.38 -7910.03 5.33404 8699.19 -7910.04 8715.39 -7923.64 9.13404 0 -1 lock_up 4 3 3 # Lock Up garage Is GRGX: true CGarageBase constructed with size: 4 = 4 Added GRGX. Name: lock_up Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width=16.2, Depth=13.6, Height= 3.8, dotProduct(dirA, dirB)=-0.00 Parsing grge line: 7248.66 -9091.62 1.39442 7235.74 -9091.7 7248.61 -9107.71 5.79442 0 -1 sa_png 1 6 3 # Spray N GO Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: sa_png Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width=12.9, Depth=16.1, Height= 4.4, dotProduct(dirA, dirB)=0.01 Parsing grge line: 7225.06 -9071.68 1.36662 7234.49 -9070.72 7225.22 -9052.37 5.76662 0 -1 sa_sg1 1 3 3 # Save Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: sa_sg1 Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 9.5, Depth=19.3, Height= 4.4, dotProduct(dirA, dirB)=0.11 Parsing grge line: 7236.8 -9070.87 1.3802 7246.16 -9070.84 7236.9 -9052.37 5.5802 0 -1 sa_sg2 1 3 3 # Save Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: sa_sg2 Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 9.4, Depth=18.5, Height= 4.2, dotProduct(dirA, dirB)=0.01 Parsing grge line: 7248.17 -9070.78 1.3802 7257.51 -9070.68 7248.26 -9052.29 5.5802 0 -1 sa_sg3 1 3 3 # Save Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: sa_sg3 Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 9.3, Depth=18.5, Height= 4.2, dotProduct(dirA, dirB)=0.02 Parsing grge line: 7258.89 -9070.76 1.51289 7268.29 -9070.74 7258.97 -9052.29 5.71289 0 -1 sa_sg4 1 3 3 # Save Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: sa_sg4 Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 9.4, Depth=18.5, Height= 4.2, dotProduct(dirA, dirB)=0.01 Parsing grge line: 7283.75 -9091.73 0.959035 7271.69 -9091.66 7283.9 -9111.28 5.95903 0 -1 sa_sg5 1 3 3 # Save Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: sa_sg5 Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width=12.1, Depth=19.6, Height= 5.0, dotProduct(dirA, dirB)=-0.01 Parsing grge line: 9411.7 8332.55 12.2496 9411.7 8314.27 9437.57 8332.62 16.8496 0 -1 pl_ie 4 5 3 # Portland Import-Export Garage Is GRGX: true CGarageBase constructed with size: 4 = 4 Added GRGX. Name: pl_ie Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width=18.3, Depth=25.9, Height= 4.6, dotProduct(dirA, dirB)=-0.00 Parsing grge line: 6816.01 9150.59 58.151 6797.86 9150.76 6816.11 9124.75 62.351 0 -1 svi_gr 4 5 3 # Shoreside Import-Export Garage Is GRGX: true CGarageBase constructed with size: 4 = 4 Added GRGX. Name: svi_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width=18.2, Depth=25.8, Height= 4.2, dotProduct(dirA, dirB)=-0.01 Parsing grge line: 9199.39 8900.36 13.7042 9194.25 8900.29 9200.13 8889.54 16.7042 0 -1 pl_bms 1 9 1 # Portland Bomb Shop with remote-control detonator Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: pl_bms Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.1, Depth=10.8, Height= 3.0, dotProduct(dirA, dirB)=-0.05 Parsing grge line: 8291.04 8425.99 25.14 8291.47 8420.69 8300.75 8426.18 28.6238 0 -1 si_bms 1 7 1 # Staunton Island Bomb Shop with timed detonator Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: si_bms Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.3, Depth= 9.7, Height= 3.5, dotProduct(dirA, dirB)=0.06 Parsing grge line: 6834.54 9058.79 57.5702 6830.84 9058.8 6835.04 9049.74 61.7702 0 -1 sv_bms 1 9 1 # Shoreside Bomb Shop with remote-control detonator Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: sv_bms Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 3.7, Depth= 9.1, Height= 4.2, dotProduct(dirA, dirB)=-0.06 Parsing grge line: 9343.52 8820.76 49.6481 9343.24 8812.83 9357.38 8820.7 53.8481 0 -1 salv_gr 1 3 1 # Portland Salvatore's Save Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: salv_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 7.9, Depth=13.9, Height= 4.2, dotProduct(dirA, dirB)=-0.03 Parsing grge line: 8805.94 8689.28 7.9928 8805.85 8684.9 8812.5 8689.29 10.9928 0 -1 pl_hsg 1 3 1 # Portland Hideout Save Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: pl_hsg Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 4.4, Depth= 6.6, Height= 3.0, dotProduct(dirA, dirB)=-0.02 Parsing grge line: 9356.46 8194.4 10.8972 9364.98 8194.93 9356.48 8217.89 17.0972 0 -1 secu_gr 1 4 3 # Portland Securicar Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: secu_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 8.5, Depth=23.5, Height= 6.2, dotProduct(dirA, dirB)=0.06 Parsing grge line: 9005.47 8588.68 12.579 9002.33 8588.77 9006.27 8581.69 15.979 0 -1 lui_lgr 1 4 3 # Luigi's Lockup Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: lui_lgr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 3.1, Depth= 7.0, Height= 3.4, dotProduct(dirA, dirB)=-0.14 Parsing grge line: 8030.92 8524.8 14.9517 8022.4 8524.76 8030.85 8513.26 19.4517 0 -1 sih_gr 1 4 3 # Staunton Island Hideout Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: sih_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 8.5, Depth=11.5, Height= 4.5, dotProduct(dirA, dirB)=0.01 Parsing grge line: 8177.83 8206.01 26.9174 8173.28 8205.8 8178.02 8197.14 29.4174 0 -1 king_gr 1 4 3 # King Courtney's Lockup Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: king_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 4.6, Depth= 8.9, Height= 2.5, dotProduct(dirA, dirB)=0.02 Parsing grge line: 7969.13 8682.9 15.15 7974.88 8682.84 7969.21 8692.27 18.7305 0 -1 ch1_gr 1 3 3 # Colombian Hideout Garage 1 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ch1_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.8, Depth= 9.4, Height= 3.6, dotProduct(dirA, dirB)=-0.00 Parsing grge line: 7978.47 8682.97 15.1476 7984.15 8682.83 7978.49 8692.22 18.6476 0 -1 ch2_gr 1 3 3 # Colombian Hideout Garage 2 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ch2_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.7, Depth= 9.3, Height= 3.5, dotProduct(dirA, dirB)=-0.02 Parsing grge line: 7946.15 8645.16 15.1564 7945.98 8652.77 7939.61 8645.14 18.8564 0 -1 ch3_gr 1 3 3 # Colombian Hideout Garage 3 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ch3_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 7.6, Depth= 6.5, Height= 3.7, dotProduct(dirA, dirB)=0.02 Parsing grge line: 7966.83 8622.99 15.2005 7958.1 8623 7966.8 8612.03 19.2005 0 -1 ch4_gr 1 3 3 # Colombian Hideout Garage 4 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ch4_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 8.7, Depth=11.0, Height= 4.0, dotProduct(dirA, dirB)=0.00 Parsing grge line: 7946.1 8656.45 15.1564 7946.07 8663.19 7939.72 8656.53 18.9564 0 -1 ch5_gr 1 3 3 # Colombian Hideout Garage 5 Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ch5_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 6.7, Depth= 6.4, Height= 3.8, dotProduct(dirA, dirB)=0.02 Parsing grge line: 7975.64 8622.92 15.2005 7968.03 8622.74 7975.63 8612.22 19.2005 0 -1 ch6_gr 1 3 3 # Colombian Hideout Garage 6 - Extra Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ch6_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 7.6, Depth=10.7, Height= 4.0, dotProduct(dirA, dirB)=0.02 Parsing grge line: 8291.16 8497.07 25.1081 8291.03 8489.45 8298.94 8497.07 28.95 0 -1 ken_gr 1 4 3 # Kenji's Lockup Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ken_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 7.6, Depth= 7.8, Height= 3.8, dotProduct(dirA, dirB)=-0.02 Parsing grge line: 8150.4 8007.1 20.9857 8150.34 8000.13 8160.8 8007.1 24.3857 0 -1 ray_gr 1 4 3 # Ray's Lockup Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ray_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 7.0, Depth=10.4, Height= 3.4, dotProduct(dirA, dirB)=-0.01 Parsing grge line: 8291.31 8565.11 20.266 8291.15 8559.64 8299.88 8565.18 23.63 0 -1 mcaf_gr 1 3 3 # McAffrey's Hideout Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: mcaf_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.5, Depth= 8.6, Height= 3.4, dotProduct(dirA, dirB)=-0.04 Parsing grge line: 7252.54 8953.69 17.8549 7252.12 8958.71 7244.89 8953.34 22.9549 0 -1 svl_gr 1 3 3 # Shoreside Vale Left Hideout Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: svl_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.0, Depth= 7.7, Height= 5.1, dotProduct(dirA, dirB)=0.04 Parsing grge line: 7252.3 8959.15 17.9549 7252.33 8963.67 7244.62 8958.36 22.9549 0 -1 svc_gr 1 3 3 # Shoreside Vale Central Hideout Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: svc_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 4.5, Depth= 7.7, Height= 5.0, dotProduct(dirA, dirB)=-0.11 Parsing grge line: 7252.31 8964.35 17.9549 7252.55 8968.95 7244.72 8963.92 22.9549 0 -1 svr_gr 1 3 3 # Shoreside Vale Right Hideout Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: svr_gr Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 4.6, Depth= 7.6, Height= 5.0, dotProduct(dirA, dirB)=-0.11 Parsing grge line: 9128.94 8758.24 22.6163 9128.82 8754.73 9135.59 8758.99 26.078 0 -1 dice_gr 1 4 3 # D-Ice's Defusal Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: dice_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 3.5, Depth= 6.7, Height= 3.5, dotProduct(dirA, dirB)=-0.15 Parsing grge line: 7072.33 8834.79 32.8457 7072.2 8828.03 7090.34 8834.73 37.8457 0 -1 dpdo_gr 1 4 3 # D-Ice's Platinium Drop-off Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: dpdo_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 6.8, Depth=18.0, Height= 5.0, dotProduct(dirA, dirB)=-0.02 Parsing grge line: 6877.16 8923.64 39.9206 6877.34 8930.05 6865.73 8922.71 44.5206 0 -1 dons_gr 1 4 3 # Donald's Securicar Garage Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: dons_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 6.4, Depth=11.5, Height= 4.6, dotProduct(dirA, dirB)=-0.11 Parsing grge line: 9268.27 8683.96 48.754 9268.35 8688.77 9261.71 8683.98 50.754 0 -1 ptr_gr 1 4 3 # Portland - Near Toni's Resturant Garage - Extra Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: ptr_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 4.8, Depth= 6.6, Height= 2.0, dotProduct(dirA, dirB)=-0.01 Parsing grge line: 9000.36 8423.45 12.4514 9000.38 8428.27 8993.65 8423.4 15.6514 0 -1 pan_gr 1 4 3 # Portland - Near Ammunation Garage - Extra Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: pan_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 4.8, Depth= 6.7, Height= 3.2, dotProduct(dirA, dirB)=-0.01 Parsing grge line: 8209.91 8569.28 24.974 8218.16 8569.45 8209.69 8577.65 28.574 0 -1 lcss_gr 1 4 3 # LCS Staunto Hideout Garage -Extra Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: lcss_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 8.3, Depth= 8.4, Height= 3.6, dotProduct(dirA, dirB)=-0.01 Parsing grge line: 8007.83 7440.2 22.801 8007.57 7431.47 8035.3 7439.84 26.801 0 -1 lm_gr 1 4 3 # Love Media Garage - Extra Is GRGX: true CGarageBase constructed with size: 1 = 1 Added GRGX. Name: lm_gr Can store vehicle: true Is Parking Garage: true Is GARAGE_DONT_SAVE: false Width= 8.7, Depth=27.5, Height= 4.0, dotProduct(dirA, dirB)=-0.02 Parsing grge line: 8843.41 8645.9 10.0962 8837.39 8645.85 8843.62 8632.57 15.2962 0 -1 pl_pns 1 6 1 # Portland Pay N Spray Shop Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: pl_pns Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 6.0, Depth=13.3, Height= 5.2, dotProduct(dirA, dirB)=-0.01 Parsing grge line: 8291.07 8508.25 25.4564 8291.11 8502.59 8300.5 8508.27 28.9564 0 -1 si_pns 1 6 1 # Staunton Island Pay N Spray Shop Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: si_pns Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 5.7, Depth= 9.4, Height= 3.5, dotProduct(dirA, dirB)=0.01 Parsing grge line: 6776.36 9032.49 57.7704 6776.03 9037.29 6767.35 9032.34 61.9704 0 -1 sv_pns 1 6 3 # Shoreside Vale Pay N Spray Shop Is GRGX: true CGarageBase constructed with size: 0 = 0 Added GRGX. Name: sv_pns Can store vehicle: false Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width= 4.8, Depth= 9.0, Height= 4.2, dotProduct(dirA, dirB)=0.05 The log continues with CGarageData information on the ORIGINAL garages: Spoiler List of ORIGINAL garages: Garage=mul_lan ORIG Type=19 OrigType=1 Pos=(1640.37, -1520.07, 12.51) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1640.37, Right=1647.60, Front=-1520.07, Back=-1512.45, Top=18.12 Test point 1 (1643.98, -1516.26, 15.32) in garage = TRUE Test point 2 (1641.37, -1519.07, 15.32) in garage = TRUE Garage=imp_la ORIG Type=33 OrigType=33 Pos=(1523.92, -1653.23, 4.73) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1523.92, Right=1556.92, Front=-1653.23, Back=-1633.23, Top=12.23 Test point 1 (1540.42, -1643.23, 8.48) in garage = TRUE Test point 2 (1524.92, -1652.23, 8.48) in garage = TRUE Garage=duf_LAS ORIG Type=15 OrigType=1 Pos=(1873.97, -2096.55, 12.49) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1873.97, Right=1880.88, Front=-2096.55, Back=-2087.62, Top=15.77 Test point 1 (1877.43, -2092.08, 14.13) in garage = TRUE Test point 2 (1874.97, -2095.55, 14.13) in garage = TRUE Garage=lasbomb ORIG Type=2 OrigType=2 Pos=(1843.91, -1858.80, 12.36) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1843.91, Right=1857.10, Front=-1858.80, Back=-1853.79, Top=16.11 Test point 1 (1850.51, -1856.30, 14.24) in garage = TRUE Test point 2 (1844.91, -1857.80, 14.24) in garage = TRUE Garage=modgLAS ORIG Type=1 OrigType=1 Pos=(1809.46, -2150.67, 12.43) DirA=(0.00, 1.00), DirB=(-1.00, 0.00) Left=1798.82, Right=1809.46, Front=-2150.67, Back=-2142.75, Top=16.43 Test point 1 (1804.14, -2146.71, 14.43) in garage = TRUE Test point 2 (1808.46, -2149.67, 14.43) in garage = TRUE Garage=carlas1 ORIG Type=31 OrigType=31 Pos=(1694.80, -2088.70, 12.36) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1694.80, Right=1703.00, Front=-2088.70, Back=-2077.48, Top=16.22 Test point 1 (1698.90, -2083.09, 14.29) in garage = TRUE Test point 2 (1695.80, -2087.70, 14.29) in garage = TRUE Garage=burg_lk ORIG Type=43 OrigType=1 Pos=(2738.40, -2012.55, 12.58) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2738.40, Right=2743.78, Front=-2012.55, Back=-2004.41, Top=17.83 Test point 1 (2741.09, -2008.48, 15.20) in garage = TRUE Test point 2 (2739.40, -2011.55, 15.20) in garage = TRUE Garage=modlast ORIG Type=36 OrigType=1 Pos=(2640.78, -2049.99, 12.54) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2640.78, Right=2648.96, Front=-2049.99, Back=-2039.55, Top=16.21 Test point 1 (2644.87, -2044.77, 14.37) in garage = TRUE Test point 2 (2641.78, -2048.99, 14.37) in garage = TRUE Garage=sprLAe ORIG Type=5 OrigType=5 Pos=(2056.60, -1835.90, 12.54) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2056.60, Right=2071.30, Front=-1835.90, Back=-1826.97, Top=18.54 Test point 1 (2063.95, -1831.44, 15.54) in garage = TRUE Test point 2 (2057.60, -1834.90, 15.54) in garage = TRUE Garage=cjsafe ORIG Type=16 OrigType=16 Pos=(2502.31, -1699.36, 12.43) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2502.31, Right=2508.61, Front=-1699.36, Back=-1691.01, Top=16.57 Test point 1 (2505.46, -1695.19, 14.50) in garage = TRUE Test point 2 (2503.31, -1698.36, 14.50) in garage = TRUE Garage=bodLAwN ORIG Type=38 OrigType=1 Pos=(1038.24, -1025.67, 31.10) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1038.24, Right=1068.35, Front=-1025.67, Back=-995.04, Top=39.10 Test point 1 (1053.29, -1010.36, 35.10) in garage = TRUE Test point 2 (1039.24, -1024.67, 35.10) in garage = TRUE Garage=sprLAe ORIG Type=5 OrigType=5 Pos=(1021.81, -1018.71, 30.91) DirA=(0.00, -1.00), DirB=(1.00, 0.00) Left=1021.81, Right=1027.93, Front=-1029.53, Back=-1018.71, Top=36.91 Test point 1 (1024.87, -1024.12, 33.91) in garage = TRUE Test point 2 (1022.81, -1019.71, 33.91) in garage = TRUE Garage=spLAw2 ORIG Type=5 OrigType=5 Pos=(491.10, -1747.55, 9.46) DirA=(0.14, 0.99), DirB=(-0.99, 0.14) Left=481.97, Right=492.72, Front=-1747.55, Back=-1734.52, Top=17.57 Test point 1 (487.34, -1741.04, 13.51) in garage = TRUE Test point 2 (490.25, -1746.42, 13.51) in garage = TRUE Garage=beacsv ORIG Type=17 OrigType=17 Pos=(319.33, -1768.93, 3.36) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=319.33, Right=325.63, Front=-1768.93, Back=-1759.57, Top=7.49 Test point 1 (322.48, -1764.25, 5.42) in garage = TRUE Test point 2 (320.33, -1767.93, 5.42) in garage = TRUE Garage=CEsafe1 ORIG Type=32 OrigType=32 Pos=(1352.58, -636.66, 108.14) DirA=(0.94, 0.33), DirB=(-0.33, 0.94) Left=1349.56, Right=1359.02, Front=-636.66, Back=-625.72, Top=113.14 Test point 1 (1354.29, -631.19, 110.64) in garage = TRUE Test point 2 (1353.20, -635.38, 110.64) in garage = TRUE Garage=mds1SFS ORIG Type=37 OrigType=5 Pos=(-2728.53, 212.29, 3.45) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2728.53, Right=-2716.36, Front=212.29, Back=222.67, Top=8.69 Test point 1 (-2722.45, 217.48, 6.07) in garage = TRUE Test point 2 (-2727.53, 213.29, 6.07) in garage = TRUE Garage=tbon ORIG Type=19 OrigType=1 Pos=(-2735.46, 60.73, 3.07) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2735.46, Right=-2725.82, Front=60.73, Back=72.88, Top=7.92 Test point 1 (-2730.64, 66.81, 5.50) in garage = TRUE Test point 2 (-2734.46, 61.73, 5.50) in garage = TRUE Garage=svgsfs1 ORIG Type=42 OrigType=42 Pos=(-2454.02, -131.56, 25.09) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2454.02, Right=-2442.38, Front=-131.56, Back=-113.93, Top=29.80 Test point 1 (-2448.20, -122.75, 27.44) in garage = TRUE Test point 2 (-2453.02, -130.56, 27.44) in garage = TRUE Garage=mdsSFSe ORIG Type=38 OrigType=1 Pos=(-1941.04, 251.71, 33.43) DirA=(0.00, -1.00), DirB=(1.00, 0.00) Left=-1941.04, Right=-1930.66, Front=239.54, Back=251.71, Top=38.66 Test point 1 (-1935.85, 245.63, 36.05) in garage = TRUE Test point 2 (-1940.04, 250.71, 36.05) in garage = TRUE Garage=sprsfse ORIG Type=5 OrigType=5 Pos=(-1908.93, 292.35, 40.04) DirA=(0.00, -1.00), DirB=(1.00, 0.00) Left=-1908.93, Right=-1900.11, Front=277.99, Back=292.35, Top=45.54 Test point 1 (-1904.52, 285.17, 42.79) in garage = TRUE Test point 2 (-1907.93, 291.35, 42.79) in garage = TRUE Garage=brgSFSE ORIG Type=43 OrigType=1 Pos=(-2112.48, -21.21, 34.30) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2112.48, Right=-2102.48, Front=-21.21, Back=-11.21, Top=40.30 Test point 1 (-2107.48, -16.21, 37.30) in garage = TRUE Test point 2 (-2111.48, -20.21, 37.30) in garage = TRUE Garage=LCKSfse ORIG Type=41 OrigType=41 Pos=(-2043.10, 118.61, 27.82) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2043.10, Right=-2021.91, Front=118.61, Back=129.61, Top=32.82 Test point 1 (-2032.51, 124.11, 30.32) in garage = TRUE Test point 2 (-2042.10, 119.61, 30.32) in garage = TRUE Garage=hbgdSFS ORIG Type=19 OrigType=1 Pos=(-2057.35, 150.80, 27.83) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2057.35, Right=-2038.91, Front=150.80, Back=182.88, Top=33.23 Test point 1 (-2048.13, 166.84, 30.53) in garage = TRUE Test point 2 (-2056.35, 151.80, 30.53) in garage = TRUE Garage=fdorsfe ORIG Type=19 OrigType=1 Pos=(-2171.43, 649.42, 49.87) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2171.43, Right=-2161.79, Front=649.42, Back=661.78, Top=58.19 Test point 1 (-2166.61, 655.60, 54.03) in garage = TRUE Test point 2 (-2170.43, 650.42, 54.03) in garage = TRUE Garage=michdr ORIG Type=1 OrigType=1 Pos=(-1790.97, 1209.71, 23.76) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-1790.97, Right=-1782.58, Front=1209.71, Back=1221.46, Top=28.96 Test point 1 (-1786.77, 1215.58, 26.36) in garage = TRUE Test point 2 (-1789.97, 1210.71, 26.36) in garage = TRUE Garage=sav1sfe ORIG Type=39 OrigType=39 Pos=(-2108.92, 886.55, 75.57) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2108.92, Right=-2101.36, Front=886.55, Back=896.81, Top=80.17 Test point 1 (-2105.14, 891.68, 77.87) in garage = TRUE Test point 2 (-2107.92, 887.55, 77.87) in garage = TRUE Garage=imp_sf ORIG Type=34 OrigType=34 Pos=(-1652.78, 647.50, -6.05) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-1652.78, Right=-1617.92, Front=647.50, Back=671.97, Top=0.71 Test point 1 (-1635.35, 659.74, -2.67) in garage = TRUE Test point 2 (-1651.78, 648.50, -2.67) in garage = TRUE Garage=sprsfw ORIG Type=5 OrigType=5 Pos=(-2430.13, 1013.71, 49.34) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2430.13, Right=-2421.20, Front=1013.71, Back=1027.76, Top=55.34 Test point 1 (-2425.67, 1020.73, 52.34) in garage = TRUE Test point 2 (-2429.13, 1014.71, 52.34) in garage = TRUE Garage=sav1sfw ORIG Type=40 OrigType=40 Pos=(-2699.12, 821.49, 49.00) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-2699.12, Right=-2692.90, Front=821.49, Back=831.21, Top=53.65 Test point 1 (-2696.01, 826.35, 51.33) in garage = TRUE Test point 2 (-2698.12, 822.49, 51.33) in garage = TRUE Garage=imp_lv ORIG Type=35 OrigType=35 Pos=(2218.06, 2448.06, -8.44) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2218.06, Right=2234.47, Front=2448.06, Back=2467.56, Top=-1.55 Test point 1 (2226.27, 2457.81, -4.99) in garage = TRUE Test point 2 (2219.06, 2449.06, -4.99) in garage = TRUE Garage=vgshngr ORIG Type=44 OrigType=44 Pos=(1550.98, 1155.36, 8.97) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1550.98, Right=1621.82, Front=1155.36, Back=1224.03, Top=29.80 Test point 1 (1586.40, 1189.70, 19.39) in garage = TRUE Test point 2 (1551.98, 1156.36, 19.39) in garage = TRUE Garage=vgElock ORIG Type=43 OrigType=1 Pos=(2602.60, 1438.84, 9.83) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2602.60, Right=2616.40, Front=1438.84, Back=1462.11, Top=15.49 Test point 1 (2609.50, 1450.47, 12.66) in garage = TRUE Test point 2 (2603.60, 1439.84, 12.66) in garage = TRUE Garage=timy1 ORIG Type=5 OrigType=5 Pos=(2389.60, 1483.26, 9.82) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2389.60, Right=2398.11, Front=1483.26, Back=1497.84, Top=15.68 Test point 1 (2393.85, 1490.55, 12.75) in garage = TRUE Test point 2 (2390.60, 1484.26, 12.75) in garage = TRUE Garage=vEcmod ORIG Type=38 OrigType=1 Pos=(2382.28, 1044.00, 9.83) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2382.28, Right=2391.14, Front=1044.00, Back=1059.73, Top=13.93 Test point 1 (2386.71, 1051.86, 11.88) in garage = TRUE Test point 2 (2383.28, 1045.00, 11.88) in garage = TRUE Garage=vEsvgrg ORIG Type=18 OrigType=18 Pos=(2449.50, 695.02, 10.47) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2449.50, Right=2458.31, Front=695.02, Back=700.23, Top=12.92 Test point 1 (2453.91, 697.62, 11.69) in garage = TRUE Test point 2 (2450.50, 696.02, 11.69) in garage = TRUE Garage=blob2 ORIG Type=2 OrigType=2 Pos=(2002.96, 2303.72, 9.62) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2002.96, Right=2010.36, Front=2303.72, Back=2317.59, Top=13.99 Test point 1 (2006.66, 2310.66, 11.80) in garage = TRUE Test point 2 (2003.96, 2304.72, 11.80) in garage = TRUE Garage=blob1 ORIG Type=5 OrigType=5 Pos=(1968.23, 2157.88, 9.60) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1968.23, Right=1983.32, Front=2157.88, Back=2167.03, Top=16.24 Test point 1 (1975.77, 2162.46, 12.92) in garage = TRUE Test point 2 (1969.23, 2158.88, 12.92) in garage = TRUE Garage=blob6 ORIG Type=30 OrigType=30 Pos=(1408.65, 1899.52, 10.11) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1408.65, Right=1417.55, Front=1899.52, Back=1904.91, Top=13.17 Test point 1 (1413.10, 1902.22, 11.64) in garage = TRUE Test point 2 (1409.65, 1900.52, 11.64) in garage = TRUE Garage=blob69 ORIG Type=27 OrigType=27 Pos=(1269.20, 2525.14, 9.80) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=1269.20, Right=1278.72, Front=2525.14, Back=2534.49, Top=12.98 Test point 1 (1273.96, 2529.81, 11.39) in garage = TRUE Test point 2 (1270.20, 2526.14, 11.39) in garage = TRUE Garage=blob7 ORIG Type=28 OrigType=28 Pos=(929.55, 2008.59, 10.11) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=929.55, Right=938.45, Front=2008.59, Back=2013.99, Top=13.17 Test point 1 (934.00, 2011.29, 11.64) in garage = TRUE Test point 2 (930.55, 2009.59, 11.64) in garage = TRUE Garage=CNspray ORIG Type=5 OrigType=5 Pos=(-1424.11, 2576.61, 54.82) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-1424.11, Right=-1416.85, Front=2576.61, Back=2590.84, Top=60.87 Test point 1 (-1420.48, 2583.73, 57.85) in garage = TRUE Test point 2 (-1423.11, 2577.61, 57.85) in garage = TRUE Garage=CN2spry ORIG Type=5 OrigType=5 Pos=(-103.64, 1112.42, 18.70) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-103.64, Right=-96.36, Front=1112.42, Back=1125.79, Top=24.55 Test point 1 (-100.00, 1119.10, 21.63) in garage = TRUE Test point 2 (-102.64, 1113.42, 21.63) in garage = TRUE Garage=cn2gar1 ORIG Type=24 OrigType=24 Pos=(-364.44, 1194.37, 18.60) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=-364.44, Right=-356.21, Front=1194.37, Back=1202.97, Top=22.38 Test point 1 (-360.33, 1198.67, 20.49) in garage = TRUE Test point 2 (-363.44, 1195.37, 20.49) in garage = TRUE Garage=cn2gar2 ORIG Type=25 OrigType=25 Pos=(430.06, 2542.31, 15.17) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=430.06, Right=442.90, Front=2542.31, Back=2550.75, Top=19.60 Test point 1 (436.48, 2546.53, 17.38) in garage = TRUE Test point 2 (431.06, 2543.31, 17.38) in garage = TRUE Garage=ghostdr ORIG Type=19 OrigType=1 Pos=(-397.30, 2223.17, 41.38) DirA=(0.97, 0.26), DirB=(-0.26, 0.97) Left=-398.88, Right=-389.06, Front=2223.17, Back=2231.28, Top=44.64 Test point 1 (-393.97, 2227.23, 43.01) in garage = TRUE Test point 2 (-396.59, 2224.39, 43.01) in garage = TRUE Garage=dhangar ORIG Type=45 OrigType=45 Pos=(383.84, 2433.28, 15.17) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=383.84, Right=426.01, Front=2433.28, Back=2476.13, Top=24.69 Test point 1 (404.93, 2454.71, 19.93) in garage = TRUE Test point 2 (384.84, 2434.28, 19.93) in garage = TRUE Garage=amumis ORIG Type=1 OrigType=1 Pos=(-2114.42, -2462.27, 29.48) DirA=(0.78, -0.63), DirB=(0.63, 0.78) Left=-2114.42, Right=-2106.62, Front=-2466.37, Back=-2458.88, Top=32.35 Test point 1 (-2110.52, -2462.63, 30.91) in garage = TRUE Test point 2 (-2113.01, -2462.12, 30.91) in garage = TRUE Garage=CEspray ORIG Type=5 OrigType=5 Pos=(715.81, -462.40, 14.96) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=715.81, Right=724.29, Front=-462.40, Back=-447.29, Top=21.44 Test point 1 (720.05, -454.85, 18.20) in garage = TRUE Test point 2 (716.81, -461.40, 18.20) in garage = TRUE Garage=burbdoo ORIG Type=29 OrigType=29 Pos=(2227.60, 168.65, 26.46) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=2227.60, Right=2234.93, Front=168.65, Back=176.33, Top=29.46 Test point 1 (2231.27, 172.49, 27.96) in garage = TRUE Test point 2 (2228.60, 169.65, 27.96) in garage = TRUE Garage=burbdo2 ORIG Type=26 OrigType=26 Pos=(783.16, -492.75, 16.34) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=783.16, Right=789.03, Front=-492.75, Back=-485.12, Top=19.34 Test point 1 (786.09, -488.93, 17.84) in garage = TRUE Test point 2 (784.16, -491.75, 17.84) in garage = TRUE Using this code Spoiler CDebugLog::Trace("List of ORIGINAL garages:"); for (int i = 0, max = CGarages__NumGarages; i < max; ++i) { auto* gp = &CGarages__Garages[i]; CDebugLog::Trace("\tGarage=%s %s Type=%d OrigType=%d Pos=(%4.2f, %4.2f, %4.2f) " "DirA=(%4.2f, %4.2f), DirB=(%4.2f, %4.2f)", gp->Name, "ORIG", gp->Type, gp->OriginalType, gp->Position.x, gp->Position.y, gp->Position.z, gp->DirectionA.x, gp->DirectionA.y, gp->DirectionB.x, gp->DirectionB.y); CDebugLog::Trace("\t\tLeft=%4.2f, Right=%4.2f, Front=%4.2f, Back=%4.2f, Top=%4.2f", gp->Left, gp->Right, gp->Front, gp->Back, gp->TopZ); //Test if a test point is recognized in the garage RwV3D point; point.x = (gp->Left + gp->Right) / 2.0; point.y = (gp->Front + gp->Back) / 2.0; point.z = (gp->Position.z + gp->TopZ) / 2.0; bool pointInGarage = CGarage__IsPointWithinGarage(gp, 0, point); CDebugLog::Trace("\t\tTest point 1 (%4.2f, %4.2f, %4.2f) in garage = %s", point.x, point.y, point.z, (pointInGarage ? "TRUE" : "FALSE")); point.x = (gp->Position.x + gp->DirectionA.x + gp->DirectionB.x); point.y = (gp->Position.y + gp->DirectionA.y + gp->DirectionB.y); point.z = (gp->Position.z + gp->TopZ) / 2.0; pointInGarage = CGarage__IsPointWithinGarage(gp, 0, point); CDebugLog::Trace("\t\tTest point 2 (%4.2f, %4.2f, %4.2f) in garage = %s\n", point.x, point.y, point.z, (pointInGarage ? "TRUE" : "FALSE")); } and the on information on CUSTOM garages: Spoiler ... List of CUSTOM garages: Garage=army_wh GRGX Type=246 OrigType=5 Pos=(7426.54, -9738.08, 5.93) DirA=(-0.93, 0.37), DirB=(-0.38, -0.93) Left=7396.80, Right=7426.54, Front=-9765.58, Back=-9730.74, Top=12.13 Test point 1 (7411.67, -9748.16, 9.03) in garage = TRUE Test point 2 (7425.23, -9738.64, 9.03) in garage = TRUE Garage=hai_pns GRGX Type=246 OrigType=6 Pos=(7367.37, -8358.41, 5.10) DirA=(0.88, -0.47), DirB=(-0.45, -0.89) Left=7363.98, Right=7377.25, Front=-8370.45, Back=-8358.41, Top=10.10 Test point 1 (7370.62, -8364.43, 7.60) in garage = TRUE Test point 2 (7367.81, -8359.77, 7.60) in garage = TRUE Garage=dk_pns GRGX Type=246 OrigType=6 Pos=(7336.01, -9513.27, 5.89) DirA=(0.97, -0.26), DirB=(0.38, 0.92) Left=7336.01, Right=7350.81, Front=-9515.39, Back=-9496.96, Top=10.89 Test point 1 (7343.41, -9506.17, 8.39) in garage = TRUE Test point 2 (7337.36, -9512.60, 8.39) in garage = TRUE Garage=wsh_pns GRGX Type=246 OrigType=6 Pos=(8242.06, -9504.80, 3.42) DirA=(-0.02, -1.00), DirB=(1.00, 0.09) Left=8241.95, Right=8252.68, Front=-9510.51, Back=-9503.81, Top=9.82 Test point 1 (8247.31, -9507.16, 6.62) in garage = TRUE Test point 2 (8243.04, -9505.71, 6.62) in garage = TRUE Garage=nbe_pns GRGX Type=246 OrigType=6 Pos=(8574.44, -7821.57, 4.19) DirA=(0.31, 0.95), DirB=(-0.98, 0.20) Left=8563.91, Right=8576.17, Front=-7821.57, Back=-7814.01, Top=10.59 Test point 1 (8570.04, -7817.79, 7.39) in garage = TRUE Test point 2 (8573.77, -7820.42, 7.39) in garage = TRUE Garage=8_bombs GRGX Type=246 OrigType=9 Pos=(7086.77, -9657.11, 5.40) DirA=(0.37, 0.93), DirB=(-0.92, 0.39) Left=7072.48, Right=7090.46, Front=-9657.11, Back=-9641.96, Top=11.80 Test point 1 (7081.47, -9649.54, 8.60) in garage = TRUE Test point 2 (7086.22, -9655.80, 8.60) in garage = TRUE Garage=lh_stgr GRGX Type=246 OrigType=3 Pos=(7194.82, -8724.13, 5.33) DirA=(0.15, -0.99), DirB=(0.97, 0.23) Left=7194.82, Right=7211.92, Front=-8731.97, Back=-8720.41, Top=9.73 Test point 1 (7203.37, -8726.19, 7.53) in garage = TRUE Test point 2 (7195.94, -8724.89, 7.53) in garage = TRUE Garage=wsh18sg GRGX Type=246 OrigType=3 Pos=(8277.09, -9734.19, 4.51) DirA=(-0.99, 0.16), DirB=(-0.06, -1.00) Left=8272.24, Right=8277.09, Front=-9740.85, Back=-9733.49, Top=8.21 Test point 1 (8274.67, -9737.17, 6.36) in garage = TRUE Test point 2 (8276.04, -9735.03, 6.36) in garage = TRUE Garage=wsh18sg GRGX Type=246 OrigType=3 Pos=(8549.41, -7847.36, 7.22) DirA=(0.96, -0.29), DirB=(0.23, 0.97) Left=8549.41, Right=8555.44, Front=-7848.62, Back=-7839.51, Top=10.71 Test point 1 (8552.42, -7844.06, 8.97) in garage = TRUE Test point 2 (8550.60, -7846.68, 8.97) in garage = TRUE Garage=linkssg GRGX Type=246 OrigType=3 Pos=(7434.97, -6935.03, 5.76) DirA=(0.93, 0.36), DirB=(-0.44, 0.90) Left=7430.64, Right=7440.58, Front=-6935.03, Back=-6924.09, Top=9.96 Test point 1 (7435.61, -6929.56, 7.86) in garage = TRUE Test point 2 (7435.46, -6933.77, 7.86) in garage = TRUE Garage=hc_sg1 GRGX Type=246 OrigType=3 Pos=(7402.52, -6946.02, 5.45) DirA=(0.94, 0.35), DirB=(-0.38, 0.93) Left=7396.56, Right=7409.33, Front=-6946.02, Back=-6928.96, Top=10.65 Test point 1 (7402.95, -6937.49, 8.06) in garage = TRUE Test point 2 (7403.08, -6944.75, 8.06) in garage = TRUE Garage=hc_sg2 GRGX Type=246 OrigType=3 Pos=(7425.88, -6937.96, 5.53) DirA=(0.97, 0.25), DirB=(-0.46, 0.89) Left=7421.45, Right=7431.69, Front=-6937.96, Back=-6927.77, Top=9.94 Test point 1 (7426.57, -6932.87, 7.74) in garage = TRUE Test point 2 (7426.39, -6936.82, 7.74) in garage = TRUE Garage=hc_mcsg GRGX Type=246 OrigType=3 Pos=(7413.91, -6942.15, 5.54) DirA=(0.95, 0.32), DirB=(-0.33, 0.95) Left=7411.83, Right=7417.14, Front=-6942.15, Back=-6934.99, Top=8.34 Test point 1 (7414.49, -6938.57, 6.94) in garage = TRUE Test point 2 (7414.53, -6940.88, 6.94) in garage = TRUE Garage=man_sgr GRGX Type=246 OrigType=3 Pos=(7896.80, -8789.68, 8.38) DirA=(-1.00, -0.00), DirB=(-0.01, -1.00) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Top=11.38 Test point 1 (7892.33, -8794.87, 9.88) in garage = TRUE Test point 2 (7895.79, -8790.68, 9.88) in garage = TRUE Garage=el_sank GRGX Type=246 OrigType=3 Pos=(8700.03, -7609.45, 5.20) DirA=(0.00, -1.00), DirB=(1.00, 0.02) Left=8700.03, Right=8707.82, Front=-7613.77, Back=-7609.26, Top=8.80 Test point 1 (8703.92, -7611.51, 7.00) in garage = TRUE Test point 2 (8701.03, -7610.43, 7.00) in garage = TRUE Garage=lock_up GRGX Type=246 OrigType=3 Pos=(8715.38, -7910.03, 5.33) DirA=(-1.00, -0.00), DirB=(0.00, -1.00) Left=8699.19, Right=8715.39, Front=-7923.65, Back=-7910.03, Top=9.13 Test point 1 (8707.29, -7916.84, 7.23) in garage = TRUE Test point 2 (8714.38, -7911.03, 7.23) in garage = TRUE Garage=sa_png GRGX Type=246 OrigType=6 Pos=(7248.66, -9091.62, 1.39) DirA=(-1.00, -0.01), DirB=(-0.00, -1.00) Left=7235.69, Right=7248.66, Front=-9107.79, Back=-9091.62, Top=5.79 Test point 1 (7242.17, -9099.71, 3.59) in garage = TRUE Test point 2 (7247.66, -9092.63, 3.59) in garage = TRUE Garage=sa_sg1 GRGX Type=246 OrigType=3 Pos=(7225.06, -9071.68, 1.37) DirA=(0.99, 0.10), DirB=(0.01, 1.00) Left=7225.06, Right=7234.65, Front=-9071.68, Back=-9051.41, Top=5.77 Test point 1 (7229.86, -9061.54, 3.57) in garage = TRUE Test point 2 (7226.06, -9070.58, 3.57) in garage = TRUE Garage=sa_sg2 GRGX Type=246 OrigType=3 Pos=(7236.80, -9070.87, 1.38) DirA=(1.00, 0.00), DirB=(0.01, 1.00) Left=7236.80, Right=7246.26, Front=-9070.87, Back=-9052.34, Top=5.58 Test point 1 (7241.53, -9061.61, 3.48) in garage = TRUE Test point 2 (7237.81, -9069.87, 3.48) in garage = TRUE Garage=sa_sg3 GRGX Type=246 OrigType=3 Pos=(7248.17, -9070.78, 1.38) DirA=(1.00, 0.01), DirB=(0.00, 1.00) Left=7248.17, Right=7257.60, Front=-9070.78, Back=-9052.19, Top=5.58 Test point 1 (7252.88, -9061.48, 3.48) in garage = TRUE Test point 2 (7249.17, -9069.77, 3.48) in garage = TRUE Garage=sa_sg4 GRGX Type=246 OrigType=3 Pos=(7258.89, -9070.76, 1.51) DirA=(1.00, 0.00), DirB=(0.00, 1.00) Left=7258.89, Right=7268.37, Front=-9070.76, Back=-9052.27, Top=5.71 Test point 1 (7263.63, -9061.52, 3.61) in garage = TRUE Test point 2 (7259.89, -9069.76, 3.61) in garage = TRUE Garage=sa_sg5 GRGX Type=246 OrigType=3 Pos=(7283.75, -9091.73, 0.96) DirA=(-1.00, 0.01), DirB=(0.01, -1.00) Left=7271.69, Right=7283.90, Front=-9111.28, Back=-9091.66, Top=5.96 Test point 1 (7277.79, -9101.47, 3.46) in garage = TRUE Test point 2 (7282.76, -9092.72, 3.46) in garage = TRUE Garage=pl_ie GRGX Type=246 OrigType=5 Pos=(9411.70, 8332.55, 12.25) DirA=(0.00, -1.00), DirB=(1.00, 0.00) Left=9411.70, Right=9437.57, Front=8314.27, Back=8332.62, Top=16.85 Test point 1 (9424.63, 8323.45, 14.55) in garage = TRUE Test point 2 (9412.70, 8331.55, 14.55) in garage = TRUE Garage=svi_gr GRGX Type=246 OrigType=5 Pos=(6816.01, 9150.59, 58.15) DirA=(-1.00, 0.01), DirB=(0.00, -1.00) Left=6797.86, Right=6816.11, Front=9124.75, Back=9150.76, Top=62.35 Test point 1 (6806.98, 9137.75, 60.25) in garage = TRUE Test point 2 (6815.01, 9149.60, 60.25) in garage = TRUE Garage=pl_bms GRGX Type=246 OrigType=9 Pos=(9199.39, 8900.36, 13.70) DirA=(-1.00, -0.01), DirB=(0.07, -1.00) Left=9194.25, Right=9200.13, Front=8889.47, Back=8900.36, Top=16.70 Test point 1 (9197.19, 8894.92, 15.20) in garage = TRUE Test point 2 (9198.46, 8899.35, 15.20) in garage = TRUE Garage=si_bms GRGX Type=246 OrigType=7 Pos=(8291.04, 8425.99, 25.14) DirA=(0.08, -1.00), DirB=(1.00, 0.02) Left=8291.04, Right=8301.18, Front=8420.69, Back=8426.18, Top=28.62 Test point 1 (8296.11, 8423.44, 26.88) in garage = TRUE Test point 2 (8292.12, 8425.01, 26.88) in garage = TRUE Garage=sv_bms GRGX Type=246 OrigType=9 Pos=(6834.54, 9058.79, 57.57) DirA=(-1.00, 0.00), DirB=(0.06, -1.00) Left=6830.84, Right=6835.04, Front=9049.74, Back=9058.80, Top=61.77 Test point 1 (6832.94, 9054.27, 59.67) in garage = TRUE Test point 2 (6833.60, 9057.79, 59.67) in garage = TRUE Garage=salv_gr GRGX Type=246 OrigType=3 Pos=(9343.52, 8820.76, 49.65) DirA=(-0.04, -1.00), DirB=(1.00, -0.00) Left=9343.24, Right=9357.38, Front=8812.77, Back=8820.76, Top=53.85 Test point 1 (9350.31, 8816.77, 51.75) in garage = TRUE Test point 2 (9344.48, 8819.76, 51.75) in garage = TRUE Garage=pl_hsg GRGX Type=246 OrigType=3 Pos=(8805.94, 8689.28, 7.99) DirA=(-0.02, -1.00), DirB=(1.00, 0.00) Left=8805.85, Right=8812.50, Front=8684.90, Back=8689.29, Top=10.99 Test point 1 (8809.17, 8687.10, 9.49) in garage = TRUE Test point 2 (8806.92, 8688.28, 9.49) in garage = TRUE Garage=secu_gr GRGX Type=246 OrigType=4 Pos=(9356.46, 8194.40, 10.90) DirA=(1.00, 0.06), DirB=(0.00, 1.00) Left=9356.46, Right=9365.00, Front=8194.40, Back=8218.42, Top=17.10 Test point 1 (9360.73, 8206.41, 14.00) in garage = TRUE Test point 2 (9357.46, 8195.46, 14.00) in garage = TRUE Garage=lui_lgr GRGX Type=246 OrigType=4 Pos=(9005.47, 8588.68, 12.58) DirA=(-1.00, 0.03), DirB=(0.11, -0.99) Left=9002.33, Right=9006.27, Front=8581.69, Back=8588.77, Top=15.98 Test point 1 (9004.30, 8585.23, 14.28) in garage = TRUE Test point 2 (9004.58, 8587.71, 14.28) in garage = TRUE Garage=sih_gr GRGX Type=246 OrigType=4 Pos=(8030.92, 8524.80, 14.95) DirA=(-1.00, -0.00), DirB=(-0.01, -1.00) Left=8022.33, Right=8030.92, Front=8513.22, Back=8524.80, Top=19.45 Test point 1 (8026.63, 8519.01, 17.20) in garage = TRUE Test point 2 (8029.91, 8523.79, 17.20) in garage = TRUE Garage=king_gr GRGX Type=246 OrigType=4 Pos=(8177.83, 8206.01, 26.92) DirA=(-1.00, -0.05), DirB=(0.02, -1.00) Left=8173.28, Right=8178.02, Front=8196.93, Back=8206.01, Top=29.42 Test point 1 (8175.65, 8201.47, 28.17) in garage = TRUE Test point 2 (8176.85, 8204.96, 28.17) in garage = TRUE Garage=ch1_gr GRGX Type=246 OrigType=3 Pos=(7969.13, 8682.90, 15.15) DirA=(1.00, -0.01), DirB=(0.01, 1.00) Left=7969.13, Right=7974.96, Front=8682.84, Back=8692.27, Top=18.73 Test point 1 (7972.04, 8687.55, 16.94) in garage = TRUE Test point 2 (7970.14, 8683.89, 16.94) in garage = TRUE Garage=ch2_gr GRGX Type=246 OrigType=3 Pos=(7978.47, 8682.97, 15.15) DirA=(1.00, -0.02), DirB=(0.00, 1.00) Left=7978.47, Right=7984.17, Front=8682.83, Back=8692.22, Top=18.65 Test point 1 (7981.32, 8687.53, 16.90) in garage = TRUE Test point 2 (7979.47, 8683.95, 16.90) in garage = TRUE Garage=ch3_gr GRGX Type=246 OrigType=3 Pos=(7946.15, 8645.16, 15.16) DirA=(-0.02, 1.00), DirB=(-1.00, -0.00) Left=7939.44, Right=7946.15, Front=8645.14, Back=8652.77, Top=18.86 Test point 1 (7942.79, 8648.96, 17.01) in garage = TRUE Test point 2 (7945.13, 8646.16, 17.01) in garage = TRUE Garage=ch4_gr GRGX Type=246 OrigType=3 Pos=(7966.83, 8622.99, 15.20) DirA=(-1.00, 0.00), DirB=(-0.00, -1.00) Left=7958.07, Right=7966.83, Front=8612.03, Back=8623.00, Top=19.20 Test point 1 (7962.45, 8617.52, 17.20) in garage = TRUE Test point 2 (7965.83, 8621.99, 17.20) in garage = TRUE Garage=ch5_gr GRGX Type=246 OrigType=3 Pos=(7946.10, 8656.45, 15.16) DirA=(-0.00, 1.00), DirB=(-1.00, 0.01) Left=7939.69, Right=7946.10, Front=8656.45, Back=8663.27, Top=18.96 Test point 1 (7942.90, 8659.86, 17.06) in garage = TRUE Test point 2 (7945.10, 8657.46, 17.06) in garage = TRUE Garage=ch6_gr GRGX Type=246 OrigType=3 Pos=(7975.64, 8622.92, 15.20) DirA=(-1.00, -0.02), DirB=(-0.00, -1.00) Left=7968.02, Right=7975.64, Front=8612.04, Back=8622.92, Top=19.20 Test point 1 (7971.83, 8617.48, 17.20) in garage = TRUE Test point 2 (7974.64, 8621.90, 17.20) in garage = TRUE Garage=ken_gr GRGX Type=246 OrigType=4 Pos=(8291.16, 8497.07, 25.11) DirA=(-0.02, -1.00), DirB=(1.00, 0.00) Left=8291.03, Right=8298.94, Front=8489.45, Back=8497.07, Top=28.95 Test point 1 (8294.99, 8493.26, 27.03) in garage = TRUE Test point 2 (8292.14, 8496.07, 27.03) in garage = TRUE Garage=ray_gr GRGX Type=246 OrigType=4 Pos=(8150.40, 8007.10, 20.99) DirA=(-0.01, -1.00), DirB=(1.00, 0.00) Left=8150.34, Right=8160.80, Front=8000.13, Back=8007.10, Top=24.39 Test point 1 (8155.57, 8003.62, 22.69) in garage = TRUE Test point 2 (8151.39, 8006.10, 22.69) in garage = TRUE Garage=mcaf_gr GRGX Type=246 OrigType=3 Pos=(8291.31, 8565.11, 20.27) DirA=(-0.03, -1.00), DirB=(1.00, 0.01) Left=8291.15, Right=8299.88, Front=8559.64, Back=8565.18, Top=23.63 Test point 1 (8295.52, 8562.41, 21.95) in garage = TRUE Test point 2 (8292.28, 8564.12, 21.95) in garage = TRUE Garage=svl_gr GRGX Type=246 OrigType=3 Pos=(7252.54, 8953.69, 17.85) DirA=(-0.08, 1.00), DirB=(-1.00, -0.05) Left=7244.47, Right=7252.54, Front=8953.34, Back=8958.71, Top=22.95 Test point 1 (7248.50, 8956.03, 20.40) in garage = TRUE Test point 2 (7251.46, 8954.64, 20.40) in garage = TRUE Garage=svc_gr GRGX Type=246 OrigType=3 Pos=(7252.30, 8959.15, 17.95) DirA=(0.01, 1.00), DirB=(-0.99, -0.10) Left=7244.62, Right=7252.33, Front=8958.36, Back=8963.67, Top=22.95 Test point 1 (7248.48, 8961.02, 20.45) in garage = TRUE Test point 2 (7251.31, 8960.05, 20.45) in garage = TRUE Garage=svr_gr GRGX Type=246 OrigType=3 Pos=(7252.31, 8964.35, 17.95) DirA=(0.05, 1.00), DirB=(-1.00, -0.06) Left=7244.72, Right=7252.55, Front=8963.92, Back=8968.95, Top=22.95 Test point 1 (7248.63, 8966.44, 20.45) in garage = TRUE Test point 2 (7251.36, 8965.29, 20.45) in garage = TRUE Garage=dice_gr GRGX Type=246 OrigType=4 Pos=(9128.94, 8758.24, 22.62) DirA=(-0.03, -1.00), DirB=(0.99, 0.11) Left=9128.82, Right=9135.59, Front=8754.73, Back=8758.99, Top=26.08 Test point 1 (9132.21, 8756.86, 24.35) in garage = TRUE Test point 2 (9129.90, 8757.35, 24.35) in garage = TRUE Garage=dpdo_gr GRGX Type=246 OrigType=4 Pos=(7072.33, 8834.79, 32.85) DirA=(-0.02, -1.00), DirB=(1.00, -0.00) Left=7072.20, Right=7090.34, Front=8827.97, Back=8834.79, Top=37.85 Test point 1 (7081.27, 8831.38, 35.35) in garage = TRUE Test point 2 (7073.31, 8833.79, 35.35) in garage = TRUE Garage=dons_gr GRGX Type=246 OrigType=4 Pos=(6877.16, 8923.64, 39.92) DirA=(0.03, 1.00), DirB=(-1.00, -0.08) Left=6865.73, Right=6877.34, Front=8922.71, Back=8930.05, Top=44.52 Test point 1 (6871.54, 8926.38, 42.22) in garage = TRUE Test point 2 (6876.19, 8924.56, 42.22) in garage = TRUE Garage=ptr_gr GRGX Type=246 OrigType=4 Pos=(9268.27, 8683.96, 48.75) DirA=(0.02, 1.00), DirB=(-1.00, 0.00) Left=9261.71, Right=9268.35, Front=8683.96, Back=8688.79, Top=50.75 Test point 1 (9265.03, 8686.38, 49.75) in garage = TRUE Test point 2 (9267.29, 8684.96, 49.75) in garage = TRUE Garage=pan_gr GRGX Type=246 OrigType=4 Pos=(9000.36, 8423.45, 12.45) DirA=(0.00, 1.00), DirB=(-1.00, -0.01) Left=8993.65, Right=9000.38, Front=8423.40, Back=8428.27, Top=15.65 Test point 1 (8997.02, 8425.83, 14.05) in garage = TRUE Test point 2 (8999.36, 8424.44, 14.05) in garage = TRUE Garage=lcss_gr GRGX Type=246 OrigType=4 Pos=(8209.91, 8569.28, 24.97) DirA=(1.00, 0.02), DirB=(-0.03, 1.00) Left=8209.69, Right=8218.16, Front=8569.28, Back=8577.82, Top=28.57 Test point 1 (8213.93, 8573.55, 26.77) in garage = TRUE Test point 2 (8210.88, 8570.30, 26.77) in garage = TRUE Garage=lm_gr GRGX Type=246 OrigType=4 Pos=(8007.83, 7440.20, 22.80) DirA=(-0.03, -1.00), DirB=(1.00, -0.01) Left=8007.57, Right=8035.30, Front=7431.11, Back=7440.20, Top=26.80 Test point 1 (8021.43, 7435.66, 24.80) in garage = TRUE Test point 2 (8008.80, 7439.19, 24.80) in garage = TRUE Garage=pl_pns GRGX Type=246 OrigType=6 Pos=(8843.41, 8645.90, 10.10) DirA=(-1.00, -0.01), DirB=(0.02, -1.00) Left=8837.39, Right=8843.62, Front=8632.52, Back=8645.90, Top=15.30 Test point 1 (8840.50, 8639.21, 12.70) in garage = TRUE Test point 2 (8842.43, 8644.89, 12.70) in garage = TRUE Garage=si_pns GRGX Type=246 OrigType=6 Pos=(8291.07, 8508.25, 25.46) DirA=(0.01, -1.00), DirB=(1.00, 0.00) Left=8291.07, Right=8300.54, Front=8502.59, Back=8508.27, Top=28.96 Test point 1 (8295.80, 8505.43, 27.21) in garage = TRUE Test point 2 (8292.08, 8507.25, 27.21) in garage = TRUE Garage=sv_pns GRGX Type=246 OrigType=6 Pos=(6776.36, 9032.49, 57.77) DirA=(-0.07, 1.00), DirB=(-1.00, -0.02) Left=6767.02, Right=6776.36, Front=9032.34, Back=9037.29, Top=61.97 Test point 1 (6771.69, 9034.81, 59.87) in garage = TRUE Test point 2 (6775.29, 9033.47, 59.87) in garage = TRUE Using this code Spoiler CDebugLog::Trace("List of CUSTOM garages:"); for (CGarageBase* gp : Garages()) { //CDebugLog::Trace("\t %s", gp->Name); CDebugLog::Trace("\tGarage=%s %s Type=%d OrigType=%d Pos=(%4.2f, %4.2f, %4.2f) " "DirA=(%4.2f, %4.2f), DirB=(%4.2f, %4.2f)", gp->Name, (gp->IsGRGX()? "GRGX": "ORIG"), gp->Type, gp->OriginalType, gp->Position.x, gp->Position.y, gp->Position.z, gp->DirectionA.x, gp->DirectionA.y, gp->DirectionB.x, gp->DirectionB.y); CDebugLog::Trace("\t\tLeft=%4.2f, Right=%4.2f, Front=%4.2f, Back=%4.2f, Top=%4.2f", gp->Left, gp->Right, gp->Front, gp->Back, gp->TopZ); //Test if a test point is recognized in the garage RwV3D point; point.x = (gp->Left + gp->Right) / 2.0; point.y = (gp->Front + gp->Back) / 2.0; point.z = (gp->Position.z + gp->TopZ) / 2.0; bool pointInGarage = gp->IsPointWithinGarage(point); CDebugLog::Trace("\t\tTest point 1 (%4.2f, %4.2f, %4.2f) in garage = %s", point.x, point.y, point.z, (pointInGarage?"TRUE":"FALSE") ); point.x = (gp->Position.x + gp->DirectionA.x + gp->DirectionB.x); point.y = (gp->Position.y + gp->DirectionA.y + gp->DirectionB.y); point.z = (gp->Position.z + gp->TopZ) / 2.0; pointInGarage = gp->IsPointWithinGarage(point); CDebugLog::Trace("\t\tTest point 2 (%4.2f, %4.2f, %4.2f) in garage = %s\n", point.x, point.y, point.z, (pointInGarage ? "TRUE" : "FALSE")); } Edited August 26, 2018 by goodidea82 Link to comment Share on other sites More sharing options...
goodidea82 Posted August 26, 2018 Share Posted August 26, 2018 Solved. The problem is indeed the definition of the garage-z coordinates in SAxVCxLC. When changing the z-coordinates in the definition, then IsPointWithinGarage(vehicleCoords) evaluates to true, and the car is saved in the garage. I wrote this code: Spoiler const RwV3D vehicleCoords = GetCoords(&pVehicle->__parent.__parent); bool pointInGarage = this->IsPointWithinGarage(vehicleCoords); CDebugLog::Trace("\tGarage=%s. Car (%4.2f, %4.2f, %4.2f) Left=%4.2f, Right=%4.2f, Front=%4.2f, Back=%4.2f, Pos.z=%4.2f, Top=%4.2f, pointInGarage=%d", this->Name, vehicleCoords.x, vehicleCoords.y, vehicleCoords.z, this->Left, this->Right, this->Front, this->Back, this->Position.z, this->TopZ, pointInGarage); if (this->Left <= vehicleCoords.x && vehicleCoords.x <= this->Right && this->Front <= vehicleCoords.y && vehicleCoords.y <= this->Back) { CDebugLog::Trace("\tIS INSIDE Left,Right,Front,Back"); if (Position.z <= vehicleCoords.z && vehicleCoords.z <= this->TopZ) { CDebugLog::Trace("\tIS INSIDE Pos.z, TopZ"); } else { CDebugLog::Trace("\tIS NOT INSIDE Pos.z, TopZ !"); } CGarageBase* gp = this; CDebugLog::Trace("\tGarage=%s %s Type=%d OrigType=%d Pos=(%4.2f, %4.2f, %4.2f) " "DirA=(%4.2f, %4.2f), DirB=(%4.2f, %4.2f)", gp->Name, (gp->IsGRGX() ? "GRGX" : "ORIG"), gp->Type, gp->OriginalType, gp->Position.x, gp->Position.y, gp->Position.z, gp->DirectionA.x, gp->DirectionA.y, gp->DirectionB.x, gp->DirectionB.y); //CDebugLog::Trace("\t\tLeft=%4.2f, Right=%4.2f, Front=%4.2f, Back=%4.2f, Top=%4.2f",gp->Left, gp->Right, gp->Front, gp->Back, gp->TopZ); } and got this output: Spoiler CCustomGarage::StoreAndRemoveCarsForThisGarage(...) Garage=man_sgr. Car (8026.41, -8726.04, 5.86) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7990.90, -8653.99, 5.92) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7997.96, -8705.68, 6.26) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7859.00, -8823.00, 35.23) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7855.30, -8783.70, 7.56) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7871.01, -8882.09, 5.43) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7891.31, -8794.69, 7.45) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 IS INSIDE Left,Right,Front,Back IS NOT INSIDE Pos.z, TopZ ! Garage=man_sgr GRGX Type=246 OrigType=3 Pos=(7896.80, -8789.68, 8.38) DirA=(-1.00, -0.00), DirB=(-0.01, -1.00) Garage=man_sgr. Car (7998.63, -8727.40, 5.77) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7899.19, -8784.90, 7.34) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 I will soon upload an updated version of grgx which outputs in the log when a car in withing the xy-boundaries of the garage, and if yes it logs if the z-boundaries are satisfied. This way it should be easy to find and fix the garage coordinates in the IPL file. PlatinumSerb 1 Link to comment Share on other sites More sharing options...
Grinch_ Posted August 26, 2018 Share Posted August 26, 2018 21 minutes ago, goodidea82 said: Solved. The problem is indeed the definition of the garage-z coordinates in SAxVCxLC. When changing the z-coordinates in the definition, then IsPointWithinGarage(vehicleCoords) evaluates to true, and the car is saved in the garage. I wrote this code: Reveal hidden contents const RwV3D vehicleCoords = GetCoords(&pVehicle->__parent.__parent); bool pointInGarage = this->IsPointWithinGarage(vehicleCoords); CDebugLog::Trace("\tGarage=%s. Car (%4.2f, %4.2f, %4.2f) Left=%4.2f, Right=%4.2f, Front=%4.2f, Back=%4.2f, Pos.z=%4.2f, Top=%4.2f, pointInGarage=%d", this->Name, vehicleCoords.x, vehicleCoords.y, vehicleCoords.z, this->Left, this->Right, this->Front, this->Back, this->Position.z, this->TopZ, pointInGarage); if (this->Left <= vehicleCoords.x && vehicleCoords.x <= this->Right && this->Front <= vehicleCoords.y && vehicleCoords.y <= this->Back) { CDebugLog::Trace("\tIS INSIDE Left,Right,Front,Back"); if (Position.z <= vehicleCoords.z && vehicleCoords.z <= this->TopZ) { CDebugLog::Trace("\tIS INSIDE Pos.z, TopZ"); } else { CDebugLog::Trace("\tIS NOT INSIDE Pos.z, TopZ !"); } CGarageBase* gp = this; CDebugLog::Trace("\tGarage=%s %s Type=%d OrigType=%d Pos=(%4.2f, %4.2f, %4.2f) " "DirA=(%4.2f, %4.2f), DirB=(%4.2f, %4.2f)", gp->Name, (gp->IsGRGX() ? "GRGX" : "ORIG"), gp->Type, gp->OriginalType, gp->Position.x, gp->Position.y, gp->Position.z, gp->DirectionA.x, gp->DirectionA.y, gp->DirectionB.x, gp->DirectionB.y); //CDebugLog::Trace("\t\tLeft=%4.2f, Right=%4.2f, Front=%4.2f, Back=%4.2f, Top=%4.2f",gp->Left, gp->Right, gp->Front, gp->Back, gp->TopZ); } and got this output: Reveal hidden contents CCustomGarage::StoreAndRemoveCarsForThisGarage(...) Garage=man_sgr. Car (8026.41, -8726.04, 5.86) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7990.90, -8653.99, 5.92) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7997.96, -8705.68, 6.26) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7859.00, -8823.00, 35.23) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7855.30, -8783.70, 7.56) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7871.01, -8882.09, 5.43) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7891.31, -8794.69, 7.45) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 IS INSIDE Left,Right,Front,Back IS NOT INSIDE Pos.z, TopZ ! Garage=man_sgr GRGX Type=246 OrigType=3 Pos=(7896.80, -8789.68, 8.38) DirA=(-1.00, -0.00), DirB=(-0.01, -1.00) Garage=man_sgr. Car (7998.63, -8727.40, 5.77) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 Garage=man_sgr. Car (7899.19, -8784.90, 7.34) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 I will soon upload an updated version of grgx which outputs in the log when a car in withing the xy-boundaries of the garage, and if yes it logs if the z-boundaries are satisfied. This way it should be easy to find and fix the garage coordinates in the IPL file. So what I need to do?I mean did i do something wrong with the co-ordinates or something? Link to comment Share on other sites More sharing options...
goodidea82 Posted August 26, 2018 Share Posted August 26, 2018 (edited) @Inan-AhammadAll the time I have tested only the garage in the Diaz mansion (man_sgr). I don't know who defined it, I only know that the z-coordinates of the garage are wrong and need to be fixed somehow. I have just uploaded the new version of grgx to both GitHub repositories: to GarageExtender and to SAxVCxLC. So just do a git pull. The new version is compiled using release config (solving the issue that @HeicoDE had). And the new version (compiled for release) produces a grgx.log file wich additional information for garages. In particular, when a car is in the XY-bounds of the garage, but not in the Z-bounds, then the log contains something like this: Spoiler CCustomGarage::StoreAndRemoveCarsForThisGarage(...) Garage=man_sgr. Car (7890.25, -8794.26, 7.45) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 WARNING: Car.xy is inside the XY-garage bounds Left, Right, Front, Back, but Car.z IS NOT INSIDE Pos.z, TopZ ! Perhaps the garage coordinates must be fixed. One thing: it is not required to create a savefile to get this warning! It is sufficient to place a car in the garage and wait until the door has closed. This is not enough to save the car, but it is enough to generate the warning. So basically all the custom grgx garages must be tested and fixed where needed. Edited August 26, 2018 by goodidea82 Link to comment Share on other sites More sharing options...
Grinch_ Posted August 26, 2018 Share Posted August 26, 2018 (edited) 40 minutes ago, goodidea82 said: @Inan-AhammadAll the time I have tested only the garage in the Diaz mansion (man_sgr). I don't know who defined it, I only know that the z-coordinates of the garage are wrong and need to be fixed somehow. I have just uploaded the new version of grgx to both GitHub repositories: to GarageExtender and to SAxVCxLC. So just do a git pull. The new version is compiled using release config (solving the issue that @HeicoDE had). And the new version (compiled for release) produces a grgx.log file wich additional information for garages. In particular, when a car is in the XY-bounds of the garage, but not in the Z-bounds, then the log contains something like this: Reveal hidden contents CCustomGarage::StoreAndRemoveCarsForThisGarage(...) Garage=man_sgr. Car (7890.25, -8794.26, 7.45) Left=7887.86, Right=7896.80, Front=-8800.06, Back=-8789.68, Pos.z=8.38, Top=11.38, pointInGarage=0 WARNING: Car.xy is inside the XY-garage bounds Left, Right, Front, Back, but Car.z IS NOT INSIDE Pos.z, TopZ ! Perhaps the garage coordinates must be fixed. One thing: it is not required to create a savefile to get this warning! It is sufficient to place a car in the garage and wait until the door has closed. This is not enough to save the car, but it is enough to generate the warning. So basically all the custom grgx garages must be tested and fixed where needed. Ok.So I'll be lowering the z co ordinates a bit and testing the garages. Quote All the time I have tested only the garage in the Diaz mansion (man_sgr). I don't know who defined it, I only know that the z-coordinates of the garage are wrong and need to be fixed somehow. I did the garages myself.So theres no doubt that its my fault.I'll look at it again. Edited August 26, 2018 by Inan-Ahammad goodidea82 1 Link to comment Share on other sites More sharing options...
goodidea82 Posted August 26, 2018 Share Posted August 26, 2018 (edited) @Inan-Ahammad: When lowering the coordinates, make sure that the topZ coordinate leaves enough space to the top. Let's move SAxVCxLC specific discussions back to SAxVCxLC. Edited August 26, 2018 by goodidea82 Link to comment Share on other sites More sharing options...
Namaloom Posted November 7, 2018 Share Posted November 7, 2018 Why grgx not works with EU version of game, it works fine when i try it on the US version, the given example in the package and LS Property Pack mod works smoothly under the US version of game but it crashes game when i start a new game and load bar is completed the game crashes under EU version. Link to comment Share on other sites More sharing options...
Grinch_ Posted November 7, 2018 Share Posted November 7, 2018 3 minutes ago, Namaloom said: Why grgx not works with EU version of game, it works fine when i try it on the US version, the given example in the package and LS Property Pack mod works smoothly under the US version of game but it crashes game when i start a new game and load bar is completed the game crashes under EU version. probably because the memory addresses aren't the same. Link to comment Share on other sites More sharing options...
Namaloom Posted November 7, 2018 Share Posted November 7, 2018 13 minutes ago, Grinch_ said: probably because the memory addresses aren't the same. Heres the exact error, So is there anything that i can do to make it work with EU Version? because US Version makes the wrecks disappear quickly for special vehicles in mission House Party so i cant play in US Version, http://prntscr.com/lfbgrm Link to comment Share on other sites More sharing options...
Grinch_ Posted November 7, 2018 Share Posted November 7, 2018 3 hours ago, Namaloom said: So is there anything that i can do to make it work with EU Version? If you don't know C++ well.Then no. Link to comment Share on other sites More sharing options...
Namaloom Posted November 7, 2018 Share Posted November 7, 2018 2 hours ago, Grinch_ said: If you don't know C++ well.Then no. i know cpp, can you guide me plz what to change in the code? Link to comment Share on other sites More sharing options...
Namaloom Posted November 13, 2018 Share Posted November 13, 2018 On 12/3/2012 at 2:58 AM, LINK/2012 said: Garage eXtender Garage eXtender (GRGX) is a plugin for GTA San Andreas that adds more options and more garage slots into the game. San Andreas have 50 slots for garages, but those slots are already used by default, so no mapper can create custom garages for their maps, that's sad... This plugin solves this and also add more possibilities into garage system, like parking garages (as in GTA IV), new door movement styles, more garage opcodes... This plugin can be used by scripters and mappers. Wait, scripters? We can't create garages by script! Well, with grgx you can! It restores the create_garage opcode from III\VC, and other opcodes too, try it. Why you dont modify it to work with EU version of the game plz? it is the only garage extension that is worth adding in gta unlike nubbles 80 car park or save 256 cars as they dont save the special immunities of the vehicle like yours. Link to comment Share on other sites More sharing options...
Chicobanana Posted April 19, 2020 Share Posted April 19, 2020 I don't know if it is too late to mention this and try to solve it, but I'm having some trouble with this mod: I'm trying to use it only to increase the limit of 4 vehicles we can store at the hangar on the airfield. The "num_cars" parameter, however, doesn't seem to work if set on any number above 4 (or -1). The hangar still only saves up to 4 vehicles. What I did was replace the line for the hangar garage on the IPL file to: 383.843, 2433.28, 15.166, 426.012, 2433.28, 383.843, 2476.13, 24.6886, 0, -1, dhangar, 7, 3, 24 The coordinates weren't altered, so I don't think the z coordinate problem mentioned above is an issue here, the door opening system behaves accordingly as I alter it's parameter, and even the limit of vehicles works fine if set on 4 or less. It just doesn't save more than 4 vehicles even if it's parameter is set on any number above it. The log I got from using the garage with the code above on the IPL file was: Spoiler Log started Compiled date and time Aug 26 2018 @ 12:41:12 with compiler _MSC_VER = 1900 UNICODE encoding is NOT used. _CPPRTTI _DLL _MSC_BUILD 1 _MSVC_LANG 201402 _NATIVE_WCHAR_T_DEFINED _WCHAR_T_DEFINED _WIN32 CStreaming::aInfoForModel=8E4CC0 ARRAY_ModelInfo (*(DWORD**)(0x40122D))=A9B0C8 ARRAY_ModelInfo (*(DWORD**)(0x4C5538+3))=A9B0C8 CGarages::Patch() with is HOODLUM: true Parsing grge line: 1640.37 -1520.07 12.5118 1647.6 -1520.07 1640.37 -1512.45 18.1245 5 1 mul_lan Is GRGX: false Parsing grge line: 1523.92 -1653.23 4.72837 1556.92 -1653.23 1523.92 -1633.23 12.2284 5 33 imp_la Is GRGX: false Parsing grge line: 1873.97 -2096.55 12.487 1880.88 -2096.55 1873.97 -2087.62 15.7681 5 1 duf_LAS Is GRGX: false Parsing grge line: 1843.91 -1858.8 12.3645 1857.1 -1858.8 1843.91 -1853.79 16.1118 1 2 lasbomb Is GRGX: false Parsing grge line: 1809.46 -2150.67 12.4283 1809.46 -2142.75 1798.82 -2150.67 16.4347 1 1 modgLAS Is GRGX: false Parsing grge line: 1694.8 -2088.7 12.3636 1703 -2088.7 1694.8 -2077.48 16.2236 5 31 carlas1 Is GRGX: false Parsing grge line: 2738.4 -2012.55 12.5759 2743.78 -2012.55 2738.4 -2004.41 17.8299 1 1 burg_lk Is GRGX: false Parsing grge line: 2640.78 -2049.99 12.543 2648.96 -2049.99 2640.78 -2039.55 16.206 1 1 modlast Is GRGX: false Parsing grge line: 2056.6 -1835.9 12.5443 2071.3 -1835.9 2056.6 -1826.97 18.5443 1 5 sprLAe Is GRGX: false Parsing grge line: 2502.31 -1699.36 12.4323 2508.61 -1699.36 2502.31 -1691.01 16.5666 1 16 cjsafe Is GRGX: false Parsing grge line: 1038.24 -1025.67 31.1027 1068.35 -1025.67 1038.24 -995.044 39.1027 1 1 bodLAwN Is GRGX: false Parsing grge line: 1021.81 -1018.71 30.9081 1021.81 -1029.53 1027.93 -1018.71 36.9081 1 5 sprLAe Is GRGX: false Parsing grge line: 491.103 -1747.55 9.45516 492.717 -1735.77 481.972 -1746.3 17.565 1 5 spLAw2 Is GRGX: false Parsing grge line: 319.326 -1768.93 3.35686 325.625 -1768.93 319.326 -1759.57 7.49114 1 17 beacsv Is GRGX: false Parsing grge line: 1352.58 -636.657 108.135 1359.02 -634.418 1349.56 -627.962 113.135 1 32 CEsafe1 Is GRGX: false Parsing grge line: -2728.53 212.295 3.45112 -2716.36 212.295 -2728.53 222.669 8.68705 1 5 mds1SFS Is GRGX: false Parsing grge line: -2735.46 60.7331 3.07005 -2725.82 60.7331 -2735.46 72.8828 7.92155 1 1 tbon Is GRGX: false Parsing grge line: -2454.02 -131.556 25.0886 -2442.38 -131.556 -2454.02 -113.935 29.8006 1 42 svgsfs1 Is GRGX: false Parsing grge line: -1941.04 251.714 33.4274 -1941.04 239.541 -1930.66 251.714 38.6634 1 1 mdsSFSe Is GRGX: false Parsing grge line: -1908.93 292.353 40.0413 -1908.93 277.989 -1900.11 292.353 45.539 1 5 sprsfse Is GRGX: false Parsing grge line: -2112.48 -21.214 34.303 -2102.48 -21.214 -2112.48 -11.214 40.303 1 1 brgSFSE Is GRGX: false Parsing grge line: -2043.1 118.609 27.821 -2021.91 118.609 -2043.1 129.609 32.821 1 41 LCKSfse Is GRGX: false Parsing grge line: -2057.35 150.803 27.8286 -2038.91 150.803 -2057.35 182.876 33.2286 1 1 hbgdSFS Is GRGX: false Parsing grge line: -1694.78 1033.15 44.1937 -1681.59 1033.15 -1694.78 1038.16 47.941 1 2 Is GRGX: false Parsing grge line: -1794.15 1429.69 4.37321 -1787.18 1429.69 -1794.15 1441.37 14.3732 1 1 Is GRGX: false Parsing grge line: -2171.43 649.416 49.8742 -2161.79 649.416 -2171.43 661.778 58.1902 3 1 fdorsfe Is GRGX: false Parsing grge line: -1790.97 1209.71 23.763 -1782.58 1209.71 -1790.97 1221.46 28.963 1 1 michdr Is GRGX: false Parsing grge line: -2108.92 886.553 75.566 -2101.36 886.553 -2108.92 896.807 80.166 7 39 sav1sfe Is GRGX: false Parsing grge line: -1652.78 647.502 -6.04924 -1617.92 647.502 -1652.78 671.973 0.713446 4 34 imp_sf Is GRGX: false Parsing grge line: -2430.13 1013.71 49.3413 -2421.2 1013.71 -2430.13 1027.76 55.3413 1 5 sprsfw Is GRGX: false Parsing grge line: -2699.12 821.489 49.0042 -2692.9 821.489 -2699.12 831.208 53.653 1 40 sav1sfw Is GRGX: false Parsing grge line: 2218.06 2448.06 -8.43807 2234.47 2448.06 2218.06 2467.56 -1.5463 5 35 imp_lv Is GRGX: false Parsing grge line: 1550.98 1155.36 8.97329 1621.82 1155.36 1550.98 1224.03 29.8005 4 44 vgshngr Is GRGX: false Parsing grge line: 2602.6 1438.84 9.8337 2616.4 1438.84 2602.6 1462.11 15.4891 1 1 vgElock Is GRGX: false Parsing grge line: 2389.6 1483.26 9.81843 2398.11 1483.26 2389.6 1497.84 15.6841 5 5 timy1 Is GRGX: false Parsing grge line: 2382.28 1044 9.8337 2391.14 1044 2382.28 1059.73 13.9338 1 1 vEcmod Is GRGX: false Parsing grge line: 2449.5 695.018 10.4742 2458.31 695.018 2449.5 700.227 12.9155 1 18 vEsvgrg Is GRGX: false Parsing grge line: 2002.96 2303.72 9.61706 2010.36 2303.72 2002.96 2317.59 13.9914 1 2 blob2 Is GRGX: false Parsing grge line: 1968.23 2157.88 9.59696 1983.32 2157.88 1968.23 2167.03 16.2367 1 5 blob1 Is GRGX: false Parsing grge line: 1408.65 1899.52 10.115 1417.55 1899.52 1408.65 1904.91 13.1693 1 30 blob6 Is GRGX: false Parsing grge line: 1269.2 2525.14 9.80013 1278.72 2525.14 1269.2 2534.49 12.9784 1 27 blob69 Is GRGX: false Parsing grge line: 929.554 2008.59 10.115 938.452 2008.59 929.554 2013.99 13.1693 1 28 blob7 Is GRGX: false Parsing grge line: -1424.11 2576.61 54.8156 -1416.85 2576.61 -1424.11 2590.84 60.8747 1 5 CNspray Is GRGX: false Parsing grge line: -103.636 1112.42 18.7017 -96.3613 1112.42 -103.636 1125.79 24.5489 1 5 CN2spry Is GRGX: false Parsing grge line: -364.439 1194.37 18.597 -356.214 1194.37 -364.439 1202.97 22.3812 1 24 cn2gar1 Is GRGX: false Parsing grge line: 430.059 2542.31 15.166 442.896 2542.31 430.059 2550.75 19.5951 1 25 cn2gar2 Is GRGX: false Parsing grge line: -397.297 2223.17 41.3824 -389.058 2225.38 -398.878 2229.07 44.6359 1 1 ghostdr Is GRGX: false Parsing grge line: 383.843 2433.28 15.166 426.012 2433.28 383.843 2476.13 24.6886 0 -1 dhangar 7 3 24 Is GRGX: true CGarageBase constructed with size: 7 = 7 Added GRGX. Name: dhangar Can store vehicle: true Is Parking Garage: false Is GARAGE_DONT_SAVE: false Width=42.2, Depth=42.8, Height= 9.5, dotProduct(dirA, dirB)=0.00 Parsing grge line: -2114.42 -2462.27 29.4809 -2109.36 -2466.37 -2111.68 -2458.88 32.3474 1 1 amumis Is GRGX: false Parsing grge line: 715.806 -462.403 14.9635 724.293 -462.403 715.806 -447.29 21.4398 1 5 CEspray Is GRGX: false Parsing grge line: 2227.6 168.649 26.4635 2234.93 168.649 2227.6 176.333 29.4635 1 29 burbdoo Is GRGX: false Parsing grge line: 783.155 -492.75 16.3361 789.029 -492.75 783.155 -485.118 19.3361 1 26 burbdo2 Is GRGX: false CGarages::OnLoad() called with slot 1 CCustomGarage::StoreAndRemoveCarsForThisGarage(...) Stored car 1 Stored car 2 Stored car 3 Stored car 4 Stored car 5 CCustomGarage::StoreAndRemoveCarsForThisGarage(...) CCustomGarage::StoreAndRemoveCarsForThisGarage(...) CCustomGarage::StoreAndRemoveCarsForThisGarage(...) CGarageBase dhangar destructed Log finished This was obtained after an attempt to save 5 vehicles in it. Only 4 were there afterwards. Does anyone know if I'm missing something in order to get this to work? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now