menugui.pwn 70 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936
  1. #include "tstudio\menudata.pwn"
  2. static PlayerGUIMenu:PlayerMainMenu[MAX_PLAYERS];
  3. static PlayerGUIMenu:PlayerObjectMenu[MAX_PLAYERS];
  4. static PlayerGUIMenu:PlayerGroupMenu[MAX_PLAYERS];
  5. static PlayerGUIMenu:PlayerSubMenu[MAX_PLAYERS];
  6. // Main menu
  7. static GUIMenu:MainMenu;
  8. // Object / Group Menu
  9. static GUIMenu:ObjectMenu;
  10. static GUIMenu:GroupMenu;
  11. // Object sub menus
  12. static GUIMenu:SelectionSubMenu;
  13. static GUIMenu:ObjectSubMenu;
  14. static GUIMenu:TextureSubMenu;
  15. // Group sub menus
  16. static GUIMenu:GroupSelSubMenu;
  17. static GUIMenu:GroupPrefabMenu;
  18. // Save all bind elements for custom binding
  19. static BindElementIDS[8];
  20. // Indexes for object movement text
  21. static ObjectMovementIndex[15];
  22. static ObjectGroupMovementIndex[15];
  23. static CurrObjectPosition[MAX_PLAYERS][9];
  24. static CurrGroupPosition[MAX_PLAYERS][9];
  25. // Movement Increments
  26. static Float:CurrMovementInc[MAX_PLAYERS];
  27. static Float:CurrRotationInc[MAX_PLAYERS];
  28. static Float:CurrMovementGInc[MAX_PLAYERS];
  29. static Float:CurrRotationGInc[MAX_PLAYERS];
  30. // Turn delta map movements on/off
  31. static bool:DeltaMapMovement[MAX_PLAYERS];
  32. #define EXIT_GUI_MENU 1
  33. ////////////////////////////////////////////////////////////////////////////////
  34. // Main menu defines ///////////////////////////////////////////////////////////
  35. /*
  36. (0000)
  37. (0 0 00)
  38. Base Group - Sub Group - Elements
  39. */
  40. ////////////////////////////////////////////////////////////////////////////////
  41. // Map commands
  42. #define CLICK_NEW_MAP 1101
  43. #define CLICK_LOAD_MAP 1102
  44. #define CLICK_IMPORT_MAP 1103
  45. #define CLICK_EXPORT_MAP 1104
  46. ////////////////////////////////////////////////////////////////////////////////
  47. // Modes
  48. #define CLICK_OBJECT_MODE 2100
  49. #define CLICK_GROUP_MODE 2200
  50. #define CLICK_FLY_MODE 2300
  51. // Object Mode 2100 ////////////////////////////////////////////////////////////
  52. // Submenu Selection
  53. // Object sub
  54. #define CLICK_OBJECTEDIT_MENU 2101
  55. #define CLICK_OBJECTEDIT_COBJECT 2102
  56. #define CLICK_OBJECTEDIT_DOBJECT 2103
  57. #define CLICK_OBJECTEDIT_CLONE 2104
  58. #define CLICK_OBJECTEDIT_GOTO 2105
  59. #define CLICK_OBJECTEDIT_EDIT 2106
  60. #define CLICK_OBJECTEDIT_OGROUP 2107
  61. #define CLICK_OBJECTEDIT_RROT 2109
  62. // Selection sub
  63. #define CLICK_SELECTION_MENU 2111
  64. #define CLICK_SELECT_OBJECT 2112
  65. #define CLICK_DESELECT_OBJECT 2113
  66. #define CLICK_SELECT_CLOSEST 2114
  67. #define CLICK_SELECT_CLICK 2115
  68. #define CLICK_SELECT_LIST 2116
  69. #define CLICK_SELECT_OPROP 2117
  70. #define CLICK_SELECT_DCLOSEST 2118
  71. // Texture sub
  72. #define CLICK_TEXTURE_MENU 2121
  73. #define CLICK_TEXTURE_TEXEDIT 2122
  74. #define CLICK_TEXTURE_TEXTEDIT 2123
  75. #define CLICK_TEXTURE_SHOWINDEX 2124
  76. #define CLICK_TEXTURE_HIDEINDEX 2125
  77. #define CLICK_TEXTURE_COPY 2126
  78. #define CLICK_TEXTURE_PASTE 2127
  79. #define CLICK_TEXTURE_CLEAR 2128
  80. #define CLICK_TEXTURE_VIEWER 2129
  81. #define CLICK_TEXTURE_THEMEV 2130
  82. #define CLICK_TEXTURE_THEMET 2131
  83. #define CLICK_TEXTURE_SEARCH 2132
  84. // Search for object
  85. #define CLICK_SEARCH_MENU 2141
  86. #define CLICK_PIVOT_MENU 2142
  87. #define CLICK_TOGPIVOT_MENU 2143
  88. // Movement Menu
  89. #define CLICK_MOVEMENT_MENU 2150
  90. ////////////////////////////////////////////////////////////////////////////////
  91. // Group Mode 2200
  92. #define CLICK_GROUPSEL_MENU 2201
  93. #define CLICK_GROUPPF_MENU 2202
  94. #define CLICK_MOVEMENTG_MENU 2203
  95. #define CLICK_PIVOTG_MENU 2142
  96. #define CLICK_TOGPIVOTG_MENU 2143
  97. #define CLICK_ZEROGROUP_MENU 2144
  98. #define CLICK_OBJECTMETRY_MENU 2145
  99. // Group selection sub
  100. #define CLICK_GROUP_CSEL 2211
  101. #define CLICK_GROUP_GADD 2212
  102. #define CLICK_GROUP_GREM 2213
  103. #define CLICK_GROUP_CLEAR 2214
  104. #define CLICK_GROUP_CLONE 2215
  105. #define CLICK_GROUP_GALL 2216
  106. #define CLICK_GROUP_SETGROUP 2217
  107. #define CLICK_GROUP_SELECTGROUP 2218
  108. #define CLICK_GROUP_GDELETE 2219
  109. #define CLICK_GROUP_EDIT 2220
  110. #define CLICK_GROUP_INFRONT 2221
  111. // Group prefab selection
  112. #define CLICK_GROUP_GPREFAB 2231
  113. #define CLICK_GROUP_LOADPF 2232
  114. #define CLICK_GROUP_LOADZPF 2233
  115. // User binds
  116. #define CLICK_BIND_1 9101
  117. #define CLICK_BIND_2 9102
  118. #define CLICK_BIND_3 9103
  119. #define CLICK_BIND_4 9104
  120. #define CLICK_BIND_5 9105
  121. #define CLICK_BIND_6 9106
  122. #define CLICK_BIND_7 9107
  123. #define CLICK_BIND_8 9108
  124. ////////////////////////////////////////////////////////////////////////////////
  125. // Initialize all GUIMenus
  126. public OnFilterScriptInit()
  127. {
  128. // Static menu draws ///////////////////////////////////////////////////////
  129. MainMenu = CreateGUI("MainMenu");
  130. // Object Menu / group menu
  131. ObjectMenu = CreateGUI("ObjectMenu");
  132. GroupMenu = CreateGUI("GroupMenu");
  133. // Object sub menu
  134. ObjectSubMenu = CreateGUI("SubObjectEdit");
  135. SelectionSubMenu = CreateGUI("SubMenuSel");
  136. TextureSubMenu = CreateGUI("SubMenuTex");
  137. // Group sub Menu
  138. GroupSelSubMenu = CreateGUI("SubMenuGroupSel");
  139. GroupPrefabMenu = CreateGUI("SubMenuGroupPF");
  140. /////////////////////////////////////////////////////////////////////////////
  141. // Load main menu //////////////////////////////////////////////////////////////
  142. LoadGUIMenu(MainMenu,MainMenuText,0.0, 0.0, CLICK_NO_GROUP, E_INDEX);
  143. LoadGUIMenu(MainMenu,MenuButton,535.0, 135.0, CLICK_NEW_MAP, E_INDEX);
  144. GUISetPlayerText(MainMenu, E_INDEX[1], "New Map");
  145. GUISetPlayerText(MainMenu, E_INDEX[2], "LD_BEAT:square");
  146. LoadGUIMenu(MainMenu,MenuButton,535.0, 150.0, CLICK_LOAD_MAP, E_INDEX);
  147. GUISetPlayerText(MainMenu, E_INDEX[1], "Load Map");
  148. GUISetPlayerText(MainMenu, E_INDEX[2], "LD_BEAT:square");
  149. LoadGUIMenu(MainMenu,MenuButton,535.0, 165.0, CLICK_IMPORT_MAP, E_INDEX);
  150. GUISetPlayerText(MainMenu, E_INDEX[1], "Import Map");
  151. GUISetPlayerText(MainMenu, E_INDEX[2], "LD_BEAT:square");
  152. LoadGUIMenu(MainMenu,MenuButton,535.0, 180.0, CLICK_EXPORT_MAP, E_INDEX);
  153. GUISetPlayerText(MainMenu, E_INDEX[1], "Export");
  154. GUISetPlayerText(MainMenu, E_INDEX[2], "LD_BEAT:square");
  155. LoadGUIElement(MainMenu,MainMenuText[2],0.0,-200.0);
  156. LoadGUIMenu(MainMenu,MenuButton,535.0, 210.0, CLICK_OBJECT_MODE, E_INDEX);
  157. GUISetPlayerText(MainMenu, E_INDEX[1], "Object Mode");
  158. LoadGUIMenu(MainMenu,MenuButton,535.0, 225.0, CLICK_GROUP_MODE, E_INDEX);
  159. GUISetPlayerText(MainMenu, E_INDEX[1], "Group Mode");
  160. LoadGUIMenu(MainMenu,MenuButton,535.0, 240.0, CLICK_FLY_MODE, E_INDEX);
  161. GUISetPlayerText(MainMenu, E_INDEX[1], "Fly Mode");
  162. GUISetPlayerText(MainMenu, E_INDEX[2], "LD_BEAT:square");
  163. LoadGUIElement(MainMenu,MainMenuText[2],0.0,-140.0);
  164. new Float:inc = 0.0;
  165. new line[128];
  166. for(new i = 0; i < sizeof(BindElementIDS); i++)
  167. {
  168. format(line, sizeof(line), "User Bind %i", i);
  169. LoadGUIMenu(MainMenu,MenuButton,535.0, 270.0+inc, CLICK_BIND_1+i, E_INDEX);
  170. GUISetPlayerText(MainMenu, E_INDEX[1], line);
  171. GUISetPlayerText(MainMenu, E_INDEX[2], "LD_BEAT:square");
  172. BindElementIDS[i] = E_INDEX[1];
  173. inc+=15.0;
  174. }
  175. // Load object menu/////////////////////////////////////////////////////////
  176. LoadGUIMenu(ObjectMenu,MainMenuText,-100.0, 0.0, CLICK_NO_GROUP, E_INDEX);
  177. LoadGUIMenu(ObjectMenu,MenuButton,435.0, 135.0, CLICK_OBJECTEDIT_MENU, E_INDEX);
  178. GUISetPlayerText(ObjectMenu, E_INDEX[1], "Object Editor");
  179. LoadGUIMenu(ObjectMenu,MenuButton,435.0, 150.0, CLICK_SELECTION_MENU, E_INDEX);
  180. GUISetPlayerText(ObjectMenu, E_INDEX[1], "Selection");
  181. LoadGUIMenu(ObjectMenu,MenuButton,435.0, 165.0, CLICK_TEXTURE_MENU, E_INDEX);
  182. GUISetPlayerText(ObjectMenu, E_INDEX[1], "Textures");
  183. LoadGUIMenu(ObjectMenu,MenuButton,435.0, 180.0, CLICK_SEARCH_MENU, E_INDEX);
  184. GUISetPlayerText(ObjectMenu, E_INDEX[1], "Object Search");
  185. GUISetPlayerText(ObjectMenu, E_INDEX[2], "LD_BEAT:square");
  186. LoadGUIMenu(ObjectMenu,MenuButton,435.0, 195.0, CLICK_PIVOT_MENU, E_INDEX);
  187. GUISetPlayerText(ObjectMenu, E_INDEX[1], "Set Pivot");
  188. GUISetPlayerText(ObjectMenu, E_INDEX[2], "LD_BEAT:square");
  189. LoadGUIMenu(ObjectMenu,MenuButton,435.0, 210.0, CLICK_TOGPIVOT_MENU, E_INDEX);
  190. GUISetPlayerText(ObjectMenu, E_INDEX[1], "Toggle Pivot");
  191. GUISetPlayerText(ObjectMenu, E_INDEX[2], "LD_BEAT:square");
  192. // +x:0 +y:1 +z:2 +rx:3 +ry:4 +rz:5 -x:6 -y:7 -z:8 -rx:9 -ry:10 -rz:11
  193. LoadGUIMenu(ObjectMenu,MovementMenu,-100.0, 0.0, CLICK_MOVEMENT_MENU, E_INDEX);
  194. for(new i = 0; i < 15; i++) { ObjectMovementIndex[i] = E_INDEX[i]; }
  195. // Sub-Menus ///////////////////////////////////////////////////////////////////
  196. // Edit sub
  197. LoadGUIMenu(ObjectSubMenu,SubMenuText,-200.0, 0.0, EXIT_GUI_MENU, E_INDEX);
  198. GUISetPlayerText(ObjectSubMenu, E_INDEX[6], "Object Editor");
  199. LoadGUIMenu(ObjectSubMenu,MenuButton,335.0, 135.0, CLICK_OBJECTEDIT_COBJECT, E_INDEX);
  200. GUISetPlayerText(ObjectSubMenu, E_INDEX[1], "Create Object");
  201. GUISetPlayerText(ObjectSubMenu, E_INDEX[2], "LD_BEAT:square");
  202. LoadGUIMenu(ObjectSubMenu,MenuButton,335.0, 150.0, CLICK_OBJECTEDIT_RROT, E_INDEX);
  203. GUISetPlayerText(ObjectSubMenu, E_INDEX[1], "Reset Rotation");
  204. GUISetPlayerText(ObjectSubMenu, E_INDEX[2], "LD_BEAT:square");
  205. LoadGUIMenu(ObjectSubMenu,MenuButton,335.0, 165.0, CLICK_OBJECTEDIT_CLONE, E_INDEX);
  206. GUISetPlayerText(ObjectSubMenu, E_INDEX[1], "Clone");
  207. GUISetPlayerText(ObjectSubMenu, E_INDEX[2], "LD_BEAT:square");
  208. LoadGUIMenu(ObjectSubMenu,MenuButton,335.0, 180.0, CLICK_OBJECTEDIT_GOTO, E_INDEX);
  209. GUISetPlayerText(ObjectSubMenu, E_INDEX[1], "Goto");
  210. GUISetPlayerText(ObjectSubMenu, E_INDEX[2], "LD_BEAT:square");
  211. LoadGUIMenu(ObjectSubMenu,MenuButton,335.0, 195.0, CLICK_OBJECTEDIT_EDIT, E_INDEX);
  212. GUISetPlayerText(ObjectSubMenu, E_INDEX[1], "Edit Object");
  213. GUISetPlayerText(ObjectSubMenu, E_INDEX[2], "LD_BEAT:square");
  214. LoadGUIMenu(ObjectSubMenu,MenuButton,335.0, 210.0, CLICK_OBJECTEDIT_OGROUP, E_INDEX);
  215. GUISetPlayerText(ObjectSubMenu, E_INDEX[1], "Assign Group");
  216. GUISetPlayerText(ObjectSubMenu, E_INDEX[2], "LD_BEAT:square");
  217. LoadGUIMenu(ObjectSubMenu,MenuButton,335.0, 225.0, CLICK_OBJECTEDIT_DOBJECT, E_INDEX);
  218. GUISetPlayerText(ObjectSubMenu, E_INDEX[1], "Delete Object");
  219. GUISetPlayerText(ObjectSubMenu, E_INDEX[2], "LD_BEAT:square");
  220. // Selection sub
  221. LoadGUIMenu(SelectionSubMenu,SubMenuText,-200.0, 15.0, EXIT_GUI_MENU, E_INDEX);
  222. LoadGUIMenu(SelectionSubMenu,MenuButton,335.0, 150.0, CLICK_SELECT_OBJECT, E_INDEX);
  223. GUISetPlayerText(SelectionSubMenu, E_INDEX[1], "Select");
  224. GUISetPlayerText(SelectionSubMenu, E_INDEX[2], "LD_BEAT:square");
  225. LoadGUIMenu(SelectionSubMenu,MenuButton,335.0, 165.0, CLICK_DESELECT_OBJECT, E_INDEX);
  226. GUISetPlayerText(SelectionSubMenu, E_INDEX[1], "Deselect");
  227. GUISetPlayerText(SelectionSubMenu, E_INDEX[2], "LD_BEAT:square");
  228. LoadGUIMenu(SelectionSubMenu,MenuButton,335.0, 180.0, CLICK_SELECT_CLOSEST, E_INDEX);
  229. GUISetPlayerText(SelectionSubMenu, E_INDEX[1], "Select Closest");
  230. GUISetPlayerText(SelectionSubMenu, E_INDEX[2], "LD_BEAT:square");
  231. LoadGUIMenu(SelectionSubMenu,MenuButton,335.0, 195.0, CLICK_SELECT_CLICK, E_INDEX);
  232. GUISetPlayerText(SelectionSubMenu, E_INDEX[1], "Click Select");
  233. GUISetPlayerText(SelectionSubMenu, E_INDEX[2], "LD_BEAT:square");
  234. LoadGUIMenu(SelectionSubMenu,MenuButton,335.0, 210.0, CLICK_SELECT_LIST, E_INDEX);
  235. GUISetPlayerText(SelectionSubMenu, E_INDEX[1], "List Select");
  236. GUISetPlayerText(SelectionSubMenu, E_INDEX[2], "LD_BEAT:square");
  237. LoadGUIMenu(SelectionSubMenu,MenuButton,335.0, 225.0, CLICK_SELECT_OPROP, E_INDEX);
  238. GUISetPlayerText(SelectionSubMenu, E_INDEX[1], "Property Editor");
  239. GUISetPlayerText(SelectionSubMenu, E_INDEX[2], "LD_BEAT:square");
  240. LoadGUIMenu(SelectionSubMenu,MenuButton,335.0, 240.0, CLICK_SELECT_DCLOSEST, E_INDEX);
  241. GUISetPlayerText(SelectionSubMenu, E_INDEX[1], "Delete Closest");
  242. GUISetPlayerText(SelectionSubMenu, E_INDEX[2], "LD_BEAT:square");
  243. // Texture Sub
  244. LoadGUIMenu(TextureSubMenu,SubMenuTexText,-200.0, 30.0, EXIT_GUI_MENU, E_INDEX);
  245. GUISetPlayerText(TextureSubMenu, E_INDEX[6], "Textures");
  246. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 165.0, CLICK_TEXTURE_TEXEDIT, E_INDEX);
  247. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Texture Editor");
  248. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  249. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 180.0, CLICK_TEXTURE_TEXTEDIT, E_INDEX);
  250. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Text Editor");
  251. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  252. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 195.0, CLICK_TEXTURE_SHOWINDEX, E_INDEX);
  253. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Show Indexes");
  254. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  255. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 210.0, CLICK_TEXTURE_HIDEINDEX, E_INDEX);
  256. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Hide Indexes");
  257. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  258. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 225.0, CLICK_TEXTURE_COPY, E_INDEX);
  259. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Copy Properties");
  260. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  261. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 240.0, CLICK_TEXTURE_CLEAR, E_INDEX);
  262. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Clear Properties");
  263. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  264. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 255.0, CLICK_TEXTURE_PASTE, E_INDEX);
  265. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Paste Properties");
  266. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  267. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 270.0, CLICK_TEXTURE_VIEWER, E_INDEX);
  268. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Texture Viewer");
  269. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  270. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 285.0, CLICK_TEXTURE_THEMEV, E_INDEX);
  271. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Theme Viewer");
  272. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  273. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 300.0, CLICK_TEXTURE_THEMET, E_INDEX);
  274. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Texture Themes");
  275. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  276. LoadGUIMenu(TextureSubMenu,MenuButton,335.0, 315.0, CLICK_TEXTURE_SEARCH, E_INDEX);
  277. GUISetPlayerText(TextureSubMenu, E_INDEX[1], "Texture Search");
  278. GUISetPlayerText(TextureSubMenu, E_INDEX[2], "LD_BEAT:square");
  279. // Load Group Menu
  280. LoadGUIMenu(GroupMenu,MainMenuText,-100.0, 0.0, CLICK_NO_GROUP, E_INDEX);
  281. LoadGUIMenu(GroupMenu,MenuButton,435.0, 135.0, CLICK_GROUPSEL_MENU, E_INDEX);
  282. GUISetPlayerText(GroupMenu, E_INDEX[1], "Selection");
  283. LoadGUIMenu(GroupMenu,MenuButton,435.0, 150.0, CLICK_GROUPPF_MENU, E_INDEX);
  284. GUISetPlayerText(GroupMenu, E_INDEX[1], "Prefabs");
  285. LoadGUIMenu(GroupMenu,MenuButton,435.0, 165.0, CLICK_PIVOTG_MENU, E_INDEX);
  286. GUISetPlayerText(GroupMenu, E_INDEX[1], "Set Pivot");
  287. GUISetPlayerText(GroupMenu, E_INDEX[2], "LD_BEAT:square");
  288. LoadGUIMenu(GroupMenu,MenuButton,435.0, 180.0, CLICK_TOGPIVOTG_MENU, E_INDEX);
  289. GUISetPlayerText(GroupMenu, E_INDEX[1], "Toggle Pivot");
  290. GUISetPlayerText(GroupMenu, E_INDEX[2], "LD_BEAT:square");
  291. LoadGUIMenu(GroupMenu,MenuButton,435.0, 195.0, CLICK_ZEROGROUP_MENU, E_INDEX);
  292. GUISetPlayerText(GroupMenu, E_INDEX[1], "Group to 0,0,0");
  293. GUISetPlayerText(GroupMenu, E_INDEX[2], "LD_BEAT:square");
  294. LoadGUIMenu(GroupMenu,MenuButton,435.0, 195.0, CLICK_OBJECTMETRY_MENU, E_INDEX);
  295. GUISetPlayerText(GroupMenu, E_INDEX[1], "Objectmetry");
  296. GUISetPlayerText(GroupMenu, E_INDEX[2], "LD_BEAT:square");
  297. LoadGUIMenu(GroupMenu,MovementMenu,-100.0, 0.0, CLICK_MOVEMENTG_MENU, E_INDEX);
  298. GUISetPlayerText(GroupMenu, E_INDEX[12], "_");
  299. for(new i = 0; i < 15; i++) { ObjectGroupMovementIndex[i] = E_INDEX[i]; }
  300. // Selection sub
  301. LoadGUIMenu(GroupSelSubMenu,SubMenuTexText,-200.0, 0.0, EXIT_GUI_MENU, E_INDEX);
  302. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 135.0, CLICK_GROUP_CSEL, E_INDEX);
  303. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Click Select");
  304. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  305. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 150.0, CLICK_GROUP_GADD, E_INDEX);
  306. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Group Add");
  307. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  308. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 165.0, CLICK_GROUP_GREM, E_INDEX);
  309. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Group Remove");
  310. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  311. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 180.0, CLICK_GROUP_CLEAR, E_INDEX);
  312. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Group Clear");
  313. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  314. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 195.0, CLICK_GROUP_CLONE, E_INDEX);
  315. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Group Clone");
  316. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  317. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 210.0, CLICK_GROUP_GALL, E_INDEX);
  318. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Group All");
  319. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  320. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 225.0, CLICK_GROUP_SETGROUP, E_INDEX);
  321. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Set Group");
  322. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  323. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 240.0, CLICK_GROUP_SELECTGROUP, E_INDEX);
  324. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Select Group");
  325. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  326. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 255.0, CLICK_GROUP_EDIT, E_INDEX);
  327. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Group Edit");
  328. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  329. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 270.0, CLICK_GROUP_INFRONT, E_INDEX);
  330. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Group Infront");
  331. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  332. LoadGUIMenu(GroupSelSubMenu,MenuButton,335.0, 285.0, CLICK_GROUP_GDELETE, E_INDEX);
  333. GUISetPlayerText(GroupSelSubMenu, E_INDEX[1], "Group Delete");
  334. GUISetPlayerText(GroupSelSubMenu, E_INDEX[2], "LD_BEAT:square");
  335. // Prefab sub
  336. LoadGUIMenu(GroupPrefabMenu,SubMenuText,-200.0, 15.0, EXIT_GUI_MENU, E_INDEX);
  337. GUISetPlayerText(GroupPrefabMenu, E_INDEX[6], "Prefabs");
  338. LoadGUIMenu(GroupPrefabMenu,MenuButton,335.0, 150.0, CLICK_GROUP_GPREFAB, E_INDEX);
  339. GUISetPlayerText(GroupPrefabMenu, E_INDEX[1], "Prefab Group");
  340. GUISetPlayerText(GroupPrefabMenu, E_INDEX[2], "LD_BEAT:square");
  341. LoadGUIMenu(GroupPrefabMenu,MenuButton,335.0, 165.0, CLICK_GROUP_LOADPF, E_INDEX);
  342. GUISetPlayerText(GroupPrefabMenu, E_INDEX[1], "Load Prefab");
  343. GUISetPlayerText(GroupPrefabMenu, E_INDEX[2], "LD_BEAT:square");
  344. LoadGUIMenu(GroupPrefabMenu,MenuButton,335.0, 180.0, CLICK_GROUP_LOADZPF, E_INDEX);
  345. GUISetPlayerText(GroupPrefabMenu, E_INDEX[1], "Set Load Z");
  346. GUISetPlayerText(GroupPrefabMenu, E_INDEX[2], "LD_BEAT:square");
  347. ////////////////////////////////////////////////////////////////////////////
  348. foreach(new i : Player)
  349. {
  350. CreatePlayerMenus(i);
  351. }
  352. #if defined MG_OnFilterScriptInit
  353. MG_OnFilterScriptInit();
  354. #endif
  355. return 1;
  356. }
  357. #if defined _ALS_OnFilterScriptInit
  358. #undef OnFilterScriptInit
  359. #else
  360. #define _ALS_OnFilterScriptInit
  361. #endif
  362. #define OnFilterScriptInit MG_OnFilterScriptInit
  363. #if defined MG_OnFilterScriptInit
  364. forward MG_OnFilterScriptInit();
  365. #endif
  366. public OnPlayerConnect(playerid)
  367. {
  368. CreatePlayerMenus(playerid);
  369. #if defined MG_OnPlayerConnect
  370. MG_OnPlayerConnect(playerid);
  371. #endif
  372. return 1;
  373. }
  374. #if defined _ALS_OnPlayerConnect
  375. #undef OnPlayerConnect
  376. #else
  377. #define _ALS_OnPlayerConnect
  378. #endif
  379. #define OnPlayerConnect MG_OnPlayerConnect
  380. #if defined MG_OnPlayerConnect
  381. forward MG_OnPlayerConnect(playerid);
  382. #endif
  383. static CreatePlayerMenus(playerid)
  384. {
  385. // Set selection
  386. SetPlayerGUISelectionColor(playerid, 0x00FF00FF);
  387. // Main menu
  388. PlayerMainMenu[playerid] = PlayerCreateGUI(playerid, "MainMenu");
  389. PlayerLoadGUIMenu(playerid,PlayerMainMenu[playerid], MainMenuPlayerText, 0.0, 0.0, EXIT_GUI_MENU, E_PLAYERINDEX);
  390. // Bind menus
  391. PlayerBindGUITextDraw(playerid, PlayerMainMenu[playerid], MainMenu);
  392. // Object menu
  393. PlayerObjectMenu[playerid] = PlayerCreateGUI(playerid, "ObjectMenu");
  394. PlayerLoadGUIMenu(playerid,PlayerObjectMenu[playerid], MainMenuPlayerText,-100.0, 0.0, EXIT_GUI_MENU, E_PLAYERINDEX);
  395. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[0], "Object Menu");
  396. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[2], "_");
  397. PlayerGUISetSelectable(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[2], 0);
  398. PlayerLoadGUIMenu(playerid,PlayerObjectMenu[playerid], MovementInfo,-100.0, 0.0, EXIT_GUI_MENU, E_PLAYERINDEX);
  399. for(new i = 0; i < 8; i++) { CurrObjectPosition[playerid][i] = E_PLAYERINDEX[i]; }
  400. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[6], "Off");
  401. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[7], "1.0");
  402. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[8], "5.0");
  403. // Group Menu
  404. PlayerGroupMenu[playerid] = PlayerCreateGUI(playerid, "GroupMenu");
  405. PlayerLoadGUIMenu(playerid,PlayerGroupMenu[playerid], MainMenuPlayerText,-100.0, 0.0, EXIT_GUI_MENU, E_PLAYERINDEX);
  406. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[0], "Group Menu");
  407. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[2], "_");
  408. PlayerGUISetSelectable(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[2], 0);
  409. PlayerLoadGUIMenu(playerid,PlayerGroupMenu[playerid], MovementInfo,-100.0, 0.0, EXIT_GUI_MENU, E_PLAYERINDEX);
  410. for(new i = 0; i < 8; i++) { CurrGroupPosition[playerid][i] = E_PLAYERINDEX[i]; }
  411. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[3], "------");
  412. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[4], "------");
  413. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[5], "------");
  414. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[6], "_");
  415. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[7], "1.0");
  416. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[8], "5.0");
  417. // Bind menus
  418. PlayerBindGUITextDraw(playerid, PlayerObjectMenu[playerid], ObjectMenu);
  419. PlayerBindGUITextDraw(playerid, PlayerGroupMenu[playerid], GroupMenu);
  420. // Sub-menus forces all sub menus to close by closing submenu
  421. PlayerSubMenu[playerid] = PlayerCreateGUI(playerid, "SubMenu");
  422. // Submenu binding
  423. PlayerBindGUITextDraw(playerid, PlayerSubMenu[playerid], SelectionSubMenu);
  424. PlayerBindGUITextDraw(playerid, PlayerSubMenu[playerid], ObjectSubMenu);
  425. PlayerBindGUITextDraw(playerid, PlayerSubMenu[playerid], TextureSubMenu);
  426. // Group binding
  427. PlayerBindGUITextDraw(playerid, PlayerSubMenu[playerid], GroupSelSubMenu);
  428. PlayerBindGUITextDraw(playerid, PlayerSubMenu[playerid], GroupPrefabMenu);
  429. // Default rotation / movement
  430. CurrMovementInc[playerid] = 1.0;
  431. CurrRotationInc[playerid] = 5.0;
  432. CurrMovementGInc[playerid] = 1.0;
  433. CurrRotationGInc[playerid] = 5.0;
  434. // Default delta off
  435. DeltaMapMovement[playerid] = false;
  436. return 1;
  437. }
  438. OnPlayerKeyStateMenuChange(playerid, newkeys, oldkeys)
  439. {
  440. #pragma unused oldkeys
  441. if( newkeys & KEY_NO || (IsFlyMode(playerid) && newkeys & KEY_JUMP) )
  442. {
  443. if(!EditingMode[playerid])
  444. {
  445. PlayerShowGUIMenu(playerid, PlayerMainMenu[playerid], true);
  446. PlayerSelectGUITextDraw(playerid);
  447. return 1;
  448. }
  449. }
  450. return 0;
  451. }
  452. HideGUIInterface(playerid)
  453. {
  454. PlayerHideGUIMenu(playerid, PlayerSubMenu[playerid]);
  455. PlayerHideGUIMenu(playerid, PlayerObjectMenu[playerid]);
  456. PlayerHideGUIMenu(playerid, PlayerMainMenu[playerid]);
  457. PlayerCancelSelectGUITextDraw(playerid);
  458. return 1;
  459. }
  460. // Main Menu ///////////////////////////////////////////////////////////////////
  461. OnPlayerGUIClick:MainMenu(playerid, group, gindex, pindex)
  462. {
  463. // Exit
  464. if(group == EXIT_GUI_MENU)
  465. {
  466. if(pindex == 1) HideGUIInterface(playerid);
  467. else if(pindex == 2) PlayerCancelSelectGUITextDraw(playerid, true);
  468. }
  469. return 1;
  470. }
  471. OnGUIClick:MainMenu(playerid, group, gindex, pindex)
  472. {
  473. // Call newmap function
  474. switch(group)
  475. {
  476. // Map commands
  477. case CLICK_NEW_MAP: { BroadcastCommand(playerid, "/newmap"); }
  478. case CLICK_LOAD_MAP: { BroadcastCommand(playerid, "/loadmap"); }
  479. case CLICK_IMPORT_MAP: { BroadcastCommand(playerid, "/importmap"); }
  480. case CLICK_EXPORT_MAP: { BroadcastCommand(playerid, "/export"); }
  481. // Mode commands
  482. case CLICK_OBJECT_MODE:
  483. {
  484. MapOpenCheck();
  485. PlayerHideGUIMenu(playerid, PlayerSubMenu[playerid]);
  486. PlayerHideGUIMenu(playerid, PlayerGroupMenu[playerid]);
  487. PlayerShowGUIMenu(playerid, PlayerObjectMenu[playerid], true);
  488. }
  489. case CLICK_GROUP_MODE:
  490. {
  491. MapOpenCheck();
  492. PlayerHideGUIMenu(playerid, PlayerSubMenu[playerid]);
  493. PlayerHideGUIMenu(playerid, PlayerObjectMenu[playerid]);
  494. PlayerShowGUIMenu(playerid, PlayerGroupMenu[playerid], true);
  495. }
  496. case CLICK_FLY_MODE: { BroadcastCommand(playerid, "/flymode"); }
  497. case CLICK_BIND_1..CLICK_BIND_8:
  498. {
  499. new line[128];
  500. format(line, sizeof(line), "/runbind %i", group - CLICK_BIND_1);
  501. BroadcastCommand(playerid, line);
  502. }
  503. }
  504. return 1;
  505. }
  506. OnPlayerGUIClose:MainMenu(playerid, group, gindex)
  507. {
  508. // Always close the submenu
  509. PlayerHideGUIMenu(playerid, PlayerObjectMenu[playerid]);
  510. return 1;
  511. }
  512. //Object Menu///////////////////////////////////////////////////////////////////
  513. OnPlayerGUIClick:ObjectMenu(playerid, group, gindex, pindex)
  514. {
  515. // Exit
  516. if(group == EXIT_GUI_MENU)
  517. {
  518. PlayerHideGUIMenu(playerid, PlayerObjectMenu[playerid]);
  519. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  520. }
  521. return 1;
  522. }
  523. OnGUIClick:ObjectMenu(playerid, group, gindex, pindex)
  524. {
  525. // Call newmap function
  526. switch(group)
  527. {
  528. // Edit objects
  529. case CLICK_OBJECTEDIT_MENU:
  530. {
  531. // Open the sub-menu controller (Don't show binds)
  532. PlayerShowGUIMenu(playerid, PlayerSubMenu[playerid], true);
  533. // Hide all menus
  534. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  535. // Show the Sub object menu
  536. ShowGUIMenu(playerid, ObjectSubMenu);
  537. }
  538. // Map commands
  539. case CLICK_SELECTION_MENU:
  540. {
  541. // Open the sub-menu controller (Don't show binds)
  542. PlayerShowGUIMenu(playerid, PlayerSubMenu[playerid], true);
  543. // Hide all menus
  544. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  545. // Show the Sub selection menu
  546. ShowGUIMenu(playerid, SelectionSubMenu);
  547. }
  548. // Texture commands
  549. case CLICK_TEXTURE_MENU:
  550. {
  551. // Open the sub-menu controller (Don't show binds)
  552. PlayerShowGUIMenu(playerid, PlayerSubMenu[playerid], true);
  553. // Hide all menus
  554. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  555. // Show the Sub texture menu
  556. ShowGUIMenu(playerid, TextureSubMenu);
  557. }
  558. // Search object
  559. case CLICK_SEARCH_MENU:
  560. {
  561. inline SearchObject(pid, dialogid, response, listitem, string:text[])
  562. {
  563. #pragma unused listitem, dialogid, pid, text
  564. if(response)
  565. {
  566. new line[128];
  567. format(line, sizeof(line), "/osearch %s", text);
  568. PlayerSetGUIPaused(playerid, true);
  569. BroadcastCommand(playerid, line);
  570. }
  571. }
  572. Dialog_ShowCallback(playerid, using inline SearchObject, DIALOG_STYLE_INPUT, "Texture Studio", "Input object search string", "Ok", "Cancel");
  573. }
  574. case CLICK_PIVOT_MENU:
  575. {
  576. // Force cancel
  577. PlayerCancelSelectGUITextDraw(playerid, true);
  578. // csel mode (We need to delay to use this mode effectively)
  579. SetTimerEx("DelayEditPivot", 1000, false, "i", playerid);
  580. }
  581. case CLICK_TOGPIVOT_MENU: { BroadcastCommand(playerid, "/togpivot"); }
  582. case CLICK_MOVEMENT_MENU:
  583. {
  584. if(CurrObject[playerid] == -1) return 1;
  585. // +x:0 +y:1 +z:2 +rx:3 +ry:4 +rz:5 -x:6 -y:7 -z:8 -rx:9 -ry:10 -rz:11
  586. new line[128];
  587. if(ObjectMovementIndex[0] == pindex)
  588. {
  589. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  590. {
  591. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/dox %0.3f", CurrMovementInc[playerid]);
  592. else format(line, sizeof(line), "/ox %0.3f", CurrMovementInc[playerid]);
  593. }
  594. else format(line, sizeof(line), "/avox %0.3f", CurrMovementInc[playerid]);
  595. BroadcastCommand(playerid, line);
  596. }
  597. else if(ObjectMovementIndex[1] == pindex)
  598. {
  599. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  600. {
  601. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/doy %0.3f", CurrMovementInc[playerid]);
  602. else format(line, sizeof(line), "/oy %0.3f", CurrMovementInc[playerid]);
  603. }
  604. else format(line, sizeof(line), "/avoy %0.3f", CurrMovementInc[playerid]);
  605. BroadcastCommand(playerid, line);
  606. }
  607. else if(ObjectMovementIndex[2] == pindex)
  608. {
  609. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  610. {
  611. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/doz %0.3f", CurrMovementInc[playerid]);
  612. else format(line, sizeof(line), "/oz %0.3f", CurrMovementInc[playerid]);
  613. }
  614. else format(line, sizeof(line), "/avoz %0.3f", CurrMovementInc[playerid]);
  615. BroadcastCommand(playerid, line);
  616. }
  617. else if(ObjectMovementIndex[3] == pindex)
  618. {
  619. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  620. {
  621. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/drx %0.3f", CurrRotationInc[playerid]);
  622. else format(line, sizeof(line), "/rx %0.3f", CurrRotationInc[playerid]);
  623. }
  624. else format(line, sizeof(line), "/avrx %0.3f", CurrRotationInc[playerid]);
  625. BroadcastCommand(playerid, line);
  626. }
  627. else if(ObjectMovementIndex[4] == pindex)
  628. {
  629. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  630. {
  631. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/dry %0.3f", CurrRotationInc[playerid]);
  632. else format(line, sizeof(line), "/ry %0.3f", CurrRotationInc[playerid]);
  633. }
  634. else format(line, sizeof(line), "/avry %0.3f", CurrRotationInc[playerid]);
  635. BroadcastCommand(playerid, line);
  636. }
  637. else if(ObjectMovementIndex[5] == pindex)
  638. {
  639. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  640. {
  641. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/drz %0.3f", CurrRotationInc[playerid]);
  642. else format(line, sizeof(line), "/rz %0.3f", CurrRotationInc[playerid]);
  643. }
  644. else format(line, sizeof(line), "/avrz %0.3f", CurrRotationInc[playerid]);
  645. BroadcastCommand(playerid, line);
  646. }
  647. else if(ObjectMovementIndex[6] == pindex)
  648. {
  649. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  650. {
  651. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/dox %0.3f", CurrMovementInc[playerid]*-1);
  652. else format(line, sizeof(line), "/ox %0.3f", CurrMovementInc[playerid]*-1);
  653. }
  654. else format(line, sizeof(line), "/avox %0.3f", CurrMovementInc[playerid]*-1);
  655. BroadcastCommand(playerid, line);
  656. }
  657. else if(ObjectMovementIndex[7] == pindex)
  658. {
  659. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  660. {
  661. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/doy %0.3f", CurrMovementInc[playerid]*-1);
  662. else format(line, sizeof(line), "/oy %0.3f", CurrMovementInc[playerid]*-1);
  663. }
  664. else format(line, sizeof(line), "/avoy %0.3f", CurrMovementInc[playerid]*-1);
  665. BroadcastCommand(playerid, line);
  666. }
  667. else if(ObjectMovementIndex[8] == pindex)
  668. {
  669. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  670. {
  671. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/doz %0.3f", CurrMovementInc[playerid]*-1);
  672. else format(line, sizeof(line), "/oz %0.3f", CurrMovementInc[playerid]*-1);
  673. }
  674. else format(line, sizeof(line), "/avoz %0.3f", CurrMovementInc[playerid]*-1);
  675. BroadcastCommand(playerid, line);
  676. }
  677. else if(ObjectMovementIndex[9] == pindex)
  678. {
  679. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  680. {
  681. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/drx %0.3f", CurrRotationInc[playerid]*-1);
  682. else format(line, sizeof(line), "/rx %0.3f", CurrRotationInc[playerid]*-1);
  683. }
  684. else format(line, sizeof(line), "/avrx %0.3f", CurrRotationInc[playerid]*-1);
  685. BroadcastCommand(playerid, line);
  686. }
  687. else if(ObjectMovementIndex[10] == pindex)
  688. {
  689. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  690. {
  691. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/dry %0.3f", CurrRotationInc[playerid]*-1);
  692. else format(line, sizeof(line), "/ry %0.3f", CurrRotationInc[playerid]*-1);
  693. }
  694. else format(line, sizeof(line), "/avry %0.3f", CurrRotationInc[playerid]*-1);
  695. BroadcastCommand(playerid, line);
  696. }
  697. else if(ObjectMovementIndex[11] == pindex)
  698. {
  699. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  700. {
  701. if(DeltaMapMovement[playerid]) format(line, sizeof(line), "/drz %0.3f", CurrRotationInc[playerid]*-1);
  702. else format(line, sizeof(line), "/rz %0.3f", CurrRotationInc[playerid]*-1);
  703. }
  704. else format(line, sizeof(line), "/avrz %0.3f", CurrRotationInc[playerid]*-1);
  705. BroadcastCommand(playerid, line);
  706. }
  707. // Delta mode on/off
  708. else if(ObjectMovementIndex[12] == pindex)
  709. {
  710. if(DeltaMapMovement[playerid])
  711. {
  712. DeltaMapMovement[playerid] = false;
  713. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[6], "Off");
  714. }
  715. else
  716. {
  717. DeltaMapMovement[playerid] = true;
  718. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[6], "On");
  719. }
  720. }
  721. // Set object position
  722. else if(ObjectMovementIndex[13] == pindex)
  723. {
  724. inline SetMovementInc(pid, dialogid, response, listitem, string:text[])
  725. {
  726. #pragma unused listitem, dialogid, pid, text
  727. if(response)
  728. {
  729. new Float:tmp;
  730. if(sscanf(text, "f", tmp)) return SendClientMessage(playerid, STEALTH_YELLOW, "You must supply a increment value!");
  731. if(tmp < -100.0 || tmp > 100.0) return SendClientMessage(playerid, STEALTH_YELLOW, "Out of range increment! <-100.0 - 100.0>");
  732. CurrMovementInc[playerid] = tmp;
  733. format(line, sizeof(line), "%0.3f", tmp);
  734. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[7], line);
  735. }
  736. }
  737. Dialog_ShowCallback(playerid, using inline SetMovementInc, DIALOG_STYLE_INPUT, "Texture Studio", "Input object movement inc", "Ok", "Cancel");
  738. }
  739. else if(ObjectMovementIndex[14] == pindex)
  740. {
  741. inline SetMovementRot(pid, dialogid, response, listitem, string:text[])
  742. {
  743. #pragma unused listitem, dialogid, pid, text
  744. if(response)
  745. {
  746. new Float:tmp;
  747. if(sscanf(text, "f", tmp)) return SendClientMessage(playerid, STEALTH_YELLOW, "You must supply a increment value!");
  748. if(tmp < -100.0 || tmp > 100.0) return SendClientMessage(playerid, STEALTH_YELLOW, "Out of range increment! <-100.0 - 100.0>");
  749. CurrRotationInc[playerid] = tmp;
  750. format(line, sizeof(line), "%0.3f", tmp);
  751. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], E_PLAYERINDEX[8], line);
  752. }
  753. }
  754. Dialog_ShowCallback(playerid, using inline SetMovementRot, DIALOG_STYLE_INPUT, "Texture Studio", "Input object rotation inc", "Ok", "Cancel");
  755. }
  756. }
  757. }
  758. return 1;
  759. }
  760. OnPlayerGUIClose:ObjectMenu(playerid, group, gindex)
  761. {
  762. return 1;
  763. }
  764. //Sub-menus//////////////////////////////////////////////////////////////////////
  765. // Object menu
  766. OnGUIClick:SubObjectEdit(playerid, group, gindex, pindex)
  767. {
  768. // Exit
  769. switch(group)
  770. {
  771. case EXIT_GUI_MENU: { PlayerHideGUIMenu(playerid, PlayerSubMenu[playerid]); }
  772. case CLICK_OBJECTEDIT_COBJECT:
  773. {
  774. inline ChooseObject(pid, dialogid, response, listitem, string:text[])
  775. {
  776. #pragma unused listitem, dialogid, pid, text
  777. new line[128];
  778. format(line, sizeof(line), "/cobject %s", text);
  779. if(response) { BroadcastCommand(playerid, line); }
  780. }
  781. Dialog_ShowCallback(playerid, using inline ChooseObject, DIALOG_STYLE_INPUT, "Texture Studio", "Input objectid to create", "Ok", "Cancel");
  782. }
  783. case CLICK_OBJECTEDIT_RROT: { BroadcastCommand(playerid, "/rotreset"); }
  784. case CLICK_OBJECTEDIT_DOBJECT: { BroadcastCommand(playerid, "/dobject"); }
  785. case CLICK_OBJECTEDIT_CLONE: { BroadcastCommand(playerid, "/clone"); }
  786. case CLICK_OBJECTEDIT_GOTO: { BroadcastCommand(playerid, "/ogoto"); }
  787. case CLICK_OBJECTEDIT_EDIT:
  788. {
  789. // Force cancel
  790. PlayerCancelSelectGUITextDraw(playerid, true);
  791. // csel mode (We need to delay to use this mode effectively)
  792. SetTimerEx("DelayEditObject", 1000, false, "i", playerid);
  793. }
  794. case CLICK_OBJECTEDIT_OGROUP:
  795. {
  796. inline GroupAssign(pid, dialogid, response, listitem, string:text[])
  797. {
  798. #pragma unused listitem, dialogid, pid, text
  799. new line[128];
  800. format(line, sizeof(line), "/ogroup %s", text);
  801. if(response) { BroadcastCommand(playerid, line); }
  802. }
  803. Dialog_ShowCallback(playerid, using inline GroupAssign, DIALOG_STYLE_INPUT, "Texture Studio", "Input group assignment for object", "Ok", "Cancel");
  804. }
  805. }
  806. return 1;
  807. }
  808. // Selection menu
  809. OnGUIClick:SubMenuSel(playerid, group, gindex, pindex)
  810. {
  811. // Exit
  812. switch(group)
  813. {
  814. case EXIT_GUI_MENU: { PlayerHideGUIMenu(playerid, PlayerSubMenu[playerid]); }
  815. case CLICK_SELECT_OBJECT:
  816. {
  817. inline ChooseSelection(pid, dialogid, response, listitem, string:text[])
  818. {
  819. #pragma unused listitem, dialogid, pid, text
  820. new line[128];
  821. format(line, sizeof(line), "/sel %s", text);
  822. if(response) { BroadcastCommand(playerid, line); }
  823. }
  824. Dialog_ShowCallback(playerid, using inline ChooseSelection, DIALOG_STYLE_INPUT, "Texture Studio", "Input object selection ID", "Ok", "Cancel");
  825. }
  826. case CLICK_DESELECT_OBJECT: { BroadcastCommand(playerid, "/dsel"); }
  827. case CLICK_SELECT_CLOSEST: { BroadcastCommand(playerid, "/scsel"); }
  828. case CLICK_SELECT_CLICK:
  829. {
  830. // Force cancel
  831. PlayerCancelSelectGUITextDraw(playerid, true);
  832. // csel mode (We need to delay to use this mode effectively)
  833. SetTimerEx("DelayCSel", 1000, false, "i", playerid);
  834. }
  835. case CLICK_SELECT_LIST:
  836. {
  837. // Force cancel
  838. PlayerCancelSelectGUITextDraw(playerid, true);
  839. // csel mode (We need to delay to use this mode effectively)
  840. SetTimerEx("DelayLSel", 1000, false, "i", playerid);
  841. }
  842. case CLICK_SELECT_OPROP: { BroadcastCommand(playerid, "/oprop"); }
  843. case CLICK_SELECT_DCLOSEST: { BroadcastCommand(playerid, "/dcsel"); }
  844. }
  845. return 1;
  846. }
  847. // Texture menu
  848. OnGUIClick:SubMenuTex(playerid, group, gindex, pindex)
  849. {
  850. // Exit
  851. switch(group)
  852. {
  853. case EXIT_GUI_MENU: { PlayerHideGUIMenu(playerid, PlayerSubMenu[playerid]); }
  854. case CLICK_TEXTURE_TEXEDIT:
  855. {
  856. // Gets messy if we leave the submenu open
  857. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  858. // This menu will always be the first in open stack
  859. GUIHideFirstInStack(playerid);
  860. BroadcastCommand(playerid, "/stexture");
  861. }
  862. case CLICK_TEXTURE_TEXTEDIT:
  863. {
  864. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  865. GUIHideFirstInStack(playerid);
  866. BroadcastCommand(playerid, "/text");
  867. }
  868. case CLICK_TEXTURE_SHOWINDEX: { BroadcastCommand(playerid, "/sindex"); }
  869. case CLICK_TEXTURE_HIDEINDEX: { BroadcastCommand(playerid, "/rindex"); }
  870. case CLICK_TEXTURE_COPY: { BroadcastCommand(playerid, "/copy"); }
  871. case CLICK_TEXTURE_PASTE: { BroadcastCommand(playerid, "/paste"); }
  872. case CLICK_TEXTURE_CLEAR: { BroadcastCommand(playerid, "/clear"); }
  873. case CLICK_TEXTURE_VIEWER: { BroadcastCommand(playerid, "/mtextures"); }
  874. case CLICK_TEXTURE_THEMEV: { BroadcastCommand(playerid, "/ttextures"); }
  875. case CLICK_TEXTURE_THEMET:
  876. {
  877. inline ThemeMenu(pid, dialogid, response, listitem, string:text[])
  878. {
  879. #pragma unused listitem, dialogid, pid, text
  880. if(response)
  881. {
  882. switch(listitem)
  883. {
  884. case 0: { BroadcastCommand(playerid, "/savetheme"); }
  885. case 1: { BroadcastCommand(playerid, "/loadtheme"); }
  886. case 2: { BroadcastCommand(playerid, "/deletetheme"); }
  887. }
  888. }
  889. }
  890. Dialog_ShowCallback(playerid, using inline ThemeMenu, DIALOG_STYLE_LIST, "Texture Studio", "Save Theme\nLoad Theme\nDelete Theme", "Ok", "Cancel");
  891. }
  892. case CLICK_TEXTURE_SEARCH:
  893. {
  894. inline TextureSearch(pid, dialogid, response, listitem, string:text[])
  895. {
  896. #pragma unused listitem, dialogid, pid, text
  897. new line[128];
  898. format(line, sizeof(line), "/tsearch %s", text);
  899. if(response) { BroadcastCommand(playerid, line); }
  900. }
  901. Dialog_ShowCallback(playerid, using inline TextureSearch, DIALOG_STYLE_INPUT, "Texture Studio", "Search for a texture name", "Ok", "Cancel");
  902. }
  903. }
  904. return 1;
  905. }
  906. //Group Menu///////////////////////////////////////////////////////////////////
  907. OnPlayerGUIClick:GroupMenu(playerid, group, gindex, pindex)
  908. {
  909. // Exit
  910. if(group == EXIT_GUI_MENU)
  911. {
  912. PlayerHideGUIMenu(playerid, PlayerGroupMenu[playerid]);
  913. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  914. }
  915. return 1;
  916. }
  917. OnGUIClick:GroupMenu(playerid, group, gindex, pindex)
  918. {
  919. switch(group)
  920. {
  921. case CLICK_GROUPSEL_MENU:
  922. {
  923. // Open the sub-menu controller (Don't show binds)
  924. PlayerShowGUIMenu(playerid, PlayerSubMenu[playerid], true);
  925. // Hide all menus
  926. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  927. // Show the Sub object menu
  928. ShowGUIMenu(playerid, GroupSelSubMenu);
  929. }
  930. // Edit objects
  931. case CLICK_GROUPPF_MENU:
  932. {
  933. // Open the sub-menu controller (Don't show binds)
  934. PlayerShowGUIMenu(playerid, PlayerSubMenu[playerid], true);
  935. // Hide all menus
  936. PlayerHideAllGUIBindMenu(playerid, PlayerSubMenu[playerid]);
  937. // Show the Sub object menu
  938. ShowGUIMenu(playerid, GroupPrefabMenu);
  939. }
  940. // Pivot
  941. case CLICK_PIVOTG_MENU:
  942. {
  943. // Force cancel
  944. PlayerCancelSelectGUITextDraw(playerid, true);
  945. // csel mode (We need to delay to use this mode effectively)
  946. SetTimerEx("DelayEditPivot", 1000, false, "i", playerid);
  947. }
  948. case CLICK_TOGPIVOTG_MENU: { BroadcastCommand(playerid, "/togpivot"); }
  949. // Send group to 0,0,0 position
  950. case CLICK_ZEROGROUP_MENU:
  951. {
  952. inline ZeroGroup(pid, dialogid, response, listitem, string:text[])
  953. {
  954. #pragma unused listitem, dialogid, pid, text
  955. if(response) BroadcastCommand(playerid, "/0group");
  956. }
  957. Dialog_ShowCallback(playerid, using inline ZeroGroup, DIALOG_STYLE_MSGBOX, "Texture Studio", "This will set your currently grouped\nobjects to the 0,0,0 postion", "Ok", "Cancel");
  958. }
  959. // Objectmetry editor
  960. case CLICK_OBJECTMETRY_MENU: { BroadcastCommand(playerid, "/obmedit"); }
  961. case CLICK_MOVEMENTG_MENU:
  962. {
  963. // +x:0 +y:1 +z:2 +rx:3 +ry:4 +rz:5 -x:6 -y:7 -z:8 -rx:9 -ry:10 -rz:11
  964. new line[128];
  965. if(ObjectGroupMovementIndex[0] == pindex)
  966. {
  967. format(line, sizeof(line), "/gox %0.3f", CurrMovementGInc[playerid]);
  968. BroadcastCommand(playerid, line);
  969. }
  970. else if(ObjectGroupMovementIndex[1] == pindex)
  971. {
  972. format(line, sizeof(line), "/goy %0.3f", CurrMovementGInc[playerid]);
  973. BroadcastCommand(playerid, line);
  974. }
  975. else if(ObjectGroupMovementIndex[2] == pindex)
  976. {
  977. format(line, sizeof(line), "/goz %0.3f", CurrMovementGInc[playerid]);
  978. BroadcastCommand(playerid, line);
  979. }
  980. else if(ObjectGroupMovementIndex[3] == pindex)
  981. {
  982. format(line, sizeof(line), "/grx %0.3f", CurrRotationGInc[playerid]);
  983. BroadcastCommand(playerid, line);
  984. }
  985. else if(ObjectGroupMovementIndex[4] == pindex)
  986. {
  987. format(line, sizeof(line), "/gry %0.3f", CurrRotationGInc[playerid]);
  988. BroadcastCommand(playerid, line);
  989. }
  990. else if(ObjectGroupMovementIndex[5] == pindex)
  991. {
  992. format(line, sizeof(line), "/grz %0.3f", CurrRotationGInc[playerid]);
  993. BroadcastCommand(playerid, line);
  994. }
  995. else if(ObjectGroupMovementIndex[6] == pindex)
  996. {
  997. format(line, sizeof(line), "/gox %0.3f", CurrMovementGInc[playerid]*-1);
  998. BroadcastCommand(playerid, line);
  999. }
  1000. else if(ObjectGroupMovementIndex[7] == pindex)
  1001. {
  1002. format(line, sizeof(line), "/goy %0.3f", CurrMovementGInc[playerid]*-1);
  1003. BroadcastCommand(playerid, line);
  1004. }
  1005. else if(ObjectGroupMovementIndex[8] == pindex)
  1006. {
  1007. format(line, sizeof(line), "/goz %0.3f", CurrMovementGInc[playerid]*-1);
  1008. BroadcastCommand(playerid, line);
  1009. }
  1010. else if(ObjectGroupMovementIndex[9] == pindex)
  1011. {
  1012. format(line, sizeof(line), "/grx %0.3f", CurrRotationGInc[playerid]*-1);
  1013. BroadcastCommand(playerid, line);
  1014. }
  1015. else if(ObjectGroupMovementIndex[10] == pindex)
  1016. {
  1017. format(line, sizeof(line), "/gry %0.3f", CurrRotationGInc[playerid]*-1);
  1018. BroadcastCommand(playerid, line);
  1019. }
  1020. else if(ObjectGroupMovementIndex[11] == pindex)
  1021. {
  1022. format(line, sizeof(line), "/grz %0.3f", CurrRotationGInc[playerid]*-1);
  1023. BroadcastCommand(playerid, line);
  1024. }
  1025. // Set object position
  1026. else if(ObjectGroupMovementIndex[13] == pindex)
  1027. {
  1028. inline SetMovementGInc(pid, dialogid, response, listitem, string:text[])
  1029. {
  1030. #pragma unused listitem, dialogid, pid, text
  1031. if(response)
  1032. {
  1033. new Float:tmp;
  1034. if(sscanf(text, "f", tmp)) return SendClientMessage(playerid, STEALTH_YELLOW, "You must supply a increment value!");
  1035. if(tmp < -100.0 || tmp > 100.0) return SendClientMessage(playerid, STEALTH_YELLOW, "Out of range increment! <-100.0 - 100.0>");
  1036. CurrMovementGInc[playerid] = tmp;
  1037. format(line, sizeof(line), "%0.3f", tmp);
  1038. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[7], line);
  1039. }
  1040. }
  1041. Dialog_ShowCallback(playerid, using inline SetMovementGInc, DIALOG_STYLE_INPUT, "Texture Studio", "Input group movement inc", "Ok", "Cancel");
  1042. }
  1043. else if(ObjectGroupMovementIndex[14] == pindex)
  1044. {
  1045. inline SetMovementGRot(pid, dialogid, response, listitem, string:text[])
  1046. {
  1047. #pragma unused listitem, dialogid, pid, text
  1048. if(response)
  1049. {
  1050. new Float:tmp;
  1051. if(sscanf(text, "f", tmp)) return SendClientMessage(playerid, STEALTH_YELLOW, "You must supply a increment value!");
  1052. if(tmp < -100.0 || tmp > 100.0) return SendClientMessage(playerid, STEALTH_YELLOW, "Out of range increment! <-100.0 - 100.0>");
  1053. CurrRotationGInc[playerid] = tmp;
  1054. format(line, sizeof(line), "%0.3f", tmp);
  1055. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], E_PLAYERINDEX[8], line);
  1056. }
  1057. }
  1058. Dialog_ShowCallback(playerid, using inline SetMovementGRot, DIALOG_STYLE_INPUT, "Texture Studio", "Input group rotation inc", "Ok", "Cancel");
  1059. }
  1060. }
  1061. }
  1062. return 1;
  1063. }
  1064. // Sub menu group selection
  1065. OnGUIClick:SubMenuGroupSel(playerid, group, gindex, pindex)
  1066. {
  1067. switch(group)
  1068. {
  1069. case EXIT_GUI_MENU: { PlayerHideGUIMenu(playerid, PlayerSubMenu[playerid]); }
  1070. case CLICK_GROUP_CSEL:
  1071. {
  1072. // Force cancel
  1073. PlayerCancelSelectGUITextDraw(playerid, true);
  1074. // csel mode (We need to delay to use this mode effectively)
  1075. SetTimerEx("DelayGSel", 1000, false, "i", playerid);
  1076. }
  1077. case CLICK_GROUP_GADD:
  1078. {
  1079. inline AddGroupObject(pid, dialogid, response, listitem, string:text[])
  1080. {
  1081. #pragma unused listitem, dialogid, pid, text
  1082. new line[128];
  1083. format(line, sizeof(line), "/gadd %s", text);
  1084. if(response) { BroadcastCommand(playerid, line); }
  1085. }
  1086. Dialog_ShowCallback(playerid, using inline AddGroupObject, DIALOG_STYLE_INPUT, "Texture Studio", "Input object to add to group", "Ok", "Cancel");
  1087. }
  1088. case CLICK_GROUP_GREM:
  1089. {
  1090. inline RemGroupObject(pid, dialogid, response, listitem, string:text[])
  1091. {
  1092. #pragma unused listitem, dialogid, pid, text
  1093. new line[128];
  1094. format(line, sizeof(line), "/grem %s", text);
  1095. if(response) { BroadcastCommand(playerid, line); }
  1096. }
  1097. Dialog_ShowCallback(playerid, using inline RemGroupObject, DIALOG_STYLE_INPUT, "Texture Studio", "Input object to remove from group", "Ok", "Cancel");
  1098. }
  1099. case CLICK_GROUP_CLEAR: { BroadcastCommand(playerid, "/gclear"); }
  1100. case CLICK_GROUP_CLONE: { BroadcastCommand(playerid, "/gclone"); }
  1101. case CLICK_GROUP_GALL: { BroadcastCommand(playerid, "/gall"); }
  1102. case CLICK_GROUP_SETGROUP:
  1103. {
  1104. inline SetGroup(pid, dialogid, response, listitem, string:text[])
  1105. {
  1106. #pragma unused listitem, dialogid, pid, text
  1107. new line[128];
  1108. format(line, sizeof(line), "/setgroup %s", text);
  1109. if(response) { BroadcastCommand(playerid, line); }
  1110. }
  1111. Dialog_ShowCallback(playerid, using inline SetGroup, DIALOG_STYLE_INPUT, "Texture Studio", "Set grouped objects to group", "Ok", "Cancel");
  1112. }
  1113. case CLICK_GROUP_SELECTGROUP:
  1114. {
  1115. inline SelectGroup(pid, dialogid, response, listitem, string:text[])
  1116. {
  1117. #pragma unused listitem, dialogid, pid, text
  1118. new line[128];
  1119. format(line, sizeof(line), "/selectgroup %s", text);
  1120. if(response) { BroadcastCommand(playerid, line); }
  1121. }
  1122. Dialog_ShowCallback(playerid, using inline SelectGroup, DIALOG_STYLE_INPUT, "Texture Studio", "Input group to select", "Ok", "Cancel");
  1123. }
  1124. case CLICK_GROUP_GDELETE:
  1125. {
  1126. inline ConfirmGDelete(pid, dialogid, response, listitem, string:text[])
  1127. {
  1128. #pragma unused listitem, dialogid, pid, text
  1129. if(response) { BroadcastCommand(playerid, "/gdelete"); }
  1130. }
  1131. Dialog_ShowCallback(playerid, using inline ConfirmGDelete, DIALOG_STYLE_MSGBOX, "Texture Studio", "Are you sure you want to delete all objects in this group?", "Ok", "Cancel");
  1132. }
  1133. case CLICK_GROUP_EDIT:
  1134. {
  1135. // Force cancel
  1136. PlayerCancelSelectGUITextDraw(playerid, true);
  1137. // csel mode (We need to delay to use this mode effectively)
  1138. SetTimerEx("DelayGEdit", 1000, false, "i", playerid);
  1139. }
  1140. case CLICK_GROUP_INFRONT: { BroadcastCommand(playerid, "/ginfront"); }
  1141. }
  1142. return 1;
  1143. }
  1144. new list[4096];
  1145. // Submenu group Prefabs
  1146. OnGUIClick:SubMenuGroupPF(playerid, group, gindex, pindex)
  1147. {
  1148. switch(group)
  1149. {
  1150. case EXIT_GUI_MENU: { PlayerHideGUIMenu(playerid, PlayerSubMenu[playerid]); }
  1151. case CLICK_GROUP_GPREFAB: { BroadcastCommand(playerid, "/gprefab"); }
  1152. case CLICK_GROUP_LOADPF:
  1153. {
  1154. new dir:dHandle = dir_open("./scriptfiles/tstudio/PreFabs/");
  1155. new item[40], type;
  1156. new extension[3];
  1157. new total;
  1158. list[0] = '\0';
  1159. // Create a load list
  1160. while(dir_list(dHandle, item, type))
  1161. {
  1162. if(type != FM_DIR)
  1163. {
  1164. // We need to check extension
  1165. if(strlen(item) > 3)
  1166. {
  1167. format(extension, sizeof(extension), "%s%s", item[strlen(item) - 2],item[strlen(item) - 1]);
  1168. // File is apparently a db
  1169. if(!strcmp(extension, "db"))
  1170. {
  1171. strmid(item, item, 0, strlen(item)-3, 40);
  1172. format(list, sizeof(list), "%s%s\n", list, item);
  1173. total++;
  1174. }
  1175. }
  1176. }
  1177. }
  1178. if(total == 0) SendClientMessage(playerid, STEALTH_YELLOW, "There are no prefabs to list!");
  1179. else
  1180. {
  1181. inline SelectPrefab(pid, dialogid, response, listitem, string:text[])
  1182. {
  1183. #pragma unused listitem, dialogid, pid, text
  1184. if(response)
  1185. {
  1186. new line[128];
  1187. format(line, sizeof(line), "/prefab %s", text);
  1188. BroadcastCommand(playerid, line);
  1189. }
  1190. }
  1191. Dialog_ShowCallback(playerid, using inline SelectPrefab, DIALOG_STYLE_LIST, "Texture Studio - Load Prefab", list, "Ok", "Cancel");
  1192. }
  1193. }
  1194. case CLICK_GROUP_LOADZPF:
  1195. {
  1196. new dir:dHandle = dir_open("./scriptfiles/tstudio/PreFabs/");
  1197. new item[40], type;
  1198. new extension[3];
  1199. new total;
  1200. // Create a load list
  1201. while(dir_list(dHandle, item, type))
  1202. {
  1203. if(type != FM_DIR)
  1204. {
  1205. // We need to check extension
  1206. if(strlen(item) > 3)
  1207. {
  1208. format(extension, sizeof(extension), "%s%s", item[strlen(item) - 2],item[strlen(item) - 1]);
  1209. // File is apparently a db
  1210. if(!strcmp(extension, "db"))
  1211. {
  1212. strmid(item, item, 0, strlen(item)-3, 40);
  1213. format(list, sizeof(list), "%s%s\n", list, item);
  1214. total++;
  1215. }
  1216. }
  1217. }
  1218. }
  1219. if(total == 0) SendClientMessage(playerid, STEALTH_YELLOW, "There are no prefabs to list!");
  1220. else
  1221. {
  1222. inline SelectLoadZ(pid, dialogid, response, listitem, string:text[])
  1223. {
  1224. #pragma unused listitem, dialogid, pid, text
  1225. if(response)
  1226. {
  1227. inline ChooseZ(zpid, zdialogid, zresponse, zlistitem, string:ztext[])
  1228. {
  1229. #pragma unused zlistitem, zdialogid, zpid, ztext
  1230. if(zresponse)
  1231. {
  1232. new Float:zheight;
  1233. if(!sscanf(ztext, "f", zheight))
  1234. {
  1235. new line[128];
  1236. format(line, sizeof(line), "/prefabsetz %s %f", text, zheight);
  1237. BroadcastCommand(playerid, line);
  1238. }
  1239. }
  1240. }
  1241. Dialog_ShowCallback(playerid, using inline ChooseZ, DIALOG_STYLE_INPUT, "Texture Studio - Set Prefab Load Z", "Enter the load Z-Offset for this prefab", "Ok", "Cancel");
  1242. }
  1243. }
  1244. Dialog_ShowCallback(playerid, using inline SelectLoadZ, DIALOG_STYLE_LIST, "Texture Studio - Load Prefab", list, "Ok", "Cancel");
  1245. }
  1246. }
  1247. }
  1248. return 1;
  1249. }
  1250. ////////////////////////////////////////////////////////////////////////////////
  1251. forward DelayLSel(playerid);
  1252. public DelayLSel(playerid) { if(IsPlayerConnected(playerid)) BroadcastCommand(playerid, "/lsel"); }
  1253. forward DelayCSel(playerid);
  1254. public DelayCSel(playerid) { if(IsPlayerConnected(playerid)) BroadcastCommand(playerid, "/csel"); }
  1255. forward DelayGSel(playerid);
  1256. public DelayGSel(playerid) { if(IsPlayerConnected(playerid)) BroadcastCommand(playerid, "/gsel"); }
  1257. forward DelayEditObject(playerid);
  1258. public DelayEditObject(playerid) { if(IsPlayerConnected(playerid)) BroadcastCommand(playerid, "/editobject"); }
  1259. forward DelayEditPivot(playerid);
  1260. public DelayEditPivot(playerid) { if(IsPlayerConnected(playerid)) BroadcastCommand(playerid, "/pivot"); }
  1261. forward DelayGEdit(playerid);
  1262. public DelayGEdit(playerid) { if(IsPlayerConnected(playerid)) BroadcastCommand(playerid, "/editgroup"); }
  1263. public OnPlayerObjectSelectChange(playerid, index)
  1264. {
  1265. UpdatePlayerOSelText(playerid);
  1266. return 1;
  1267. }
  1268. public OnObjectUpdatePos(playerid, index)
  1269. {
  1270. UpdatePlayerOSelText(playerid);
  1271. return 1;
  1272. }
  1273. tsfunc UpdatePlayerOSelText(playerid)
  1274. {
  1275. if(CurrObject[playerid] == -1)
  1276. {
  1277. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][0], "X:0.0");
  1278. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][1], "Y:0.0");
  1279. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][2], "Z:0.0");
  1280. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][3], "RX:0.0");
  1281. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][4], "RY:0.0");
  1282. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][5], "RZ:0.0");
  1283. }
  1284. else
  1285. {
  1286. new line[16];
  1287. if(ObjectData[CurrObject[playerid]][oAttachedVehicle] == -1)
  1288. {
  1289. format(line, sizeof(line), "X:%0.2f", ObjectData[CurrObject[playerid]][oX]);
  1290. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][0], line);
  1291. format(line, sizeof(line), "Y:%0.2f", ObjectData[CurrObject[playerid]][oY]);
  1292. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][1], line);
  1293. format(line, sizeof(line), "Z:%0.2f", ObjectData[CurrObject[playerid]][oZ]);
  1294. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][2], line);
  1295. format(line, sizeof(line), "RX:%0.2f", ObjectData[CurrObject[playerid]][oRX]);
  1296. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][3], line);
  1297. format(line, sizeof(line), "RY:%0.2f", ObjectData[CurrObject[playerid]][oRY]);
  1298. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][4], line);
  1299. format(line, sizeof(line), "RZ:%0.2f", ObjectData[CurrObject[playerid]][oRZ]);
  1300. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][5], line);
  1301. }
  1302. else
  1303. {
  1304. new index = ObjectData[CurrObject[playerid]][oAttachedVehicle];
  1305. new refindex = GetCarObjectRefIndex(index, CurrObject[playerid]);
  1306. format(line, sizeof(line), "X:%0.2f", CarData[index][COX][refindex]);
  1307. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][0], line);
  1308. format(line, sizeof(line), "Y:%0.2f", CarData[index][COY][refindex]);
  1309. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][1], line);
  1310. format(line, sizeof(line), "Z:%0.2f", CarData[index][COZ][refindex]);
  1311. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][2], line);
  1312. format(line, sizeof(line), "RX:%0.2f", CarData[index][CORX][refindex]);
  1313. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][3], line);
  1314. format(line, sizeof(line), "RY:%0.2f", CarData[index][CORY][refindex]);
  1315. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][4], line);
  1316. format(line, sizeof(line), "RZ:%0.2f", CarData[index][CORZ][refindex]);
  1317. PlayerGUISetPlayerText(playerid, PlayerObjectMenu[playerid], CurrObjectPosition[playerid][5], line);
  1318. }
  1319. }
  1320. return 1;
  1321. }
  1322. tsfunc UpdatePlayerGSelText(playerid)
  1323. {
  1324. new Float:x, Float:y, Float:z;
  1325. if(!GetGroupCenter(playerid, x, y, z))
  1326. {
  1327. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], CurrGroupPosition[playerid][0], "X:0.0");
  1328. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], CurrGroupPosition[playerid][1], "Y:0.0");
  1329. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], CurrGroupPosition[playerid][2], "Z:0.0");
  1330. }
  1331. else
  1332. {
  1333. new line[16];
  1334. format(line, sizeof(line), "X:%0.2f", x);
  1335. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], CurrGroupPosition[playerid][0], line);
  1336. format(line, sizeof(line), "Y:%0.2f", y);
  1337. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], CurrGroupPosition[playerid][1], line);
  1338. format(line, sizeof(line), "Z:%0.2f", z);
  1339. PlayerGUISetPlayerText(playerid, PlayerGroupMenu[playerid], CurrGroupPosition[playerid][2], line);
  1340. }
  1341. return 1;
  1342. }
  1343. ////////////////////////////////////////////////////////////////////////////////
  1344. // Commands
  1345. #define MAX_CLICK_BINDS 10
  1346. #define MAX_BIND_TEXT_LENGTH 16
  1347. #define MAX_BINDS_PER_BIND 10
  1348. #define MAX_BIND_LENGTH 128
  1349. static bool:BindUsed[MAX_CLICK_BINDS];
  1350. static CommandBindText[MAX_CLICK_BINDS][MAX_BIND_TEXT_LENGTH];
  1351. static CommandBindData[MAX_CLICK_BINDS][MAX_BINDS_PER_BIND][MAX_BIND_LENGTH];
  1352. static tmpCommandBindText[MAX_BIND_TEXT_LENGTH];
  1353. static tmpCommandBindData[MAX_BINDS_PER_BIND][MAX_BIND_LENGTH];
  1354. YCMD:runbind(playerid, arg[], help)
  1355. {
  1356. if(help)
  1357. {
  1358. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  1359. SendClientMessage(playerid, STEALTH_GREEN, "Run a saved bind. Used to simplify a repeated process.");
  1360. return 1;
  1361. }
  1362. NoEditingMode(playerid);
  1363. if(isnull(arg)) return SendClientMessage(playerid, STEALTH_YELLOW, "Usage /runbind <0-9>");
  1364. new bind = strval(arg);
  1365. if(bind < 0 || bind > (MAX_CLICK_BINDS - 1)) return SendClientMessage(playerid, STEALTH_YELLOW, "Usage /runbind <0-9>");
  1366. if(!BindUsed[bind]) return SendClientMessage(playerid, STEALTH_YELLOW, "That bind is not used, type /bindeditor to create one");
  1367. // Broadcast commands from command binds
  1368. for(new i = 0; i < MAX_BINDS_PER_BIND; i++)
  1369. {
  1370. if(!isnull(CommandBindData[bind][i])) BroadcastCommand(playerid, CommandBindData[bind][i]);
  1371. }
  1372. return 1;
  1373. }
  1374. /*
  1375. YCMD:makebind(playerid, arg[], help)
  1376. {
  1377. if(help)
  1378. {
  1379. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  1380. SendClientMessage(playerid, STEALTH_GREEN, "Create a bind out of the specified number of last commands.");
  1381. return 1;
  1382. }
  1383. new index, range;
  1384. sscanf(arg, "iI(1)", index, range);
  1385. if(0 > index > MAX_CLICK_BINDS) return SendClientMessage(playerid, STEALTH_YELLOW, "Usage /makebind <Bind Index (0-9)> <Number of Commands (1-10)>");
  1386. if(1 > range > MAX_COMMAND_BUFFER) return SendClientMessage(playerid, STEALTH_YELLOW, "Usage /makebind <Bind Index (0-9)> <Number of Commands (1-10)>");
  1387. for(new x; x < range; x++) {
  1388. //CommandBindData[index][x] = CommandBuffer[playerid][range - 1 - x];
  1389. format(CommandBindData[index][x], 128, "%s", CommandBuffer[playerid][range - 1 - x]);
  1390. printf("%i: %s", x, CommandBindData[index][x]);
  1391. }
  1392. BindUsed[index] = true;
  1393. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  1394. SendClientMessage(playerid, STEALTH_GREEN, sprintf("%i is now the last %i commands", index, range));
  1395. return 1;
  1396. }
  1397. */
  1398. YCMD:bindeditor(playerid, arg[], help)
  1399. {
  1400. if(help)
  1401. {
  1402. SendClientMessage(playerid, STEALTH_ORANGE, "______________________________________________");
  1403. SendClientMessage(playerid, STEALTH_GREEN, "Edit currently saved binds.");
  1404. return 1;
  1405. }
  1406. NoEditingMode(playerid);
  1407. new line[1024];
  1408. // Show bind dialog
  1409. inline ChooseBind(cpid, cdialogid, cresponse, clistitem, string:ctext[])
  1410. {
  1411. #pragma unused clistitem, cdialogid, cpid, ctext
  1412. if(cresponse)
  1413. {
  1414. // Edit option for bind
  1415. inline ChooseEditOption(opid, odialogid, oresponse, olistitem, string:otext[])
  1416. {
  1417. #pragma unused olistitem, odialogid, opid, otext
  1418. if(oresponse)
  1419. {
  1420. // Change text
  1421. if(olistitem == 0)
  1422. {
  1423. inline SetBindName(spid, sdialogid, sresponse, slistitem, string:stext[])
  1424. {
  1425. #pragma unused slistitem, sdialogid, spid, stext
  1426. if(sresponse)
  1427. {
  1428. new len = strlen(stext);
  1429. if(len > 0 && len < 16)
  1430. {
  1431. format(CommandBindText[clistitem], MAX_BIND_LENGTH, "%s", stext);
  1432. if(clistitem <= sizeof(BindElementIDS))
  1433. {
  1434. GUISetPlayerText(MainMenu, BindElementIDS[clistitem], CommandBindText[clistitem]);
  1435. }
  1436. BindUsed[clistitem] = true;
  1437. sqlite_DeleteBindString(clistitem);
  1438. sqlite_InsertBindString(clistitem);
  1439. }
  1440. else
  1441. {
  1442. if(len < 1) SendClientMessage(playerid, STEALTH_YELLOW, "Bind name too short");
  1443. else SendClientMessage(playerid, STEALTH_YELLOW, "Bind name too long");
  1444. }
  1445. Dialog_ShowCallback(playerid, using inline ChooseEditOption, DIALOG_STYLE_LIST, "Texture Studio - Choose Edit Type", "Edit Bind Name\nEdit Bind Text\nDelete Bind", "Ok", "Cancel");
  1446. }
  1447. Dialog_ShowCallback(playerid, using inline ChooseEditOption, DIALOG_STYLE_LIST, "Texture Studio - Choose Edit Type", "Edit Bind Name\nEdit Bind Text\nDelete Bind", "Ok", "Cancel");
  1448. }
  1449. Dialog_ShowCallback(playerid, using inline SetBindName, DIALOG_STYLE_INPUT, "Texture Studio - Edit Bind Text", "Set Bind Name", "Ok", "Cancel");
  1450. }
  1451. else if(olistitem == 1)
  1452. {
  1453. if(BindUsed[clistitem])
  1454. {
  1455. inline EditLine(epid, edialogid, eresponse, elistitem, string:etext[])
  1456. {
  1457. #pragma unused elistitem, edialogid, epid, etext
  1458. if(eresponse)
  1459. {
  1460. inline SetBind(spid, sdialogid, sresponse, slistitem, string:stext[])
  1461. {
  1462. #pragma unused slistitem, sdialogid, spid, stext
  1463. if(sresponse)
  1464. {
  1465. format(CommandBindData[clistitem][elistitem], MAX_BIND_LENGTH, "%s", stext);
  1466. sqlite_DeleteBindString(clistitem);
  1467. sqlite_InsertBindString(clistitem);
  1468. }
  1469. format(line, sizeof(line), "");
  1470. for(new i = 0; i < MAX_BINDS_PER_BIND; i++) { format(line, sizeof(line), "%s%i: %s\n", line, i, CommandBindData[clistitem][i]); }
  1471. Dialog_ShowCallback(playerid, using inline EditLine, DIALOG_STYLE_LIST, "Texture Studio - Edit Bind Text", line, "Ok", "Cancel");
  1472. }
  1473. Dialog_ShowCallback(playerid, using inline SetBind, DIALOG_STYLE_INPUT, "Texture Studio - Edit Bind Text", "Set Bind", "Ok", "Cancel");
  1474. }
  1475. }
  1476. format(line, sizeof(line), "");
  1477. for(new i = 0; i < MAX_BINDS_PER_BIND; i++) { format(line, sizeof(line), "%s%i: %s\n", line, i, CommandBindData[clistitem][i]); }
  1478. Dialog_ShowCallback(playerid, using inline EditLine, DIALOG_STYLE_LIST, "Texture Studio - Edit Bind Text", line, "Ok", "Cancel");
  1479. }
  1480. else
  1481. {
  1482. SendClientMessage(playerid, STEALTH_YELLOW, "You must set a name to edit this bind!");
  1483. Dialog_ShowCallback(playerid, using inline ChooseEditOption, DIALOG_STYLE_LIST, "Texture Studio - Choose Edit Type", "Edit Bind Name\nEdit Bind Text\nDelete Bind", "Ok", "Cancel");
  1484. }
  1485. }
  1486. else if(olistitem == 2)
  1487. {
  1488. inline DeleteBind(dpid, dialogid, dresponse, dlistitem, string:dtext[])
  1489. {
  1490. #pragma unused dlistitem, dialogid, dpid, dtext
  1491. if(dresponse)
  1492. {
  1493. sqlite_DeleteBindString(clistitem);
  1494. BindUsed[clistitem] = false;
  1495. format(CommandBindText[clistitem], MAX_BIND_TEXT_LENGTH, "");
  1496. if(clistitem <= sizeof(BindElementIDS))
  1497. {
  1498. new TDText[16];
  1499. format(TDText, sizeof(TDText), "User Bind %0", clistitem);
  1500. GUISetPlayerText(MainMenu, BindElementIDS[clistitem], TDText);
  1501. }
  1502. for(new i = 0; i < MAX_BINDS_PER_BIND; i++) { format (CommandBindData[clistitem][i], MAX_BIND_LENGTH, ""); }
  1503. format(line, sizeof(line), "");
  1504. for(new i = 0; i < MAX_CLICK_BINDS; i++)
  1505. {
  1506. if(BindUsed[i]) format(line, sizeof(line), "%s%s\n", line, CommandBindText[i]);
  1507. else format(line, sizeof(line), "%sUnused\n", line);
  1508. }
  1509. Dialog_ShowCallback(playerid, using inline ChooseBind, DIALOG_STYLE_LIST, "Texture Studio - Edit Binds", line, "Ok", "Cancel");
  1510. }
  1511. else Dialog_ShowCallback(playerid, using inline ChooseEditOption, DIALOG_STYLE_LIST, "Texture Studio - Choose Edit Type", "Edit Bind Name\nEdit Bind Text\nDelete Bind", "Ok", "Cancel");
  1512. }
  1513. Dialog_ShowCallback(playerid, using inline DeleteBind, DIALOG_STYLE_MSGBOX, "Texture Studio - Delete", "Delete this bind?", "Ok", "Cancel");
  1514. }
  1515. }
  1516. }
  1517. Dialog_ShowCallback(playerid, using inline ChooseEditOption, DIALOG_STYLE_LIST, "Texture Studio - Choose Edit Type", "Edit Bind Name\nEdit Bind Text\nDelete Bind", "Ok", "Cancel");
  1518. }
  1519. }
  1520. format(line, sizeof(line), "");
  1521. for(new i = 0; i < MAX_CLICK_BINDS; i++)
  1522. {
  1523. if(BindUsed[i]) format(line, sizeof(line), "%s%s\n", line, CommandBindText[i]);
  1524. else format(line, sizeof(line), "%sUnused\n", line);
  1525. }
  1526. Dialog_ShowCallback(playerid, using inline ChooseBind, DIALOG_STYLE_LIST, "Texture Studio - Edit Binds", line, "Ok", "Cancel");
  1527. return 1;
  1528. }
  1529. new LoadBindString[512];
  1530. static DBStatement:loadkeybindsstmt;
  1531. sqlite_LoadBindString()
  1532. {
  1533. for(new i = 0; i < MAX_CLICK_BINDS; i++) { BindUsed[i] = false; }
  1534. if(!LoadBindString[0])
  1535. {
  1536. strimplode(" ",
  1537. LoadBindString,
  1538. sizeof(LoadBindString),
  1539. "CREATE TABLE IF NOT EXISTS `KeyBinds`",
  1540. "(IndexID INTEGER,",
  1541. "BindName TEXT,",
  1542. "Bind_1 TEXT,",
  1543. "Bind_2 TEXT,",
  1544. "Bind_3 TEXT,",
  1545. "Bind_4 TEXT,",
  1546. "Bind_5 TEXT,",
  1547. "Bind_6 TEXT,",
  1548. "Bind_7 TEXT,",
  1549. "Bind_8 TEXT,",
  1550. "Bind_9 TEXT,",
  1551. "Bind_10 TEXT);"
  1552. );
  1553. }
  1554. db_exec(SystemDB, LoadBindString);
  1555. loadkeybindsstmt = db_prepare(SystemDB, "SELECT * FROM `KeyBinds`");
  1556. new index;
  1557. // Bind our results
  1558. stmt_bind_result_field(loadkeybindsstmt, 0, DB::TYPE_INT, index);
  1559. stmt_bind_result_field(loadkeybindsstmt, 1, DB::TYPE_STRING, tmpCommandBindText, 16);
  1560. stmt_bind_result_field(loadkeybindsstmt, 2, DB::TYPE_STRING, tmpCommandBindData[0], 128);
  1561. stmt_bind_result_field(loadkeybindsstmt, 3, DB::TYPE_STRING, tmpCommandBindData[1], 128);
  1562. stmt_bind_result_field(loadkeybindsstmt, 4, DB::TYPE_STRING, tmpCommandBindData[2], 128);
  1563. stmt_bind_result_field(loadkeybindsstmt, 5, DB::TYPE_STRING, tmpCommandBindData[3], 128);
  1564. stmt_bind_result_field(loadkeybindsstmt, 6, DB::TYPE_STRING, tmpCommandBindData[4], 128);
  1565. stmt_bind_result_field(loadkeybindsstmt, 7, DB::TYPE_STRING, tmpCommandBindData[5], 128);
  1566. stmt_bind_result_field(loadkeybindsstmt, 8, DB::TYPE_STRING, tmpCommandBindData[6], 128);
  1567. stmt_bind_result_field(loadkeybindsstmt, 9, DB::TYPE_STRING, tmpCommandBindData[7], 128);
  1568. stmt_bind_result_field(loadkeybindsstmt, 10, DB::TYPE_STRING, tmpCommandBindData[8], 128);
  1569. stmt_bind_result_field(loadkeybindsstmt, 11, DB::TYPE_STRING, tmpCommandBindData[9], 128);
  1570. // Execute query
  1571. if(stmt_execute(loadkeybindsstmt))
  1572. {
  1573. while(stmt_fetch_row(loadkeybindsstmt))
  1574. {
  1575. BindUsed[index] = true;
  1576. format(CommandBindText[index], 16, "%s", tmpCommandBindText);
  1577. if(index <= sizeof(BindElementIDS))
  1578. {
  1579. GUISetPlayerText(MainMenu, BindElementIDS[index], CommandBindText[index]);
  1580. }
  1581. for(new i = 0; i < MAX_BINDS_PER_BIND; i++) { CommandBindData[index][i] = tmpCommandBindData[i]; }
  1582. }
  1583. stmt_close(loadkeybindsstmt);
  1584. return 1;
  1585. }
  1586. stmt_close(loadkeybindsstmt);
  1587. return 0;
  1588. }
  1589. // Insert Key bind
  1590. static DBStatement:insertkeybindsstmt;
  1591. new InsertBindString[512];
  1592. sqlite_InsertBindString(index)
  1593. {
  1594. if(!InsertBindString[0])
  1595. {
  1596. strimplode(" ",
  1597. InsertBindString,
  1598. sizeof(InsertBindString),
  1599. "CREATE TABLE IF NOT EXISTS `KeyBinds`",
  1600. "(IndexID INTEGER,",
  1601. "BindName TEXT,",
  1602. "Bind_1 TEXT,",
  1603. "Bind_2 TEXT,",
  1604. "Bind_3 TEXT,",
  1605. "Bind_4 TEXT,",
  1606. "Bind_5 TEXT,",
  1607. "Bind_6 TEXT,",
  1608. "Bind_7 TEXT,",
  1609. "Bind_8 TEXT,",
  1610. "Bind_9 TEXT,",
  1611. "Bind_10 TEXT);"
  1612. );
  1613. strimplode(" ",
  1614. InsertBindString,
  1615. sizeof(InsertBindString),
  1616. "INSERT INTO `KeyBinds`",
  1617. "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
  1618. );
  1619. insertkeybindsstmt = db_prepare(SystemDB, InsertBindString);
  1620. }
  1621. // Bind our results
  1622. stmt_bind_value(insertkeybindsstmt, 0, DB::TYPE_INT, index);
  1623. stmt_bind_value(insertkeybindsstmt, 1, DB::TYPE_STRING, CommandBindText[index], 16);
  1624. stmt_bind_value(insertkeybindsstmt, 2, DB::TYPE_STRING, CommandBindData[index][0], 128);
  1625. stmt_bind_value(insertkeybindsstmt, 3, DB::TYPE_STRING, CommandBindData[index][1], 128);
  1626. stmt_bind_value(insertkeybindsstmt, 4, DB::TYPE_STRING, CommandBindData[index][2], 128);
  1627. stmt_bind_value(insertkeybindsstmt, 5, DB::TYPE_STRING, CommandBindData[index][3], 128);
  1628. stmt_bind_value(insertkeybindsstmt, 6, DB::TYPE_STRING, CommandBindData[index][4], 128);
  1629. stmt_bind_value(insertkeybindsstmt, 7, DB::TYPE_STRING, CommandBindData[index][5], 128);
  1630. stmt_bind_value(insertkeybindsstmt, 8, DB::TYPE_STRING, CommandBindData[index][6], 128);
  1631. stmt_bind_value(insertkeybindsstmt, 9, DB::TYPE_STRING, CommandBindData[index][7], 128);
  1632. stmt_bind_value(insertkeybindsstmt, 10, DB::TYPE_STRING, CommandBindData[index][8], 128);
  1633. stmt_bind_value(insertkeybindsstmt, 11, DB::TYPE_STRING, CommandBindData[index][9], 128);
  1634. stmt_execute(insertkeybindsstmt);
  1635. return 1;
  1636. }
  1637. sqlite_DeleteBindString(index)
  1638. {
  1639. new q[128];
  1640. format(q, sizeof(q), "DELETE FROM `KeyBinds` WHERE `IndexID` = %i", index);
  1641. db_free_result(db_query(SystemDB, q));
  1642. return 1;
  1643. }