Falcon

PlayListAudioStreamForPlayer 1.0

Jan 13th, 2013
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.50 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 try[max_players];
  54. new otherinfo[max_players][e_otherinfo];
  55. new audioinfo[max_players][max_track][e_audioinfo];
  56.  
  57. #define audioL::%0(%1) forward %0(%1);\
  58.     public %0(%1)
  59.  
  60. audioL::audioL_resetvars()
  61. {
  62.     for(new ii; ii != max_players; ii++)
  63.     {
  64.         try[ii] = 0;
  65.         otherinfo[ii][trackPosX] = 0;
  66.         otherinfo[ii][trackPosY] = 0;
  67.         otherinfo[ii][trackPosZ] = 0;
  68.         otherinfo[ii][tr_usepos] = false;
  69.         otherinfo[ii][trackdistance] = 0;
  70.         otherinfo[ii][current_track] = 0;
  71.        
  72.         for(new xx; xx != max_track; xx++)
  73.         {
  74.             audioinfo[ii][xx][track_url] = EOS;
  75.             audioinfo[ii][xx][track_title] = EOS;
  76.             audioinfo[ii][xx][track_minutes] = 0;
  77.             audioinfo[ii][xx][track_seconds] = 0;
  78.             audioinfo[ii][xx][track_duration] = 0;
  79.             audioinfo[ii][xx][execute_track] = false;
  80.         }
  81.     }
  82.     return 0x01;
  83. }
  84.  
  85. audioL::audioL_resetpvars(playerid)
  86. {
  87.     try[playerid] = 0;
  88.     otherinfo[playerid][trackPosX] = 0;
  89.     otherinfo[playerid][trackPosY] = 0;
  90.     otherinfo[playerid][trackPosZ] = 0;
  91.     otherinfo[playerid][tr_usepos] = false;
  92.     otherinfo[playerid][trackdistance] = 0;
  93.     otherinfo[playerid][current_track] = 0;
  94.        
  95.     for(new xx; xx != max_track; xx++)
  96.     {
  97.         audioinfo[playerid][xx][track_url] = EOS;
  98.         audioinfo[playerid][xx][track_title] = EOS;
  99.         audioinfo[playerid][xx][track_minutes] = 0;
  100.         audioinfo[playerid][xx][track_seconds] = 0;
  101.         audioinfo[playerid][xx][track_duration] = 0;
  102.         audioinfo[playerid][xx][execute_track] = false;
  103.     }
  104.     return 0x01;
  105. }
  106.    
  107. audioL::audioL_stoptrack(playerid)
  108. {
  109.     StopAudioStreamForPlayer(playerid);
  110.     KillTimer(otherinfo[playerid][timer_track]);
  111.     return 0x01;
  112. }
  113.  
  114. audioL::audioL_playtrack(playerid, trackid)
  115. {
  116.     if(trackid < 0 || trackid >= max_track) trackid = 0;
  117.     if(try[playerid] >= max_track) return try[playerid] = 0, 0x01;
  118.     if(audioinfo[playerid][trackid][execute_track] == false) return trackid ++, try[playerid] ++, print("aa"), audioL_playtrack(playerid, trackid);
  119.    
  120.     KillTimer(otherinfo[playerid][timer_track]);
  121.     if(!otherinfo[playerid][tr_usepos]) PlayAudioStreamForPlayer(playerid, audioinfo[playerid][trackid][track_url]);
  122.     else
  123.     {
  124.         PlayAudioStreamForPlayer(playerid, audioinfo[playerid][trackid][track_url],
  125.         otherinfo[playerid][trackPosX], otherinfo[playerid][trackPosY], otherinfo[playerid][trackPosZ], otherinfo[playerid][trackdistance], 1);
  126.     }
  127.    
  128.     static audioL_string[max_title + 38];
  129.     #if defined show_info
  130.         format(audioL_string, sizeof(audioL_string), "Audio info: %s | duration: %02i:%02i",
  131.         audioinfo[playerid][trackid][track_title], audioinfo[playerid][trackid][track_minutes], audioinfo[playerid][trackid][track_seconds]);
  132.         SendClientMessage(playerid, 0x8CAA63AA, audioL_string);
  133.     #endif
  134.     otherinfo[playerid][current_track] = trackid;
  135.     otherinfo[playerid][timer_track] = SetTimerEx("audioL_nexttrack", audioinfo[playerid][trackid][track_duration] + 4000, false, "i", playerid);
  136.     return 0x01;
  137. }
  138.  
  139. audioL::audioL_changetrack(playerid, trackid)
  140. {
  141.     KillTimer(otherinfo[playerid][timer_track]);
  142.     otherinfo[playerid][current_track] = ((trackid == next_track) ? (otherinfo[playerid][current_track] += 1) : (otherinfo[playerid][current_track] -= 1));
  143.     audioL_playtrack(playerid, otherinfo[playerid][current_track]);
  144.     return 0x01;
  145. }
  146.  
  147. audioL::audioL_executetrack(playerid, trackid, bool:execute_this_track)
  148. {
  149.     audioinfo[playerid][trackid][execute_track] = execute_this_track;
  150.     return 0x01;
  151. }
  152.  
  153. audioL::audioL_conftrack(playerid, trackid, minutes, seconds, title[], url[])
  154. {
  155.     audioinfo[playerid][trackid][execute_track] = true;
  156.     audioinfo[playerid][trackid][track_minutes] = minutes;
  157.     audioinfo[playerid][trackid][track_seconds] = seconds;
  158.     format(audioinfo[playerid][trackid][track_url], max_track_url, url);
  159.     format(audioinfo[playerid][trackid][track_title], max_title, title);
  160.     audioinfo[playerid][trackid][track_duration] = ((minutes * 60) + (seconds * 1000));
  161.     return 0x01;
  162. }
  163.  
  164.  
  165. audioL::audioL_confpos(playerid, bool:usepos, Float:PosX, Float:PosY, Float:PosZ, Float:distance)
  166. {
  167.     otherinfo[playerid][tr_usepos] = usepos;
  168.     if(usepos)
  169.     {
  170.         otherinfo[playerid][trackPosX] = PosX;
  171.         otherinfo[playerid][trackPosY] = PosY;
  172.         otherinfo[playerid][trackPosZ] = PosZ;
  173.         otherinfo[playerid][trackdistance] = distance;
  174.     }
  175.     return 0x01;
  176. }
  177.  
  178. audioL::audioL_nexttrack(playerid)
  179. {
  180.     otherinfo[playerid][current_track] ++;
  181.     audioL_playtrack(playerid, otherinfo[playerid][current_track]);
  182.     return 0x01;
  183. }
Add Comment
Please, Sign In to add comment