DynamicRadioStations.inc 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. // ---------------------------------------------------------------------
  2. // -------------------- Dynamic Radio Stations.inc ---------------------
  3. // ------------------------- (c) Jochemd 2012 --------------------------
  4. // ---------------------------------------------------------------------
  5. //------------------------------------------- Includes -------------------------------------------
  6. #include "YSI\y_hooks"
  7. //------------------------------------------- Macro's -------------------------------------------
  8. #define USE_TEXTDRAW_SET 2
  9. #define MAX_RADIO_STATIONS 20
  10. #define TEXTDRAW_DISAPPEAR_TIME 2000
  11. #define NAME_SIZE 30
  12. #define LINK_SIZE 70
  13. #define GetVehicleRadioStation(%1) v_VehicleInfo[%1][RadioPlaying]
  14. //------------------------------------------- Enumerations -------------------------------------------
  15. enum r_info
  16. {
  17. r_Name[NAME_SIZE],
  18. r_Link[LINK_SIZE]
  19. };
  20. enum v_info
  21. {
  22. RadioPlaying,
  23. Text:r_Draw
  24. };
  25. //------------------------------------------- Declarations -------------------------------------------
  26. new r_RadioInfo[MAX_RADIO_STATIONS][r_info];
  27. new v_VehicleInfo[MAX_VEHICLES][v_info];
  28. new RadioCount = 0;
  29. //------------------------------------------- Forwards -------------------------------------------
  30. forward HideRadioTextdraw(playerid, vehicleid);
  31. //------------------------------------------- Stocks -------------------------------------------
  32. stock IsPlayerInSameVehicle(playerid, asplayerid)
  33. {
  34. if(GetPlayerVehicleID(playerid) == GetPlayerVehicleID(asplayerid)) return 1;
  35. else return 0;
  36. }
  37. stock InitializeScript()
  38. {
  39. for(new v = 0; v < MAX_VEHICLES; v ++)
  40. {
  41. #if USE_TEXTDRAW_SET == 0
  42. v_VehicleInfo[v][r_Draw] = TextDrawCreate(309.000000, 9.000000, "Radio");
  43. TextDrawAlignment(v_VehicleInfo[v][r_Draw], 2);
  44. TextDrawBackgroundColor(v_VehicleInfo[v][r_Draw], 255);
  45. TextDrawFont(v_VehicleInfo[v][r_Draw], 1);
  46. TextDrawLetterSize(v_VehicleInfo[v][r_Draw], 0.500000, 1.500000);
  47. TextDrawColor(v_VehicleInfo[v][r_Draw], -1);
  48. TextDrawSetOutline(v_VehicleInfo[v][r_Draw], 1);
  49. TextDrawSetProportional(v_VehicleInfo[v][r_Draw], 1);
  50. #elseif USE_TEXTDRAW_SET == 1
  51. v_VehicleInfo[v][r_Draw] = TextDrawCreate(309.000000, 20.000000, "Radio");
  52. TextDrawAlignment(v_VehicleInfo[v][r_Draw], 2);
  53. TextDrawBackgroundColor(v_VehicleInfo[v][r_Draw], 255);
  54. TextDrawFont(v_VehicleInfo[v][r_Draw], 2);
  55. TextDrawLetterSize(v_VehicleInfo[v][r_Draw], 0.519999, 2.000000);
  56. TextDrawColor(v_VehicleInfo[v][r_Draw], -1384447745);
  57. TextDrawSetOutline(v_VehicleInfo[v][r_Draw], 1);
  58. TextDrawSetProportional(v_VehicleInfo[v][r_Draw], 1);
  59. #elseif USE_TEXTDRAW_SET == 2
  60. v_VehicleInfo[v][r_Draw] = TextDrawCreate(95.000000, 304.000000, "Listening to: ~n~~w~Radio");
  61. TextDrawAlignment(v_VehicleInfo[v][r_Draw], 2);
  62. TextDrawBackgroundColor(v_VehicleInfo[v][r_Draw], 255);
  63. TextDrawFont(v_VehicleInfo[v][r_Draw], 1);
  64. TextDrawLetterSize(v_VehicleInfo[v][r_Draw], 0.400000, 1.899999);
  65. TextDrawColor(v_VehicleInfo[v][r_Draw], 1002045439);
  66. TextDrawSetOutline(v_VehicleInfo[v][r_Draw], 1);
  67. TextDrawSetProportional(v_VehicleInfo[v][r_Draw], 1);
  68. #endif
  69. }
  70. AddRadioStation("Radio Off","Off",0);
  71. }
  72. stock AddRadioStation(name[NAME_SIZE], link[LINK_SIZE], m = 1)
  73. {
  74. if(RadioCount < MAX_RADIO_STATIONS)
  75. {
  76. format(r_RadioInfo[RadioCount][r_Name],NAME_SIZE,"%s",name);
  77. format(r_RadioInfo[RadioCount][r_Link],LINK_SIZE,"%s",link);
  78. if(m) printf("Dynamic Radio System: Created a radio station: \"ID %d\", Name: '%s'",RadioCount,name);
  79. RadioCount ++;
  80. return RadioCount -1;
  81. }
  82. else
  83. {
  84. printf("Error: Please increase MAX_RADIO_STATIONS, you are trying to create more than %d radio stations!",MAX_RADIO_STATIONS);
  85. return -1;
  86. }
  87. }
  88. stock SetRadioStation(vehicleid, stationid)
  89. {
  90. new timer = -1;
  91. v_VehicleInfo[vehicleid][RadioPlaying] = stationid;
  92. #if USE_TEXTDRAW_SET == 2
  93. new string[50];
  94. format(string,sizeof(string),"Listening to: ~n~~w~%s",r_RadioInfo[stationid][r_Name]);
  95. TextDrawSetString(v_VehicleInfo[vehicleid][r_Draw],string);
  96. #else
  97. TextDrawSetString(v_VehicleInfo[vehicleid][r_Draw],r_RadioInfo[stationid][r_Name]);
  98. #endif
  99. for(new i = 0; i < MAX_PLAYERS; i ++)
  100. {
  101. if(IsPlayerConnected(i))
  102. {
  103. if(GetPlayerVehicleID(i) == vehicleid)
  104. {
  105. timer = GetPVarInt(i,"ID_HideRadioTextdraw");
  106. if(timer != -1)
  107. {
  108. TextDrawHideForPlayer(i,v_VehicleInfo[vehicleid][r_Draw]);
  109. KillTimer(timer);
  110. }
  111. TextDrawShowForPlayer(i,v_VehicleInfo[vehicleid][r_Draw]);
  112. SetPVarInt(i,"ID_HideRadioTextdraw",SetTimerEx("HideRadioTextdraw",TEXTDRAW_DISAPPEAR_TIME,false,"ii",i,vehicleid));
  113. PlayAudioStreamForPlayer(i,r_RadioInfo[stationid][r_Link]);
  114. }
  115. }
  116. }
  117. return 1;
  118. }
  119. //------------------------------------------- Functions -------------------------------------------
  120. Hook:D_OnGameModeInit() InitializeScript();
  121. Hook:D_OnFilterScriptInit() InitializeScript();
  122. Hook:D_OnPlayerConnect(playerid)
  123. {
  124. SetPVarInt(playerid,"ID_HideRadioTextdraw",-1);
  125. SetPVarInt(playerid,"ID_OldVehicle",-1);
  126. return 1;
  127. }
  128. Hook:D_OnPlayerStateChange(playerid, newstate, oldstate)
  129. {
  130. if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
  131. {
  132. new vehicleid = GetPlayerVehicleID(playerid),
  133. playingid = v_VehicleInfo[vehicleid][RadioPlaying];
  134. #if USE_TEXTDRAW_SET == 2
  135. new string[50];
  136. format(string,sizeof(string),"Listening to: ~n~~w~%s",r_RadioInfo[playingid][r_Name]);
  137. TextDrawSetString(v_VehicleInfo[vehicleid][r_Draw],string);
  138. #else
  139. TextDrawSetString(v_VehicleInfo[vehicleid][r_Draw],r_RadioInfo[playingid][r_Name]);
  140. #endif
  141. TextDrawShowForPlayer(playerid,v_VehicleInfo[vehicleid][r_Draw]);
  142. SetPVarInt(playerid,"ID_HideRadioTextdraw",SetTimerEx("HideRadioTextdraw",TEXTDRAW_DISAPPEAR_TIME,false,"ii",playerid,vehicleid));
  143. PlayAudioStreamForPlayer(playerid,r_RadioInfo[playingid][r_Link]);
  144. SetPVarInt(playerid,"ID_OldVehicle",vehicleid);
  145. return 1;
  146. }
  147. if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
  148. {
  149. new vehicleid = GetPVarInt(playerid,"ID_OldVehicle"),
  150. timer = GetPVarInt(playerid,"ID_HideRadioTextdraw");
  151. if(timer != -1)
  152. {
  153. TextDrawHideForPlayer(playerid,v_VehicleInfo[vehicleid][r_Draw]);
  154. KillTimer(timer);
  155. }
  156. StopAudioStreamForPlayer(playerid);
  157. }
  158. return 1;
  159. }
  160. Hook:D_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  161. {
  162. if(IsPlayerInAnyVehicle(playerid))
  163. {
  164. if(newkeys & KEY_YES)
  165. {
  166. new vehicleid = GetPlayerVehicleID(playerid),newstation = v_VehicleInfo[vehicleid][RadioPlaying] + 1;
  167. if(newstation == RadioCount) newstation = 0;
  168. SetRadioStation(vehicleid,newstation);
  169. return 1;
  170. }
  171. else if(newkeys & KEY_NO)
  172. {
  173. new vehicleid = GetPlayerVehicleID(playerid),newstation = v_VehicleInfo[vehicleid][RadioPlaying] - 1;
  174. if(newstation == -1) newstation = RadioCount - 1;
  175. SetRadioStation(vehicleid,newstation);
  176. return 1;
  177. }
  178. }
  179. return 1;
  180. }
  181. public HideRadioTextdraw(playerid, vehicleid)
  182. {
  183. TextDrawHideForPlayer(playerid,v_VehicleInfo[vehicleid][r_Draw]);
  184. SetPVarInt(playerid,"ID_HideRadioTextdraw",-1);
  185. return 1;
  186. }