Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ||||||||||||||||||||||| |||||| |||||| ||||| |||||||
- // ||||||||||||||||||||||| |||||| |||||| |||||| |||||||||||
- // |||| |||||| |||||| |||||||| ||||| ||||||
- // |||| |||||| |||||| |||| ||||| ||||||
- // ||||||||||||||||||||||| |||||||||||||||||||| |||| ||||||
- // ||||||||||||||||||||||| |||||||||||||||||||| |||| ||||||
- // |||| |||||| |||||| |||| ||||||
- // |||| |||||| |||||| |||| ||||||
- // ||||||||||||||||||||||| |||||| |||||| |||||||||||| ||||||||||||||||
- // ||||||||||||||||||||||| |||||| |||||| |||||||||||| ||||||||||||||||
- #include <streamer>
- native XML:xml_open(const filename[]);
- native xml_close(XML:handle);
- native bool:xml_get_bool(XML:handle, const xpath[]);
- native xml_get_int(XML:handle, const xpath[]);
- native Float:xml_get_float(XML:handle, const xpath[]);
- native xml_get_string(XML:handle, const xpath[], result[], size = sizeof result);
- static ObjectCount, VehicleCount;
- new MapName[64];
- new Nitro[MAX_PICKUPS], Repair[MAX_PICKUPS], VChange[MAX_PICKUPS], ChangeID[MAX_PICKUPS];
- new pveh[MAX_PLAYERS];
- new ObjAttr[][] =
- {
- "model",
- "posX",
- "posY",
- "posZ",
- "rotX",
- "rotY",
- "rotZ",
- "dimension",
- "interior"
- };
- new PckAttr[][] =
- {
- "type",
- "vehicle",
- "posX",
- "posY",
- "posZ"
- };
- new SpawnAttr[][] = {
- "vehicle",
- "posX",
- "posY",
- "posZ",
- "rotZ"
- };
- forward _OnPlayerPickUpPickup(playerid, pickupid);
- public OnPlayerPickUpPickup(playerid, pickupid)
- {
- new VID = GetPlayerVehicleID(playerid);
- new Float:V_X,Float:V_Y,Float:V_Z,Float:P_X,Float:P_Y,Float:P_Z,Float:P_A;
- for(new i=0; i<MAX_PICKUPS; i++)
- {
- if(pickupid == Nitro[i]) {
- AddVehicleComponent(VID,1010);
- break;
- }
- else if(pickupid == Repair[i]) {
- SetVehicleHealth(VID,100.0);
- RepairVehicle(VID);
- break;
- }
- else if(pickupid == VChange[i]) {
- GetVehicleVelocity(VID,V_X,V_Y,V_Z);
- GetVehiclePos(VID,P_X,P_Y,P_Z);
- GetVehicleZAngle(VID,P_A);
- DestroyVehicle(VID);
- new createdCar = CreateVehicle(ChangeID[i],P_X,P_Y,P_Z,P_A,-1,-1,-1);
- SetVehiclePos(createdCar,P_X,P_Y,P_A);
- SetVehicleZAngle(createdCar,P_A);
- PutPlayerInVehicle(playerid,createdCar,0);
- SetVehicleVelocity(createdCar,V_X,V_Y,V_Z);
- break;
- }
- }
- return 1;
- }
- #if defined _ALS_OnPlayerPickUpPickup
- #undef OnPlayerPickUpPickup
- #else
- #define _ALS_OnPlayerPickUpPickup
- #endif
- #define OnPlayerPickUpPickup _OnPlayerPickUpPickup
- stock CreateVehicleEx(model, Float:pox, Float:poy, Float:poz, Float:poa, dimension, interior, c1, c2, spawn_d) {
- new vehid = CreateVehicle(model, pox, poy, poz, poa, c1, c2, spawn_d);
- LinkVehicleToInterior(vehid, interior);
- SetVehicleVirtualWorld(vehid, dimension);
- }
- stock SpawnInVehicle(playerid, model, Float:pox, Float:poy, Float:poz, Float:poa, dimension, interior, c1, c2, spawn_d) {
- if(pveh[playerid]>0) DestroyVehicle(pveh[playerid]);
- pveh[playerid] = CreateVehicle(model, pox, poy, poz, poa, c1, c2, spawn_d);
- PutPlayerInVehicle(playerid, pveh[playerid], 0);
- LinkVehicleToInterior(pveh[playerid], interior);
- SetVehicleVirtualWorld(pveh[playerid], dimension);
- }
- stock VehicleChanger(Float:X, Float:Y, Float:Z, MID) {
- new id;
- for(new i=0; i<sizeof(Repair); i++)
- {
- if(VChange[i]>0) continue;
- VChange[i] = CreatePickup(1239,14,X,Y,Z,0);
- id=i;
- break;
- }
- ChangeID[id]=MID;
- return 1;
- }
- stock Load(const path[], pathmeta[], Float:DrawDistance = 200.0, VehRespawn = 20)
- {
- new Str[9][40], XML:Map = xml_open(path), MetaXML[32];
- if(Map)
- {
- new Objects = xml_get_int(Map, "count(map/object)");
- new Vehicle = xml_get_int(Map, "count(map/vehicle)");
- new Pickup = xml_get_int(Map, "count(map/racepickup)");
- new Spawn = xml_get_int(Map, "count(map/spawnpoint)");
- new Max_1 = max(Objects,Vehicle);
- new Max_2 = max(Pickup,Spawn);
- new Max = max(Max_1, Max_2);
- for(new a=1,b=Max+1; a<b; a++)
- {
- if(Objects != 0 && Objects >= a)
- {
- for(new c=0; c<sizeof(ObjAttr); c++)
- {
- format(Str[c], sizeof(Str[]), "map/object[%d]/@%s",a,ObjAttr[c]);
- }
- CreateDynamicObject(xml_get_int(Map,Str[0]),xml_get_float(Map,Str[1]),xml_get_float(Map,Str[2]),xml_get_float(Map,Str[3]),xml_get_float(Map,Str[4]),xml_get_float(Map,Str[5]),xml_get_float(Map,Str[6]),xml_get_int(Map,Str[7]),xml_get_int(Map,Str[8]),-1,DrawDistance);
- ObjectCount++;
- }
- if(Vehicle != 0 && Vehicle >= a)
- {
- for(new c=0; c<sizeof(ObjAttr); c++) //Same attributes for vehicles..
- {
- if(c == 4 || c == 5) continue;
- format(Str[c], sizeof(Str[]), "map/vehicle[%d]/@%s",a,ObjAttr[c]);
- }
- CreateVehicleEx(xml_get_int(Map,Str[0]),xml_get_float(Map,Str[1]),xml_get_float(Map,Str[2]),xml_get_float(Map,Str[3]),xml_get_float(Map,Str[6]),xml_get_int(Map,Str[7]),xml_get_int(Map,Str[8]),-1,-1,VehRespawn);
- VehicleCount++;
- }
- if(Pickup != 0 && Pickup >= a)
- {
- for(new c=0; c<sizeof(PckAttr); c++)
- {
- format(Str[c], sizeof(Str[]), "map/racepickup[%d]/@%s",a,PckAttr[c]);
- }
- new data[15];
- xml_get_string(Map, Str[0], data);
- if(strcmp(data,"nitro",true,10)==0) {
- for(new i=0; i<sizeof(Nitro); i++)
- {
- if(Nitro[i]>0) continue;
- Nitro[i] = CreatePickup(1239,14,xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4]));
- Create3DTextLabel("{FEFEFE}[ {FF0000}Nitro {FEFEFE}]",0xFEFEFEFF,xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4])+0.2,80.0,0,0);
- break;
- }
- }
- if(strcmp(data,"repair",true,10)==0) {
- for(new i=0; i<sizeof(Repair); i++)
- {
- if(Repair[i]>0) continue;
- Repair[i] = CreatePickup(1239,14,xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4]));
- Create3DTextLabel("{FEFEFE}[ {FF0000}Repair {FEFEFE}]",0xFEFEFEFF,xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4])+0.4,80.0,0,0);
- break;
- }
- }
- if(strcmp(data,"vehiclechange",true,10)==0) {
- for(new i=0; i<MAX_PICKUPS; i++)
- {
- new VC_Str[64];
- format(VC_Str,64,"{FEFEFE}[ {FF0000}V-C [%i] {FEFEFE}]",xml_get_float(Map, Str[1]));
- Create3DTextLabel(VC_Str,0xFEFEFEFF,xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4])+0.2,80.0,0,0);
- VehicleChanger(xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4]),xml_get_int(Map, Str[1]));
- break;
- }
- }
- }
- if(Spawn != 0 && Spawn >= a)
- {
- for(new c=0; c<sizeof(SpawnAttr); c++)
- {
- format(Str[c], sizeof(Str[]), "map/spawnpoint[%d]/@%s",a,SpawnAttr[c]);
- }
- //CreateVehicle(xml_get_int(Map, Str[0]),xml_get_float(Map, Str[1]),xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4]),-1,-1,-1);
- }
- }
- format(MetaXML,sizeof(MetaXML),"%s/meta.xml",pathmeta);
- new XML:Meta = xml_open(MetaXML), data[64];
- if(Meta)
- {
- xml_get_string(Meta, "meta/info/@name",data);
- format(MapName,sizeof(MapName),"%s",data);
- printf("Map: %s",MapName);
- } else {
- printf(" ** Die Meta-XML \"%s\" wurde nicht gefunden.", pathmeta);
- xml_close(Meta);
- }
- xml_close(Map);
- return 1;
- }
- printf(" ** Die Map \"%s\" wurde nicht gefunden.", path);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment