Advertisement
BigETI

file_veh.inc

Nov 26th, 2013
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.62 KB | None | 0 0
  1. #if defined _FILE_VEHICLES_INCLUDE_
  2.     #endinput
  3. #endif
  4. #define _FILE_VEHICLES_INCLUDE_
  5. #include <a_samp>
  6. #include <list>
  7.  
  8. MEM::struct v_custom_data_struct
  9. {
  10.     v_custom_data_interior,
  11.     v_custom_data_color[2],
  12.     v_custom_data_paintjob,
  13.     v_custom_data_respawn_delay
  14. }
  15.  
  16. MEM::struct file_veh_struct
  17. {
  18.     file_veh_model,
  19.     Float:file_veh_pos[3],
  20.     Float:file_veh_rotz,
  21.     Float:file_veh_velocity[3],
  22.     Float:file_veh_health,
  23.     file_veh_virtual_world,
  24.     file_veh_params,
  25.     file_veh_damage,
  26.     file_veh_component[14],
  27.     file_veh_interior,
  28.     file_veh_color[2],
  29.     file_veh_paintjob,
  30.     file_veh_respawn_delay
  31. }
  32.  
  33. new v_custom_data[MAX_VEHICLES][v_custom_data_struct];
  34.  
  35. stock FV_AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2)
  36. {
  37.     new vehicleid = AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2);
  38.     if(vehicleid != 0)
  39.     {
  40.         v_custom_data[vehicleid-1][v_custom_data_color][0] = color1;
  41.         v_custom_data[vehicleid-1][v_custom_data_color][1] = color2;
  42.         v_custom_data[vehicleid-1][v_custom_data_respawn_delay] = 0;
  43.     }
  44.     return vehicleid;
  45. }
  46. #if defined _ALS_AddStaticVehicle
  47.     #undef AddStaticVehicle
  48. #else
  49.     #define _ALS_AddStaticVehicle
  50. #endif
  51. #define AddStaticVehicle FV_AddStaticVehicle
  52.  
  53. stock FV_AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2, respawn_delay)
  54. {
  55.     new vehicleid = AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2, respawn_delay);
  56.     if(vehicleid != 0)
  57.     {
  58.         v_custom_data[vehicleid-1][v_custom_data_color][0] = color1;
  59.         v_custom_data[vehicleid-1][v_custom_data_color][1] = color2;
  60.         v_custom_data[vehicleid-1][v_custom_data_respawn_delay] = respawn_delay;
  61.     }
  62.     return vehicleid;
  63. }
  64. #if defined _ALS_AddStaticVehicleEx
  65.     #undef AddStaticVehicleEx
  66. #else
  67.     #define _ALS_AddStaticVehicleEx
  68. #endif
  69. #define AddStaticVehicleEx FV_AddStaticVehicleEx
  70.  
  71. stock FV_CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay)
  72. {
  73.     new vehicleid = CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay);
  74.     if(vehicleid != 0)
  75.     {
  76.         v_custom_data[vehicleid-1][v_custom_data_color][0] = color1;
  77.         v_custom_data[vehicleid-1][v_custom_data_color][1] = color2;
  78.         v_custom_data[vehicleid-1][v_custom_data_respawn_delay] = respawn_delay;
  79.     }
  80.     return vehicleid;
  81. }
  82. #if defined _ALS_CreateVehicle
  83.     #undef CreateVehicle
  84. #else
  85.     #define _ALS_CreateVehicle
  86. #endif
  87. #define CreateVehicle FV_CreateVehicle
  88.  
  89. stock FV_LinkVehicleToInterior(vehicleid, interiorid)
  90. {
  91.     if(GetVehicleModel(vehicleid) != 0) return 0;
  92.     return LinkVehicleToInterior(vehicleid, v_custom_data[vehicleid-1][v_custom_data_interior] = interiorid);
  93. }
  94. #if defined _ALS_LinkVehicleToInterior
  95.     #undef LinkVehicleToInterior
  96. #else
  97.     #define _ALS_LinkVehicleToInterior
  98. #endif
  99. #define LinkVehicleToInterior FV_LinkVehicleToInterior
  100.  
  101. stock FV_ChangeVehicleColor(vehicleid, color1, color2)
  102. {
  103.     if(GetVehicleModel(vehicleid) != 0) return 0;
  104.     return ChangeVehicleColor(vehicleid, v_custom_data[vehicleid-1][v_custom_data_color][0] = color1, v_custom_data[vehicleid-1][v_custom_data_color][1] = color2);
  105. }
  106. #if defined _ALS_ChangeVehicleColor
  107.     #undef ChangeVehicleColor
  108. #else
  109.     #define _ALS_ChangeVehicleColor
  110. #endif
  111. #define ChangeVehicleColor FV_ChangeVehicleColor
  112.  
  113. stock FV_ChangeVehiclePaintjob(vehicleid, paintjobid)
  114. {
  115.     if(GetVehicleModel(vehicleid) != 0) return 0;
  116.     return ChangeVehiclePaintjob(vehicleid, v_custom_data[vehicleid-1][v_custom_data_paintjob] = paintjobid);
  117. }
  118. #if defined _ALS_ChangeVehiclePaintjob
  119.     #undef ChangeVehiclePaintjob
  120. #else
  121.     #define _ALS_ChangeVehiclePaintjob
  122. #endif
  123. #define ChangeVehiclePaintjob FV_ChangeVehiclePaintjob
  124.  
  125. stock FV_DestroyVehicle(vehicleid)
  126. {
  127.     if(GetVehicleModel(vehicleid) == 0) return 0;
  128.     MEM::zero(MEM::get_addr(v_custom_data[vehicleid-1][v_custom_data_interior]), v_custom_data_struct);
  129.     return DestroyVehicle(vehicleid);
  130. }
  131. #if defined _ALS_DestroyVehicle
  132.     #undef DestroyVehicle
  133. #else
  134.     #define _ALS_DestroyVehicle
  135. #endif
  136. #define DestroyVehicle FV_DestroyVehicle
  137.  
  138. stock bool:SaveAllVehicles(file_name[])
  139. {
  140.     static i, j, s_vdata[file_veh_struct], s_vparams[7], s_vdamage[4];
  141.     new LIST::init<s_vehicles>;
  142.     for(i = 1; i <= MAX_VEHICLES; i++)
  143.     {
  144.         if((s_vdata[file_veh_model] = GetVehicleModel(i)) == 0) continue;
  145.         GetVehiclePos(i, s_vdata[file_veh_pos][0], s_vdata[file_veh_pos][1], s_vdata[file_veh_pos][2]);
  146.         GetVehicleZAngle(i, s_vdata[file_veh_rotz]);
  147.         GetVehicleVelocity(i, s_vdata[file_veh_velocity][0], s_vdata[file_veh_velocity][1], s_vdata[file_veh_velocity][2]);
  148.         GetVehicleHealth(i, s_vdata[file_veh_health]);
  149.         s_vdata[file_veh_virtual_world] = GetVehicleVirtualWorld(i);
  150.         GetVehicleParamsEx(i, s_vparams[0], s_vparams[1], s_vparams[2], s_vparams[3], s_vparams[4], s_vparams[5], s_vparams[6]);
  151.         s_vdata[file_veh_params] = ((s_vparams[0] == -1)?2:s_vparams[0])|(((s_vparams[1] == -1)?2:s_vparams[1])<<2)|(((s_vparams[2] == -1)?2:s_vparams[2])<<4)|(((s_vparams[3] == -1)?2:s_vparams[3])<<6)|(((s_vparams[4] == -1)?2:s_vparams[4])<<8)|(((s_vparams[5] == -1)?2:s_vparams[5])<<10)|(((s_vparams[6] == -1)?2:s_vparams[6])<<12);
  152.         GetVehicleDamageStatus(i, s_vdamage[0], s_vdamage[1], s_vdamage[2], s_vdamage[3]);
  153.         s_vdata[file_veh_damage] = s_vdamage[0]|(s_vdamage[1]<<4)|(s_vdamage[2]<<8)|(s_vdamage[3]<<12);
  154.         for(j = 0; j < 14; j++) s_vdata[file_veh_component][j] = GetVehicleComponentInSlot(i, j);
  155.         MEM::copy(MEM::get_addr(s_vdata[file_veh_interior]), MEM::get_addr(v_custom_data[i-1][v_custom_data_interior]), v_custom_data_struct);
  156.         LIST::push_back_arr(s_vehicles, s_vdata);
  157.     }
  158.     if(LIST::save(s_vehicles, file_name, true))
  159.     {
  160.         for(i = 1; i <= MAX_VEHICLES; i++)
  161.         {
  162.             if(GetVehicleModel(i) == 0) continue;
  163.             DestroyVehicle(i);
  164.         }
  165.         return true;
  166.     }
  167.     return false;
  168. }
  169.  
  170. stock bool:LoadVehicles(const file_name[])
  171. {
  172.     static l_vdata[file_veh_struct], l_vid, i;
  173.     new LIST::init<l_vehicles>;
  174.     if(LIST::load(l_vehicles, file_name))
  175.     {
  176.         LIST::foreach<l_vehicles_it>(l_vehicles)
  177.         {
  178.             if(LIST_IT::data_size(l_vehicles_it) != sizeof l_vdata)
  179.             {
  180.                 LIST::clear(l_vehicles);
  181.                 return false;
  182.             }
  183.             MEM::get_arr(LIST_IT::data_ptr(l_vehicles_it), _, l_vdata);
  184.             if((l_vid = CreateVehicle(l_vdata[file_veh_model], l_vdata[file_veh_pos][0], l_vdata[file_veh_pos][1], l_vdata[file_veh_pos][2], l_vdata[file_veh_rotz], l_vdata[file_veh_color][0], l_vdata[file_veh_color][1], l_vdata[file_veh_respawn_delay])) == 0)
  185.             {
  186.                 LIST::clear(l_vehicles);
  187.                 for(i = 1; i <= MAX_VEHICLES; i++)
  188.                 {
  189.                     if(GetVehicleModel(i) == 0) continue;
  190.                     DestroyVehicle(i);
  191.                 }
  192.                 return false;
  193.             }
  194.             LinkVehicleToInterior(l_vid, l_vdata[file_veh_interior]);
  195.             ChangeVehiclePaintjob(l_vid, l_vdata[file_veh_paintjob]);
  196.             for(i = 0; i < 14; i++) AddVehicleComponent(l_vid, l_vdata[file_veh_component][i]);
  197.             SetVehicleHealth(l_vid, l_vdata[file_veh_health]);
  198.             SetVehicleVirtualWorld(l_vid, l_vdata[file_veh_virtual_world]);
  199.             SetVehicleParamsEx(l_vid, l_vdata[file_veh_params]&0x3, (l_vdata[file_veh_params]>>>2)&0x3, (l_vdata[file_veh_params]>>>4)&0x3, (l_vdata[file_veh_params]>>>6)&0x3, (l_vdata[file_veh_params]>>>8)&0x3, (l_vdata[file_veh_params]>>>10)&0x3, (l_vdata[file_veh_params]>>>12)&0x3);
  200.             UpdateVehicleDamageStatus(l_vid, l_vdata[file_veh_damage]&0xF, (l_vdata[file_veh_damage]>>>4)&0xF, (l_vdata[file_veh_damage]>>>8)&0xF, (l_vdata[file_veh_damage]>>>12)&0xF);
  201.             SetVehicleVelocity(l_vid, l_vdata[file_veh_velocity][0], l_vdata[file_veh_velocity][1], l_vdata[file_veh_velocity][2]);
  202.         }
  203.     }
  204.     LIST::clear(l_vehicles);
  205.     return true;
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement