norn

nRadio for SA-MP 0.3d

Oct 21st, 2011
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.37 KB | None | 0 0
  1. /*
  2. __________ .___.__
  3. ____\______ \_____ __| _/|__| ____
  4. / \| _/\__ \ / __ | | |/ _ \
  5. | | \ | \ / __ \_/ /_/ | | ( <_> )
  6. |___| /____|_ /(____ /\____ | |__|\____/ v0.1
  7. \/ \/ \/ \/
  8.  
  9. Credits:
  10. Incognito (http://forum.sa-mp.com/member.php?u=925) (Audio Plugin)
  11. Norn (Scott Davey) (http://forum.sa-mp.com/member.php?u=33812)
  12.  
  13. Useful Links:
  14. http://www.internet-radio.org.uk (Internet Radio List)
  15. http://forum.sa-mp.com/showthread.php?t=82162 (Audio Plugin)
  16. */
  17.  
  18. #include <a_samp>
  19.  
  20. #define NRMAX_RADIOS 500
  21. #define NRMAX_CATEGORIES 30
  22. #define NRINVALID_RADIO_ID -1
  23. #define NRMAX_CATEGORY_LENGTH 75
  24. #define NRMAX_RADIO_LENGTH 75
  25. #define NRMAX_STREAM_URL_LENGTH 128
  26. #define NRCATEGORIES_DIALOG_ID 1553
  27. #define NRRADIO_DIALOG_ID 1552
  28.  
  29. enum nRadioItem
  30. {
  31. nrCategoryID,
  32. nrTitle[NRMAX_RADIO_LENGTH],
  33. nrStreamURL[NRMAX_STREAM_URL_LENGTH]
  34. }
  35. new RadioItem[NRMAX_RADIOS][nRadioItem], nCategories[NRMAX_RADIOS][NRMAX_CATEGORY_LENGTH], nrCATEGORY_COUNT = 0, nrRADIO_COUNT = 0, nrDIALOG_STRING[1028], nrTextString[128];
  36.  
  37. forward RadioAdd(categoryid, name[NRMAX_RADIO_LENGTH], streamurl[NRMAX_STREAM_URL_LENGTH]);
  38. forward RadioAddCategory(name[NRMAX_CATEGORY_LENGTH]);
  39. forward RadioInitDialog(playerid);
  40. forward RadioStop(playerid);
  41. forward RadioPlay(playerid, radioid);
  42. forward DeleteCategory(categoryid);
  43. forward ModifyCategory(categoryid, name[NRMAX_CATEGORY_LENGTH]);
  44. forward ModifyRadio(radioid, name[NRMAX_RADIO_LENGTH], streamurl[NRMAX_STREAM_URL_LENGTH]);
  45. forward DeleteRadio(radioid);
  46. forward RadioCountFromCategory(categoryid);
  47. forward CategoryIDFromDialogOrder(listitem);
  48. forward RadioCategoryBrowse(playerid, listitem);
  49. forward RadioIDFromDialogOrder(playerid, listitem);
  50. forward nRadio_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
  51.  
  52. public RadioAddCategory(name[NRMAX_CATEGORY_LENGTH])
  53. {
  54. new CATEGORY_ID = NRINVALID_RADIO_ID, bool:breakloop = false;
  55. if(strlen(name) >= 1 && strlen(name) <= NRMAX_CATEGORY_LENGTH) {
  56. if(nrCATEGORY_COUNT < NRMAX_CATEGORIES) {
  57. for(new i=0;i<NRMAX_CATEGORIES;i++) {
  58. if(!breakloop) {
  59. if(!strlen(nCategories[i])) {
  60. format(nCategories[i], NRMAX_CATEGORY_LENGTH, name);
  61. CATEGORY_ID = i;
  62. printf("[nRadio:] Category ID %d (%s) created.", CATEGORY_ID, nCategories[i]);
  63. nrCATEGORY_COUNT++;
  64. breakloop = true;
  65. }
  66. }
  67. }
  68. }
  69. }
  70. return CATEGORY_ID;
  71. }
  72.  
  73.  
  74. public RadioAdd(categoryid, name[NRMAX_RADIO_LENGTH], streamurl[NRMAX_STREAM_URL_LENGTH])
  75. {
  76. new bool:breakloop = false, RADIO_ID = -1;
  77. if(strlen(name) >= 1 && strlen(name) <= NRMAX_RADIO_LENGTH) {
  78. if(nrRADIO_COUNT < NRMAX_RADIOS) {
  79. for(new i=0;i<NRMAX_RADIOS;i++) {
  80. if(!breakloop) {
  81. if(!strlen(RadioItem[i][nrTitle])) {
  82. RadioItem[i][nrCategoryID] = categoryid;
  83. format(RadioItem[i][nrTitle], NRMAX_RADIO_LENGTH, name);
  84. format(RadioItem[i][nrStreamURL], NRMAX_STREAM_URL_LENGTH, streamurl);
  85. printf("[nRadio:] Radio ID %d (%s) created and attached to %s.", i, RadioItem[i][nrTitle], nCategories[categoryid]);
  86. breakloop = true;
  87. nrRADIO_COUNT++;
  88. }
  89. }
  90. }
  91. }
  92. }
  93. return RADIO_ID;
  94. }
  95.  
  96.  
  97. public RadioInitDialog(playerid)
  98. {
  99. format(nrDIALOG_STRING, sizeof(nrDIALOG_STRING), "");
  100. for(new i=0;i<nrCATEGORY_COUNT;i++) {
  101. if(!i) {
  102. if(strlen(nCategories[i]) >= 1)
  103. format(nrDIALOG_STRING, sizeof(nrDIALOG_STRING), nCategories[i]);
  104. }
  105. else {
  106. if(strlen(nCategories[i]) >= 1)
  107. format(nrDIALOG_STRING, sizeof(nrDIALOG_STRING), "%s\n%s", nrDIALOG_STRING, nCategories[i]);
  108. }
  109. }
  110. if(strlen(nrDIALOG_STRING) >= 1) { ShowPlayerDialog(playerid, NRCATEGORIES_DIALOG_ID, DIALOG_STYLE_LIST, "Radio - Browse Categories", nrDIALOG_STRING, "Browse", "Cancel"); }
  111. return true;
  112. }
  113.  
  114.  
  115. stock RadioCategoryNameFromID(categoryid)
  116. {
  117. new category_name[NRMAX_CATEGORY_LENGTH];
  118. format(category_name, sizeof(category_name), nCategories[categoryid]);
  119. return category_name;
  120. }
  121.  
  122.  
  123. stock RadioNameFromID(radioid)
  124. {
  125. new radio_name[NRMAX_RADIO_LENGTH];
  126. format(radio_name, sizeof(radio_name), RadioItem[radioid][nrTitle]);
  127. return radio_name;
  128. }
  129.  
  130.  
  131. public RadioStop(playerid)
  132. {
  133. StopAudioStreamForPlayer(playerid);
  134. return true;
  135. }
  136.  
  137. public RadioPlay(playerid, radioid)
  138. {
  139. RadioStop(playerid);
  140. PlayAudioStreamForPlayer(playerid, RadioItem[radioid][nrStreamURL]);
  141. return true;
  142. }
  143.  
  144.  
  145. public DeleteCategory(categoryid)
  146. {
  147. format(nCategories[categoryid], NRMAX_CATEGORY_LENGTH, "");
  148. for(new i=0;i<nrRADIO_COUNT;i++) {
  149. if(RadioItem[i][nrCategoryID] == categoryid && strlen(RadioItem[i][nrTitle]) >= 1) {
  150. // Deleting all the radios attached to the category so the slot can be used.
  151. format(RadioItem[i][nrTitle], NRMAX_RADIO_LENGTH, "");
  152. nrRADIO_COUNT--;
  153. }
  154. }
  155. nrCATEGORY_COUNT--;
  156. return true;
  157. }
  158.  
  159.  
  160. public ModifyCategory(categoryid, name[NRMAX_CATEGORY_LENGTH])
  161. {
  162. format(nCategories[categoryid], NRMAX_RADIO_LENGTH, name);
  163. return true;
  164. }
  165.  
  166.  
  167. public ModifyRadio(radioid, name[NRMAX_RADIO_LENGTH], streamurl[NRMAX_STREAM_URL_LENGTH])
  168. {
  169. format(RadioItem[radioid][nrTitle], NRMAX_RADIO_LENGTH, name);
  170. format(RadioItem[radioid][nrStreamURL], NRMAX_RADIO_LENGTH, streamurl);
  171. return true;
  172. }
  173.  
  174.  
  175. public DeleteRadio(radioid)
  176. {
  177. format(RadioItem[radioid][nrTitle], NRMAX_RADIO_LENGTH, "");
  178. nrRADIO_COUNT--;
  179. return true;
  180. }
  181.  
  182.  
  183. public RadioCountFromCategory(categoryid)
  184. {
  185. new count = 0;
  186. for(new i=0;i<nrRADIO_COUNT;i++) {
  187. if(RadioItem[i][nrCategoryID] == categoryid && strlen(RadioItem[i][nrTitle]) >= 1) {
  188. count++;
  189. }
  190. }
  191. return count;
  192. }
  193.  
  194.  
  195. public CategoryIDFromDialogOrder(listitem)
  196. {
  197. new current_array_id, bool:breakloop = false, id = -1;
  198. for(new i=0;i<nrCATEGORY_COUNT;i++) {
  199. if(strlen(nCategories[i]) >= 1) {
  200. if(!breakloop) {
  201. if(current_array_id == listitem) {
  202. id = i;
  203. breakloop = true;
  204. }
  205. current_array_id++;
  206. }
  207. }
  208. }
  209. return id;
  210. }
  211.  
  212.  
  213. public RadioIDFromDialogOrder(playerid, listitem)
  214. {
  215. new categoryid = GetPVarInt(playerid, "radioCategory"), current_array_id, bool:breakloop = false, id = -1;
  216. for(new i=0;i<nrRADIO_COUNT;i++) {
  217. if(RadioItem[i][nrCategoryID] == categoryid && strlen(RadioItem[i][nrTitle]) >= 1) {
  218. if(!breakloop) {
  219. if(current_array_id == listitem) {
  220. id = i;
  221. breakloop = true;
  222. }
  223. current_array_id++;
  224. }
  225. }
  226. }
  227. return id;
  228. }
  229.  
  230.  
  231. public RadioCategoryBrowse(playerid, listitem)
  232. {
  233. format(nrDIALOG_STRING, sizeof(nrDIALOG_STRING), "");
  234. new categoryid = CategoryIDFromDialogOrder(listitem);
  235. SetPVarInt(playerid, "radioCategory", categoryid);
  236. if(RadioCountFromCategory(categoryid) >= 1) {
  237. for(new i=0;i<nrRADIO_COUNT;i++) {
  238. if(RadioItem[i][nrCategoryID] == categoryid) {
  239. if(!i) {
  240. if(strlen(RadioItem[i][nrTitle]) >= 1)
  241. format(nrDIALOG_STRING, sizeof(nrDIALOG_STRING), RadioItem[i][nrTitle]);
  242. }
  243. else {
  244. if(strlen(RadioItem[i][nrTitle]) >= 1)
  245. format(nrDIALOG_STRING, sizeof(nrDIALOG_STRING), "%s\n%s", nrDIALOG_STRING, RadioItem[i][nrTitle]);
  246. }
  247. }
  248. }
  249. new dialog_title[100];
  250. format(dialog_title, sizeof(dialog_title), "Radio - %s", nCategories[categoryid]);
  251. if(strlen(nrDIALOG_STRING) >= 1) { ShowPlayerDialog(playerid, NRRADIO_DIALOG_ID, DIALOG_STYLE_LIST, dialog_title, nrDIALOG_STRING, "Stream", "Go Back"); }
  252. }
  253. else {
  254. format(nrTextString, sizeof(nrTextString), "[nRadio:] No stations exist in category ' %s '.", RadioCategoryNameFromID(categoryid));
  255. SendClientMessage(playerid, 0xFF0000FF, nrTextString);
  256. RadioInitDialog(playerid);
  257. }
  258. return true;
  259. }
  260.  
  261.  
  262. public nRadio_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  263. {
  264. switch(dialogid) {
  265. case NRRADIO_DIALOG_ID:
  266. {
  267. if(response) {
  268. new radioid = RadioIDFromDialogOrder(playerid, listitem);
  269. RadioPlay(playerid, radioid);
  270. format(nrTextString,sizeof(nrTextString),"[nRadio:] Stream for %s started.", RadioNameFromID(radioid));
  271. SendClientMessage(playerid, 0xADD8E6FF, nrTextString);
  272. }
  273. else {
  274. RadioInitDialog(playerid);
  275. }
  276. }
  277. case NRCATEGORIES_DIALOG_ID:
  278. {
  279. if(response) {
  280. RadioCategoryBrowse(playerid, listitem);
  281. }
  282. }
  283. }
  284. return 1;
  285. }
  286.  
  287.  
Advertisement
Add Comment
Please, Sign In to add comment