Falcon

PlayListAudioStreamForPlayer

Jan 13th, 2013
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.39 KB | None | 0 0
  1. /*---------------------------------------------
  2.         PlayListAudioStreamForPlayer
  3.  
  4. PlayAudioStreamForPlayer with reproduction list
  5.  
  6. by: [Y]Falcon
  7.  
  8. -----------------------------------------------
  9.  
  10.  
  11. Functions List:
  12. native audioL_resetvars();
  13. native audioL_stoptrack(playerid);
  14. native audioL_resetpvars(playerid);
  15. native audioL_playtrack(playerid, trackid);
  16. native audioL_changetrack(playerid, next_track | previous_track);
  17. native audioL_executetrack(playerid, trackid, bool:execute_this_track);
  18. native audioL_conftrack(playerid, trackid, minutes, seconds, title[], url[]);
  19. native audioL_confpos(playerid, bool:usepos, Float:PosX, Float:PosY, Float:PosZ, Float:distance);
  20. */
  21.  
  22. #define max_track      (10)
  23. #define max_title      (50)
  24. #define max_track_url  (100)
  25.  
  26. #define max_players    (100)
  27.  
  28. #define show_info      (01)
  29. #define next_track     (4102)
  30. #define previous_track (2102)
  31.  
  32. enum e_audioinfo
  33. {
  34.     track_minutes,
  35.     track_seconds,
  36.     track_duration,
  37.     bool:execute_track,
  38.     track_title[max_title],
  39.     track_url[max_track_url]
  40. }
  41.  
  42. enum e_otherinfo
  43. {
  44.     timer_track,
  45.     current_track,
  46.     bool:tr_usepos,
  47.     Float:trackPosX,
  48.     Float:trackPosY,
  49.     Float:trackPosZ,
  50.     Float:trackdistance
  51. }
  52.  
  53. new otherinfo[max_players][e_otherinfo];
  54. new audioinfo[max_players][max_track][e_audioinfo];
  55.  
  56. #define audioL::%0(%1) forward %0(%1);\
  57.     public %0(%1)
  58.  
  59. audioL::audioL_resetvars()
  60. {
  61.     for(new ii; ii != max_players; ii++)
  62.     {
  63.         otherinfo[ii][trackPosX] = 0;
  64.         otherinfo[ii][trackPosY] = 0;
  65.         otherinfo[ii][trackPosZ] = 0;
  66.         otherinfo[ii][tr_usepos] = false;
  67.         otherinfo[ii][trackdistance] = 0;
  68.         otherinfo[ii][current_track] = 0;
  69.        
  70.         for(new xx; xx != max_track; xx++)
  71.         {
  72.             audioinfo[ii][xx][track_url] = EOS;
  73.             audioinfo[ii][xx][track_title] = EOS;
  74.             audioinfo[ii][xx][track_minutes] = 0;
  75.             audioinfo[ii][xx][track_seconds] = 0;
  76.             audioinfo[ii][xx][track_duration] = 0;
  77.             audioinfo[ii][xx][execute_track] = false;
  78.         }
  79.     }
  80.     return 0x01;
  81. }
  82.  
  83. audioL::audioL_resetpvars(playerid)
  84. {
  85.     otherinfo[playerid][trackPosX] = 0;
  86.     otherinfo[playerid][trackPosY] = 0;
  87.     otherinfo[playerid][trackPosZ] = 0;
  88.     otherinfo[playerid][tr_usepos] = false;
  89.     otherinfo[playerid][trackdistance] = 0;
  90.     otherinfo[playerid][current_track] = 0;
  91.        
  92.     for(new xx; xx != max_track; xx++)
  93.     {
  94.         audioinfo[playerid][xx][track_url] = EOS;
  95.         audioinfo[playerid][xx][track_title] = EOS;
  96.         audioinfo[playerid][xx][track_minutes] = 0;
  97.         audioinfo[playerid][xx][track_seconds] = 0;
  98.         audioinfo[playerid][xx][track_duration] = 0;
  99.         audioinfo[playerid][xx][execute_track] = false;
  100.     }
  101.     return 0x01;
  102. }
  103.    
  104. audioL::audioL_stoptrack(playerid)
  105. {
  106.     StopAudioStreamForPlayer(playerid);
  107.     KillTimer(otherinfo[playerid][timer_track]);
  108.     return 0x01;
  109. }
  110.  
  111. audioL::audioL_playtrack(playerid, trackid)
  112. {
  113.     if(trackid < 0 || trackid >= max_track) trackid = 0;
  114.    
  115.     if(audioinfo[playerid][trackid][execute_track] == false)
  116.         return printf("[audioL_error] trackid %02i | playerid %02i is disabled", trackid, playerid);
  117.    
  118.     KillTimer(otherinfo[playerid][timer_track]);
  119.     if(!otherinfo[playerid][tr_usepos]) PlayAudioStreamForPlayer(playerid, audioinfo[playerid][trackid][track_url]);
  120.     else
  121.     {
  122.         PlayAudioStreamForPlayer(playerid, audioinfo[playerid][trackid][track_url],
  123.         otherinfo[playerid][trackPosX], otherinfo[playerid][trackPosY], otherinfo[playerid][trackPosZ], otherinfo[playerid][trackdistance], 1);
  124.     }
  125.    
  126.     static audioL_string[max_title + 38];
  127.     #if defined show_info
  128.         format(audioL_string, sizeof(audioL_string), "Audio info: %s | duration: %02i:%02i",
  129.         audioinfo[playerid][trackid][track_title], audioinfo[playerid][trackid][track_minutes], audioinfo[playerid][trackid][track_seconds]);
  130.         SendClientMessage(playerid, 0x8CAA63AA, audioL_string);
  131.     #endif
  132.     otherinfo[playerid][current_track] = trackid;
  133.     otherinfo[playerid][timer_track] = SetTimerEx("audioL_nexttrack", audioinfo[playerid][trackid][track_duration] + 4000, false, "i", playerid);
  134.     return 0x01;
  135. }
  136.  
  137. audioL::audioL_changetrack(playerid, trackid)
  138. {
  139.     KillTimer(otherinfo[playerid][timer_track]);
  140.     otherinfo[playerid][current_track] = ((trackid == next_track) ? (otherinfo[playerid][current_track] += 1) : (otherinfo[playerid][current_track] -= 1));
  141.     audioL_playtrack(playerid, otherinfo[playerid][current_track]);
  142.     return 0x01;
  143. }
  144.  
  145. audioL::audioL_executetrack(playerid, trackid, bool:execute_this_track)
  146. {
  147.     audioinfo[playerid][trackid][execute_track] = execute_this_track;
  148.     return 0x01;
  149. }
  150.  
  151. audioL::audioL_conftrack(playerid, trackid, minutes, seconds, title[], url[])
  152. {
  153.     audioinfo[playerid][trackid][execute_track] = true;
  154.     audioinfo[playerid][trackid][track_minutes] = minutes;
  155.     audioinfo[playerid][trackid][track_seconds] = seconds;
  156.     format(audioinfo[playerid][trackid][track_url], max_track_url, url);
  157.     format(audioinfo[playerid][trackid][track_title], max_title, title);
  158.     audioinfo[playerid][trackid][track_duration] = ((minutes * 60) + (seconds * 1000));
  159.     return 0x01;
  160. }
  161.  
  162.  
  163. audioL::audioL_confpos(playerid, bool:usepos, Float:PosX, Float:PosY, Float:PosZ, Float:distance)
  164. {
  165.     otherinfo[playerid][tr_usepos] = usepos;
  166.     if(usepos)
  167.     {
  168.         otherinfo[playerid][trackPosX] = PosX;
  169.         otherinfo[playerid][trackPosY] = PosY;
  170.         otherinfo[playerid][trackPosZ] = PosZ;
  171.         otherinfo[playerid][trackdistance] = distance;
  172.     }
  173.     return 0x01;
  174. }
  175.  
  176. audioL::audioL_nexttrack(playerid)
  177. {
  178.     otherinfo[playerid][current_track] ++;
  179.     audioL_playtrack(playerid, otherinfo[playerid][current_track]);
  180.     return 0x01;
  181. }
Add Comment
Please, Sign In to add comment