Advertisement
BigETI

Some example missions loading script

Aug 12th, 2013
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.19 KB | None | 0 0
  1. // Example script
  2. #include <a_samp>
  3. #include <list>
  4.  
  5. MEM::struct ObjectStruct
  6. {
  7.     ObjectStruct_Model,
  8.     Float:ObjectStruct_Pos[3],
  9.     Float:ObjectStruct_Rot[3],
  10.     Float:ObjectStruct_SD // Stream distance
  11. }
  12.  
  13. MEM::struct VehicleStruct
  14. {
  15.     VehicleStruct_Model,
  16.     Float:VehicleStruct_Pos[3],
  17.     Float:VehicleStruct_Rot,
  18.     VehicleStruct_Color[2]
  19. }
  20.  
  21. MEM::struct MissionStruct // Just an example
  22. {
  23.     MissionStruct_Name[32],
  24.     MissionStruct_Owner[MAX_PLAYER_NAME],
  25.     MissionStruct_Objective,
  26.     List:MissionStruct_Objects_List[LIST_E_base],
  27.     List:MissionStruct_Vehicles_List[LIST_E_base]
  28.     // ...
  29. }
  30.  
  31. new LIST::init<MissionsSequence>, MissionIt:current_mission, MissionHandle[MissionStruct];
  32.  
  33. public OnGameModeInit() // Example callback
  34. {
  35.     new my_mission[MissionStruct];
  36.    
  37.     // Mission 1
  38.     format(my_mission[MissionStruct_Name], 32, "Example Name");
  39.     format(my_mission[MissionStruct_Owner], MAX_PLAYER_NAME, "Example Nick");
  40.     my_mission[MissionStruct_Objective] = 1;
  41.    
  42.     // Zero intialize objects list header
  43.     my_mission[MissionStruct_Objects_List][LIST_base_begin] = 0;
  44.     my_mission[MissionStruct_Objects_List][LIST_base_end] = 0;
  45.    
  46.     // Zero intialize vehicles list header
  47.     my_mission[MissionStruct_Vehicles_List][LIST_base_begin] = 0;
  48.     my_mission[MissionStruct_Vehicles_List][LIST_base_end] = 0;
  49.    
  50.     // Let us add for example 5 example object data
  51.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985 /* Model */, 0.0 /* X */, 0.0 /* Y */, 0.0 /* Z */, 0.0 /* Rotation X */, 0.0 /* Rotation Y */, 0.0 /* Rotation Z */, 200.0 /* Stream distance */}, ObjectStruct);
  52.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0}, ObjectStruct);
  53.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0}, ObjectStruct);
  54.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0}, ObjectStruct);
  55.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0}, ObjectStruct);
  56.    
  57.     // Now let's add 5 vehicle data
  58.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400 /* Model */, 0.0 /* X */, 0.0 /* Y */, 0.0 /* Z */, 0.0 /* Rotation Z */, 0 /* Color 1 */, 0 /* Color 2 */}, VehicleStruct);
  59.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0}, VehicleStruct);
  60.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0}, VehicleStruct);
  61.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0}, VehicleStruct);
  62.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0}, VehicleStruct);
  63.    
  64.     // ...
  65.    
  66.     // Those {} can be modfied into array variables, to handle it as a buffer, which can store data from databases or files.
  67.    
  68.     // Adds the mission into the missions list
  69.     LIST::push_back_arr(MissionsSequence, my_mission, MissionStruct);
  70.    
  71.     // One more example mission :D
  72.     format(my_mission[MissionStruct_Name], 32, "Leet");
  73.     format(my_mission[MissionStruct_Owner], MAX_PLAYER_NAME, "BigETI");
  74.     my_mission[MissionStruct_Objective] = 1337;
  75.    
  76.     // It is important to re-initialize the lists in this case, since we don't want to modify the older ones
  77.    
  78.     // Zero intialize objects list header
  79.     my_mission[MissionStruct_Objects_List][LIST_base_begin] = 0;
  80.     my_mission[MissionStruct_Objects_List][LIST_base_end] = 0;
  81.    
  82.     // Zero intialize vehicles list header
  83.     my_mission[MissionStruct_Vehicles_List][LIST_base_begin] = 0;
  84.     my_mission[MissionStruct_Vehicles_List][LIST_base_end] = 0;
  85.    
  86.     // Let us add for example 5 example object data
  87.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985 /* Model */, 0.0 /* X */, 0.0 /* Y */, 0.0 /* Z */, 0.0 /* Rotation X */, 0.0 /* Rotation Y */, 0.0 /* Rotation Z */, 200.0 /* Stream distance */});
  88.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0});
  89.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0});
  90.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0});
  91.     LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0});
  92.    
  93.     // Now let's add 5 vehicle data
  94.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400 /* Model */, 0.0 /* X */, 0.0 /* Y */, 0.0 /* Z */, 0.0 /* Rotation Z */, 0 /* Color 1 */, 0 /* Color 2 */});
  95.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0});
  96.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0});
  97.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0});
  98.     LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0});
  99.    
  100.     // ...
  101.    
  102.     // Adds the second mission into the missions list
  103.     LIST::push_back_arr(MissionsSequence, my_mission, MissionStruct);
  104.    
  105.     // Start it
  106.     current_mission = FirstMission();
  107. }
  108.  
  109. // Starts the first mission
  110. stock MissionIt:FirstMission()
  111. {
  112.     new MissionIt:first_mission = ListIt:LIST::begin(MissionsSequence);
  113.     ForceMission(first_mission);
  114.     return MissionIt:first_mission;
  115. }
  116.  
  117. // Starts the next mission
  118. stock MissionIt:NextMission(MissionIt:current_mission)
  119. {
  120.     if(current_mission == LIST::end(MissionsSequence)) return ForceMission(MissionIt:LIST::begin(MissionsSequence));
  121.     return ForceMission(MissionIt:LIST_IT_next(current_mission));
  122. }
  123.  
  124. // Forces to load a mission
  125. stock MissionIt:ForceMission(MissionIt:mission)
  126. {
  127.     new Pointer:mission_ptr = LIST_IT::data_ptr(MissionsSequence); // Get the pointer of the beginning data inside the node
  128.     MEM::get_arr(mission_ptr, 0, MissionHandle, MissionStruct); // Loads the whole mission into the handle
  129.    
  130.     // Remove all objects here!
  131.    
  132.     // Remove all vehicles here!
  133.    
  134.     new Pointer:some_data_ptr;
  135.     LIST::foreach<objects_it>(MissionHandle[MissionStruct_Objects_List])
  136.     {
  137.         some_data_ptr = LIST_IT::data_ptr(objects_it); // Gets the pointer of the beginning data inside the node
  138.         CreateObject(MEM_EX::get_val(some_data_ptr->ObjectStruct_Model),
  139.             MEM_EX::get_val(some_data_ptr->ObjectStruct_Pos[0]),
  140.             MEM_EX::get_val(some_data_ptr->ObjectStruct_Pos[1]),
  141.             MEM_EX::get_val(some_data_ptr->ObjectStruct_Pos[2]),
  142.             Float:MEM_EX::get_val(some_data_ptr->ObjectStruct_Rot[0]),
  143.             Float:MEM_EX::get_val(some_data_ptr->ObjectStruct_Rot[1]),
  144.             Float:MEM_EX::get_val(some_data_ptr->ObjectStruct_Rot[2]),
  145.             Float:MEM_EX::get_val(some_data_ptr->ObjectStruct_SD));
  146.     }
  147.     LIST::foreach<vehicle_it>(MissionHandle[MissionStruct_Vehicles_List])
  148.     {
  149.         some_data_ptr = LIST_IT::data_ptr(vehicle_it); // Gets the pointer of the beginning data inside the node
  150.         CreateVehicle(MEM_EX::get_val(some_data_ptr->VehicleStruct_Model),
  151.             MEM_EX::get_val(some_data_ptr->VehicleStruct_Pos[0]),
  152.             MEM_EX::get_val(some_data_ptr->VehicleStruct_Pos[1]),
  153.             MEM_EX::get_val(some_data_ptr->VehicleStruct_Pos[2]),
  154.             Float:MEM_EX::get_val(some_data_ptr->VehicleStruct_Rot),
  155.             Float:MEM_EX::get_val(some_data_ptr->VehicleStruct_Color[0]),
  156.             Float:MEM_EX::get_val(some_data_ptr->VehicleStruct_Color[1]), 0);
  157.     }
  158.     return mission;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement