Advertisement
Guest User

Headphones

a guest
Jan 22nd, 2016
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 14.00 KB | None | 0 0
  1. #define     FILTERSCRIPT
  2. #include    <a_samp>
  3. #include    <zcmd>
  4.  
  5. #define     HEADPHONE_INDEX     (5)
  6. #define     HEADPHONE_PRICE     (20)
  7.  
  8. enum    e_hpdialog
  9. {
  10.     DIALOG_HEADPHONE_CONFIRM = 19755,
  11.     DIALOG_HEADPHONE_MENU,
  12.     DIALOG_HEADPHONE_LISTEN,
  13.     DIALOG_HEADPHONE_COLOR,
  14.     DIALOG_HEADPHONE_COLOR_LIST,
  15.     DIALOG_HEADPHONE_COLOR_CUSTOM,
  16.     DIALOG_HEADPHONE_COLOR_R,
  17.     DIALOG_HEADPHONE_COLOR_G,
  18.     DIALOG_HEADPHONE_COLOR_B
  19. }
  20.  
  21. enum    e_headphone
  22. {
  23.     bool: HasHeadphones,
  24.     bool: EditingHeadphones,
  25.     bool: Listening,
  26.     Color[3],
  27.     Float: hpX,
  28.     Float: hpY,
  29.     Float: hpZ,
  30.     Float: hpRX,
  31.     Float: hpRY,
  32.     Float: hpRZ
  33. }
  34.  
  35. new
  36.     HeadphoneData[MAX_PLAYERS][e_headphone];
  37.  
  38. new
  39.     ColorList[] = {
  40.         0x000000FF, 0xF5F5F5FF, 0x2A77A1FF, 0x840410FF, 0x263739FF, 0x86446EFF, 0xD78E10FF, 0x4C75B7FF, 0xBDBEC6FF, 0x5E7072FF,
  41.         0x46597AFF, 0x656A79FF, 0x5D7E8DFF, 0x58595AFF, 0xD6DAD6FF, 0x9CA1A3FF, 0x335F3FFF, 0x730E1AFF, 0x7B0A2AFF, 0x9F9D94FF,
  42.         0x3B4E78FF, 0x732E3EFF, 0x691E3BFF, 0x96918CFF, 0x515459FF, 0x3F3E45FF, 0xA5A9A7FF, 0x635C5AFF, 0x3D4A68FF, 0x979592FF,
  43.         0x421F21FF, 0x5F272BFF, 0x8494ABFF, 0x767B7CFF, 0x646464FF, 0x5A5752FF, 0x252527FF, 0x2D3A35FF, 0x93A396FF, 0x6D7A88FF,
  44.         0x221918FF, 0x6F675FFF, 0x7C1C2AFF, 0x5F0A15FF, 0x193826FF, 0x5D1B20FF, 0x9D9872FF, 0x7A7560FF, 0x989586FF, 0xADB0B0FF,
  45.         0x848988FF, 0x304F45FF, 0x4D6268FF, 0x162248FF, 0x272F4BFF, 0x7D6256FF, 0x9EA4ABFF, 0x9C8D71FF, 0x6D1822FF, 0x4E6881FF,
  46.         0x9C9C98FF, 0x917347FF, 0x661C26FF, 0x949D9FFF, 0xA4A7A5FF, 0x8E8C46FF, 0x341A1EFF, 0x6A7A8CFF, 0xAAAD8EFF, 0xAB988FFF,
  47.         0x851F2EFF, 0x6F8297FF, 0x585853FF, 0x9AA790FF, 0x601A23FF, 0x20202CFF, 0xA4A096FF, 0xAA9D84FF, 0x78222BFF, 0x0E316DFF,
  48.         0x722A3FFF, 0x7B715EFF, 0x741D28FF, 0x1E2E32FF, 0x4D322FFF, 0x7C1B44FF, 0x2E5B20FF, 0x395A83FF, 0x6D2837FF, 0xA7A28FFF,
  49.         0xAFB1B1FF, 0x364155FF, 0x6D6C6EFF, 0x0F6A89FF, 0x204B6BFF, 0x2B3E57FF, 0x9B9F9DFF, 0x6C8495FF, 0x4D8495FF, 0xAE9B7FFF,
  50.         0x406C8FFF, 0x1F253BFF, 0xAB9276FF, 0x134573FF, 0x96816CFF, 0x64686AFF, 0x105082FF, 0xA19983FF, 0x385694FF, 0x525661FF,
  51.         0x7F6956FF, 0x8C929AFF, 0x596E87FF, 0x473532FF, 0x44624FFF, 0x730A27FF, 0x223457FF, 0x640D1BFF, 0xA3ADC6FF, 0x695853FF,
  52.         0x9B8B80FF, 0x620B1CFF, 0x5B5D5EFF, 0x624428FF, 0x731827FF, 0x1B376DFF, 0xEC6AAEFF, 0x000000FF, 0x177517FF, 0x210606FF,
  53.         0x125478FF, 0x452A0DFF, 0x571E1EFF, 0x010701FF, 0x25225AFF, 0x2C89AAFF, 0x8A4DBDFF, 0x35963AFF, 0xB7B7B7FF, 0x464C8DFF,
  54.         0x84888CFF, 0x817867FF, 0x817A26FF, 0x6A506FFF, 0x583E6FFF, 0x8CB972FF, 0x824F78FF, 0x6D276AFF, 0x1E1D13FF, 0x1E1306FF,
  55.         0x1F2518FF, 0x2C4531FF, 0x1E4C99FF, 0x2E5F43FF, 0x1E9948FF, 0x1E9999FF, 0x999976FF, 0x7C8499FF, 0x992E1EFF, 0x2C1E08FF,
  56.         0x142407FF, 0x993E4DFF, 0x1E4C99FF, 0x198181FF, 0x1A292AFF, 0x16616FFF, 0x1B6687FF, 0x6C3F99FF, 0x481A0EFF, 0x7A7399FF,
  57.         0x746D99FF, 0x53387EFF, 0x222407FF, 0x3E190CFF, 0x46210EFF, 0x991E1EFF, 0x8D4C8DFF, 0x805B80FF, 0x7B3E7EFF, 0x3C1737FF,
  58.         0x733517FF, 0x781818FF, 0x83341AFF, 0x8E2F1CFF, 0x7E3E53FF, 0x7C6D7CFF, 0x020C02FF, 0x072407FF, 0x163012FF, 0x16301BFF,
  59.         0x642B4FFF, 0x368452FF, 0x999590FF, 0x818D96FF, 0x99991EFF, 0x7F994CFF, 0x839292FF, 0x788222FF, 0x2B3C99FF, 0x3A3A0BFF,
  60.         0x8A794EFF, 0x0E1F49FF, 0x15371CFF, 0x15273AFF, 0x375775FF, 0x060820FF, 0x071326FF, 0x20394BFF, 0x2C5089FF, 0x15426CFF,
  61.         0x103250FF, 0x241663FF, 0x692015FF, 0x8C8D94FF, 0x516013FF, 0x090F02FF, 0x8C573AFF, 0x52888EFF, 0x995C52FF, 0x99581EFF,
  62.         0x993A63FF, 0x998F4EFF, 0x99311EFF, 0x0D1842FF, 0x521E1EFF, 0x42420DFF, 0x4C991EFF, 0x082A1DFF, 0x96821DFF, 0x197F19FF,
  63.         0x3B141FFF, 0x745217FF, 0x893F8DFF, 0x7E1A6CFF, 0x0B370BFF, 0x27450DFF, 0x071F24FF, 0x784573FF, 0x8A653AFF, 0x732617FF,
  64.         0x319490FF, 0x56941DFF, 0x59163DFF, 0x1B8A2FFF, 0x38160BFF, 0x041804FF, 0x355D8EFF, 0x2E3F5BFF, 0x561A28FF, 0x4E0E27FF,
  65.         0x706C67FF, 0x3B3E42FF, 0x2E2D33FF, 0x7B7E7DFF, 0x4A4442FF, 0x28344EFF
  66.     };
  67.  
  68. // http://forum.sa-mp.com/showpost.php?p=3117531&postcount=5
  69. RGBAToARGB(rgba)
  70.     return rgba >>> 8 | rgba << 24;
  71.  
  72. // http://forum.sa-mp.com/showpost.php?p=2443366&postcount=2
  73. GetColor(playerid)
  74.     return HeadphoneData[playerid][Color][0] << 24 | HeadphoneData[playerid][Color][1] << 16 | HeadphoneData[playerid][Color][2] << 8 | 0xFF;
  75.  
  76. // http://forum.sa-mp.com/showthread.php?t=589026
  77. GetRGB(color, &r, &g, &b)
  78. {
  79.     new col[3 char];
  80.     col[0] = color;
  81.     r = col{0};
  82.     g = col{1};
  83.     b = col{2};
  84. }
  85.  
  86. Player_ShowHeadphoneMenu(playerid)
  87. {
  88.     new string[128];
  89.     format(string, sizeof(string), "%s\nPosition\nColor\nRemove", (HeadphoneData[playerid][Listening]) ? ("Stop Listening") : ("Listen Something"));
  90.     ShowPlayerDialog(playerid, DIALOG_HEADPHONE_MENU, DIALOG_STYLE_LIST, "{3498DB}Headphones", string, "Choose", "Cancel");
  91.     return 1;
  92. }
  93.  
  94. Player_ShowColorMenu(playerid)
  95.     return ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR, DIALOG_STYLE_LIST, "{3498DB}Headphones: {FFFFFF}Color", "Choose a Color\nCustom Color\nReset Color", "Choose", "Back");
  96.  
  97. Player_ShowColorList(playerid, msg[] = "")
  98. {
  99.     new color_string[3256];
  100.     if(strlen(msg)) format(color_string, sizeof(color_string), "{E74C3C}%s\n\n", msg);
  101.     for(new i; i < sizeof(ColorList); i++) format(color_string, sizeof(color_string), "%s{%06x}%03d %s", color_string, ColorList[i] >>> 8, i, ((i+1) % 10 == 0) ? ("\n") : (""));
  102.     ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR_LIST, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Color List", color_string, "Choose", "Back");
  103.     return 1;
  104. }
  105.  
  106. Player_ShowCustomMenu(playerid)
  107. {
  108.     new string[48], title[72], color = GetColor(playerid);
  109.     format(string, sizeof(string), "Red\t%d\nGreen\t%d\nBlue\t%d", HeadphoneData[playerid][Color][0], HeadphoneData[playerid][Color][1], HeadphoneData[playerid][Color][2]);
  110.     format(title, sizeof(title), "{3498DB}Headphones: {FFFFFF}Custom Color ({%06x}#%06x{FFFFFF})", color >>> 8, color >>> 8);
  111.     ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR_CUSTOM, DIALOG_STYLE_TABLIST, title, string, "Edit", "Back");
  112.     return 1;
  113. }
  114.  
  115. Headphone_Attach(playerid)
  116.     return SetPlayerAttachedObject(playerid, HEADPHONE_INDEX, 19421, 2, HeadphoneData[playerid][hpX], HeadphoneData[playerid][hpY], HeadphoneData[playerid][hpZ], HeadphoneData[playerid][hpRX], HeadphoneData[playerid][hpRY], HeadphoneData[playerid][hpRZ], 1.0, 1.0, 1.0, RGBAToARGB(GetColor(playerid)));
  117.  
  118. Headphone_Reset(playerid)
  119. {
  120.     if(HeadphoneData[playerid][Listening]) StopAudioStreamForPlayer(playerid);
  121.     HeadphoneData[playerid][HasHeadphones] = false;
  122.     HeadphoneData[playerid][EditingHeadphones] = false;
  123.     HeadphoneData[playerid][Listening] = false;
  124.     for(new i; i < 3; i++) HeadphoneData[playerid][Color][i] = 0;
  125.     HeadphoneData[playerid][hpX] = HeadphoneData[playerid][hpY] = HeadphoneData[playerid][hpZ] = 0.0;
  126.     HeadphoneData[playerid][hpRX] = HeadphoneData[playerid][hpRY] = HeadphoneData[playerid][hpRZ] = 0.0;
  127.     if(IsPlayerAttachedObjectSlotUsed(playerid, HEADPHONE_INDEX)) RemovePlayerAttachedObject(playerid, HEADPHONE_INDEX);
  128. }
  129.  
  130. Headphone_ResetForAll()
  131. {
  132.     for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
  133.     {
  134.         if(!IsPlayerConnected(i)) continue;
  135.         Headphone_Reset(i);
  136.     }
  137. }
  138.  
  139. public OnFilterScriptInit()
  140. {
  141.     Headphone_ResetForAll();
  142.     return 1;
  143. }
  144.  
  145. public OnFilterScriptExit()
  146. {
  147.     Headphone_ResetForAll();
  148.     return 1;
  149. }
  150.  
  151. public OnPlayerConnect(playerid)
  152. {
  153.     Headphone_Reset(playerid);
  154.     return 1;
  155. }
  156.  
  157. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  158. {
  159.     switch(dialogid)
  160.     {
  161.         case DIALOG_HEADPHONE_CONFIRM:
  162.         {
  163.             if(!response) return 1;
  164.             if(GetPlayerMoney(playerid) < HEADPHONE_PRICE) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough money to buy headphones.");
  165.             HeadphoneData[playerid][HasHeadphones] = true;
  166.             HeadphoneData[playerid][EditingHeadphones] = true;
  167.            
  168.             SetPlayerAttachedObject(playerid, HEADPHONE_INDEX, 19421, 2, .materialcolor1 = 0xFF000000);
  169.             EditAttachedObject(playerid, HEADPHONE_INDEX);
  170.             GivePlayerMoney(playerid, -HEADPHONE_PRICE);
  171.             SendClientMessage(playerid, 0x40D47EFF, "HEADPHONES: {FFFFFF}You purchased headphones.");
  172.             SendClientMessage(playerid, 0x40D47EFF, "HEADPHONES: {FFFFFF}You can adjust its position now, or you can do it later.");
  173.             SendClientMessage(playerid, 0x40D47EFF, "HEADPHONES: {FFFFFF}Enjoy!");
  174.             return 1;
  175.         }
  176.        
  177.         case DIALOG_HEADPHONE_MENU:
  178.         {
  179.             if(!response) return 1;
  180.             if(listitem == 0)
  181.             {
  182.                 if(!HeadphoneData[playerid][Listening]) {
  183.                     ShowPlayerDialog(playerid, DIALOG_HEADPHONE_LISTEN, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Listen", "Write a stream URL:", "Listen", "Back");
  184.                 }else{
  185.                     StopAudioStreamForPlayer(playerid);
  186.                     HeadphoneData[playerid][Listening] = false;
  187.                 }
  188.             }
  189.            
  190.             if(listitem == 1)
  191.             {
  192.                 HeadphoneData[playerid][EditingHeadphones] = true;
  193.                 EditAttachedObject(playerid, HEADPHONE_INDEX);
  194.             }
  195.            
  196.             if(listitem == 2) Player_ShowColorMenu(playerid);
  197.             if(listitem == 3)
  198.             {
  199.                 Headphone_Reset(playerid);
  200.                 SendClientMessage(playerid, 0x40D47EFF, "HEADPHONES: {FFFFFF}You removed your headphones.");
  201.             }
  202.            
  203.             return 1;
  204.         }
  205.        
  206.         case DIALOG_HEADPHONE_LISTEN:
  207.         {
  208.             if(!response) return Player_ShowHeadphoneMenu(playerid);
  209.             if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_HEADPHONE_LISTEN, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Listen", "{E74C3C}You didn't specify an URL.\n\n{FFFFFF}Write a stream URL:", "Listen", "Back");
  210.             HeadphoneData[playerid][Listening] = true;
  211.             PlayAudioStreamForPlayer(playerid, inputtext);
  212.             SendClientMessage(playerid, 0x40D47EFF, "HEADPHONES: {FFFFFF}You can use /headphones -> Listen Something to stop the stream.");
  213.             return 1;
  214.         }
  215.        
  216.         case DIALOG_HEADPHONE_COLOR:
  217.         {
  218.             if(!response) return Player_ShowHeadphoneMenu(playerid);
  219.             if(listitem == 0) Player_ShowColorList(playerid);
  220.             if(listitem == 1) Player_ShowCustomMenu(playerid);
  221.             if(listitem == 2)
  222.             {
  223.                 for(new i; i < 3; i++) HeadphoneData[playerid][Color][i] = 0;
  224.                 SetPlayerAttachedObject(playerid, HEADPHONE_INDEX, 19421, 2, HeadphoneData[playerid][hpX], HeadphoneData[playerid][hpY], HeadphoneData[playerid][hpZ], HeadphoneData[playerid][hpRX], HeadphoneData[playerid][hpRY], HeadphoneData[playerid][hpRZ], .materialcolor1 = 0xFF000000);
  225.             }
  226.            
  227.             return 1;
  228.         }
  229.        
  230.         case DIALOG_HEADPHONE_COLOR_LIST:
  231.         {
  232.             if(!response) return Player_ShowColorMenu(playerid);
  233.             new color = strval(inputtext);
  234.             if(!(0 <= color <= sizeof(ColorList)-1)) return Player_ShowColorList(playerid, "Invalid color ID.");
  235.             GetRGB(ColorList[color], HeadphoneData[playerid][Color][0], HeadphoneData[playerid][Color][1], HeadphoneData[playerid][Color][2]);
  236.             Headphone_Attach(playerid);
  237.             return 1;
  238.         }
  239.        
  240.         case DIALOG_HEADPHONE_COLOR_CUSTOM:
  241.         {
  242.             if(!response) return Player_ShowColorMenu(playerid);
  243.             if(listitem == 0) ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR_R, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Red Color", "Enter a value for Red (0-255):", "Set", "Back");
  244.             if(listitem == 1) ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR_G, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Green Color", "Enter a value for Green (0-255):", "Set", "Back");
  245.             if(listitem == 2) ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR_B, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Blue Color", "Enter a value for Blue (0-255):", "Set", "Back");
  246.             return 1;
  247.         }
  248.        
  249.         case DIALOG_HEADPHONE_COLOR_R:
  250.         {
  251.             if(!response) return Player_ShowCustomMenu(playerid);
  252.             new value = strval(inputtext);
  253.             if(!(0 <= value <= 255)) return ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR_R, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Red Color", "{E74C3C}Invalid value.\n\n{FFFFFF}Enter a value for Red (0-255):", "Set", "Back");
  254.             HeadphoneData[playerid][Color][0] = value;
  255.             Headphone_Attach(playerid);
  256.             Player_ShowCustomMenu(playerid);
  257.             return 1;
  258.         }
  259.        
  260.         case DIALOG_HEADPHONE_COLOR_G:
  261.         {
  262.             if(!response) return Player_ShowCustomMenu(playerid);
  263.             new value = strval(inputtext);
  264.             if(!(0 <= value <= 255)) return ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR_G, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Green Color", "{E74C3C}Invalid value.\n\n{FFFFFF}Enter a value for Green (0-255):", "Set", "Back");
  265.             HeadphoneData[playerid][Color][1] = value;
  266.             Headphone_Attach(playerid);
  267.             Player_ShowCustomMenu(playerid);
  268.             return 1;
  269.         }
  270.        
  271.         case DIALOG_HEADPHONE_COLOR_B:
  272.         {
  273.             if(!response) return Player_ShowCustomMenu(playerid);
  274.             new value = strval(inputtext);
  275.             if(!(0 <= value <= 255)) return ShowPlayerDialog(playerid, DIALOG_HEADPHONE_COLOR_B, DIALOG_STYLE_INPUT, "{3498DB}Headphones: {FFFFFF}Blue Color", "{E74C3C}Invalid value.\n\n{FFFFFF}Enter a value for Blue (0-255):", "Set", "Back");
  276.             HeadphoneData[playerid][Color][2] = value;
  277.             Headphone_Attach(playerid);
  278.             Player_ShowCustomMenu(playerid);
  279.             return 1;
  280.         }
  281.     }
  282.    
  283.     return 0;
  284. }
  285.  
  286. public OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
  287. {
  288.     if(!HeadphoneData[playerid][EditingHeadphones]) return 1;
  289.     if(response)
  290.     {
  291.         HeadphoneData[playerid][hpX] = fOffsetX;
  292.         HeadphoneData[playerid][hpY] = fOffsetY;
  293.         HeadphoneData[playerid][hpZ] = fOffsetZ;
  294.         HeadphoneData[playerid][hpRX] = fRotX;
  295.         HeadphoneData[playerid][hpRY] = fRotY;
  296.         HeadphoneData[playerid][hpRZ] = fRotZ;
  297.     }
  298.    
  299.     HeadphoneData[playerid][EditingHeadphones] = false;
  300.     Headphone_Attach(playerid);
  301.     return 1;
  302. }
  303.  
  304. CMD:headphones(playerid, params[])
  305. {
  306.     if(HeadphoneData[playerid][HasHeadphones]) {
  307.         Player_ShowHeadphoneMenu(playerid);
  308.     }else{
  309.         new string[96];
  310.         format(string, sizeof(string), "You don't own headphones. Would you like to buy one?\n\nPrice: {40D47E}$%d", HEADPHONE_PRICE);
  311.         ShowPlayerDialog(playerid, DIALOG_HEADPHONE_CONFIRM, DIALOG_STYLE_MSGBOX, "{3498DB}Headphones: {FFFFFF}Confirm Purchase", string, "Buy", "Cancel");
  312.     }
  313.    
  314.     return 1;
  315. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement