obmedit.pwn 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395
  1. #define OBM_NONE 0
  2. //ROUND
  3. #define OBM_CIRCLE 1
  4. #define OBM_SPHERE 2
  5. #define OBM_SPIRAL 3
  6. #define OBM_HELIX 4
  7. #define OBM_CLYINDER 5
  8. #define OBM_CONE 6
  9. #define OBM_WHIRL 7
  10. #define OBM_CIRCLEIN 8
  11. #define OBM_CIRCLEOUT 9
  12. //NO ROUND
  13. #define OBM_LINE 10
  14. #define OBM_RECTANGLE 11
  15. #define OBM_RECTPRISM 12
  16. #define OBME_ORIGIN 0
  17. #define OMBE_ORIENT 1
  18. static const OBMTypes[][] = {
  19. "Change This!",
  20. //ROUND
  21. "Objectmetry Circle",
  22. "Objectmetry Sphere",
  23. "Objectmetry Spiral",
  24. "Objectmetry Helix",
  25. "Objectmetry Cylinder",
  26. "Objectmetry Cone",
  27. "Objectmetry Whirl",
  28. "Objectmetry Circle In",
  29. "Objectmetry Circle Out",
  30. //NOT ROUND
  31. "Objectmetry Line",
  32. "Objectmetry Rectangle",
  33. "Objectmetry Prism"
  34. };
  35. static const FaceCenterOnOff[][] = { "True", "False" };
  36. static OBMObject[MAX_PLAYERS];
  37. enum pOBMINFO
  38. {
  39. pOBMType,
  40. pOBMModel,
  41. bool:pOBMfacecenter,
  42. bool:OriginSet,
  43. Float:pOBMOriginX, Float:pOBMOriginY, Float:pOBMOriginZ,
  44. Float:pOBMOriginRX, Float:pOBMOriginRY, Float:pOBMOriginRZ,
  45. Float:pOBMOrientationRX, Float:pOBMOrientationRY, Float:pOBMOrientationRZ,
  46. //Round
  47. pOBMParts,
  48. pOBMDegrees,
  49. Float:pOBMRadius,
  50. Float:pOBMhsep, //degrees
  51. Float:pOBMvsep, //degrees
  52. //Not Round
  53. Float:pOBMEndX, Float:pOBMEndY, Float:pOBMEndZ,
  54. Float:pOBMLength, Float:pOBMWidth, Float:pOBMHeight,
  55. pOBMLSegs, pOBMWSegs, pOBMHSegs,
  56. bool:pOBMFill
  57. }
  58. static OBMData[MAX_PLAYERS][pOBMINFO];
  59. static Float:OBMOriginSave[MAX_PLAYERS][6];
  60. static Float:OBMOrientationSave[MAX_PLAYERS][3];
  61. static OBMEditMode[MAX_PLAYERS];
  62. public OnFilterScriptInit()
  63. {
  64. for(new i = 0; i < MAX_PLAYERS; i++)
  65. {
  66. OBMData[i][pOBMParts] = 10;
  67. OBMData[i][pOBMDegrees] = 360;
  68. }
  69. #if defined OE_OnFilterScriptInit
  70. OE_OnFilterScriptInit();
  71. #endif
  72. return 1;
  73. }
  74. #if defined _ALS_OnFilterScriptInit
  75. #undef OnFilterScriptInit
  76. #else
  77. #define _ALS_OnFilterScriptInit
  78. #endif
  79. #define OnFilterScriptInit OE_OnFilterScriptInit
  80. #if defined OE_OnFilterScriptInit
  81. forward OE_OnFilterScriptInit();
  82. #endif
  83. public OnPlayerDisconnect(playerid, reason)
  84. {
  85. ResetOBMValues(playerid);
  86. #if defined OE_OnPlayerDisconnect
  87. OE_OnPlayerDisconnect(playerid, reason);
  88. #endif
  89. return 1;
  90. }
  91. #if defined _ALS_OnPlayerDisconnect
  92. #undef OnPlayerDisconnect
  93. #else
  94. #define _ALS_OnPlayerDisconnect
  95. #endif
  96. #define OnPlayerDisconnect OE_OnPlayerDisconnect
  97. #if defined OE_OnPlayerDisconnect
  98. forward OE_OnPlayerDisconnect(playerid, reason);
  99. #endif
  100. YCMD:obmedit(playerid, arg[], help)
  101. {
  102. if(help)
  103. {
  104. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  105. SendClientMessage(playerid, STEALTH_GREEN, "Create an \"objectmetry\" masterpiece.");
  106. return 1;
  107. }
  108. NoEditingMode(playerid);
  109. MapOpenCheck();
  110. EditingMode[playerid] = true;
  111. SetEditMode(playerid, EDIT_MODE_OBM);
  112. UpdateOBM(playerid);
  113. OBMEditor(playerid);
  114. return 1;
  115. }
  116. static ResetOBMValues(playerid)
  117. {
  118. OBMData[playerid][pOBMType] = 0;
  119. OBMData[playerid][pOBMModel] = 0;
  120. OBMData[playerid][pOBMParts] = 10;
  121. OBMData[playerid][pOBMDegrees] = 360;
  122. OBMData[playerid][pOBMOriginX] = 0.0;
  123. OBMData[playerid][pOBMOriginY] = 0.0;
  124. OBMData[playerid][pOBMOriginZ] = 0.0;
  125. OBMData[playerid][pOBMOriginRX] = 0.0;
  126. OBMData[playerid][pOBMOriginRY] = 0.0;
  127. OBMData[playerid][pOBMOriginRZ] = 0.0;
  128. OBMData[playerid][pOBMOrientationRX] = 0.0;
  129. OBMData[playerid][pOBMOrientationRY] = 0.0;
  130. OBMData[playerid][pOBMOrientationRZ] = 0.0;
  131. OBMData[playerid][pOBMRadius] = 0.0;
  132. OBMData[playerid][pOBMhsep] = 0.0;
  133. OBMData[playerid][pOBMvsep] = 0.0;
  134. OBMData[playerid][pOBMfacecenter] = false;
  135. OBMData[playerid][OriginSet] = false;
  136. OBMData[playerid][pOBMEndX] = 0.0;
  137. OBMData[playerid][pOBMEndY] = 0.0;
  138. OBMData[playerid][pOBMEndZ] = 0.0;
  139. OBMData[playerid][pOBMLength] = 0.0;
  140. OBMData[playerid][pOBMWidth] = 0.0;
  141. OBMData[playerid][pOBMHeight] = 0.0;
  142. OBMData[playerid][pOBMLSegs] = 0;
  143. OBMData[playerid][pOBMWSegs] = 0;
  144. OBMData[playerid][pOBMHSegs] = 0;
  145. OBMData[playerid][pOBMFill] = false;
  146. return 1;
  147. }
  148. static OBMEditor(playerid)
  149. {
  150. new line[1024];
  151. switch(OBMData[playerid][pOBMType])
  152. {
  153. case 1 .. 9:
  154. {
  155. inline OBMEdit(opid, odialogid, oresponse, olistitem, string:otext[])
  156. {
  157. #pragma unused olistitem, odialogid, opid, otext
  158. if(oresponse)
  159. {
  160. switch(olistitem)
  161. {
  162. // Set type
  163. case 0:
  164. {
  165. inline OBMType(tpid, tdialogid, tresponse, tlistitem, string:ttext[])
  166. {
  167. #pragma unused tlistitem, tdialogid, tpid, ttext
  168. if(tresponse) OBMData[playerid][pOBMType] = tlistitem;
  169. OBMEditor(playerid);
  170. UpdateOBM(playerid);
  171. }
  172. line[0] = '\0';
  173. for(new i = 0; i < sizeof(OBMTypes); i++) format(line, sizeof(line), "%s%s\n", line, OBMTypes[i]);
  174. Dialog_ShowCallback(playerid, using inline OBMType, DIALOG_STYLE_LIST, "Texture Studio", line, "Ok", "Cancel");
  175. }
  176. // Model
  177. case 1:
  178. {
  179. inline OBMModel(mpid, mdialogid, mresponse, mlistitem, string:mtext[])
  180. {
  181. #pragma unused mlistitem, mdialogid, mpid, mtext
  182. if(mresponse)
  183. {
  184. new model = strval(mtext);
  185. OBMData[playerid][pOBMModel] = model;
  186. UpdateOBM(playerid);
  187. }
  188. OBMEditor(playerid);
  189. }
  190. Dialog_ShowCallback(playerid, using inline OBMModel, DIALOG_STYLE_INPUT, "Texture Studio", "Select a model", "Ok", "Cancel");
  191. }
  192. // Parts
  193. case 2:
  194. {
  195. inline OBMParts(ppid, pdialogid, presponse, plistitem, string:ptext[])
  196. {
  197. #pragma unused plistitem, pdialogid, ppid, ptext
  198. if(presponse)
  199. {
  200. new parts = strval(ptext);
  201. if(parts < 1) SendClientMessage(playerid, STEALTH_GREEN, "You must have at least 1 part");
  202. else if(parts > 1000) SendClientMessage(playerid, STEALTH_GREEN, "Too many parts");
  203. else
  204. {
  205. OBMData[playerid][pOBMParts] = parts;
  206. UpdateOBM(playerid);
  207. }
  208. }
  209. OBMEditor(playerid);
  210. }
  211. Dialog_ShowCallback(playerid, using inline OBMParts, DIALOG_STYLE_INPUT, "Texture Studio", "Number of parts", "Ok", "Cancel");
  212. }
  213. // Degrees
  214. case 3:
  215. {
  216. inline OBMDegrees(degpid, degdialogid, degresponse, deglistitem, string:degtext[])
  217. {
  218. #pragma unused deglistitem, degdialogid, degpid, degtext
  219. if(degresponse)
  220. {
  221. new deg = strval(degtext);
  222. if(deg < 1) SendClientMessage(playerid, STEALTH_GREEN, "You must have at least 1 degree");
  223. else if(deg > 3600) SendClientMessage(playerid, STEALTH_GREEN, "Excessive degrees");
  224. else
  225. {
  226. OBMData[playerid][pOBMDegrees] = deg;
  227. UpdateOBM(playerid);
  228. }
  229. }
  230. OBMEditor(playerid);
  231. }
  232. Dialog_ShowCallback(playerid, using inline OBMDegrees, DIALOG_STYLE_INPUT, "Texture Studio", "Degrees (Integer)", "Ok", "Cancel");
  233. }
  234. // Horizontal seperation
  235. case 4:
  236. {
  237. inline OBMHS(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  238. {
  239. #pragma unused hlistitem, hdialogid, hpid, htext
  240. if(hresponse)
  241. {
  242. OBMData[playerid][pOBMhsep] = floatstr(htext);
  243. UpdateOBM(playerid);
  244. }
  245. OBMEditor(playerid);
  246. }
  247. Dialog_ShowCallback(playerid, using inline OBMHS, DIALOG_STYLE_INPUT, "Texture Studio", "Horizontal Seperation or Seperation", "Ok", "Cancel");
  248. }
  249. // Vertical Seperation
  250. case 5:
  251. {
  252. inline OBMVS(vpid, vdialogid, vresponse, vlistitem, string:vtext[])
  253. {
  254. #pragma unused vlistitem, vdialogid, vpid, vtext
  255. if(vresponse)
  256. {
  257. OBMData[playerid][pOBMvsep] = floatstr(vtext);
  258. UpdateOBM(playerid);
  259. }
  260. OBMEditor(playerid);
  261. }
  262. Dialog_ShowCallback(playerid, using inline OBMVS, DIALOG_STYLE_INPUT, "Texture Studio", "Veritcal Seperation", "Ok", "Cancel");
  263. }
  264. // Face Center
  265. case 6:
  266. {
  267. inline OBMFaceCenter(fpid, fdialogid, fresponse, flistitem, string:ftext[])
  268. {
  269. #pragma unused flistitem, fdialogid, fpid, ftext
  270. if(fresponse) OBMData[playerid][pOBMfacecenter] = true;
  271. else OBMData[playerid][pOBMfacecenter] = false;
  272. UpdateOBM(playerid);
  273. OBMEditor(playerid);
  274. }
  275. Dialog_ShowCallback(playerid, using inline OBMFaceCenter, DIALOG_STYLE_MSGBOX, "Texture Studio", "Face Center", "On", "Off");
  276. }
  277. // OriginX
  278. case 7:
  279. {
  280. inline OBMOX(oxpid, oxdialogid, oxresponse, oxlistitem, string:oxtext[])
  281. {
  282. #pragma unused oxlistitem, oxdialogid, oxpid, oxtext
  283. if(oxresponse)
  284. {
  285. OBMData[playerid][pOBMOriginX] = floatstr(oxtext);
  286. UpdateOBM(playerid);
  287. }
  288. OBMEditor(playerid);
  289. }
  290. Dialog_ShowCallback(playerid, using inline OBMOX, DIALOG_STYLE_INPUT, "Texture Studio", "Origin X", "Ok", "Cancel");
  291. }
  292. // OriginY
  293. case 8:
  294. {
  295. inline OBMOY(oypid, oydialogid, oyresponse, oylistitem, string:oytext[])
  296. {
  297. #pragma unused oylistitem, oydialogid, oypid, oytext
  298. if(oyresponse)
  299. {
  300. OBMData[playerid][pOBMOriginY] = floatstr(oytext);
  301. UpdateOBM(playerid);
  302. }
  303. OBMEditor(playerid);
  304. }
  305. Dialog_ShowCallback(playerid, using inline OBMOY, DIALOG_STYLE_INPUT, "Texture Studio", "Origin Y", "Ok", "Cancel");
  306. }
  307. // OriginZ
  308. case 9:
  309. {
  310. inline OBMOZ(ozpid, ozdialogid, ozresponse, ozlistitem, string:oztext[])
  311. {
  312. #pragma unused ozlistitem, ozdialogid, ozpid, oztext
  313. if(ozresponse)
  314. {
  315. OBMData[playerid][pOBMOriginZ] = floatstr(oztext);
  316. UpdateOBM(playerid);
  317. }
  318. OBMEditor(playerid);
  319. }
  320. Dialog_ShowCallback(playerid, using inline OBMOZ, DIALOG_STYLE_INPUT, "Texture Studio", "Origin Z", "Ok", "Cancel");
  321. }
  322. // OriginRX
  323. case 10:
  324. {
  325. inline OBMORX(orxpid, orxdialogid, orxresponse, orxlistitem, string:orxtext[])
  326. {
  327. #pragma unused orxlistitem, orxdialogid, orxpid, orxtext
  328. if(orxresponse)
  329. {
  330. OBMData[playerid][pOBMOriginRX] = floatstr(orxtext);
  331. UpdateOBM(playerid);
  332. }
  333. OBMEditor(playerid);
  334. }
  335. Dialog_ShowCallback(playerid, using inline OBMORX, DIALOG_STYLE_INPUT, "Texture Studio", "Origin RX", "Ok", "Cancel");
  336. }
  337. // OriginRY
  338. case 11:
  339. {
  340. inline OBMORY(orypid, orydialogid, oryresponse, orylistitem, string:orytext[])
  341. {
  342. #pragma unused orylistitem, orydialogid, orypid, orytext
  343. if(oryresponse)
  344. {
  345. OBMData[playerid][pOBMOriginRY] = floatstr(orytext);
  346. UpdateOBM(playerid);
  347. }
  348. OBMEditor(playerid);
  349. }
  350. Dialog_ShowCallback(playerid, using inline OBMORY, DIALOG_STYLE_INPUT, "Texture Studio", "Origin RY", "Ok", "Cancel");
  351. }
  352. // OriginRZ
  353. case 12:
  354. {
  355. inline OBMORZ(orzpid, orzdialogid, orzresponse, orzlistitem, string:orztext[])
  356. {
  357. #pragma unused orzlistitem, orzdialogid, orzpid, orztext
  358. if(orzresponse)
  359. {
  360. OBMData[playerid][pOBMOriginRZ] = floatstr(orztext);
  361. UpdateOBM(playerid);
  362. }
  363. OBMEditor(playerid);
  364. }
  365. Dialog_ShowCallback(playerid, using inline OBMORZ, DIALOG_STYLE_INPUT, "Texture Studio", "Origin RZ", "Ok", "Cancel");
  366. }
  367. // OrientationRX
  368. case 13:
  369. {
  370. inline OBMORTRX(ortrxpid, ortrxdialogid, ortrxresponse, ortrxlistitem, string:ortrxtext[])
  371. {
  372. #pragma unused ortrxlistitem, ortrxdialogid, ortrxpid, ortrxtext
  373. if(ortrxresponse)
  374. {
  375. OBMData[playerid][pOBMOrientationRX] = floatstr(ortrxtext);
  376. UpdateOBM(playerid);
  377. }
  378. OBMEditor(playerid);
  379. }
  380. Dialog_ShowCallback(playerid, using inline OBMORTRX, DIALOG_STYLE_INPUT, "Texture Studio", "Orientation RX", "Ok", "Cancel");
  381. }
  382. // OrientationRY
  383. case 14:
  384. {
  385. inline OBMORTRY(ortrypid, ortrydialogid, ortryresponse, ortrylistitem, string:ortrytext[])
  386. {
  387. #pragma unused ortrylistitem, ortrydialogid, ortrypid, ortrytext
  388. if(ortryresponse)
  389. {
  390. OBMData[playerid][pOBMOrientationRY] = floatstr(ortrytext);
  391. UpdateOBM(playerid);
  392. }
  393. OBMEditor(playerid);
  394. }
  395. Dialog_ShowCallback(playerid, using inline OBMORTRY, DIALOG_STYLE_INPUT, "Texture Studio", "Orientation RY", "Ok", "Cancel");
  396. }
  397. // OrientationRZ
  398. case 15:
  399. {
  400. inline OBMORTRZ(ortrzpid, ortrzdialogid, ortrzresponse, ortrzlistitem, string:ortrztext[])
  401. {
  402. #pragma unused ortrzlistitem, ortrzdialogid, ortrzpid, ortrztext
  403. if(ortrzresponse)
  404. {
  405. OBMData[playerid][pOBMOrientationRZ] = floatstr(ortrztext);
  406. UpdateOBM(playerid);
  407. }
  408. OBMEditor(playerid);
  409. }
  410. Dialog_ShowCallback(playerid, using inline OBMORTRZ, DIALOG_STYLE_INPUT, "Texture Studio", "Orientation RZ", "Ok", "Cancel");
  411. }
  412. // Radius
  413. case 16:
  414. {
  415. inline OBMRadius(rpid, rdialogid, rresponse, rlistitem, string:rtext[])
  416. {
  417. #pragma unused rlistitem, rdialogid, rpid, rtext
  418. if(rresponse)
  419. {
  420. OBMData[playerid][pOBMRadius] = floatstr(rtext);
  421. UpdateOBM(playerid);
  422. }
  423. OBMEditor(playerid);
  424. }
  425. Dialog_ShowCallback(playerid, using inline OBMRadius, DIALOG_STYLE_INPUT, "Texture Studio", "Radius", "Ok", "Cancel");
  426. }
  427. // Set origin
  428. case 17:
  429. {
  430. if(!OBMData[playerid][OriginSet])
  431. {
  432. new Float:x, Float:y, Float:z, Float:fa;
  433. GetPosFaInFrontOfPlayer(playerid, 2.0, x, y, z, fa);
  434. OBMObject[playerid] = CreateDynamicObject(1974, x, y, z, 0.0, 0.0, 0.0, -1, -1, playerid);
  435. }
  436. else OBMObject[playerid] = CreateDynamicObject(1974, OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ], OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ], -1, -1, playerid);
  437. OBMOriginSave[playerid][0] = OBMData[playerid][pOBMOriginX];
  438. OBMOriginSave[playerid][1] = OBMData[playerid][pOBMOriginY];
  439. OBMOriginSave[playerid][2] = OBMData[playerid][pOBMOriginZ];
  440. OBMOriginSave[playerid][3] = OBMData[playerid][pOBMOriginRX];
  441. OBMOriginSave[playerid][4] = OBMData[playerid][pOBMOriginRY];
  442. OBMOriginSave[playerid][5] = OBMData[playerid][pOBMOriginRZ];
  443. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, OBMObject[playerid], E_STREAMER_DRAW_DISTANCE, 3000.0);
  444. SetDynamicObjectMaterial(OBMObject[playerid], 0, 10765, "airportgnd_sfse", "white", -256);
  445. Streamer_Update(playerid);
  446. EditDynamicObject(playerid, OBMObject[playerid]);
  447. OBMEditMode[playerid] = OBME_ORIGIN;
  448. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  449. SendClientMessage(playerid, STEALTH_GREEN, "Editing your objectmetry origin");
  450. }
  451. // Set rotation orientation
  452. case 18:
  453. {
  454. if(!OBMData[playerid][OriginSet])
  455. {
  456. SendClientMessage(playerid, STEALTH_YELLOW, "Please set your origin first");
  457. OBMEditor(playerid);
  458. }
  459. else
  460. {
  461. OBMObject[playerid] = CreateDynamicObject(1974, OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ], OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ], -1, -1, playerid);
  462. OBMOrientationSave[playerid][0] = OBMData[playerid][pOBMOrientationRX];
  463. OBMOrientationSave[playerid][1] = OBMData[playerid][pOBMOrientationRY];
  464. OBMOrientationSave[playerid][2] = OBMData[playerid][pOBMOrientationRZ];
  465. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, OBMObject[playerid], E_STREAMER_DRAW_DISTANCE, 3000.0);
  466. SetDynamicObjectMaterial(OBMObject[playerid], 0, 10765, "airportgnd_sfse", "white", -256);
  467. Streamer_Update(playerid);
  468. EditDynamicObject(playerid, OBMObject[playerid]);
  469. OBMEditMode[playerid] = OMBE_ORIENT;
  470. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  471. SendClientMessage(playerid, STEALTH_GREEN, "Editing your rotation orientation");
  472. }
  473. }
  474. // Apply objects to map
  475. case 19:
  476. {
  477. inline OBMApply(apid, adialogid, aresponse, alistitem, string:atext[])
  478. {
  479. #pragma unused alistitem, adialogid, apid, atext
  480. if(aresponse)
  481. {
  482. ApplyOBM(playerid);
  483. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  484. SendClientMessage(playerid, STEALTH_GREEN, "Current objectmetry applied to your map");
  485. }
  486. OBMEditor(playerid);
  487. }
  488. Dialog_ShowCallback(playerid, using inline OBMApply, DIALOG_STYLE_MSGBOX, "Texture Studio", "Apply this objectmetry to your map?", "On", "Off");
  489. }
  490. // Reset values
  491. case 20:
  492. {
  493. inline OBMReset(epid, edialogid, eresponse, elistitem, string:etext[])
  494. {
  495. #pragma unused elistitem, edialogid, epid, etext
  496. if(eresponse)
  497. {
  498. ResetOBMValues(playerid);
  499. ClearOBMStack(playerid);
  500. }
  501. OBMEditor(playerid);
  502. }
  503. Dialog_ShowCallback(playerid, using inline OBMReset, DIALOG_STYLE_MSGBOX, "Texture Studio", "Reset all values?", "Ok", "Cancel");
  504. }
  505. // Hide object stack
  506. case 21:
  507. {
  508. inline OBMHideStack(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  509. {
  510. #pragma unused hlistitem, hdialogid, hpid, htext
  511. if(hresponse) ClearOBMStack(playerid);
  512. OBMEditor(playerid);
  513. }
  514. Dialog_ShowCallback(playerid, using inline OBMHideStack, DIALOG_STYLE_MSGBOX, "Texture Studio", "Hide objectmetry?", "Ok", "Cancel");
  515. }
  516. }
  517. }
  518. else
  519. {
  520. EditingMode[playerid] = false;
  521. SetEditMode(playerid, EDIT_MODE_NONE);
  522. }
  523. }
  524. format(line, sizeof(line), "Set Type: %s\nModel: %i\nParts: %i\nDegrees: %i\nHorizontal Seperation: %f\nVertical Seperation: %f\nFace Center: %s\nOriginX: %f\nOriginY: %f\nOriginZ: %f\nOriginRX: %f\nOriginRY: %f\nOriginRZ: %f\nOrientationRX: %f\nOrientationRY: %f\nOrientationRZ: %f\nRadius: %f\nSet Origin\nSet Rotation Orientation\nApply Objects to map\nReset Values\nHide Objects",
  525. OBMTypes[OBMData[playerid][pOBMType]],
  526. OBMData[playerid][pOBMModel],
  527. OBMData[playerid][pOBMParts],
  528. OBMData[playerid][pOBMDegrees],
  529. OBMData[playerid][pOBMhsep],
  530. OBMData[playerid][pOBMvsep],
  531. OBMData[playerid][pOBMfacecenter] ? FaceCenterOnOff[0] : FaceCenterOnOff[1],
  532. OBMData[playerid][pOBMOriginX],
  533. OBMData[playerid][pOBMOriginY],
  534. OBMData[playerid][pOBMOriginZ],
  535. OBMData[playerid][pOBMOriginRX],
  536. OBMData[playerid][pOBMOriginRY],
  537. OBMData[playerid][pOBMOriginRZ],
  538. OBMData[playerid][pOBMOrientationRX],
  539. OBMData[playerid][pOBMOrientationRY],
  540. OBMData[playerid][pOBMOrientationRZ],
  541. OBMData[playerid][pOBMRadius]
  542. );
  543. Dialog_ShowCallback(playerid, using inline OBMEdit, DIALOG_STYLE_LIST, "Texture Studio", line, "Ok", "Cancel");
  544. }
  545. case 10 .. 100: {
  546. inline OBMEdit(opid, odialogid, oresponse, olistitem, string:otext[])
  547. {
  548. #pragma unused olistitem, odialogid, opid, otext
  549. if(oresponse)
  550. {
  551. switch(olistitem)
  552. {
  553. // Set type
  554. case 0 :
  555. {
  556. inline OBMType(tpid, tdialogid, tresponse, tlistitem, string:ttext[])
  557. {
  558. #pragma unused tlistitem, tdialogid, tpid, ttext
  559. if(tresponse) OBMData[playerid][pOBMType] = tlistitem;
  560. OBMEditor(playerid);
  561. UpdateOBM(playerid);
  562. }
  563. line[0] = '\0';
  564. for(new i = 0; i < sizeof(OBMTypes); i++) format(line, sizeof(line), "%s%s\n", line, OBMTypes[i]);
  565. Dialog_ShowCallback(playerid, using inline OBMType, DIALOG_STYLE_LIST, "Texture Studio", line, "Ok", "Cancel");
  566. }
  567. // Model
  568. case 1 :
  569. {
  570. inline OBMModel(mpid, mdialogid, mresponse, mlistitem, string:mtext[])
  571. {
  572. #pragma unused mlistitem, mdialogid, mpid, mtext
  573. if(mresponse)
  574. {
  575. new model = strval(mtext);
  576. OBMData[playerid][pOBMModel] = model;
  577. UpdateOBM(playerid);
  578. }
  579. OBMEditor(playerid);
  580. }
  581. Dialog_ShowCallback(playerid, using inline OBMModel, DIALOG_STYLE_INPUT, "Texture Studio", "Select a model", "Ok", "Cancel");
  582. }
  583. // Face Center
  584. case 2 :
  585. {
  586. inline OBMFaceCenter(fpid, fdialogid, fresponse, flistitem, string:ftext[])
  587. {
  588. #pragma unused flistitem, fdialogid, fpid, ftext
  589. if(fresponse) OBMData[playerid][pOBMfacecenter] = true;
  590. else OBMData[playerid][pOBMfacecenter] = false;
  591. UpdateOBM(playerid);
  592. OBMEditor(playerid);
  593. }
  594. Dialog_ShowCallback(playerid, using inline OBMFaceCenter, DIALOG_STYLE_MSGBOX, "Texture Studio", "Face Center", "On", "Off");
  595. }
  596. // Fill Center
  597. case 3 :
  598. {
  599. inline OBMFaceCenter(fpid, fdialogid, fresponse, flistitem, string:ftext[])
  600. {
  601. #pragma unused flistitem, fdialogid, fpid, ftext
  602. if(fresponse) OBMData[playerid][pOBMFill] = true;
  603. else OBMData[playerid][pOBMFill] = false;
  604. UpdateOBM(playerid);
  605. OBMEditor(playerid);
  606. }
  607. Dialog_ShowCallback(playerid, using inline OBMFaceCenter, DIALOG_STYLE_MSGBOX, "Texture Studio", "Face Center", "On", "Off");
  608. }
  609. // OriginX
  610. case 4 :
  611. {
  612. inline OBMOX(oxpid, oxdialogid, oxresponse, oxlistitem, string:oxtext[])
  613. {
  614. #pragma unused oxlistitem, oxdialogid, oxpid, oxtext
  615. if(oxresponse)
  616. {
  617. OBMData[playerid][pOBMOriginX] = floatstr(oxtext);
  618. UpdateOBM(playerid);
  619. }
  620. OBMEditor(playerid);
  621. }
  622. Dialog_ShowCallback(playerid, using inline OBMOX, DIALOG_STYLE_INPUT, "Texture Studio", "Origin X", "Ok", "Cancel");
  623. }
  624. // OriginY
  625. case 5 :
  626. {
  627. inline OBMOY(oypid, oydialogid, oyresponse, oylistitem, string:oytext[])
  628. {
  629. #pragma unused oylistitem, oydialogid, oypid, oytext
  630. if(oyresponse)
  631. {
  632. OBMData[playerid][pOBMOriginY] = floatstr(oytext);
  633. UpdateOBM(playerid);
  634. }
  635. OBMEditor(playerid);
  636. }
  637. Dialog_ShowCallback(playerid, using inline OBMOY, DIALOG_STYLE_INPUT, "Texture Studio", "Origin Y", "Ok", "Cancel");
  638. }
  639. // OriginZ
  640. case 6 :
  641. {
  642. inline OBMOZ(ozpid, ozdialogid, ozresponse, ozlistitem, string:oztext[])
  643. {
  644. #pragma unused ozlistitem, ozdialogid, ozpid, oztext
  645. if(ozresponse)
  646. {
  647. OBMData[playerid][pOBMOriginZ] = floatstr(oztext);
  648. UpdateOBM(playerid);
  649. }
  650. OBMEditor(playerid);
  651. }
  652. Dialog_ShowCallback(playerid, using inline OBMOZ, DIALOG_STYLE_INPUT, "Texture Studio", "Origin Z", "Ok", "Cancel");
  653. }
  654. // EndX
  655. case 7 :
  656. {
  657. inline OBMOX(oxpid, oxdialogid, oxresponse, oxlistitem, string:oxtext[])
  658. {
  659. #pragma unused oxlistitem, oxdialogid, oxpid, oxtext
  660. if(oxresponse)
  661. {
  662. OBMData[playerid][pOBMEndX] = floatstr(oxtext);
  663. UpdateOBM(playerid);
  664. }
  665. OBMEditor(playerid);
  666. }
  667. Dialog_ShowCallback(playerid, using inline OBMOX, DIALOG_STYLE_INPUT, "Texture Studio", "End X", "Ok", "Cancel");
  668. }
  669. // EndY
  670. case 8 :
  671. {
  672. inline OBMOY(oypid, oydialogid, oyresponse, oylistitem, string:oytext[])
  673. {
  674. #pragma unused oylistitem, oydialogid, oypid, oytext
  675. if(oyresponse)
  676. {
  677. OBMData[playerid][pOBMEndY] = floatstr(oytext);
  678. UpdateOBM(playerid);
  679. }
  680. OBMEditor(playerid);
  681. }
  682. Dialog_ShowCallback(playerid, using inline OBMOY, DIALOG_STYLE_INPUT, "Texture Studio", "End Y", "Ok", "Cancel");
  683. }
  684. // EndZ
  685. case 9 :
  686. {
  687. inline OBMOZ(ozpid, ozdialogid, ozresponse, ozlistitem, string:oztext[])
  688. {
  689. #pragma unused ozlistitem, ozdialogid, ozpid, oztext
  690. if(ozresponse)
  691. {
  692. OBMData[playerid][pOBMEndZ] = floatstr(oztext);
  693. UpdateOBM(playerid);
  694. }
  695. OBMEditor(playerid);
  696. }
  697. Dialog_ShowCallback(playerid, using inline OBMOZ, DIALOG_STYLE_INPUT, "Texture Studio", "End Z", "Ok", "Cancel");
  698. }
  699. // OriginRX
  700. case 10 :
  701. {
  702. inline OBMORX(orxpid, orxdialogid, orxresponse, orxlistitem, string:orxtext[])
  703. {
  704. #pragma unused orxlistitem, orxdialogid, orxpid, orxtext
  705. if(orxresponse)
  706. {
  707. OBMData[playerid][pOBMOriginRX] = floatstr(orxtext);
  708. UpdateOBM(playerid);
  709. }
  710. OBMEditor(playerid);
  711. }
  712. Dialog_ShowCallback(playerid, using inline OBMORX, DIALOG_STYLE_INPUT, "Texture Studio", "Origin RX", "Ok", "Cancel");
  713. }
  714. // OriginRY
  715. case 11:
  716. {
  717. inline OBMORY(orypid, orydialogid, oryresponse, orylistitem, string:orytext[])
  718. {
  719. #pragma unused orylistitem, orydialogid, orypid, orytext
  720. if(oryresponse)
  721. {
  722. OBMData[playerid][pOBMOriginRY] = floatstr(orytext);
  723. UpdateOBM(playerid);
  724. }
  725. OBMEditor(playerid);
  726. }
  727. Dialog_ShowCallback(playerid, using inline OBMORY, DIALOG_STYLE_INPUT, "Texture Studio", "Origin RY", "Ok", "Cancel");
  728. }
  729. // OriginRZ
  730. case 12:
  731. {
  732. inline OBMORZ(orzpid, orzdialogid, orzresponse, orzlistitem, string:orztext[])
  733. {
  734. #pragma unused orzlistitem, orzdialogid, orzpid, orztext
  735. if(orzresponse)
  736. {
  737. OBMData[playerid][pOBMOriginRZ] = floatstr(orztext);
  738. UpdateOBM(playerid);
  739. }
  740. OBMEditor(playerid);
  741. }
  742. Dialog_ShowCallback(playerid, using inline OBMORZ, DIALOG_STYLE_INPUT, "Texture Studio", "Origin RZ", "Ok", "Cancel");
  743. }
  744. // OrientationRX
  745. case 13:
  746. {
  747. inline OBMORTRX(ortrxpid, ortrxdialogid, ortrxresponse, ortrxlistitem, string:ortrxtext[])
  748. {
  749. #pragma unused ortrxlistitem, ortrxdialogid, ortrxpid, ortrxtext
  750. if(ortrxresponse)
  751. {
  752. OBMData[playerid][pOBMOrientationRX] = floatstr(ortrxtext);
  753. UpdateOBM(playerid);
  754. }
  755. OBMEditor(playerid);
  756. }
  757. Dialog_ShowCallback(playerid, using inline OBMORTRX, DIALOG_STYLE_INPUT, "Texture Studio", "Orientation RX", "Ok", "Cancel");
  758. }
  759. // OrientationRY
  760. case 14:
  761. {
  762. inline OBMORTRY(ortrypid, ortrydialogid, ortryresponse, ortrylistitem, string:ortrytext[])
  763. {
  764. #pragma unused ortrylistitem, ortrydialogid, ortrypid, ortrytext
  765. if(ortryresponse)
  766. {
  767. OBMData[playerid][pOBMOrientationRY] = floatstr(ortrytext);
  768. UpdateOBM(playerid);
  769. }
  770. OBMEditor(playerid);
  771. }
  772. Dialog_ShowCallback(playerid, using inline OBMORTRY, DIALOG_STYLE_INPUT, "Texture Studio", "Orientation RY", "Ok", "Cancel");
  773. }
  774. // OrientationRZ
  775. case 15:
  776. {
  777. inline OBMORTRZ(ortrzpid, ortrzdialogid, ortrzresponse, ortrzlistitem, string:ortrztext[])
  778. {
  779. #pragma unused ortrzlistitem, ortrzdialogid, ortrzpid, ortrztext
  780. if(ortrzresponse)
  781. {
  782. OBMData[playerid][pOBMOrientationRZ] = floatstr(ortrztext);
  783. UpdateOBM(playerid);
  784. }
  785. OBMEditor(playerid);
  786. }
  787. Dialog_ShowCallback(playerid, using inline OBMORTRZ, DIALOG_STYLE_INPUT, "Texture Studio", "Orientation RZ", "Ok", "Cancel");
  788. }
  789. // Length
  790. case 16:
  791. {
  792. inline OBMHS(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  793. {
  794. #pragma unused hlistitem, hdialogid, hpid, htext
  795. if(hresponse)
  796. {
  797. OBMData[playerid][pOBMLength] = floatstr(htext);
  798. UpdateOBM(playerid);
  799. }
  800. OBMEditor(playerid);
  801. }
  802. Dialog_ShowCallback(playerid, using inline OBMHS, DIALOG_STYLE_INPUT, "Texture Studio", "Dimension", "Ok", "Cancel");
  803. }
  804. // Width
  805. case 17:
  806. {
  807. inline OBMHS(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  808. {
  809. #pragma unused hlistitem, hdialogid, hpid, htext
  810. if(hresponse)
  811. {
  812. OBMData[playerid][pOBMWidth] = floatstr(htext);
  813. UpdateOBM(playerid);
  814. }
  815. OBMEditor(playerid);
  816. }
  817. Dialog_ShowCallback(playerid, using inline OBMHS, DIALOG_STYLE_INPUT, "Texture Studio", "Dimension", "Ok", "Cancel");
  818. }
  819. // Height
  820. case 18:
  821. {
  822. inline OBMHS(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  823. {
  824. #pragma unused hlistitem, hdialogid, hpid, htext
  825. if(hresponse)
  826. {
  827. OBMData[playerid][pOBMHeight] = floatstr(htext);
  828. UpdateOBM(playerid);
  829. }
  830. OBMEditor(playerid);
  831. }
  832. Dialog_ShowCallback(playerid, using inline OBMHS, DIALOG_STYLE_INPUT, "Texture Studio", "Dimension", "Ok", "Cancel");
  833. }
  834. // Length Segments
  835. case 19:
  836. {
  837. inline OBMHS(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  838. {
  839. #pragma unused hlistitem, hdialogid, hpid, htext
  840. if(hresponse)
  841. {
  842. OBMData[playerid][pOBMLSegs] = strval(htext);
  843. UpdateOBM(playerid);
  844. }
  845. OBMEditor(playerid);
  846. }
  847. Dialog_ShowCallback(playerid, using inline OBMHS, DIALOG_STYLE_INPUT, "Texture Studio", "Dimension Segments", "Ok", "Cancel");
  848. }
  849. // Width Segments
  850. case 20:
  851. {
  852. inline OBMHS(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  853. {
  854. #pragma unused hlistitem, hdialogid, hpid, htext
  855. if(hresponse)
  856. {
  857. OBMData[playerid][pOBMWSegs] = strval(htext);
  858. UpdateOBM(playerid);
  859. }
  860. OBMEditor(playerid);
  861. }
  862. Dialog_ShowCallback(playerid, using inline OBMHS, DIALOG_STYLE_INPUT, "Texture Studio", "Dimension Segments", "Ok", "Cancel");
  863. }
  864. // Height Segments
  865. case 21:
  866. {
  867. inline OBMHS(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  868. {
  869. #pragma unused hlistitem, hdialogid, hpid, htext
  870. if(hresponse)
  871. {
  872. OBMData[playerid][pOBMHSegs] = strval(htext);
  873. UpdateOBM(playerid);
  874. }
  875. OBMEditor(playerid);
  876. }
  877. Dialog_ShowCallback(playerid, using inline OBMHS, DIALOG_STYLE_INPUT, "Texture Studio", "Dimension Segments", "Ok", "Cancel");
  878. }
  879. // Set origin
  880. case 22:
  881. {
  882. if(!OBMData[playerid][OriginSet])
  883. {
  884. new Float:x, Float:y, Float:z, Float:fa;
  885. GetPosFaInFrontOfPlayer(playerid, 2.0, x, y, z, fa);
  886. OBMObject[playerid] = CreateDynamicObject(1974, x, y, z, 0.0, 0.0, 0.0, -1, -1, playerid);
  887. }
  888. else OBMObject[playerid] = CreateDynamicObject(1974, OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ], OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ], -1, -1, playerid);
  889. OBMOriginSave[playerid][0] = OBMData[playerid][pOBMOriginX];
  890. OBMOriginSave[playerid][1] = OBMData[playerid][pOBMOriginY];
  891. OBMOriginSave[playerid][2] = OBMData[playerid][pOBMOriginZ];
  892. OBMOriginSave[playerid][3] = OBMData[playerid][pOBMOriginRX];
  893. OBMOriginSave[playerid][4] = OBMData[playerid][pOBMOriginRY];
  894. OBMOriginSave[playerid][5] = OBMData[playerid][pOBMOriginRZ];
  895. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, OBMObject[playerid], E_STREAMER_DRAW_DISTANCE, 3000.0);
  896. SetDynamicObjectMaterial(OBMObject[playerid], 0, 10765, "airportgnd_sfse", "white", -256);
  897. Streamer_Update(playerid);
  898. EditDynamicObject(playerid, OBMObject[playerid]);
  899. OBMEditMode[playerid] = OBME_ORIGIN;
  900. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  901. SendClientMessage(playerid, STEALTH_GREEN, "Editing your objectmetry origin");
  902. }
  903. // Set rotation orientation
  904. case 23:
  905. {
  906. if(!OBMData[playerid][OriginSet])
  907. {
  908. SendClientMessage(playerid, STEALTH_YELLOW, "Please set your origin first");
  909. OBMEditor(playerid);
  910. }
  911. else
  912. {
  913. OBMObject[playerid] = CreateDynamicObject(1974, OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ], OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ], -1, -1, playerid);
  914. OBMOrientationSave[playerid][0] = OBMData[playerid][pOBMOrientationRX];
  915. OBMOrientationSave[playerid][1] = OBMData[playerid][pOBMOrientationRY];
  916. OBMOrientationSave[playerid][2] = OBMData[playerid][pOBMOrientationRZ];
  917. Streamer_SetFloatData(STREAMER_TYPE_OBJECT, OBMObject[playerid], E_STREAMER_DRAW_DISTANCE, 3000.0);
  918. SetDynamicObjectMaterial(OBMObject[playerid], 0, 10765, "airportgnd_sfse", "white", -256);
  919. Streamer_Update(playerid);
  920. EditDynamicObject(playerid, OBMObject[playerid]);
  921. OBMEditMode[playerid] = OMBE_ORIENT;
  922. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  923. SendClientMessage(playerid, STEALTH_GREEN, "Editing your rotation orientation");
  924. }
  925. }
  926. // Apply objects to map
  927. case 24:
  928. {
  929. inline OBMApply(apid, adialogid, aresponse, alistitem, string:atext[])
  930. {
  931. #pragma unused alistitem, adialogid, apid, atext
  932. if(aresponse)
  933. {
  934. ApplyOBM(playerid);
  935. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  936. SendClientMessage(playerid, STEALTH_GREEN, "Current objectmetry applied to your map");
  937. }
  938. OBMEditor(playerid);
  939. }
  940. Dialog_ShowCallback(playerid, using inline OBMApply, DIALOG_STYLE_MSGBOX, "Texture Studio", "Apply this objectmetry to your map?", "On", "Off");
  941. }
  942. // Reset values
  943. case 25:
  944. {
  945. inline OBMReset(epid, edialogid, eresponse, elistitem, string:etext[])
  946. {
  947. #pragma unused elistitem, edialogid, epid, etext
  948. if(eresponse)
  949. {
  950. ResetOBMValues(playerid);
  951. ClearOBMStack(playerid);
  952. }
  953. OBMEditor(playerid);
  954. }
  955. Dialog_ShowCallback(playerid, using inline OBMReset, DIALOG_STYLE_MSGBOX, "Texture Studio", "Reset all values?", "Ok", "Cancel");
  956. }
  957. // Hide object stack
  958. case 26:
  959. {
  960. inline OBMHideStack(hpid, hdialogid, hresponse, hlistitem, string:htext[])
  961. {
  962. #pragma unused hlistitem, hdialogid, hpid, htext
  963. if(hresponse) ClearOBMStack(playerid);
  964. OBMEditor(playerid);
  965. }
  966. Dialog_ShowCallback(playerid, using inline OBMHideStack, DIALOG_STYLE_MSGBOX, "Texture Studio", "Hide objectmetry?", "Ok", "Cancel");
  967. }
  968. }
  969. }
  970. else
  971. {
  972. EditingMode[playerid] = false;
  973. SetEditMode(playerid, EDIT_MODE_NONE);
  974. }
  975. }
  976. format(line, sizeof(line), "Set Type: %s\nModel: %i\nFace Center: %s\nFill: %s\n\
  977. OriginX: %f\nOriginY: %f\nOriginZ: %f\n\
  978. EndX: %f\nEndY: %f\nEndZ: %f\n\
  979. OriginRX: %f\nOriginRY: %f\nOriginRZ: %f\n\
  980. OrientationRX: %f\nOrientationRY: %f\nOrientationRZ: %f\n\
  981. Length: %f\nWidth: %f\nHeight: %f\n\
  982. Length Segments: %i\nWidth Segments: %i\nHeight Segments: %i\n\
  983. Set Origin\nSet Rotation Orientation\nApply Objects to map\nReset Values\nHide Objects",
  984. OBMTypes[OBMData[playerid][pOBMType]],
  985. OBMData[playerid][pOBMModel],
  986. OBMData[playerid][pOBMfacecenter] ? FaceCenterOnOff[0] : FaceCenterOnOff[1],
  987. OBMData[playerid][pOBMFill] ? FaceCenterOnOff[0] : FaceCenterOnOff[1],
  988. OBMData[playerid][pOBMOriginX],
  989. OBMData[playerid][pOBMOriginY],
  990. OBMData[playerid][pOBMOriginZ],
  991. OBMData[playerid][pOBMEndX],
  992. OBMData[playerid][pOBMEndY],
  993. OBMData[playerid][pOBMEndZ],
  994. OBMData[playerid][pOBMOriginRX],
  995. OBMData[playerid][pOBMOriginRY],
  996. OBMData[playerid][pOBMOriginRZ],
  997. OBMData[playerid][pOBMOrientationRX],
  998. OBMData[playerid][pOBMOrientationRY],
  999. OBMData[playerid][pOBMOrientationRZ],
  1000. OBMData[playerid][pOBMLength],
  1001. OBMData[playerid][pOBMWidth],
  1002. OBMData[playerid][pOBMHeight],
  1003. OBMData[playerid][pOBMLSegs],
  1004. OBMData[playerid][pOBMWSegs],
  1005. OBMData[playerid][pOBMHSegs]
  1006. );
  1007. Dialog_ShowCallback(playerid, using inline OBMEdit, DIALOG_STYLE_LIST, "Texture Studio", line, "Ok", "Cancel");
  1008. }
  1009. default: {
  1010. inline OBMEdit(opid, odialogid, oresponse, olistitem, string:otext[])
  1011. {
  1012. #pragma unused olistitem, odialogid, opid, otext
  1013. if(oresponse && olistitem == 0)
  1014. {
  1015. inline OBMType(tpid, tdialogid, tresponse, tlistitem, string:ttext[])
  1016. {
  1017. #pragma unused tlistitem, tdialogid, tpid, ttext
  1018. if(tresponse) OBMData[playerid][pOBMType] = tlistitem;
  1019. OBMEditor(playerid);
  1020. UpdateOBM(playerid);
  1021. }
  1022. line[0] = '\0';
  1023. for(new i = 0; i < sizeof(OBMTypes); i++) format(line, sizeof(line), "%s%s\n", line, OBMTypes[i]);
  1024. Dialog_ShowCallback(playerid, using inline OBMType, DIALOG_STYLE_LIST, "Texture Studio", line, "Ok", "Cancel");
  1025. }
  1026. }
  1027. format(line, sizeof(line), "{FF0000}Set Type: %s", OBMTypes[OBMData[playerid][pOBMType]]);
  1028. Dialog_ShowCallback(playerid, using inline OBMEdit, DIALOG_STYLE_LIST, "Texture Studio", line, "Ok", "Cancel");
  1029. }
  1030. }
  1031. return 1;
  1032. }
  1033. static UpdateOBM(playerid)
  1034. {
  1035. // Clear the stack
  1036. ClearOBMStack(playerid);
  1037. // Apply OBM settings
  1038. if(OBMData[playerid][pOBMModel] > 0)
  1039. {
  1040. switch(OBMData[playerid][pOBMType])
  1041. {
  1042. case OBM_NONE: { }
  1043. case OBM_CIRCLE: { CreateDynamicObjectCircle(playerid,
  1044. OBMData[playerid][pOBMModel],
  1045. OBMData[playerid][pOBMDegrees],
  1046. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1047. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1048. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1049. OBMData[playerid][pOBMRadius],
  1050. OBMData[playerid][pOBMhsep],
  1051. OBMData[playerid][pOBMfacecenter]
  1052. ); }
  1053. case OBM_SPHERE: { CreateDynamicObjectSphere(playerid,
  1054. OBMData[playerid][pOBMModel],
  1055. OBMData[playerid][pOBMDegrees],
  1056. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1057. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1058. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1059. OBMData[playerid][pOBMRadius],
  1060. OBMData[playerid][pOBMhsep],
  1061. OBMData[playerid][pOBMvsep],
  1062. OBMData[playerid][pOBMfacecenter]
  1063. ); }
  1064. case OBM_SPIRAL: { CreateDynamicObjectSpiral(playerid,
  1065. OBMData[playerid][pOBMModel],
  1066. OBMData[playerid][pOBMDegrees],
  1067. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1068. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1069. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1070. OBMData[playerid][pOBMRadius],
  1071. OBMData[playerid][pOBMhsep],
  1072. OBMData[playerid][pOBMvsep],
  1073. OBMData[playerid][pOBMfacecenter]
  1074. ); }
  1075. case OBM_HELIX: { CreateDynamicObjectHelix(playerid,
  1076. OBMData[playerid][pOBMModel],
  1077. OBMData[playerid][pOBMDegrees],
  1078. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1079. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1080. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1081. OBMData[playerid][pOBMRadius],
  1082. OBMData[playerid][pOBMhsep],
  1083. OBMData[playerid][pOBMvsep],
  1084. OBMData[playerid][pOBMfacecenter]
  1085. ); }
  1086. case OBM_CLYINDER: { CreateDynamicObjectCylinder(playerid,
  1087. OBMData[playerid][pOBMModel],
  1088. OBMData[playerid][pOBMDegrees],
  1089. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1090. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1091. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1092. OBMData[playerid][pOBMRadius],
  1093. OBMData[playerid][pOBMhsep],
  1094. OBMData[playerid][pOBMvsep],
  1095. OBMData[playerid][pOBMParts],
  1096. OBMData[playerid][pOBMfacecenter]
  1097. ); }
  1098. case OBM_CONE: { CreateDynamicObjectCone(playerid,
  1099. OBMData[playerid][pOBMModel],
  1100. OBMData[playerid][pOBMDegrees],
  1101. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1102. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1103. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1104. OBMData[playerid][pOBMRadius],
  1105. OBMData[playerid][pOBMhsep],
  1106. OBMData[playerid][pOBMvsep],
  1107. OBMData[playerid][pOBMParts],
  1108. OBMData[playerid][pOBMfacecenter]
  1109. ); }
  1110. case OBM_WHIRL: { CreateDynamicObjectWhirl(playerid,
  1111. OBMData[playerid][pOBMModel],
  1112. OBMData[playerid][pOBMDegrees],
  1113. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1114. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1115. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1116. OBMData[playerid][pOBMRadius],
  1117. OBMData[playerid][pOBMhsep],
  1118. OBMData[playerid][pOBMfacecenter]
  1119. ); }
  1120. case OBM_CIRCLEIN: { CreateDynamicCircleIn(playerid,
  1121. OBMData[playerid][pOBMModel],
  1122. OBMData[playerid][pOBMDegrees],
  1123. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1124. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1125. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1126. OBMData[playerid][pOBMRadius],
  1127. OBMData[playerid][pOBMhsep],
  1128. OBMData[playerid][pOBMParts],
  1129. OBMData[playerid][pOBMfacecenter]
  1130. ); }
  1131. case OBM_CIRCLEOUT: { CreateDynamicCircleOut(playerid,
  1132. OBMData[playerid][pOBMModel],
  1133. OBMData[playerid][pOBMDegrees],
  1134. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1135. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1136. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1137. OBMData[playerid][pOBMRadius],
  1138. OBMData[playerid][pOBMhsep],
  1139. OBMData[playerid][pOBMParts],
  1140. OBMData[playerid][pOBMfacecenter]
  1141. ); }
  1142. //////////////////Non Round
  1143. case OBM_LINE: { CreateDynamicLine(playerid,
  1144. OBMData[playerid][pOBMModel],
  1145. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1146. OBMData[playerid][pOBMEndX], OBMData[playerid][pOBMEndY], OBMData[playerid][pOBMEndZ],
  1147. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1148. OBMData[playerid][pOBMLSegs]
  1149. ); }
  1150. case OBM_RECTANGLE: { CreateDynamicQuadrilateral(playerid,
  1151. OBMData[playerid][pOBMModel],
  1152. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1153. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1154. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1155. OBMData[playerid][pOBMLength], OBMData[playerid][pOBMWidth],
  1156. OBMData[playerid][pOBMLSegs], OBMData[playerid][pOBMWSegs],
  1157. OBMData[playerid][pOBMFill]
  1158. ); }
  1159. case OBM_RECTPRISM: { CreateDynamicPrism(playerid,
  1160. OBMData[playerid][pOBMModel],
  1161. OBMData[playerid][pOBMOriginX], OBMData[playerid][pOBMOriginY], OBMData[playerid][pOBMOriginZ],
  1162. OBMData[playerid][pOBMOriginRX], OBMData[playerid][pOBMOriginRY], OBMData[playerid][pOBMOriginRZ],
  1163. OBMData[playerid][pOBMOrientationRX], OBMData[playerid][pOBMOrientationRY], OBMData[playerid][pOBMOrientationRZ],
  1164. OBMData[playerid][pOBMLength], OBMData[playerid][pOBMWidth], OBMData[playerid][pOBMHeight],
  1165. OBMData[playerid][pOBMLSegs], OBMData[playerid][pOBMWSegs], OBMData[playerid][pOBMHSegs],
  1166. OBMData[playerid][pOBMFill]
  1167. ); }
  1168. }
  1169. }
  1170. return 1;
  1171. }
  1172. OnPlayerEditDOOBM(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  1173. {
  1174. #pragma unused objectid
  1175. // Edit origin
  1176. if(OBMEditMode[playerid] == OBME_ORIGIN)
  1177. {
  1178. if(response == EDIT_RESPONSE_FINAL)
  1179. {
  1180. OBMData[playerid][pOBMOriginX] = x;
  1181. OBMData[playerid][pOBMOriginY] = y;
  1182. OBMData[playerid][pOBMOriginZ] = z;
  1183. OBMData[playerid][pOBMOriginRX] = rx;
  1184. OBMData[playerid][pOBMOriginRY] = ry;
  1185. OBMData[playerid][pOBMOriginRZ] = rz;
  1186. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  1187. SendClientMessage(playerid, STEALTH_GREEN, "Objectmetry origin set");
  1188. DestroyDynamicObject(OBMObject[playerid]);
  1189. OBMData[playerid][OriginSet] = true;
  1190. UpdateOBM(playerid);
  1191. OBMEditor(playerid);
  1192. }
  1193. else if(response == EDIT_RESPONSE_UPDATE)
  1194. {
  1195. OBMData[playerid][pOBMOriginX] = x;
  1196. OBMData[playerid][pOBMOriginY] = y;
  1197. OBMData[playerid][pOBMOriginZ] = z;
  1198. OBMData[playerid][pOBMOriginRX] = rx;
  1199. OBMData[playerid][pOBMOriginRY] = ry;
  1200. OBMData[playerid][pOBMOriginRZ] = rz;
  1201. UpdateOBM(playerid);
  1202. }
  1203. else if(response == EDIT_RESPONSE_CANCEL)
  1204. {
  1205. OBMData[playerid][pOBMOriginX] = OBMOriginSave[playerid][0];
  1206. OBMData[playerid][pOBMOriginY] = OBMOriginSave[playerid][1];
  1207. OBMData[playerid][pOBMOriginZ] = OBMOriginSave[playerid][2];
  1208. OBMData[playerid][pOBMOriginRX] = OBMOriginSave[playerid][3];
  1209. OBMData[playerid][pOBMOriginRY] = OBMOriginSave[playerid][4];
  1210. OBMData[playerid][pOBMOriginRZ] = OBMOriginSave[playerid][5];
  1211. DestroyDynamicObject(OBMObject[playerid]);
  1212. UpdateOBM(playerid);
  1213. OBMEditor(playerid);
  1214. }
  1215. }
  1216. // Edit orientation
  1217. else if(OBMEditMode[playerid] == OMBE_ORIENT)
  1218. {
  1219. if(response == EDIT_RESPONSE_FINAL)
  1220. {
  1221. OBMData[playerid][pOBMOrientationRX] = rx;
  1222. OBMData[playerid][pOBMOrientationRY] = ry;
  1223. OBMData[playerid][pOBMOrientationRZ] = rz;
  1224. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  1225. SendClientMessage(playerid, STEALTH_GREEN, "Objectmetry orientation set");
  1226. DestroyDynamicObject(OBMObject[playerid]);
  1227. UpdateOBM(playerid);
  1228. OBMEditor(playerid);
  1229. }
  1230. else if(response == EDIT_RESPONSE_UPDATE)
  1231. {
  1232. OBMData[playerid][pOBMOrientationRX] = rx;
  1233. OBMData[playerid][pOBMOrientationRY] = ry;
  1234. OBMData[playerid][pOBMOrientationRZ] = rz;
  1235. UpdateOBM(playerid);
  1236. }
  1237. else if(response == EDIT_RESPONSE_CANCEL)
  1238. {
  1239. OBMData[playerid][pOBMOrientationRX] = OBMOrientationSave[playerid][0];
  1240. OBMData[playerid][pOBMOrientationRY] = OBMOrientationSave[playerid][1];
  1241. OBMData[playerid][pOBMOrientationRZ] = OBMOrientationSave[playerid][2];
  1242. DestroyDynamicObject(OBMObject[playerid]);
  1243. UpdateOBM(playerid);
  1244. OBMEditor(playerid);
  1245. }
  1246. }
  1247. return 1;
  1248. }