Guest User

Untitled

a guest
May 24th, 2013
551
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.04 KB | None | 0 0
  1.  
  2.  
  3. // ||||||||||||||||||||||| |||||| |||||| ||||| |||||||
  4. // ||||||||||||||||||||||| |||||| |||||| |||||| |||||||||||
  5. // |||| |||||| |||||| |||||||| ||||| ||||||
  6. // |||| |||||| |||||| |||| ||||| ||||||
  7. // ||||||||||||||||||||||| |||||||||||||||||||| |||| ||||||
  8. // ||||||||||||||||||||||| |||||||||||||||||||| |||| ||||||
  9. // |||| |||||| |||||| |||| ||||||
  10. // |||| |||||| |||||| |||| ||||||
  11. // ||||||||||||||||||||||| |||||| |||||| |||||||||||| ||||||||||||||||
  12. // ||||||||||||||||||||||| |||||| |||||| |||||||||||| ||||||||||||||||
  13.  
  14. #include <streamer>
  15.  
  16. native XML:xml_open(const filename[]);
  17. native xml_close(XML:handle);
  18. native bool:xml_get_bool(XML:handle, const xpath[]);
  19. native xml_get_int(XML:handle, const xpath[]);
  20. native Float:xml_get_float(XML:handle, const xpath[]);
  21. native xml_get_string(XML:handle, const xpath[], result[], size = sizeof result);
  22.  
  23. static ObjectCount, VehicleCount;
  24. new MapName[64];
  25. new Nitro[MAX_PICKUPS], Repair[MAX_PICKUPS], VChange[MAX_PICKUPS], ChangeID[MAX_PICKUPS];
  26. new pveh[MAX_PLAYERS];
  27. new ObjAttr[][] =
  28. {
  29. "model",
  30. "posX",
  31. "posY",
  32. "posZ",
  33. "rotX",
  34. "rotY",
  35. "rotZ",
  36. "dimension",
  37. "interior"
  38. };
  39. new PckAttr[][] =
  40. {
  41. "type",
  42. "vehicle",
  43. "posX",
  44. "posY",
  45. "posZ"
  46. };
  47. new SpawnAttr[][] = {
  48. "vehicle",
  49. "posX",
  50. "posY",
  51. "posZ",
  52. "rotZ"
  53. };
  54.  
  55. forward _OnPlayerPickUpPickup(playerid, pickupid);
  56. public OnPlayerPickUpPickup(playerid, pickupid)
  57. {
  58. new VID = GetPlayerVehicleID(playerid);
  59. new Float:V_X,Float:V_Y,Float:V_Z,Float:P_X,Float:P_Y,Float:P_Z,Float:P_A;
  60. for(new i=0; i<MAX_PICKUPS; i++)
  61. {
  62. if(pickupid == Nitro[i]) {
  63. AddVehicleComponent(VID,1010);
  64. break;
  65. }
  66. else if(pickupid == Repair[i]) {
  67. SetVehicleHealth(VID,100.0);
  68. RepairVehicle(VID);
  69. break;
  70. }
  71. else if(pickupid == VChange[i]) {
  72. GetVehicleVelocity(VID,V_X,V_Y,V_Z);
  73. GetVehiclePos(VID,P_X,P_Y,P_Z);
  74. GetVehicleZAngle(VID,P_A);
  75. DestroyVehicle(VID);
  76. new createdCar = CreateVehicle(ChangeID[i],P_X,P_Y,P_Z,P_A,-1,-1,-1);
  77. SetVehiclePos(createdCar,P_X,P_Y,P_A);
  78. SetVehicleZAngle(createdCar,P_A);
  79. PutPlayerInVehicle(playerid,createdCar,0);
  80. SetVehicleVelocity(createdCar,V_X,V_Y,V_Z);
  81. break;
  82. }
  83. }
  84. return 1;
  85. }
  86. #if defined _ALS_OnPlayerPickUpPickup
  87. #undef OnPlayerPickUpPickup
  88. #else
  89. #define _ALS_OnPlayerPickUpPickup
  90. #endif
  91. #define OnPlayerPickUpPickup _OnPlayerPickUpPickup
  92.  
  93. stock CreateVehicleEx(model, Float:pox, Float:poy, Float:poz, Float:poa, dimension, interior, c1, c2, spawn_d) {
  94. new vehid = CreateVehicle(model, pox, poy, poz, poa, c1, c2, spawn_d);
  95. LinkVehicleToInterior(vehid, interior);
  96. SetVehicleVirtualWorld(vehid, dimension);
  97. }
  98. stock SpawnInVehicle(playerid, model, Float:pox, Float:poy, Float:poz, Float:poa, dimension, interior, c1, c2, spawn_d) {
  99. if(pveh[playerid]>0) DestroyVehicle(pveh[playerid]);
  100. pveh[playerid] = CreateVehicle(model, pox, poy, poz, poa, c1, c2, spawn_d);
  101. PutPlayerInVehicle(playerid, pveh[playerid], 0);
  102. LinkVehicleToInterior(pveh[playerid], interior);
  103. SetVehicleVirtualWorld(pveh[playerid], dimension);
  104. }
  105. stock VehicleChanger(Float:X, Float:Y, Float:Z, MID) {
  106. new id;
  107. for(new i=0; i<sizeof(Repair); i++)
  108. {
  109. if(VChange[i]>0) continue;
  110. VChange[i] = CreatePickup(1239,14,X,Y,Z,0);
  111. id=i;
  112. break;
  113. }
  114. ChangeID[id]=MID;
  115. return 1;
  116. }
  117. stock Load(const path[], pathmeta[], Float:DrawDistance = 200.0, VehRespawn = 20)
  118. {
  119. new Str[9][40], XML:Map = xml_open(path), MetaXML[32];
  120. if(Map)
  121. {
  122. new Objects = xml_get_int(Map, "count(map/object)");
  123. new Vehicle = xml_get_int(Map, "count(map/vehicle)");
  124. new Pickup = xml_get_int(Map, "count(map/racepickup)");
  125. new Spawn = xml_get_int(Map, "count(map/spawnpoint)");
  126. new Max_1 = max(Objects,Vehicle);
  127. new Max_2 = max(Pickup,Spawn);
  128. new Max = max(Max_1, Max_2);
  129. for(new a=1,b=Max+1; a<b; a++)
  130. {
  131. if(Objects != 0 && Objects >= a)
  132. {
  133. for(new c=0; c<sizeof(ObjAttr); c++)
  134. {
  135. format(Str[c], sizeof(Str[]), "map/object[%d]/@%s",a,ObjAttr[c]);
  136. }
  137. 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);
  138. ObjectCount++;
  139. }
  140. if(Vehicle != 0 && Vehicle >= a)
  141. {
  142. for(new c=0; c<sizeof(ObjAttr); c++) //Same attributes for vehicles..
  143. {
  144. if(c == 4 || c == 5) continue;
  145. format(Str[c], sizeof(Str[]), "map/vehicle[%d]/@%s",a,ObjAttr[c]);
  146. }
  147. 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);
  148. VehicleCount++;
  149. }
  150. if(Pickup != 0 && Pickup >= a)
  151. {
  152. for(new c=0; c<sizeof(PckAttr); c++)
  153. {
  154. format(Str[c], sizeof(Str[]), "map/racepickup[%d]/@%s",a,PckAttr[c]);
  155. }
  156. new data[15];
  157. xml_get_string(Map, Str[0], data);
  158. if(strcmp(data,"nitro",true,10)==0) {
  159. for(new i=0; i<sizeof(Nitro); i++)
  160. {
  161. if(Nitro[i]>0) continue;
  162. Nitro[i] = CreatePickup(1239,14,xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4]));
  163. 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);
  164. break;
  165. }
  166. }
  167. if(strcmp(data,"repair",true,10)==0) {
  168. for(new i=0; i<sizeof(Repair); i++)
  169. {
  170. if(Repair[i]>0) continue;
  171. Repair[i] = CreatePickup(1239,14,xml_get_float(Map, Str[2]),xml_get_float(Map, Str[3]),xml_get_float(Map, Str[4]));
  172. 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);
  173. break;
  174. }
  175. }
  176. if(strcmp(data,"vehiclechange",true,10)==0) {
  177. for(new i=0; i<MAX_PICKUPS; i++)
  178. {
  179. new VC_Str[64];
  180. format(VC_Str,64,"{FEFEFE}[ {FF0000}V-C [%i] {FEFEFE}]",xml_get_float(Map, Str[1]));
  181. 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);
  182. 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]));
  183. break;
  184. }
  185. }
  186. }
  187. if(Spawn != 0 && Spawn >= a)
  188. {
  189. for(new c=0; c<sizeof(SpawnAttr); c++)
  190. {
  191. format(Str[c], sizeof(Str[]), "map/spawnpoint[%d]/@%s",a,SpawnAttr[c]);
  192. }
  193. //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);
  194. }
  195. }
  196. format(MetaXML,sizeof(MetaXML),"%s/meta.xml",pathmeta);
  197. new XML:Meta = xml_open(MetaXML), data[64];
  198. if(Meta)
  199. {
  200. xml_get_string(Meta, "meta/info/@name",data);
  201. format(MapName,sizeof(MapName),"%s",data);
  202. printf("Map: %s",MapName);
  203. } else {
  204. printf(" ** Die Meta-XML \"%s\" wurde nicht gefunden.", pathmeta);
  205. xml_close(Meta);
  206. }
  207. xml_close(Map);
  208. return 1;
  209. }
  210. printf(" ** Die Map \"%s\" wurde nicht gefunden.", path);
  211. return 1;
  212. }
Advertisement
Add Comment
Please, Sign In to add comment