| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- ShowMapSaveDialog(playerid, dialogid) {
- switch( dialogid ) {
- case DIALOGID_MAP_SAVE_AS: {
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "Save Map", "Enter a name for this map:", "Save", "Cancel");
- }
- case DIALOGID_MAP_SAVE_CONFIRM: {
- format(g_DialogInfo, sizeof g_DialogInfo, "Type & Enter \"%s\" to save this map.", SAVEMAP_COMMAND);
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "Save Map", g_DialogInfo, "Save", "Cancel");
- }
- default: {
- return 0;
- }
- }
- return 1;
- }
- SaveMap(
- mapname[],
- &objects_saved,
- &vehicles_saved,
- &pickups_saved,
- &actors_saved,
- &attachments_saved,
- &buildings_saved,
- playerid = INVALID_PLAYER_ID
- ) {
- GetMapFilePath(mapname, g_FilePathString, sizeof g_FilePathString);
- new File:file_handle = fopen(g_FilePathString, io_write);
- if( !file_handle ) {
- return 0;
- }
- new
- slot_objectid [MAX_OBJECTS],
- objectid_slot [MAX_OBJECTS],
- valid_objects,
- slot_vehicleid [MAX_VEHICLES],
- vehicleid_slot [MAX_VEHICLES],
- valid_vehicles,
- slot_pickupid [MAX_PICKUPS],
- valid_pickups,
- slot_actorid [MAX_ACTORS],
- valid_actors
- ;
- for(new objectid = 1; objectid <= MAX_OBJECTS; objectid ++) {
- if(!IsValidObject(objectid)) {
- continue;
- }
- slot_objectid[valid_objects] = objectid;
- objectid_slot[objectid-1] = valid_objects ++;
- }
- for(new vehicleid = 1, max_vehicleid = GetVehiclePoolSize(); vehicleid <= max_vehicleid; vehicleid ++) {
- if( !IsValidVehicle(vehicleid) ) {
- continue;
- }
- slot_vehicleid[valid_vehicles] = vehicleid;
- vehicleid_slot[vehicleid-1] = valid_vehicles ++;
- }
- for(new pickupid; pickupid < MAX_PICKUPS; pickupid ++) {
- if( !g_PickupData[pickupid][PICKUP_DATA_ISVALID] ) {
- continue;
- }
- slot_pickupid[valid_pickups ++] = pickupid;
- }
- for(new actorid, max_actorid = GetActorPoolSize(); actorid <= max_actorid; actorid ++) {
- if( !IsValidActor(actorid) ) {
- continue;
- }
- slot_actorid[valid_actors ++] = actorid;
- }
- new write_string[500];
- if(valid_objects > 0) {
- format(write_string, sizeof write_string, "new g_Object[%i];\r\n", valid_objects);
- fwrite(file_handle, write_string);
- }
- if(valid_vehicles > 0) {
- format(write_string, sizeof write_string, "new g_Vehicle[%i];\r\n", valid_vehicles);
- fwrite(file_handle, write_string);
- }
- if(valid_pickups > 0) {
- format(write_string, sizeof write_string, "new g_Pickup[%i];\r\n", valid_pickups);
- fwrite(file_handle, write_string);
- }
- if(valid_actors > 0) {
- format(write_string, sizeof write_string, "new g_Actor[%i];\r\n", valid_actors);
- fwrite(file_handle, write_string);
- }
- for(new o; o < valid_objects; o ++) {
- new
- objectid = slot_objectid[o],
- Float:x,
- Float:y,
- Float:z,
- Float:rx,
- Float:ry,
- Float:rz
- ;
- GetObjectPos(objectid, x, y, z);
- GetObjectRot(objectid, rx, ry, rz);
- strunpack(g_CommentString, g_ObjectData[objectid-1][OBJECT_DATA_COMMENT], MAX_COMMENT_LEN+1);
- format(write_string, sizeof write_string,
- "g_Object[%i] = CreateObject(%i, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f); //%s\r\n",
- o, GetObjectModel(objectid), x, y, z, rx, ry, rz, g_CommentString
- );
- fwrite(file_handle, write_string);
- for(new materialindex; materialindex < MAX_OBJECT_INDEX; materialindex ++) {
- switch( g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_TYPE][materialindex] ) {
- case MATERIALINDEX_TYPE_TEXTURE: {
- new
- textureid = g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_TEXTURE][materialindex],
- modelid,
- txd[MAX_TEXTURE_TXD+1],
- name[MAX_TEXTURE_NAME+1]
- ;
- GetTextureData(textureid, modelid, txd, sizeof txd, name, sizeof name);
- format(write_string, sizeof write_string,
- "SetObjectMaterial(g_Object[%i], %i, %i, \"%s\", \"%s\", 0x%08x);\r\n", o, materialindex, modelid, txd, name, g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_COLOR][materialindex]
- );
- fwrite(file_handle, write_string);
- }
- case MATERIALINDEX_TYPE_TEXT: {
- strunpack(g_ObjectTextString, g_ObjectText[objectid-1][materialindex], MAX_OBJECT_TEXT+1);
- strunpack(g_FontString, g_ObjectFont[objectid-1][materialindex], MAX_FONTNAME_LEN+1);
- GetMaterialSizeName( g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_SIZE][materialindex], g_MaterialSizeString, sizeof g_MaterialSizeString );
- format(write_string, sizeof write_string,
- "SetObjectMaterialText(g_Object[%i], \"%s\", %i, %s, \"%s\", %i, %i, 0x%08x, 0x%08x, %i);\r\n", o,
- g_ObjectTextString,
- materialindex,
- g_MaterialSizeString,
- g_FontString,
- g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_FONTSIZE][materialindex],
- g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_ISBOLD][materialindex],
- g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_FONTCOLOR][materialindex],
- g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_COLOR][materialindex],
- g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_ALIGNMENT][materialindex]
- );
- fwrite(file_handle, write_string);
- }
- }
- }
- }
- for(new v; v < valid_vehicles; v ++) {
- new vehicleid = slot_vehicleid[v], Float:x, Float:y, Float:z, Float:r;
- GetVehiclePos(vehicleid, x, y, z);
- GetVehicleZAngle(vehicleid, r);
- strunpack(g_CommentString, g_VehicleData[vehicleid-1][VEHICLE_DATA_COMMENT], MAX_COMMENT_LEN+1); // Get Vehicle Comment
- format(write_string, sizeof write_string,
- "g_Vehicle[%i] = CreateVehicle(%i, %.4f, %.4f, %.4f, %.4f, %i, %i, -1); //%s\r\n", v,
- GetVehicleModel(vehicleid),
- x, y, z, r,
- g_VehicleData[vehicleid-1][VEHICLE_DATA_COLOR_1],
- g_VehicleData[vehicleid-1][VEHICLE_DATA_COLOR_2],
- g_CommentString
- );
- fwrite(file_handle, write_string);
- for(new slot; slot < 14; slot ++) {
- new componentid = GetVehicleComponentInSlot(vehicleid, slot);
- if(componentid) {
- GetModelName(componentid, g_ModelString, sizeof g_ModelString);
- format(write_string, sizeof write_string, "AddVehicleComponent(g_Vehicle[%i], %i);//%s\r\n", v, componentid, g_ModelString);
- fwrite(file_handle, write_string);
- }
- new paintjobid = g_VehicleData[vehicleid-1][VEHICLE_DATA_PAINTJOB];
- if( paintjobid != INVALID_PAINTJOB_ID ) {
- format(write_string, sizeof write_string, "ChangeVehiclePaintjob(g_Vehicle[%i], %i);\r\n", v, paintjobid);
- fwrite(file_handle, write_string);
- }
- }
- }
- for(new p; p < valid_pickups; p ++) {
- new
- pickupid = slot_pickupid[p],
- modelid = g_PickupData[pickupid][PICKUP_DATA_MODEL],
- Float:x = g_PickupData[pickupid][PICKUP_DATA_X],
- Float:y = g_PickupData[pickupid][PICKUP_DATA_Y],
- Float:z = g_PickupData[pickupid][PICKUP_DATA_Z]
- ;
- strunpack(g_CommentString, g_PickupData[pickupid][PICKUP_DATA_COMMENT], MAX_COMMENT_LEN+1); // Get Comment
- format(write_string, sizeof write_string,
- "g_Pickup[%i] = CreatePickup(%i, 1, %.4f, %.4f, %.4f, -1); //%s\r\n", p, modelid, x, y, z, g_CommentString
- );
- fwrite(file_handle, write_string);
- }
- for(new a; a < valid_actors; a ++) {
- new actorid = slot_actorid[a], Float:x, Float:y, Float:z, Float:r;
- GetActorPos(actorid, x, y, z);
- GetActorFacingAngle(actorid, r);
- strunpack(g_CommentString, g_ActorData[actorid][ACTOR_DATA_COMMENT], MAX_COMMENT_LEN+1);
- format(write_string, sizeof write_string,
- "g_Actor[%i] = CreateActor(%i, %.4f, %.4f, %.4f, %.4f); //%s\r\n", a, g_ActorData[actorid][ACTOR_DATA_SKIN], x, y, z, r, g_CommentString
- );
- fwrite(file_handle, write_string);
- new anim_index = g_ActorData[actorid][ACTOR_DATA_ANIM_INDEX];
- if(anim_index != INVALID_ANIM_INDEX) {
- new lib[MAX_ANIM_LIB+1], name[MAX_ANIM_NAME+1];
- GetAnimationName(anim_index, lib, MAX_ANIM_LIB+1, name, MAX_ANIM_NAME+1);
- format(write_string, sizeof write_string,
- "ApplyActorAnimation(g_Actor[%i], \"%s\", \"%s\", %.4f, %i, %i, %i, %i, %i);\r\n", a, lib, name,
- g_ActorData[actorid][ACTOR_DATA_ANIM_DELTA],
- g_ActorData[actorid][ACTOR_DATA_ANIM_LOOP],
- g_ActorData[actorid][ACTOR_DATA_ANIM_LOCKX],
- g_ActorData[actorid][ACTOR_DATA_ANIM_LOCKY],
- g_ActorData[actorid][ACTOR_DATA_ANIM_FREEZE],
- g_ActorData[actorid][ACTOR_DATA_ANIM_TIME]
- );
- fwrite(file_handle, write_string);
- }
- }
- for(new o; o < valid_objects; o ++) {
- new objectid = slot_objectid[o];
- switch( g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_IDTYPE] ) {
- case ID_TYPE_OBJECT: {
- new
- attachtoid = g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_ID],
- attachtoslot = objectid_slot[attachtoid-1]
- ;
- format(write_string, sizeof write_string,
- "AttachObjectToObject(g_Object[%i], g_Object[%i], %.4f, %.4f, %.4f, %.4f, %.4f, %.4f);\r\n", o, attachtoslot,
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_X],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_Y],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_Z],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RX],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RY],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RZ]
- );
- fwrite(file_handle, write_string);
- }
- case ID_TYPE_VEHICLE: {
- new
- vehicleid = g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_ID],
- vehicleslot = vehicleid_slot[vehicleid-1]
- ;
- format(write_string, sizeof write_string,
- "AttachObjectToVehicle(g_Object[%i], g_Vehicle[%i], %.4f, %.4f, %.4f, %.4f, %.4f, %.4f);\r\n", o, vehicleslot,
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_X],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_Y],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_Z],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RX],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RY],
- g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RZ]
- );
- fwrite(file_handle, write_string);
- }
- }
- }
- if( playerid != INVALID_PLAYER_ID ) {
- new playername[MAX_PLAYER_NAME+1];
- GetPlayerName(playerid, playername, sizeof playername);
- for(new index; index < MAX_PLAYERATTACH_INDEX; index ++) {
- if( !g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_TOGGLE] ) {
- continue;
- }
- GetModelName(g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_MODEL], g_ModelString, sizeof g_ModelString);
- GetBoneName(g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_BONE], g_BoneString, sizeof g_BoneString);
- format(write_string, sizeof write_string,
- "SetPlayerAttachedObject(playerid, %i, %i, %i, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f, 0x%08x, 0x%08x); // %s attached to the %s of %s\r\n",
- index,
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_MODEL],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_BONE],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_X ],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_Y ],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_Z ],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_RX],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_RY],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_RZ],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_SX],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_SY],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_SZ],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_COLOR1],
- g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_COLOR2],
- g_ModelString,
- g_BoneString,
- playername
- );
- fwrite(file_handle, write_string);
-
- attachments_saved ++;
- }
- }
- for(new b; b < BUILDING_DATA_SIZE; b ++) {
- if( !g_BuildingData[b][BUILDING_DATA_ISLOADED] ) {
- continue;
- }
- if( !g_BuildingData[b][BUILDING_DATA_ISREMOVED] ) {
- continue;
- }
- GetModelName(g_BuildingData[b][BUILDING_DATA_MODEL], g_ModelString, sizeof g_ModelString);
- format(write_string, sizeof write_string,
- "RemoveBuildingForPlayer(playerid, %i, %.4f, %.4f, %.4f, %.2f); // %s\r\n",
- g_BuildingData[b][BUILDING_DATA_MODEL],
- g_BuildingData[b][BUILDING_DATA_X],
- g_BuildingData[b][BUILDING_DATA_Y],
- g_BuildingData[b][BUILDING_DATA_Z],
- g_BuildingData[b][BUILDING_DATA_OFFSET] + REMOVE_BUILDING_RANGE,
- g_ModelString
- );
- fwrite(file_handle, write_string);
- if( g_BuildingData[b][BUILDING_DATA_LODMODEL] != INVALID_BUILDING_LODMODEL ) {
- format(write_string, sizeof write_string,
- "RemoveBuildingForPlayer(playerid, %i, %.4f, %.4f, %.4f, %.2f); // LOD Model of %s\r\n",
- g_BuildingData[b][BUILDING_DATA_LODMODEL],
- g_BuildingData[b][BUILDING_DATA_X],
- g_BuildingData[b][BUILDING_DATA_Y],
- g_BuildingData[b][BUILDING_DATA_Z],
- g_BuildingData[b][BUILDING_DATA_OFFSET] + REMOVE_BUILDING_RANGE,
- g_ModelString
- );
- fwrite(file_handle, write_string);
- }
- buildings_saved ++;
- }
- objects_saved = valid_objects;
- vehicles_saved = valid_vehicles;
- pickups_saved = valid_pickups;
- actors_saved = valid_actors;
- fclose(file_handle);
- return 1;
- }
|