Advertisement
Guest User

Objecteditor by IPrototypeI

a guest
Apr 26th, 2014
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.38 KB | None | 0 0
  1. /*
  2. Ingame Objecteditor by IPrototypeI
  3.  
  4. Thanks to
  5. - BigETI for the development of the memory access plugin and support.
  6. - Newborn and ShenzoX for testing.
  7.  
  8. */
  9.  
  10.  
  11. #include <a_mysql>
  12. #include <streamer>
  13. #include <pcmd>
  14. #include <sscanf2>
  15. #include <list>
  16.  
  17. forward @Load_Objects();
  18. forward @Update_Objects();
  19. forward @ReduceValue();
  20. forward @ConvertMap();
  21. forward @DeleteMap(str[]);
  22.  
  23. #define Update_Time 60 // 60 => 60 Minuten
  24. #define Set_Height 0.01
  25.  
  26. MEM::struct obj_mem_struct {
  27. obj_mem_objectid,
  28. obj_mem_materialindex,
  29. obj_mem_modelid,
  30. obj_mem_txdname[20],
  31. obj_mem_texturename[20],
  32. obj_mem_materialcolor,
  33. };
  34.  
  35. MEM::struct obj_text_mem_struct {
  36. _obj_mem_objectid,
  37. _obj_mem_materialindex,
  38. _obj_mem_text[120],
  39. _obj_mem_materialsize,
  40. _obj_mem_fontface[20],
  41. _obj_mem_fontsize,
  42. _obj_mem_bold,
  43. _obj_mem_fontcolor,
  44. _obj_mem_backcolor,
  45. _obj_mem_textalignment,
  46.  
  47. };
  48. MEM::struct obj_edit_cache {
  49. obj_edit_id,
  50. obj_edit_pointer,
  51. obj_edit_index,
  52. };
  53.  
  54. enum tempdata {
  55. obj_materialindex,
  56. obj_modelid,
  57. obj_txdname[20],
  58. obj_texturename[20],
  59. obj_materialcolor,
  60. obj_compressstring[100],
  61. };
  62.  
  63. enum _temp{
  64. _Index[10],
  65. _ModelID,
  66. _TxdName[20],
  67. _TextureName[20],
  68. _MaterialColor,
  69. _Text[128],
  70. _MaterialSize,
  71. _FontFace[20],
  72. _FontBold,
  73. _FontSize,
  74. _MaterialBack,
  75. _TextAlign,
  76. };
  77.  
  78. enum _insert {
  79. insert_objectid,
  80. insert_materialindex,
  81. };
  82.  
  83. enum pValues(<<= 1){
  84. o_Rotate=1,
  85. o_Move,
  86. o_WRITE,
  87. };
  88.  
  89. new static LIST_init<streamer_material>,
  90. LIST_init<streamer_material_text>,
  91. TempData[_temp],
  92. sqlHandler,
  93. PlayerEditObject[MAX_PLAYERS],
  94. pValues:PlayerValues[MAX_PLAYERS char],
  95. LIST_init<object_cache>,
  96. TextSlotStr[200],
  97. ALLQUERY[800],
  98. save,
  99. File:map;
  100.  
  101. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  102. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  103. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  104. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  105. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  106.  
  107.  
  108. native __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0) = SetDynamicObjectMaterial;
  109. stock static _SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0, bool:set=false) {
  110. if(set)return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
  111. new obj_insert[_insert];
  112. obj_insert[insert_objectid] = objectid;
  113. obj_insert[insert_materialindex] = materialindex;
  114. new ListIt:data = LIST_find_arr(streamer_material, obj_insert),object_buffer[obj_mem_struct];
  115. if(data)LIST::erase(streamer_material,data);
  116. object_buffer[obj_mem_objectid] = objectid;
  117. object_buffer[obj_mem_materialindex] = materialindex;
  118. object_buffer[obj_mem_modelid] = modelid;
  119. strcat(object_buffer[obj_mem_txdname],txdname,20);
  120. strcat(object_buffer[obj_mem_texturename],texturename,20);
  121. object_buffer[obj_mem_materialcolor] = materialcolor;
  122. LIST::push_back_arr(streamer_material, object_buffer);
  123. return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
  124. }
  125. #if defined _ALS_SetDynamicObjectMaterial
  126. #undef SetDynamicObjectMaterial
  127. #else
  128. #define _ALS_SetDynamicObjectMaterial
  129. #endif
  130. #define SetDynamicObjectMaterial _SetDynamicObjectMaterial
  131.  
  132. stock static GetDynamicObjectMaterialEx(objectid, materialindex, &modelid, txdname[], texturename[], &materialcolor){
  133. new object_buffer[obj_mem_struct];
  134. LIST_foreach_rev<my_iterator>(streamer_material)
  135. {
  136. MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
  137. if(objectid == object_buffer[obj_mem_objectid] && materialindex == object_buffer[obj_mem_materialindex]){
  138. modelid = object_buffer[obj_mem_modelid];
  139. strcat(txdname,object_buffer[obj_mem_txdname],20);
  140. strcat(texturename,object_buffer[obj_mem_texturename],20);
  141. materialcolor = object_buffer[obj_mem_materialcolor];
  142. return 1;
  143. }
  144. }
  145. return 1;
  146. }
  147. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  148. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  149. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  150. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  151. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  152.  
  153.  
  154.  
  155.  
  156.  
  157. stock static GetDynamicObjectMaterialTextEx(objectid, &materialindex, text[], &materialsize, fontface[], &fontsize, &bold, &fontcolor, &backcolor, &textalignment){
  158. new object_buffer[obj_text_mem_struct];
  159. LIST_foreach_rev<my_iterator>(streamer_material_text)
  160. {
  161. MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
  162. if(objectid == object_buffer[_obj_mem_objectid]){
  163. strcat(text,object_buffer[_obj_mem_text],120);
  164. materialsize = object_buffer[_obj_mem_materialsize]
  165. strcat(fontface,object_buffer[_obj_mem_fontface],20);
  166. fontsize = object_buffer[_obj_mem_fontsize];
  167. bold = object_buffer[_obj_mem_bold];
  168. fontcolor = object_buffer[_obj_mem_fontcolor];
  169. backcolor = object_buffer[_obj_mem_backcolor];
  170. textalignment = object_buffer[_obj_mem_textalignment];
  171. materialindex = object_buffer[_obj_mem_materialindex];
  172. return 1;
  173. }
  174. }
  175. return 0;
  176. }
  177.  
  178. native __SetDynamicObjectMaterialText(objectid, materialindex, const text[], materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0) = SetDynamicObjectMaterialText;
  179. stock static _SetDynamicObjectMaterialText(objectid, materialindex, const text[], materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0) {
  180. new object_buffer[obj_text_mem_struct];
  181. LIST_foreach_rev<my_iterator>(streamer_material_text)
  182. {
  183. MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
  184. if(objectid == object_buffer[_obj_mem_objectid]){
  185. __SetDynamicObjectMaterialText(objectid, object_buffer[_obj_mem_materialindex], "", materialsize, fontface, fontsize, bold, fontcolor, backcolor, textalignment);
  186. LIST::erase(streamer_material_text,my_iterator);
  187. break;
  188. }
  189. }
  190. object_buffer[_obj_mem_objectid] = objectid;
  191. object_buffer[_obj_mem_materialindex] = materialindex;
  192. strdel(object_buffer[_obj_mem_text],0,120);
  193. strcat(object_buffer[_obj_mem_text],text,120);
  194. object_buffer[_obj_mem_materialsize] = materialsize;
  195. strdel(object_buffer[_obj_mem_fontface],0,120);
  196. strcat(object_buffer[_obj_mem_fontface],fontface,120);
  197. object_buffer[_obj_mem_fontsize] = fontsize;
  198. object_buffer[_obj_mem_bold] = bold;
  199. object_buffer[_obj_mem_fontcolor] = fontcolor;
  200. object_buffer[_obj_mem_backcolor] = backcolor;
  201. object_buffer[_obj_mem_textalignment] = textalignment;
  202. LIST::push_back_arr(streamer_material_text, object_buffer);
  203. return __SetDynamicObjectMaterialText(objectid, materialindex, text, materialsize, fontface, fontsize, bold, fontcolor, backcolor, textalignment);
  204. }
  205. #if defined _A_SetDynamicObjectMaterialText
  206. #undef SetDynamicObjectMaterialText
  207. #else
  208. #define _A_SetDynamicObjectMaterialText
  209. #endif
  210. #define SetDynamicObjectMaterialText _SetDynamicObjectMaterialText
  211.  
  212.  
  213. native __SelectObject(playerid) = SelectObject;
  214. stock static _SelectObject(playerid) {
  215. PlayerEditObject[playerid] = 0;
  216. return __SelectObject(playerid);
  217. }
  218. #if defined _A_SelectObject
  219. #undef SelectObject
  220. #else
  221. #define _A_SelectObject
  222. #endif
  223. #define SelectObject _SelectObject
  224.  
  225. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  226. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  227. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  228. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  229. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  230.  
  231.  
  232.  
  233.  
  234.  
  235. #if !defined _ALS_
  236. forward public _ALS_();
  237. _ALS_()<_ALS_:unhooked>{}
  238. _ALS_()<_ALS_:hooked>{}
  239. _ALS_()<>{}
  240. #endif
  241.  
  242. #if !defined AL_
  243. forward public AL_();
  244. AL_()<AL_:unhooked>{}
  245. AL_()<AL_:hooked>{}
  246. AL_()<>{}
  247. #endif
  248.  
  249. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  250. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  251. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  252. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  253. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  254.  
  255.  
  256. public OnGameModeInit()
  257. {
  258. state _ALS_:hooked;
  259. Streamer_VisibleItems(STREAMER_TYPE_OBJECT,1000);
  260. mysql_log(LOG_DEBUG,LOG_TYPE_TEXT);
  261. sqlHandler = mysql_connect("localhost", "root", "amazing", "");
  262. mysql_tquery(sqlHandler,"CREATE TABLE IF NOT EXISTS `amazing_objects`(`Did` INT AUTO_INCREMENT,`id` INT,`modelid` INT,`x` FLOAT NOT NULL,`y` FLOAT NOT NULL,`z` FLOAT NOT NULL,`rx` FLOAT NOT NULL,`ry` FLOAT NOT NULL,`rz` FLOAT NOT NULL,`material1` VARCHAR(128),`material2` VARCHAR(128),`material3` VARCHAR(128),`materialtext` VARCHAR(256), `kommentar` VARCHAR(64),PRIMARY KEY(`Did`))ENGINE = InnoDB;","","");
  263. mysql_tquery(sqlHandler,"SELECT * FROM `amazing_objects`;","@Load_Objects","");
  264. SetTimer("@Update_Objects",Update_Time*60*1000,true);
  265. return H_OnGameModeInit();
  266. }
  267. forward H_OnGameModeInit();
  268. #if defined _ALS_OnGameModeInit
  269. #undef OnGameModeInit
  270. #else
  271. #define _ALS_OnGameModeInit
  272. #endif
  273. public H_OnGameModeInit() <_ALS_:unhooked> return 1;
  274. public H_OnGameModeInit() <> return 1;
  275. #define OnGameModeInit(%0) H_OnGameModeInit(%0)<_ALS_:hooked>
  276. // 0|5134|wasteland_las2|genroof01_128|0
  277.  
  278. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz){
  279. state _ALS_:hooked;
  280. switch(response){
  281. case EDIT_RESPONSE_CANCEL:{
  282. new Float:Pos[3];
  283. GetDynamicObjectPos(objectid, Pos[0], Pos[1], Pos[2]);
  284. SetDynamicObjectPos(objectid, Pos[0], Pos[1], Pos[2]);
  285. GetDynamicObjectRot(objectid, Pos[0], Pos[1], Pos[2]);
  286. SetDynamicObjectRot(objectid, Pos[0], Pos[1], Pos[2]);
  287. return 1;
  288. }
  289. case EDIT_RESPONSE_FINAL:{
  290. new ObjectEdit[obj_edit_cache];
  291. switch(PlayerValues[playerid]){
  292. case o_Rotate:{
  293. PlayerValues[playerid] &= ~o_Rotate;
  294. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_X, x);
  295. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Y, y);
  296. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Z, z);
  297. } case o_Move:{
  298. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_X, x);
  299. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Y, y);
  300. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Z, z+Set_Height);
  301. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_X, rx);
  302. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Y, ry);
  303. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Z, rz);
  304. PlayerValues[playerid] &= ~o_Move;
  305. } default:{
  306. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_X, x);
  307. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Y, y);
  308. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Z, z);
  309. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_X, rx);
  310. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Y, ry);
  311. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Z, rz);
  312. }
  313. }
  314. new ListIt:data = LIST_find(object_cache, objectid);
  315. if(!data){
  316. ObjectEdit[obj_edit_id] = objectid;
  317. LIST::push_back_arr(object_cache, ObjectEdit);
  318. }
  319. return SelectObject(playerid);
  320. }
  321. }
  322. return H_OnPlayerEditDynamicObject(playerid, objectid, response, x, y, z, rx, ry, rz);
  323. }
  324. forward H_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz);
  325. #if defined _ALS_OnPlayerEditDynamicObject
  326. #undef OnPlayerEditDynamicObject
  327. #else
  328. #define _ALS_OnPlayerEditDynamicObject
  329. #endif
  330. public H_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) <_ALS_:unhooked> return 1;
  331. public H_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) <> return 1;
  332. #define OnPlayerEditDynamicObject(%0,%1,%2,%3,%4,%5,%6,%7,%8) H_OnPlayerEditDynamicObject(%0,%1,%2,%3,%4,%5,%6,%7,%8)<_ALS_:hooked>
  333.  
  334.  
  335. public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z) {
  336. state AL_:hooked;
  337. PlayerEditObject[playerid] = objectid;
  338. EditDynamicObject(playerid, objectid);
  339. return H_OnPlayerSelectDynamicObject(playerid, objectid, modelid, x, y, z);
  340. }
  341. forward H_OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z);
  342. #if defined AL_OnPlayerSelectDynamicObject
  343. #undef OnPlayerSelectDynamicObject
  344. #else
  345. #define AL_OnPlayerSelectDynamicObject
  346. #endif
  347. public H_OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z) <AL_:unhooked> return 1;
  348. public H_OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z) <> return 1;
  349. #define OnPlayerSelectDynamicObject(%0,%1,%2,%3,%4,%5) H_OnPlayerSelectDynamicObject(%0,%1,%2,%3,%4,%5)<AL_:hooked>
  350.  
  351.  
  352. public OnGameModeExit()
  353. {
  354. state _A_:hooked;
  355. LIST::clear(object_cache);
  356. LIST::clear(streamer_material);
  357. LIST::clear(streamer_material_text);
  358. return H_OnGameModeExit();
  359. }
  360. forward H_OnGameModeExit();
  361. #if defined _A_OnGameModeExit
  362. #undef OnGameModeExit
  363. #else
  364. #define _A_OnGameModeExit
  365. #endif
  366. public H_OnGameModeExit() <_A_:unhooked> return 1;
  367. public H_OnGameModeExit() <> return 1;
  368. #define OnGameModeExit(%0) H_OnGameModeExit(%0)<_A_:hooked>
  369.  
  370. public OnQueryError(errorid, error[], callback[], query[], connectionHandle) {
  371. printf("Errorid %d",errorid);
  372. print(error);
  373. print(callback);
  374. print(query);
  375. return 1;
  376. }
  377.  
  378. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  379. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  380. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  381. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  382. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  383.  
  384.  
  385. @Load_Objects(){
  386. new _row[3],i,query[256];
  387. cache_get_data(_row[0],_row[1]);
  388. for(; i != _row[0]; ++i){
  389. _row[2] = cache_get_field_content_int(i,"id",sqlHandler);
  390. _row[1] = CreateDynamicObject(cache_get_field_content_int(i,"modelid",sqlHandler),cache_get_field_content_float(i,"x",sqlHandler),cache_get_field_content_float(i,"y",sqlHandler),cache_get_field_content_float(i,"z",sqlHandler),cache_get_field_content_float(i,"rx",sqlHandler),cache_get_field_content_float(i,"ry",sqlHandler),cache_get_field_content_float(i,"rz",sqlHandler));
  391. if(_row[2] != _row[1]){
  392. mysql_format(sqlHandler,query,256,"UPDATE `amazing_objects` SET `id` = %d WHERE `Did` = %d",_row[1],cache_get_field_content_int(i,"Did",sqlHandler));
  393. mysql_tquery(sqlHandler,query,"","");
  394. }
  395. cache_get_field_content(i,"material1",query,sqlHandler,256);
  396. if(query[0] != '|' && query[0] != EOS){
  397. sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
  398. SetObjectIndex(_row[1],TempData[_Index]);
  399. }
  400. cache_get_field_content(i,"material2",query,sqlHandler,256);
  401. if(query[0] != '|' && query[0] != EOS){
  402. sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
  403. SetObjectIndex(_row[1],TempData[_Index]);
  404. }
  405. cache_get_field_content(i,"material3",query,sqlHandler,256);
  406. if(query[0] != '|' && query[0] != EOS){
  407. sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
  408. SetObjectIndex(_row[1],TempData[_Index]);
  409. }
  410. cache_get_field_content(i,"materialtext",query,sqlHandler,256);
  411. if(query[0] != '|' && query[0] != EOS){
  412.  
  413. sscanf(query,"p<|>s[10]s[128]ds[20]ddddd",TempData[_Index],TempData[_Text],TempData[_MaterialSize],TempData[_FontFace],TempData[_FontSize],TempData[_FontBold],TempData[_MaterialColor],TempData[_MaterialBack],TempData[_TextAlign]);
  414. SetDynamicObjectMaterialText(_row[1], strval(TempData[_Index]), TempData[_Text],TempData[_MaterialSize],TempData[_FontFace],TempData[_FontSize],TempData[_FontBold],TempData[_MaterialColor],TempData[_MaterialBack],TempData[_TextAlign]);
  415. }
  416. }
  417. return 1;
  418. }
  419. @Update_Objects(){
  420. new Pointer:data_ptr,obj_id;
  421. LIST_foreach<i>(object_cache)
  422. {
  423. ++save;
  424. data_ptr = LIST_IT_data_ptr(i);
  425. obj_id = MEM_EX::get_val(data_ptr->0);
  426. CompressMaterialText(obj_id,TextSlotStr,200);
  427. CompressData(obj_id,TextSlotStr);
  428. strdel(TextSlotStr,0,200);
  429. }
  430. return 1;
  431. }
  432. @DeleteMap(str[]){
  433. new _row[2],i,query[128];
  434. cache_get_data(_row[0],_row[1]);
  435. for(; i != _row[0]; ++i){
  436. new obj = cache_get_field_content_int(i,"id",sqlHandler);
  437. DestroyDynamicObject(obj);
  438. for(new x,y=LIST_count_found(streamer_material, obj); x != y; ++x) LIST::erase(streamer_material,LIST_find(streamer_material, obj));
  439. for(new x,y=LIST_count_found(streamer_material_text, obj); x != y; ++x)LIST::erase(streamer_material_text,LIST_find(streamer_material_text, obj));
  440. LIST::erase(object_cache,LIST_find(object_cache, obj));
  441. }
  442. print(str);
  443. mysql_format(sqlHandler,query,128,"DELETE FROM `amazing_objects` WHERE `kommentar` = '%e';",str);
  444. mysql_tquery(sqlHandler,query,"","");
  445. return 1;
  446. }
  447. @ConvertMap(){
  448. new _row[3],i,query[256],writeString[400];
  449. cache_get_data(_row[0],_row[1]);
  450. for(; i != _row[0]; ++i){
  451. format(writeString,400,"CreateDynamicObject(%d, %f, %f, %f, %f, %f, %f);\r\n",cache_get_field_content_int(i,"modelid",sqlHandler),cache_get_field_content_float(i,"x",sqlHandler),cache_get_field_content_float(i,"y",sqlHandler),cache_get_field_content_float(i,"z",sqlHandler),cache_get_field_content_float(i,"rx",sqlHandler),cache_get_field_content_float(i,"ry",sqlHandler),cache_get_field_content_float(i,"rz",sqlHandler));
  452. cache_get_field_content(i,"material1",query,sqlHandler,256);
  453. if(query[0] != '|' && query[0] != EOS){
  454. if(!(PlayerValues[0] & o_WRITE)){
  455. PlayerValues[0] |= o_WRITE;
  456. strins(writeString,"obj = ",0);
  457. fwrite(map,writeString);
  458. }
  459. sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
  460. SetObjectIndexMapConvert(writeString,TempData[_Index]);
  461. }
  462. cache_get_field_content(i,"material2",query,sqlHandler,256);
  463. if(query[0] != '|' && query[0] != EOS){
  464. if(!(PlayerValues[0] & o_WRITE)){
  465. PlayerValues[0] |= o_WRITE;
  466. strins(writeString,"obj = ",0);
  467. fwrite(map,writeString);
  468. }
  469. sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
  470. SetObjectIndexMapConvert(writeString,TempData[_Index]);
  471. }
  472. cache_get_field_content(i,"material3",query,sqlHandler,256);
  473. if(query[0] != '|' && query[0] != EOS){
  474. if(!(PlayerValues[0] & o_WRITE)){
  475. PlayerValues[0] |= o_WRITE;
  476. strins(writeString,"obj = ",0);
  477. fwrite(map,writeString);
  478. }
  479. sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
  480. SetObjectIndexMapConvert(writeString,TempData[_Index]);
  481. }
  482. cache_get_field_content(i,"materialtext",query,sqlHandler,256);
  483. if(query[0] != '|' && query[0] != EOS){
  484. if(!(PlayerValues[0] & o_WRITE)){
  485. PlayerValues[0] |= o_WRITE;
  486. strins(writeString,"obj = ",0);
  487. fwrite(map,writeString);
  488. }
  489. sscanf(query,"p<|>s[10]s[128]ds[20]ddddd",TempData[_Index],TempData[_Text],TempData[_MaterialSize],TempData[_FontFace],TempData[_FontSize],TempData[_FontBold],TempData[_MaterialColor],TempData[_MaterialBack],TempData[_TextAlign]);
  490. format(writeString,400,"SetDynamicObjectMaterialText(obj, %d, \"%s\", %d, \"%s\", %d, %d, %d, %d, %d);\r\n",strval(TempData[_Index]), TempData[_Text],TempData[_MaterialSize],TempData[_FontFace],TempData[_FontSize],TempData[_FontBold],TempData[_MaterialColor],TempData[_MaterialBack],TempData[_TextAlign]);
  491. fwrite(map,writeString);
  492. }
  493. if(!(PlayerValues[0] & o_WRITE))fwrite(map,writeString);
  494. PlayerValues[0] &= ~o_WRITE;
  495.  
  496. }
  497. fclose(map);
  498. }
  499.  
  500. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  501. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  502. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  503. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  504. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  505. stock static CompressMaterialText(objectid, str[], size = sizeof(str)){
  506. new object_buffer[obj_text_mem_struct];
  507. LIST_foreach_rev<my_iterator>(streamer_material_text)
  508. {
  509. MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
  510. if(objectid == object_buffer[_obj_mem_objectid]){
  511. format(str,size,"%d|%s|%d|%s|%d|%d|%d|%d|%d",object_buffer[_obj_mem_materialindex],object_buffer[_obj_mem_text],object_buffer[_obj_mem_materialsize],object_buffer[_obj_mem_fontface],object_buffer[_obj_mem_fontsize],object_buffer[_obj_mem_bold],object_buffer[_obj_mem_fontcolor],object_buffer[_obj_mem_backcolor],object_buffer[_obj_mem_textalignment]);
  512. return 1;
  513. }
  514. }
  515. return 0;
  516. }
  517. stock static SetObjectIndex(id,idxstr[]){
  518. new i,j=strlen(idxstr);
  519. for(; i != j; ++i){
  520. switch(idxstr[i]){
  521. case EOS:break;
  522. case '+':continue;
  523. default:SetDynamicObjectMaterial(id, strval(idxstr[i]), TempData[_ModelID], TempData[_TxdName], TempData[_TextureName], TempData[_MaterialColor]);
  524. }
  525. }
  526. return 1;
  527. }
  528. stock static SetObjectIndexMapConvert(str[],idxstr[]){
  529. new i,j=strlen(idxstr);
  530. for(; i != j; ++i){
  531. switch(idxstr[i]){
  532. case EOS:break;
  533. case '+':continue;
  534. default:{
  535. format(str,400,"SetDynamicObjectMaterial(obj, %d, %d, \"%s\", \"%s\", %d);\r\n",strval(idxstr[i]), TempData[_ModelID], TempData[_TxdName], TempData[_TextureName], TempData[_MaterialColor]);
  536. fwrite(map,str);
  537. }
  538. }
  539. }
  540. return 1;
  541. }
  542. stock static CompressData(objectid, obj_TextSlotStr[]){
  543. new object_buffer[obj_mem_struct],object_buffer_temp[3][tempdata];
  544. LIST_foreach_rev<my_iterator>(streamer_material)
  545. {
  546. MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
  547. if(objectid == object_buffer[obj_mem_objectid]){
  548. if((!strcmp(object_buffer[obj_mem_texturename],object_buffer_temp[0][obj_texturename],false) && !strcmp(object_buffer[obj_mem_txdname],object_buffer_temp[0][obj_txdname],false))|| strlen(object_buffer_temp[0][obj_txdname][0]) == 0){
  549. if(strlen(object_buffer_temp[0][obj_compressstring]) == 0){
  550. object_buffer_temp[0][obj_modelid] = object_buffer[obj_mem_modelid];
  551. strdel(object_buffer_temp[0][obj_txdname],0,20);
  552. strcat(object_buffer_temp[0][obj_txdname],object_buffer[obj_mem_txdname],20);
  553. strdel(object_buffer_temp[0][obj_texturename],0,20);
  554. strcat(object_buffer_temp[0][obj_texturename],object_buffer[obj_mem_texturename],20);
  555. object_buffer_temp[0][obj_materialcolor] = object_buffer[obj_mem_materialcolor];
  556. format(object_buffer_temp[0][obj_compressstring],2,"%d",object_buffer[obj_mem_materialindex]);
  557. continue;
  558. }
  559. format(object_buffer_temp[0][obj_compressstring],100,"%s+%d",object_buffer_temp[0][obj_compressstring],object_buffer[obj_mem_materialindex]);
  560. }else if((!strcmp(object_buffer[obj_mem_texturename],object_buffer_temp[1][obj_texturename],false) && !strcmp(object_buffer[obj_mem_txdname],object_buffer_temp[1][obj_txdname],false))|| strlen(object_buffer_temp[1][obj_txdname]) == 0){
  561. if(strlen(object_buffer_temp[1][obj_compressstring]) == 0){
  562. object_buffer_temp[1][obj_modelid] = object_buffer[obj_mem_modelid];
  563. strdel(object_buffer_temp[1][obj_txdname],0,20);
  564. strcat(object_buffer_temp[1][obj_txdname],object_buffer[obj_mem_txdname],20);
  565. strdel(object_buffer_temp[1][obj_texturename],0,20);
  566. strcat(object_buffer_temp[1][obj_texturename],object_buffer[obj_mem_texturename],20);
  567. object_buffer_temp[1][obj_materialcolor] = object_buffer[obj_mem_materialcolor];
  568. format(object_buffer_temp[1][obj_compressstring],2,"%d",object_buffer[obj_mem_materialindex]);
  569. continue;
  570. }
  571. format(object_buffer_temp[1][obj_compressstring],100,"%s+%d",object_buffer_temp[1][obj_compressstring],object_buffer[obj_mem_materialindex]);
  572.  
  573. }else if((!strcmp(object_buffer[obj_mem_texturename],object_buffer_temp[2][obj_texturename],false) && !strcmp(object_buffer[obj_mem_txdname],object_buffer_temp[2][obj_txdname],false))|| strlen(object_buffer_temp[2][obj_txdname]) == 0){
  574. if(strlen(object_buffer_temp[2][obj_compressstring]) == 0){
  575. object_buffer_temp[2][obj_modelid] = object_buffer[obj_mem_modelid];
  576. strdel(object_buffer_temp[2][obj_txdname],0,20);
  577. strcat(object_buffer_temp[2][obj_txdname],object_buffer[obj_mem_txdname],20);
  578. strdel(object_buffer_temp[2][obj_texturename],0,20);
  579. strcat(object_buffer_temp[2][obj_texturename],object_buffer[obj_mem_texturename],20);
  580. object_buffer_temp[2][obj_materialcolor] = object_buffer[obj_mem_materialcolor];
  581. format(object_buffer_temp[2][obj_compressstring],2,"%d",object_buffer[obj_mem_materialindex]);
  582. continue;
  583. }
  584. format(object_buffer_temp[2][obj_compressstring],100,"%s+%d",object_buffer_temp[2][obj_compressstring],object_buffer[obj_mem_materialindex]);
  585. }
  586. }
  587. }
  588. new Float:Pos[6];
  589. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_X, Pos[0]);
  590. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Y, Pos[1]);
  591. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Z, Pos[2]);
  592. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_X, Pos[3]);
  593. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Y, Pos[4]);
  594. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Z, Pos[5]);
  595. mysql_format(sqlHandler,ALLQUERY,800,"UPDATE `amazing_objects` SET `x` = %f, `y` = %f, `z` = %f, `rx` = %f, `ry` = %f, `rz` = %f,`material1` = '%s|%d|%s|%s|%d', `material2` = '%s|%d|%s|%s|%d', `material3` = '%s|%d|%s|%s|%d', `materialtext` = '%s' WHERE `id` = %d;",
  596. Pos[0],
  597. Pos[1],
  598. Pos[2],
  599. Pos[3],
  600. Pos[4],
  601. Pos[5],
  602. object_buffer_temp[0][obj_compressstring],
  603. object_buffer_temp[0][obj_modelid],
  604. object_buffer_temp[0][obj_txdname],
  605. object_buffer_temp[0][obj_texturename],
  606. object_buffer_temp[0][obj_materialcolor],
  607.  
  608. object_buffer_temp[1][obj_compressstring],
  609. object_buffer_temp[1][obj_modelid],
  610. object_buffer_temp[1][obj_txdname],
  611. object_buffer_temp[1][obj_texturename],
  612. object_buffer_temp[1][obj_materialcolor],
  613.  
  614. object_buffer_temp[2][obj_compressstring],
  615. object_buffer_temp[2][obj_modelid],
  616. object_buffer_temp[2][obj_txdname],
  617. object_buffer_temp[2][obj_texturename],
  618. object_buffer_temp[2][obj_materialcolor],
  619. obj_TextSlotStr,
  620. objectid);
  621. mysql_tquery(sqlHandler,ALLQUERY,"@ReduceValue","");
  622.  
  623. return 1;
  624. }
  625. @ReduceValue(){
  626. --save;
  627. if(save == 0){
  628. LIST_clear(object_cache);
  629. print("Map wurde gespeichert");
  630. }
  631. return 1;
  632. }
  633. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  634. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  635. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  636.  
  637. CMD->edittexture(playerid,params[]){
  638. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  639. new val[3],txdname[20],texturname[20];
  640. if(sscanf(params,"dds[20]s[20]H(0xFFFFFFFF)",val[0],val[1],txdname,texturname,val[2]))return SendClientMessage(playerid,-1,"Benutze: /edittexture [index] [modelid] [txdname] [texturname] [Farbe]");
  641. SetDynamicObjectMaterial(PlayerEditObject[playerid], val[0], val[1], txdname, texturname, val[2]);
  642. SendClientMessage(playerid,-1,"Du hast erfolgreich die Textur geändert");
  643. return 1;
  644. }
  645. CMD->edittext(playerid,params[]){
  646. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  647. new val[5],text[20],fontface[20];
  648. if(sscanf(params,"ds[20]s[20]ddhH(0x00FFFFFF)",val[0],text,fontface,val[1],val[2],val[3],val[4]))return SendClientMessage(playerid,-1,"Benutze: /edittext [index] [text] [fontface] [fontsize] [bold] [FontFarbe] [Backgroundcolor]");
  649. SetDynamicObjectMaterialText(PlayerEditObject[playerid], val[0],text,OBJECT_MATERIAL_SIZE_256x128, fontface, val[1], val[2], val[3], val[4], 0);
  650. SendClientMessage(playerid,-1,"Du hast erfolgreich eine Text auf das Objekt gesetzt");
  651. return 1;
  652. }
  653.  
  654. CMD->edittexturep(playerid,params[]){
  655. new val[3],txdname[20],texturname[20],ObjectEdit[obj_edit_cache];
  656. if(sscanf(params,"dds[20]s[20]H(0xFFFFFFFF)",val[1],val[0],txdname,texturname,val[2]))return SendClientMessage(playerid,-1,"Benutze: /edittexturep [pointer] [modelid] [txdname] [texturname] [Farbe]");
  657. LIST_foreach_rev<i>(object_cache){
  658. MEM::get_arr(LIST_IT_data_ptr(i), _, ObjectEdit);
  659. if(ObjectEdit[obj_edit_pointer] != val[1])continue;
  660. SetDynamicObjectMaterial(ObjectEdit[obj_edit_id], ObjectEdit[obj_edit_index], val[0], txdname, texturname, val[2]);
  661. }
  662. SendClientMessage(playerid,-1,"Du hast erfolgreich die Texturen geändert");
  663. return 1;
  664. }
  665. CMD->removetexturall(playerid,params[]){
  666. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  667. for(new i,y=LIST_count_found(streamer_material, PlayerEditObject[playerid]); i != y; ++i) LIST::erase(streamer_material,LIST_find(streamer_material, PlayerEditObject[playerid]));
  668. for(new x; x != 50; ++x)SetDynamicObjectMaterial(PlayerEditObject[playerid],x, 0, "", "", 0,true);
  669. return 1;
  670. }
  671. CMD->duplicate(playerid,params[]){
  672. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  673. new Float:Pos[6],kommentar[64],obj[2],query[500];
  674. if(sscanf(params,"s[64]",kommentar))return SendClientMessage(playerid,-1,"Benutze: /duplicate [Kommentar]");
  675. obj[1] = Streamer_GetIntData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_MODEL_ID);
  676. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_X, Pos[0]);
  677. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_Y, Pos[1]);
  678. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_Z, Pos[2]);
  679. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_X, Pos[3]);
  680. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_Y, Pos[4]);
  681. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_Z, Pos[5]);
  682. obj[0] = CreateDynamicObject(obj[1],Pos[0],Pos[1],Pos[2],Pos[3],Pos[4],Pos[5]);
  683. mysql_format(sqlHandler,query,500,"INSERT INTO `amazing_objects`(`Did`,`id`,`modelid`,`x`,`y`,`z`,`rx`,`ry`,`rz`,`material1`,`material2`,`material3`,`materialtext`,`kommentar`) \
  684. VALUES(0,%d,%d,%f,%f,%f,%f,%f,%f,'','','','','%e');",obj[0],obj[1],Pos[0],Pos[1],Pos[2],Pos[3],Pos[4],Pos[5],kommentar);
  685. mysql_tquery(sqlHandler,query,"","");
  686. new object_buffer[obj_mem_struct];
  687. LIST_foreach_rev<my_iterator>(streamer_material){
  688. MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
  689. if(PlayerEditObject[playerid] == object_buffer[obj_mem_objectid])SetDynamicObjectMaterial(obj[0], object_buffer[obj_mem_materialindex], object_buffer[obj_mem_modelid], object_buffer[obj_mem_txdname], object_buffer[obj_mem_texturename], object_buffer[obj_mem_materialcolor]);
  690. }
  691. new object_buffer2[obj_text_mem_struct];
  692. LIST_foreach_rev<my_iterator>(streamer_material_text){
  693. MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer2);
  694. if(PlayerEditObject[playerid] == object_buffer2[_obj_mem_objectid]){
  695. SetDynamicObjectMaterialText(obj[0], object_buffer2[_obj_mem_materialindex],object_buffer2[_obj_mem_text],object_buffer2[_obj_mem_materialsize], object_buffer2[_obj_mem_fontface], object_buffer2[_obj_mem_fontsize], object_buffer2[_obj_mem_bold],object_buffer2[_obj_mem_fontcolor],object_buffer2[_obj_mem_backcolor],object_buffer2[_obj_mem_textalignment]);
  696. }
  697. }
  698. EditDynamicObject(playerid, obj[0]);
  699. return 1;
  700. }
  701.  
  702. CMD->removetextur(playerid,params[]){
  703. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  704. new array[2];
  705. if(sscanf(params,"d",array[1]))return SendClientMessage(playerid,-1,"Benutze /removetextur [index]");
  706. array[0] = PlayerEditObject[playerid];
  707. LIST::erase(streamer_material,LIST_find_arr(streamer_material, array));
  708. SetDynamicObjectMaterial(PlayerEditObject[playerid],array[1], 0, "", "", 0 ,true);
  709. return 1;
  710. }
  711. CMD->deleteobj(playerid,params[]){
  712. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  713. new query[100];
  714. DestroyDynamicObject(PlayerEditObject[playerid]);
  715. for(new i,y=LIST_count_found(streamer_material, PlayerEditObject[playerid]); i != y; ++i) LIST::erase(streamer_material,LIST_find(streamer_material, PlayerEditObject[playerid]));
  716. for(new i,y=LIST_count_found(streamer_material_text, PlayerEditObject[playerid]); i != y; ++i)LIST::erase(streamer_material_text,LIST_find(streamer_material_text, PlayerEditObject[playerid]));
  717. LIST::erase(object_cache,LIST_find(object_cache, PlayerEditObject[playerid]));
  718. mysql_format(sqlHandler,query,100,"DELETE FROM `amazing_objects` WHERE `id` = %d LIMIT 1;",PlayerEditObject[playerid]);
  719. mysql_tquery(sqlHandler,query,"","");
  720. CancelEdit(playerid);
  721. SelectObject(playerid);
  722. return 1;
  723. }
  724. CMD->setrot(playerid,params[]){
  725. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  726. new Float:Pos[3];
  727. if(sscanf(params,"fff",Pos[0],Pos[1],Pos[2]))return SendClientMessage(playerid,-1,"Benutze: /setrot [rotx] [roty] [rotz]");
  728. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_X, Pos[0]);
  729. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_Y, Pos[1]);
  730. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_Z, Pos[2]);
  731. PlayerValues[playerid] |= o_Rotate;
  732. return 1;
  733. }
  734. CMD->entflackern(playerid,params[]){
  735. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  736. PlayerValues[playerid] |= o_Move;
  737. return 1;
  738. }
  739. CMD->convertmap(playerid,params[]){
  740. new cMapName[64],query[128];
  741. if(sscanf(params,"s[64]",cMapName))return SendClientMessage(playerid,-1,"Benutze: /convertmap [mapname]");
  742. format(query,128,"/maps/%s.txt",cMapName);
  743. map = fopen(query, io_write);
  744. fwrite(map,"new obj;\r\n");
  745. mysql_format(sqlHandler,query,128,"SELECT * FROM `amazing_objects` WHERE `kommentar` = '%e';",cMapName);
  746. mysql_tquery(sqlHandler,query,"@ConvertMap","");
  747. return 1;
  748. }
  749.  
  750. CMD->setpointer(playerid,params[]){
  751. if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
  752. new ObjectEdit[obj_edit_cache];
  753. if(sscanf(params,"dd",ObjectEdit[obj_edit_pointer],ObjectEdit[obj_edit_index]))return SendClientMessage(playerid,-1,"Benutzung: /setpointer [value] [index]");
  754. new ListIt:data = LIST_find(object_cache, PlayerEditObject[playerid]);
  755. if(data)LIST::erase(object_cache,data);
  756. ObjectEdit[obj_edit_id] = PlayerEditObject[playerid];
  757. LIST::push_back_arr(object_cache, ObjectEdit);
  758. SendClientMessage(playerid,-1,"Du hast den Point gesetzt");
  759. CancelEdit(playerid);
  760. SelectObject(playerid);
  761. return 1;
  762. }
  763.  
  764. CMD->edit(playerid,params[]){
  765. return SelectObject(playerid);
  766. }
  767. CMD->editid(playerid,params[]){
  768. if(sscanf(params,"d",PlayerEditObject[playerid]))return SendClientMessage(playerid,-1,"Benutze: /create [id]");
  769. if(!IsValidDynamicObject(PlayerEditObject[playerid]))return PlayerEditObject[playerid] = 0,SendClientMessage(playerid,-1,"Dieses Objekt existiert nicht!");
  770. return EditDynamicObject(playerid,PlayerEditObject[playerid]);
  771. }
  772. CMD->saveobj(playerid,params[])
  773. {
  774. return @Update_Objects();
  775. }
  776. CMD->create(playerid,params[]){
  777. new Float:Pos[4],query[500],id,kommentar[64];
  778. if(sscanf(params,"ds[64]",id,kommentar))return SendClientMessage(playerid,-1,"Benutze: /create [id] [optional Kommentar]");
  779. GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
  780. GetPlayerFacingAngle(playerid,Pos[3]);
  781. PlayerEditObject[playerid] = CreateDynamicObject(id,Pos[0],Pos[1]+2.0,Pos[2],0.0,0.0,Pos[3]);
  782. format(query,64,"Du hast ein Objekt erstellt mit der id %d",PlayerEditObject[playerid]);
  783. SendClientMessage(playerid,-1,query);
  784. mysql_format(sqlHandler,query,500,"INSERT INTO `amazing_objects`(`Did`,`id`,`modelid`,`x`,`y`,`z`,`rx`,`ry`,`rz`,`material1`,`material2`,`material3`,`materialtext`,`kommentar`) \
  785. VALUES(0,%d,%d,%f,%f,%f,%f,%f,%f,'','','','','%e');",PlayerEditObject[playerid],id,Pos[0],Pos[1]+2.0,Pos[2],0.0,0.0,Pos[3],kommentar);
  786. mysql_tquery(sqlHandler,query,"","");
  787. EditDynamicObject(playerid,PlayerEditObject[playerid]);
  788. return 1;
  789. }
  790. CMD->deletemap(playerid,params[]){
  791. new cMapName[64],query[128];
  792. if(sscanf(params,"s[64]",cMapName))return SendClientMessage(playerid,-1,"Benutze: /convertmap [mapname]");
  793. mysql_format(sqlHandler,query,128,"SELECT `id` FROM `amazing_objects` WHERE `kommentar` = '%e';",cMapName);
  794. mysql_tquery(sqlHandler,query,"@DeleteMap","s",cMapName);
  795. return 1;
  796. }
  797. CMD->help(playerid,params[]){
  798. SendClientMessage(playerid,-1,"/create [id] [kommentar]");
  799. SendClientMessage(playerid,-1,"/setrot [rotx] [roty] [rotz]");
  800. SendClientMessage(playerid,-1,"/edit");
  801. SendClientMessage(playerid,-1,"/entflackern");
  802. SendClientMessage(playerid,-1,"/removetextur [index]");
  803. SendClientMessage(playerid,-1,"/removetexturall");
  804. SendClientMessage(playerid,-1,"/setpointer [pointer] [index]");
  805. SendClientMessage(playerid,-1,"/edittexturep [pointer] [modelid] [txdname] [texturname] [Farbe]");
  806. SendClientMessage(playerid,-1,"/edittext [index] [text] [fontface] [fontsize] [bold] [FontFarbe] [Backgroundcolor]");
  807. SendClientMessage(playerid,-1,"/edittexture [index] [modelid] [txdname] [texturname] [Farbe]");
  808. SendClientMessage(playerid,-1,"/duplicate [kommentar]");
  809. SendClientMessage(playerid,-1,"/deleteobj");
  810. SendClientMessage(playerid,-1,"/convertmap [mapname]");
  811. SendClientMessage(playerid,-1,"/deletemap [mapname]");
  812. SendClientMessage(playerid,-1,"/editid [objectid]");
  813. return 1;
  814. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement