groupvehs.pwn 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. forward LoadDynamicGroupVehicles();
  2. public LoadDynamicGroupVehicles()
  3. {
  4. mysql_tquery(MainPipeline, "SELECT * FROM `groupvehs`", "DynVeh_QueryFinish", "ii", GV_QUERY_LOAD, 0);
  5. return 1;
  6. }
  7. forward DynVeh_QueryFinish(iType, iExtraID);
  8. public DynVeh_QueryFinish(iType, iExtraID) {
  9. new
  10. iRows,
  11. iIndex,
  12. i = 0,
  13. sqlid,
  14. szResult[128];
  15. cache_get_row_count(iRows);
  16. switch(iType) {
  17. case GV_QUERY_LOAD:
  18. {
  19. mysql_format(MainPipeline, szResult, sizeof(szResult), "UPDATE `groupvehs` SET `SpawnedID` = %d", INVALID_VEHICLE_ID);
  20. mysql_tquery(MainPipeline, szResult, "OnQueryFinish", "i", SENDDATA_THREAD);
  21. while((iIndex < iRows) && (iIndex < MAX_DYNAMIC_VEHICLES)) {
  22. cache_get_value_name_int(iIndex, "id", sqlid);
  23. if((sqlid >= MAX_DYNAMIC_VEHICLES)) {// Array bounds check. Use it.
  24. mysql_format(MainPipeline, szResult, sizeof(szResult), "DELETE FROM `groupvehs` WHERE `id` = %d", sqlid);
  25. mysql_tquery(MainPipeline, szResult, "OnQueryFinish", "i", SENDDATA_THREAD);
  26. return printf("SQL ID %d exceeds Max Dynamic Vehicles", sqlid);
  27. }
  28. cache_get_value_name_int(iIndex, "gID", DynVehicleInfo[sqlid][gv_igID]);
  29. cache_get_value_name_int(iIndex, "gDivID", DynVehicleInfo[sqlid][gv_igDivID]);
  30. cache_get_value_name_int(iIndex, "rID", DynVehicleInfo[sqlid][gv_irID]);
  31. cache_get_value_name_int(iIndex, "vModel", DynVehicleInfo[sqlid][gv_iModel]);
  32. switch(DynVehicleInfo[sqlid][gv_iModel]) {
  33. case 538, 537, 449, 590, 569, 570: {
  34. DynVehicleInfo[sqlid][gv_iModel] = 0;
  35. }
  36. }
  37. cache_get_value_name(iIndex, "vPlate", DynVehicleInfo[sqlid][gv_iPlate], 32);
  38. cache_get_value_name_float(iIndex, "vMaxHealth", DynVehicleInfo[sqlid][gv_fMaxHealth]);
  39. cache_get_value_name_int(iIndex, "vType", DynVehicleInfo[sqlid][gv_iType]);
  40. cache_get_value_name_int(iIndex, "vLoadMax", DynVehicleInfo[sqlid][gv_iLoadMax]);
  41. if(DynVehicleInfo[sqlid][gv_iLoadMax] > 6) {
  42. DynVehicleInfo[sqlid][gv_iLoadMax] = 6;
  43. }
  44. cache_get_value_name_int(iIndex, "vCol1", DynVehicleInfo[sqlid][gv_iCol1]);
  45. cache_get_value_name_int(iIndex, "vCol2", DynVehicleInfo[sqlid][gv_iCol2]);
  46. cache_get_value_name_float(iIndex, "vX", DynVehicleInfo[sqlid][gv_fX]);
  47. cache_get_value_name_float(iIndex, "vY", DynVehicleInfo[sqlid][gv_fY]);
  48. cache_get_value_name_float(iIndex, "vZ", DynVehicleInfo[sqlid][gv_fZ]);
  49. cache_get_value_name_int(iIndex, "vVW", DynVehicleInfo[sqlid][gv_iVW]);
  50. cache_get_value_name_int(iIndex, "vInt", DynVehicleInfo[sqlid][gv_iInt]);
  51. cache_get_value_name_int(iIndex, "vDisabled", DynVehicleInfo[sqlid][gv_iDisabled]);
  52. cache_get_value_name_float(iIndex, "vRotZ", DynVehicleInfo[sqlid][gv_fRotZ]);
  53. cache_get_value_name_int(iIndex, "vUpkeep", DynVehicleInfo[sqlid][gv_iUpkeep]);
  54. cache_get_value_name_int(iIndex, "vSiren", DynVehicleInfo[sqlid][gv_iSiren]);
  55. i = 1;
  56. while(i <= MAX_DV_OBJECTS) {
  57. format(szResult, sizeof szResult, "vAttachedObjectModel%i", i);
  58. cache_get_value_name_int(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_iAttachedObjectModel]);
  59. format(szResult, sizeof szResult, "vObjectX%i", i);
  60. cache_get_value_name_float(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectX]);
  61. format(szResult, sizeof szResult, "vObjectY%i", i);
  62. cache_get_value_name_float(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectY]);
  63. format(szResult, sizeof szResult, "vObjectZ%i", i);
  64. cache_get_value_name_float(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectZ]);
  65. format(szResult, sizeof szResult, "vObjectRX%i", i);
  66. cache_get_value_name_float(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectRX]);
  67. format(szResult, sizeof szResult, "vObjectRY%i", i);
  68. cache_get_value_name_float(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectRY]);
  69. format(szResult, sizeof szResult, "vObjectRZ%i", i);
  70. cache_get_value_name_float(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectRZ]);
  71. format(szResult, sizeof szResult, "vObjectText%i", i);
  72. cache_get_value_name(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectText], 32);
  73. format(szResult, sizeof szResult, "vObjectMatSize%i", i);
  74. cache_get_value_name_int(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectMatSize]);
  75. format(szResult, sizeof szResult, "vObjectFont%i", i);
  76. cache_get_value_name(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectFont], 32);
  77. format(szResult, sizeof szResult, "vObjectSize%i", i);
  78. cache_get_value_name_int(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectSize]);
  79. format(szResult, sizeof szResult, "vObjectColor%i", i);
  80. cache_get_value_name_int(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectColor]);
  81. format(szResult, sizeof szResult, "vObjectBGColor%i", i);
  82. cache_get_value_name_int(iIndex, szResult, DynVehicleObjInfo[sqlid][i-1][gv_fObjectBGColor]);
  83. i++;
  84. }
  85. i = 0;
  86. while(i < MAX_DV_MODS) {
  87. format(szResult, sizeof szResult, "vMod%i", i);
  88. cache_get_value_name_int(iIndex, szResult, DynVehicleInfo[sqlid][gv_iMod][i++]);
  89. }
  90. if(400 < DynVehicleInfo[sqlid][gv_iModel] < 612) {
  91. if(!IsWeaponizedVehicle(DynVehicleInfo[sqlid][gv_iModel])) {
  92. DynVeh_Spawn(iIndex);
  93. //printf("[DynVeh] Loaded Dynamic Vehicle %i.", iIndex);
  94. for(i = 0; i != MAX_DV_OBJECTS; i++)
  95. {
  96. if(DynVehicleObjInfo[sqlid][i][gv_iAttachedObjectModel] == 0 || DynVehicleObjInfo[sqlid][i][gv_iAttachedObjectModel] == INVALID_OBJECT_ID) {
  97. DynVehicleObjInfo[sqlid][i][gv_iAttachedObjectID] = INVALID_OBJECT_ID;
  98. DynVehicleObjInfo[sqlid][i][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  99. }
  100. }
  101. } else {
  102. DynVehicleInfo[sqlid][gv_iSpawnedID] = INVALID_VEHICLE_ID;
  103. }
  104. }
  105. iIndex++;
  106. }
  107. }
  108. }
  109. return 1;
  110. }
  111. DynVeh_Save(iDvSlotID) {
  112. if((iDvSlotID > MAX_DYNAMIC_VEHICLES)) // Array bounds check. Use it.
  113. return 0;
  114. szMiscArray[0] = 0;
  115. new
  116. i = 0;
  117. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray,
  118. "UPDATE `groupvehs` SET `SpawnedID`= '%d',`gID`= '%d',`gDivID`= '%d', `rID`='%d', `vModel`= '%d', \
  119. `vPlate` = '%e',`vMaxHealth`= '%.2f',`vType`= '%d',`vLoadMax`= '%d',`vCol1`= '%d',`vCol2`= '%d', \
  120. `vX`= '%.2f',`vY`= '%.2f',`vZ`= '%.2f',`vRotZ`= '%.2f', `vUpkeep` = '%d', `vVW` = '%d', `vDisabled` = '%d', \
  121. `vInt` = '%d', `vFuel` = '%.5f', `vSiren` = '%d'"
  122. , DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleInfo[iDvSlotID][gv_igID], DynVehicleInfo[iDvSlotID][gv_igDivID], DynVehicleInfo[iDvSlotID][gv_irID], DynVehicleInfo[iDvSlotID][gv_iModel],
  123. DynVehicleInfo[iDvSlotID][gv_iPlate], DynVehicleInfo[iDvSlotID][gv_fMaxHealth], DynVehicleInfo[iDvSlotID][gv_iType], DynVehicleInfo[iDvSlotID][gv_iLoadMax], DynVehicleInfo[iDvSlotID][gv_iCol1], DynVehicleInfo[iDvSlotID][gv_iCol2],
  124. DynVehicleInfo[iDvSlotID][gv_fX], DynVehicleInfo[iDvSlotID][gv_fY], DynVehicleInfo[iDvSlotID][gv_fZ], DynVehicleInfo[iDvSlotID][gv_fRotZ], DynVehicleInfo[iDvSlotID][gv_iUpkeep], DynVehicleInfo[iDvSlotID][gv_iVW], DynVehicleInfo[iDvSlotID][gv_iDisabled],
  125. DynVehicleInfo[iDvSlotID][gv_iInt], DynVehicleInfo[iDvSlotID][gv_fFuel], DynVehicleInfo[iDvSlotID][gv_iSiren]);
  126. for(i = 0; i != MAX_DV_OBJECTS; ++i) {
  127. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vAttachedObjectModel%i` = '%d'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectModel]);
  128. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectX%i` = '%.2f'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectX]);
  129. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectY%i` = '%.2f'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectY]);
  130. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectZ%i` = '%.2f'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectZ]);
  131. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectRX%i` = '%.2f'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectRX]);
  132. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectRY%i` = '%.2f'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectRY]);
  133. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectRZ%i` = '%.2f'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectRZ]);
  134. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectText%i` = '%e'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectText]);
  135. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectMatSize%i` = '%d'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectMatSize]);
  136. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectFont%i` = '%s'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectFont]);
  137. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectSize%i` = '%d'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectSize]);
  138. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectColor%i` = '%i'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectColor]);
  139. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vObjectBGColor%i` = '%i'", szMiscArray, i+1, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectBGColor]);
  140. }
  141. for(i = 0; i != MAX_DV_MODS; ++i) mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s, `vMod%d` = %i", szMiscArray, i, DynVehicleInfo[iDvSlotID][gv_iMod][i]);
  142. mysql_format(MainPipeline, szMiscArray, sizeof szMiscArray, "%s WHERE `id` = %i", szMiscArray, iDvSlotID);
  143. return mysql_tquery(MainPipeline, szMiscArray, "OnQueryFinish", "ii", SENDDATA_THREAD, INVALID_PLAYER_ID);
  144. }
  145. stock DynVeh_Spawn(iDvSlotID, free = 0)
  146. {
  147. if(!(0 <= iDvSlotID < MAX_DYNAMIC_VEHICLES)) return 1;
  148. format(szMiscArray, sizeof(szMiscArray), "Attempting to spawn DV Slot ID %d", iDvSlotID);
  149. Log("logs/dvspawn.log", szMiscArray);
  150. new tmpdv = INVALID_VEHICLE_ID;
  151. if(DynVehicleInfo[iDvSlotID][gv_iSpawnedID] != INVALID_VEHICLE_ID)
  152. {
  153. tmpdv = DynVeh[DynVehicleInfo[iDvSlotID][gv_iSpawnedID]];
  154. DynVeh[DynVehicleInfo[iDvSlotID][gv_iSpawnedID]] = -1;
  155. }
  156. if(DynVehicleInfo[iDvSlotID][gv_iSpawnedID] != INVALID_VEHICLE_ID) {
  157. if(tmpdv == iDvSlotID) {
  158. format(szMiscArray, sizeof(szMiscArray), "Destroying Vehicle ID %d for DV Slot %d",DynVehicleInfo[iDvSlotID][gv_iSpawnedID], iDvSlotID);
  159. Log("logs/dvspawn.log", szMiscArray);
  160. DestroyVehicle(DynVehicleInfo[iDvSlotID][gv_iSpawnedID]);
  161. DynVehicleInfo[iDvSlotID][gv_iSpawnedID] = INVALID_VEHICLE_ID;
  162. for(new i = 0; i != MAX_DV_OBJECTS; i++)
  163. {
  164. if(DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectID] != INVALID_OBJECT_ID) {
  165. DestroyDynamicObject(DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectID]);
  166. DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectID] = INVALID_OBJECT_ID;
  167. }
  168. }
  169. }
  170. }
  171. if(!(400 < DynVehicleInfo[iDvSlotID][gv_iModel] < 612)) {
  172. format(szMiscArray, sizeof(szMiscArray), "Invalid Vehicle Model ID for DV Slot %d", iDvSlotID);
  173. Log("logs/dvspawn.log", szMiscArray);
  174. return 1;
  175. }
  176. if(DynVehicleInfo[iDvSlotID][gv_iDisabled]) return 1;
  177. if(free == 0)
  178. {
  179. if(DynVehicleInfo[iDvSlotID][gv_igID] != INVALID_GROUP_ID && tmpdv != -1) {
  180. new iGroupID = DynVehicleInfo[iDvSlotID][gv_igID];
  181. if(arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_LEA || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_MEDIC || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_JUDICIAL || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_TAXI || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_GOV || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_NEWS || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_TOWING)
  182. {
  183. if(arrGroupData[iGroupID][g_iBudget] >= floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] / 2))
  184. {
  185. arrGroupData[iGroupID][g_iBudget] -= floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] / 2);
  186. format(szMiscArray, sizeof(szMiscArray), "Vehicle Slot ID %d RTB fee cost $%d to %s's budget fund.", iDvSlotID, floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] / 2), arrGroupData[iGroupID][g_szGroupName]);
  187. GroupPayLog(iGroupID, szMiscArray);
  188. }
  189. else
  190. {
  191. DynVehicleInfo[iDvSlotID][gv_iDisabled] = 1;
  192. return 1;
  193. }
  194. }
  195. }
  196. }
  197. DynVehicleInfo[iDvSlotID][gv_iSpawnedID] = CreateVehicle(DynVehicleInfo[iDvSlotID][gv_iModel], DynVehicleInfo[iDvSlotID][gv_fX], DynVehicleInfo[iDvSlotID][gv_fY], DynVehicleInfo[iDvSlotID][gv_fZ], DynVehicleInfo[iDvSlotID][gv_fRotZ], DynVehicleInfo[iDvSlotID][gv_iCol1], DynVehicleInfo[iDvSlotID][gv_iCol2], VEHICLE_RESPAWN, DynVehicleInfo[iDvSlotID][gv_iSiren]);
  198. DynVeh_Save(iDvSlotID);
  199. format(szMiscArray, sizeof(szMiscArray), "Vehicle ID %d spawned for DV Slot %d",DynVehicleInfo[iDvSlotID][gv_iSpawnedID], iDvSlotID);
  200. Log("logs/dvspawn.log", szMiscArray);
  201. SetVehicleHealth(DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleInfo[iDvSlotID][gv_fMaxHealth]);
  202. SetVehicleVirtualWorld(DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleInfo[iDvSlotID][gv_iVW]);
  203. LinkVehicleToInterior(DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleInfo[iDvSlotID][gv_iInt]);
  204. VehicleFuel[DynVehicleInfo[iDvSlotID][gv_iSpawnedID]] = DynVehicleInfo[iDvSlotID][gv_fFuel];
  205. DynVeh[DynVehicleInfo[iDvSlotID][gv_iSpawnedID]] = iDvSlotID;
  206. if(GetGVarType("VehSiren", DynVehicleInfo[iDvSlotID][gv_iSpawnedID])) ToggleSiren(DynVehicleInfo[iDvSlotID][gv_iSpawnedID], 1);
  207. for(new i = 0; i != MAX_DV_OBJECTS; i++)
  208. {
  209. if(DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectModel] != INVALID_OBJECT_ID && DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectModel] != 0)
  210. {
  211. DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectID] = CreateDynamicObject(DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectModel],0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
  212. if(IsABlankTexture(DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectModel]) && !isnull(DynVehicleObjInfo[iDvSlotID][i][gv_fObjectText]))
  213. {
  214. if(DynVehicleObjInfo[iDvSlotID][i][gv_fObjectMatSize] == 0) DynVehicleObjInfo[iDvSlotID][i][gv_fObjectMatSize] = 90;
  215. if(isnull(DynVehicleObjInfo[iDvSlotID][i][gv_fObjectFont])) format(DynVehicleObjInfo[iDvSlotID][i][gv_fObjectFont], 32, "Arial");
  216. if(DynVehicleObjInfo[iDvSlotID][i][gv_fObjectSize] == 0) DynVehicleObjInfo[iDvSlotID][i][gv_fObjectSize] = 24;
  217. if(DynVehicleObjInfo[iDvSlotID][i][gv_fObjectColor] == 0) DynVehicleObjInfo[iDvSlotID][i][gv_fObjectColor] = 0xFFFFFFFF;
  218. SetDynamicObjectMaterialText(DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectID], 0, DynVehicleObjInfo[iDvSlotID][i][gv_fObjectText], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectMatSize], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectFont], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectSize], 1, GangTag_IntColor(DynVehicleObjInfo[iDvSlotID][i][gv_fObjectColor]), GangTag_IntColor(DynVehicleObjInfo[iDvSlotID][i][gv_fObjectBGColor]), 1);
  219. }
  220. AttachDynamicObjectToVehicle(DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectID], DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectX], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectY], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectZ], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectRX], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectRY], DynVehicleObjInfo[iDvSlotID][i][gv_fObjectRZ]);
  221. switch(DynVehicleObjInfo[iDvSlotID][i][gv_iAttachedObjectModel])
  222. {
  223. case 18646, 19294, 19419: ToggleDVSiren(iDvSlotID, i, 0);
  224. }
  225. }
  226. }
  227. if(!isnull(DynVehicleInfo[iDvSlotID][gv_iPlate])) {
  228. SetVehicleNumberPlate(DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleInfo[iDvSlotID][gv_iPlate]);
  229. }
  230. Vehicle_ResetData(DynVehicleInfo[iDvSlotID][gv_iSpawnedID]);
  231. LoadGroupVehicleMods(DynVehicleInfo[iDvSlotID][gv_iSpawnedID]);
  232. return 1;
  233. }
  234. forward DynVeh_CreateDVQuery(playerid, model, col1, col2);
  235. public DynVeh_CreateDVQuery(playerid, model, col1, col2)
  236. {
  237. new
  238. iRows,
  239. sqlid,
  240. szResult[128];
  241. cache_get_row_count(iRows);
  242. cache_get_value_name_int(0, "id", sqlid);
  243. DynVehicleInfo[sqlid][gv_iModel] = model;
  244. DynVehicleInfo[sqlid][gv_iCol1] = col1;
  245. DynVehicleInfo[sqlid][gv_iCol2] = col2;
  246. new Float:X, Float:Y, Float:Z;
  247. GetPlayerPos(playerid, X, Y, Z);
  248. DynVehicleInfo[sqlid][gv_iVW] = GetPlayerVirtualWorld(playerid);
  249. DynVehicleInfo[sqlid][gv_iInt] = GetPlayerInterior(playerid);
  250. DynVehicleInfo[sqlid][gv_fX] = X+2;
  251. DynVehicleInfo[sqlid][gv_fY] = Y;
  252. DynVehicleInfo[sqlid][gv_fZ] = Z;
  253. DynVehicleInfo[sqlid][gv_igID] = INVALID_GROUP_ID;
  254. format(szResult, sizeof(szResult), "%s's DV Creation query has returned - attempting to spawn vehicle - SQL ID %d", GetPlayerNameEx(playerid), sqlid);
  255. Log("logs/dv.log", szResult);
  256. DynVeh_Save(sqlid);
  257. DynVeh_Spawn(sqlid);
  258. return 1;
  259. }
  260. stock UpdateGroupVehicleMods(groupvehicleid)
  261. {
  262. if(GetVehicleModel(DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][gv_iSpawnedID])) {
  263. new carid = DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][gv_iSpawnedID];
  264. new exhaust, frontbumper, rearbumper, roof, spoilers, sideskirt1,
  265. sideskirt2, wheels, hydraulics, nitro, hood, lamps, stereo, ventright, ventleft;
  266. exhaust = GetVehicleComponentInSlot(carid, CARMODTYPE_EXHAUST);
  267. frontbumper = GetVehicleComponentInSlot(carid, CARMODTYPE_FRONT_BUMPER);
  268. rearbumper = GetVehicleComponentInSlot(carid, CARMODTYPE_REAR_BUMPER);
  269. roof = GetVehicleComponentInSlot(carid, CARMODTYPE_ROOF);
  270. spoilers = GetVehicleComponentInSlot(carid, CARMODTYPE_SPOILER);
  271. sideskirt1 = GetVehicleComponentInSlot(carid, CARMODTYPE_SIDESKIRT);
  272. sideskirt2 = GetVehicleComponentInSlot(carid, CARMODTYPE_SIDESKIRT);
  273. wheels = GetVehicleComponentInSlot(carid, CARMODTYPE_WHEELS);
  274. hydraulics = GetVehicleComponentInSlot(carid, CARMODTYPE_HYDRAULICS);
  275. nitro = GetVehicleComponentInSlot(carid, CARMODTYPE_NITRO);
  276. hood = GetVehicleComponentInSlot(carid, CARMODTYPE_HOOD);
  277. lamps = GetVehicleComponentInSlot(carid, CARMODTYPE_LAMPS);
  278. stereo = GetVehicleComponentInSlot(carid, CARMODTYPE_STEREO);
  279. ventright = GetVehicleComponentInSlot(carid, CARMODTYPE_VENT_RIGHT);
  280. ventleft = GetVehicleComponentInSlot(carid, CARMODTYPE_VENT_LEFT);
  281. if(spoilers >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][0] = spoilers;
  282. if(hood >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][1] = hood;
  283. if(roof >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][2] = roof;
  284. if(sideskirt1 >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][3] = sideskirt1;
  285. if(lamps >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][4] = lamps;
  286. if(nitro >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][5] = nitro;
  287. if(exhaust >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][6] = exhaust;
  288. if(wheels >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][7] = wheels;
  289. if(stereo >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][8] = stereo;
  290. if(hydraulics >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][9] = hydraulics;
  291. if(frontbumper >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][10] = frontbumper;
  292. if(rearbumper >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][11] = rearbumper;
  293. if(ventright >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][12] = ventright;
  294. if(ventleft >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][13] = ventleft;
  295. if(sideskirt2 >= 1000) DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][14] = sideskirt2;
  296. DynVeh_Save(DynVeh[groupvehicleid]);
  297. }
  298. }
  299. stock LoadGroupVehicleMods(groupvehicleid)
  300. {
  301. if(GetVehicleModel(DynVehicleInfo[DynVeh[groupvehicleid]][gv_iSpawnedID])) {
  302. /*if(strlen(PlayerVehicleInfo[playerid][groupvehicleid][pvPlate]) > 0)
  303. {
  304. SetVehicleNumberPlate(PlayerVehicleInfo[playerid][groupvehicleid][pvId], PlayerVehicleInfo[playerid][groupvehicleid][pvPlate]);
  305. SetVehiclePos(PlayerVehicleInfo[playerid][groupvehicleid][pvId], 9999.9, 9999.9, 9999.9);
  306. SetVehiclePos(PlayerVehicleInfo[playerid][groupvehicleid][pvId], PlayerVehicleInfo[playerid][groupvehicleid][pvPosX], PlayerVehicleInfo[playerid][groupvehicleid][pvPosY], PlayerVehicleInfo[playerid][groupvehicleid][pvPosZ]);
  307. }*/
  308. /*if(PlayerVehicleInfo[playerid][groupvehicleid][pvPaintJob] != -1)
  309. {
  310. ChangeVehiclePaintjob(PlayerVehicleInfo[playerid][groupvehicleid][pvId], PlayerVehicleInfo[playerid][groupvehicleid][pvPaintJob]);
  311. ChangeVehicleColor(PlayerVehicleInfo[playerid][groupvehicleid][pvId], PlayerVehicleInfo[playerid][groupvehicleid][pvColor1], PlayerVehicleInfo[playerid][groupvehicleid][pvColor2]);
  312. }*/
  313. for(new m = 0; m < MAX_MODS; m++)
  314. {
  315. if (DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][m] >= 1000 && DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][m] <= 1193)
  316. {
  317. if (InvalidModCheck(GetVehicleModel(DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][gv_iSpawnedID]),DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][m]))
  318. {
  319. AddVehicleComponent(DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][gv_iSpawnedID], DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][m]);
  320. }
  321. else
  322. {
  323. DynVehicleInfo[DynVeh[groupvehicleid]][gv_iMod][m] = 0;
  324. }
  325. }
  326. }
  327. }
  328. }