Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Example script
- #include <a_samp>
- #include <list>
- MEM::struct ObjectStruct
- {
- ObjectStruct_Model,
- Float:ObjectStruct_Pos[3],
- Float:ObjectStruct_Rot[3],
- Float:ObjectStruct_SD // Stream distance
- }
- MEM::struct VehicleStruct
- {
- VehicleStruct_Model,
- Float:VehicleStruct_Pos[3],
- Float:VehicleStruct_Rot,
- VehicleStruct_Color[2]
- }
- MEM::struct MissionStruct // Just an example
- {
- MissionStruct_Name[32],
- MissionStruct_Owner[MAX_PLAYER_NAME],
- MissionStruct_Objective,
- List:MissionStruct_Objects_List[LIST_E_base],
- List:MissionStruct_Vehicles_List[LIST_E_base]
- // ...
- }
- new LIST::init<MissionsSequence>, MissionIt:current_mission, MissionHandle[MissionStruct];
- public OnGameModeInit() // Example callback
- {
- new my_mission[MissionStruct];
- // Mission 1
- format(my_mission[MissionStruct_Name], 32, "Example Name");
- format(my_mission[MissionStruct_Owner], MAX_PLAYER_NAME, "Example Nick");
- my_mission[MissionStruct_Objective] = 1;
- // Zero intialize objects list header
- my_mission[MissionStruct_Objects_List][LIST_base_begin] = 0;
- my_mission[MissionStruct_Objects_List][LIST_base_end] = 0;
- // Zero intialize vehicles list header
- my_mission[MissionStruct_Vehicles_List][LIST_base_begin] = 0;
- my_mission[MissionStruct_Vehicles_List][LIST_base_end] = 0;
- // Let us add for example 5 example object data
- 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);
- 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);
- 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);
- 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);
- 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);
- // Now let's add 5 vehicle data
- 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);
- LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0}, VehicleStruct);
- LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0}, VehicleStruct);
- LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0}, VehicleStruct);
- LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0}, VehicleStruct);
- // ...
- // Those {} can be modfied into array variables, to handle it as a buffer, which can store data from databases or files.
- // Adds the mission into the missions list
- LIST::push_back_arr(MissionsSequence, my_mission, MissionStruct);
- // One more example mission :D
- format(my_mission[MissionStruct_Name], 32, "Leet");
- format(my_mission[MissionStruct_Owner], MAX_PLAYER_NAME, "BigETI");
- my_mission[MissionStruct_Objective] = 1337;
- // It is important to re-initialize the lists in this case, since we don't want to modify the older ones
- // Zero intialize objects list header
- my_mission[MissionStruct_Objects_List][LIST_base_begin] = 0;
- my_mission[MissionStruct_Objects_List][LIST_base_end] = 0;
- // Zero intialize vehicles list header
- my_mission[MissionStruct_Vehicles_List][LIST_base_begin] = 0;
- my_mission[MissionStruct_Vehicles_List][LIST_base_end] = 0;
- // Let us add for example 5 example object data
- 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 */});
- LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0});
- LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0});
- LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0});
- LIST::push_back_arr(my_mission[MissionStruct_Objects_List], {985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0});
- // Now let's add 5 vehicle data
- 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 */});
- LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0});
- LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0});
- LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0});
- LIST::push_back_arr(my_mission[MissionStruct_Vehicles_List], {400, 0.0, 0.0, 0.0, 0.0, 0, 0});
- // ...
- // Adds the second mission into the missions list
- LIST::push_back_arr(MissionsSequence, my_mission, MissionStruct);
- // Start it
- current_mission = FirstMission();
- }
- // Starts the first mission
- stock MissionIt:FirstMission()
- {
- new MissionIt:first_mission = ListIt:LIST::begin(MissionsSequence);
- ForceMission(first_mission);
- return MissionIt:first_mission;
- }
- // Starts the next mission
- stock MissionIt:NextMission(MissionIt:current_mission)
- {
- if(current_mission == LIST::end(MissionsSequence)) return ForceMission(MissionIt:LIST::begin(MissionsSequence));
- return ForceMission(MissionIt:LIST_IT_next(current_mission));
- }
- // Forces to load a mission
- stock MissionIt:ForceMission(MissionIt:mission)
- {
- new Pointer:mission_ptr = LIST_IT::data_ptr(MissionsSequence); // Get the pointer of the beginning data inside the node
- MEM::get_arr(mission_ptr, 0, MissionHandle, MissionStruct); // Loads the whole mission into the handle
- // Remove all objects here!
- // Remove all vehicles here!
- new Pointer:some_data_ptr;
- LIST::foreach<objects_it>(MissionHandle[MissionStruct_Objects_List])
- {
- some_data_ptr = LIST_IT::data_ptr(objects_it); // Gets the pointer of the beginning data inside the node
- CreateObject(MEM_EX::get_val(some_data_ptr->ObjectStruct_Model),
- MEM_EX::get_val(some_data_ptr->ObjectStruct_Pos[0]),
- MEM_EX::get_val(some_data_ptr->ObjectStruct_Pos[1]),
- MEM_EX::get_val(some_data_ptr->ObjectStruct_Pos[2]),
- Float:MEM_EX::get_val(some_data_ptr->ObjectStruct_Rot[0]),
- Float:MEM_EX::get_val(some_data_ptr->ObjectStruct_Rot[1]),
- Float:MEM_EX::get_val(some_data_ptr->ObjectStruct_Rot[2]),
- Float:MEM_EX::get_val(some_data_ptr->ObjectStruct_SD));
- }
- LIST::foreach<vehicle_it>(MissionHandle[MissionStruct_Vehicles_List])
- {
- some_data_ptr = LIST_IT::data_ptr(vehicle_it); // Gets the pointer of the beginning data inside the node
- CreateVehicle(MEM_EX::get_val(some_data_ptr->VehicleStruct_Model),
- MEM_EX::get_val(some_data_ptr->VehicleStruct_Pos[0]),
- MEM_EX::get_val(some_data_ptr->VehicleStruct_Pos[1]),
- MEM_EX::get_val(some_data_ptr->VehicleStruct_Pos[2]),
- Float:MEM_EX::get_val(some_data_ptr->VehicleStruct_Rot),
- Float:MEM_EX::get_val(some_data_ptr->VehicleStruct_Color[0]),
- Float:MEM_EX::get_val(some_data_ptr->VehicleStruct_Color[1]), 0);
- }
- return mission;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement