1. Welcome to skUnity!

    Welcome to skUnity! This is a forum where members of the Skript community can communicate and interact. Skript Resource Creators can post their Resources for all to see and use.

    If you haven't done so already, feel free to join our official Discord server to expand your level of interaction with the comminuty!

    Now, what are you waiting for? Join the community now!

Dismiss Notice
This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Offering Paid I'll make anything

Discussion in 'Offering' started by TPGamesNL, May 9, 2018.

  1. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
    I don't really have any ideas to do, so if you send me something to make, I'll make it for you. It can be anything, small, big, easy, complicated, whatever you want. If you have any questions, feel free to ask. :emoji_slight_smile:

    Currently closed, DM me if you really want to have something made and we'll discuss it.

    Back in business, but now paid. Reply here or DM me on the forums / Discord (TPGamesNL#0880) and we'll discuss it.
     
    #1 TPGamesNL, May 9, 2018
    Last edited: Jun 2, 2021
    • Like Like x 1
  2. FabricioSouza

    FabricioSouza Well-Known Member

    Joined:
    Mar 15, 2018
    Messages:
    267
    Likes Received:
    3
    Do, for me that's in the GIF, please.

    https://forums.skunity.com/threads/how-to-do-this.7068/
     
    • Funny Funny x 1
  3. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
  4. FabricioSouza

    FabricioSouza Well-Known Member

    Joined:
    Mar 15, 2018
    Messages:
    267
    Likes Received:
    3
    Make for either one or the Skript version bensku 23
     
  5. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
    #5 TPGamesNL, May 10, 2018
    Last edited: May 10, 2018
  6. FabricioSouza

    FabricioSouza Well-Known Member

    Joined:
    Mar 15, 2018
    Messages:
    267
    Likes Received:
    3
    1.8.9
     
  7. Runakai

    Moderator Supporter

    Joined:
    Apr 27, 2018
    Messages:
    494
    Likes Received:
    31
    Hehe, :emoji_wink: I'd like to have a case skript where you can add items ingame with chances and open like a CSGO Spin-Thing just by rightclicking with a specific player's head which will be removed when using the crate.
     
  8. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
    @FabricioSouza I have finished most of the animation, but do you also want the GUI or just the animation?

    @Runakai1 could you send me something like a video of that CSGO spin thing?
     
  9. Runakai

    Moderator Supporter

    Joined:
    Apr 27, 2018
    Messages:
    494
    Likes Received:
    31
    upload_2018-5-11_15-24-56.png
     
  10. FabricioSouza

    FabricioSouza Well-Known Member

    Joined:
    Mar 15, 2018
    Messages:
    267
    Likes Received:
    3
    You already finished with the part of the customized heads that is rotated between the chest of the end.
     
  11. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
    yes but I just have to add direction support for that part
    --- Double Post Merged, May 11, 2018, Original Post Date: May 11, 2018 ---
    Okay @FabricioSouza I finished it for dev23 and it required SkQuery, Biosphere2, Skellett and Umbaska:
    Code (Skript):
    1. options:
    2.     skull-owner: MHF_Question
    3.     skull-owner-2: MHF_Exclamation
    4.  
    5. function animation(loct: location, p: player):
    6.     set {_b} to block above block at {_loct}
    7.     set {_f} to facing of block above block at {_loct}
    8.     if {_f} is north:
    9.         set {_angle} to 3.1
    10.         set {_d} to "z"
    11.     else if {_f} is east:
    12.         set {_angle} to 4.75
    13.         set {_d} to "x"
    14.     else if {_f} is south:
    15.         set {_d} to "z"
    16.         set {_angle} to 0
    17.     else if {_f} is west:
    18.         set {_d} to "x"
    19.         set {_angle} to 1.55
    20.     evaluate "openChest({_b}, 7.5 seconds)"
    21.     set {_loct2} to {_loct}
    22.     add 0.5 to y coord of {_loct2}
    23.     loop 6 times:
    24.         spawn armor stand at location of block at {_loct}
    25.         set {_as} to last spawned armor stand
    26.         add {_as} to {_as::*}
    27.         set visible of {_as} to false
    28.         set small of {_as} to true
    29.         set gravity of {_as} to false
    30.         set helmet of {_as} to skull of "{@skull-owner}" parsed as a offline player
    31.         set {_asloc} to location of {_as}
    32.         set y coord of {_asloc} to y coord of {_as} + 5
    33.         teleport {_as} to {_asloc}
    34.         loop 5 times:
    35.             add 1/6 to y coord of {_asloc}
    36.             teleport {_as} to {_asloc}
    37.             wait 1 tick
    38.         set y coord of {_asloc} to y coord of {_loct} + 1.5
    39.         teleport {_as} to {_asloc}
    40.         circleAS({_as}, {_asloc}, {_b}, {_loct2}, {_angle}, {_d})
    41.     wait 2 seconds
    42.     set {_l} to size of {_as::*}
    43.     delete {_as::%{_l}%}
    44.     set {_l::*} to {_as::*}
    45.     loop {_l::*}:
    46.         set {_o} to random element out of {_as::*}
    47.         remove {_o} from {_as::*}
    48.         kill {_o}
    49.         wait 4 ticks
    50.     set metadata "stop" of {_as} to true
    51.     while metadata "stopped" of {_as} is not set:
    52.         wait 1 tick
    53.     set {_asloc} to location of {_as}
    54.     loop 3 times:
    55.         remove 0.1 from y coord of {_asloc}
    56.         teleport {_as} to {_asloc}
    57.         wait 3 ticks
    58.     wait 2 ticks
    59.     set custom name visible of {_as} to true
    60.     set custom name of {_as} to "&kabcdefghijklmnop"
    61.     wait 1.5 seconds
    62.     show mob spawner flames at location of block above {_as} to all players
    63.     set helmet of {_as} to skull of "{@skull-owner-2}" parsed as a offline player
    64.     set custom name of {_as} to "&cYour price!"
    65.     # price code
    66.     give {_p} 1 diamond
    67.     send "&aYou got &ba diamond &afrom a crate!" to {_p}
    68.     # price code
    69.     wait 2 seconds
    70.     kill {_as}
    71.  
    72. function openChest(b: block, t: timespan):
    73.     set {_now} to now
    74.     while {_now} was less than {_t} ago:
    75.         skellett make {_b} look open for all players
    76.         wait 1 tick
    77.      
    78. function circleAS(as: entity, asloc: location, b: block, loct: location, angle: number, d: text):
    79.     set {_l::*} to circle at location of {_b} with radius 1 and density 5
    80.     loop {_l::*}:
    81.         set {_loc2} to loop-value
    82.         if {_d} is "z":
    83.             set z coord of {_loc2} to z coord of {_loct}
    84.             set y coord of {_loc2} to y coord of {_loct} - (z coord of {_loct} - z coord of loop-value)
    85.             set z coord of {_loc2} to z coord of {_loct}
    86.         else:
    87.             set x coord of {_loc2} to x coord of {_loct}
    88.             set y coord of {_loc2} to y coord of {_loct} - (x coord of {_loct} - x coord of loop-value)
    89.             set x coord of {_loc2} to x coord of {_loct}
    90.         set {_l::%loop-index%} to {_loc2}
    91.     loop {_l::*}:
    92.         set {_i} to loop-index parsed as a number + 24
    93.         if {_i} > size of {_l::*}:
    94.             remove size of {_l::*} from {_i}
    95.         set {_l2::%{_i}%} to loop-value
    96.     while true:
    97.         loop {_l2::*}:
    98.             teleport {_as} to loop-value
    99.             set head y angle of {_as} to {_angle}
    100.             wait 1 tick
    101.         teleport {_as} to {_asloc}
    102.         if metadata "stop" of {_as} is true:
    103.             wait 10 ticks
    104.             set metadata "stopped" of {_as} to true
    105.             stop
    106.  
    107. on right click on ender chest:
    108.     cancel event
    109.     set {_loc} to location of clicked block
    110.     remove 1.5 from y coord of {_loc}
    111.     animation({_loc}, player)
    If you find any bugs tell me and I'll fix them
    Here is a video I've made from the script, so this is what it should look like:
    --- Double Post Merged, May 12, 2018 ---
    @Runakai1 I made it for the newest version (dev35b) and it requires SkQuery and Skellett
    Code:
    Code (Skript):
    1. options:
    2.     items-gui-name: &aCrate Items
    3.     crate-gui-name: &aCSGO Crate
    4.  
    5. command /csgoitems [<text>]:
    6.     permission: admin
    7.     trigger:
    8.         set {_s::*} to split arg-1 at " "
    9.         if {_s::1} is "list":
    10.             loop {csgocrate::items::*}:
    11.                 set {_t} to "%loop-value%"
    12.                 add 1 to {_items::%{_t}%}
    13.             if {_items::*} is not set:
    14.                 message "&cNo items defined!"
    15.                 stop
    16.             set {_rows} to rounded up (size of {_items::*} / 9)
    17.             open chest with {_rows} rows named "{@items-gui-name}" to player
    18.             set {_i} to 0
    19.             loop {_items::*}:
    20.                 set slot {_i} of player's current inventory to loop-index parsed as a item named "&a%firstCapital(loop-index)%" with lore "&7Chance: %loop-value%"
    21.                 add 1 to {_i}
    22.             stop
    23.         if {_s::1} is "add":
    24.             if {_s::2} is not set:
    25.                 message "&cPlease input a second argument! Usage: /csgoitems add <chance> (your held item will be the item)"
    26.                 stop
    27.             if {_s::2} parsed as a number is not set:
    28.                 message "&cThe second argument has to be a number! Usage: /csgoitems add <chance> (your held item will be the item)"
    29.                 stop
    30.             set {_c} to {_s::2} parsed as a number
    31.             if {_c} <= 0:
    32.                 message "&cYour number must be positive and can't be 0! Usage: /csgoitems add <chance> (your held item will be the item)"
    33.                 stop
    34.             if "%{_c}%" contains ".":
    35.                 message "&cYour number must be a full number (1, 4, 8, 3) Usage: /csgoitems add <chance> (your held item will be the item)"
    36.                 stop
    37.             if tool of player is air:
    38.                 message "&cYou can't add air to the list! Usage: /csgoitems add <chance> (your held item will be the item)"
    39.                 stop
    40.             loop {_c} times:
    41.                 add tool of player to {csgocrate::items::*}
    42.             message "&a%firstCapital(tool of player)% added to the list with chance %{_c}%!"
    43.             stop
    44.         if {_s::1} is "remove":
    45.             if {_s::2} is not set:
    46.                 message "&cPlease input a second argument! Usage: /csgoitems remove <item>"
    47.                 stop
    48.             delete {_s::1}
    49.             set {_item} to join {_s::*} with " "
    50.             if {_item} parsed as a item is not set:
    51.                 message "&cThe second argument has to be a item! Usage: /csgoitems remove <item>"
    52.                 stop
    53.             remove every {_item} parsed as a item from {csgocrate::items::*}
    54.             message "&a%firstCapital({_item})% removed from the list!"
    55.                
    56. on inventory click:
    57.     name of player's current inventory is "{@items-gui-name}" or "{@crate-gui-name}"
    58.     cancel event
    59.                
    60. function firstCapital(t: object) :: string:
    61.     set {_l::*} to split "%{_t}%" at ""
    62.     set {_l::1} to {_l::1} in upper case
    63.     return join {_l::*} with ""
    64.    
    65. on join:
    66.     delete {csgocrate::opening::%player%}
    67.    
    68. on disconnect:
    69.     delete {csgocrate::opening::%player%}
    70.    
    71. function openCSGOCrate(p: player, new: boolean):
    72.     if {_new} is true:
    73.         set {csgocrate::opening::%{_p}%} to true
    74.     open chest with 3 rows named "{@crate-gui-name}" to {_p}
    75.     loop 2 times:
    76.         loop 3 times:
    77.             set slot ((loop-number-2) - 1) * 9 + ((loop-number-1) - 1) * 8 of {_p}'s current inventory to black glass named ""
    78.     loop 2 times:
    79.         loop 2 times:
    80.             loop 3 times:
    81.                 set slot (((loop-number-3) + ((loop-number-2) - 1) * 18) + ((loop-number-1) - 1) * 4) of {_p}'s current inventory to red glass named ""
    82.     loop 2 times:
    83.         set slot ((loop-number - 1) * 18) + 4 of {_p}'s current inventory to torch named ""
    84.     if {_new} is false:
    85.         stop
    86.     loop 100 times:
    87.         add random element of {csgocrate::items::*} to {_items::*}
    88.     loop 10 times:
    89.         add 0.15 seconds to {_times::*}
    90.     loop 10 times:
    91.         add "%loop-number/20+0.15% seconds" parsed as a timespan to {_times::*}
    92.     set {_l::*} to {_items::*}
    93.     loop {_times::*}:
    94.         set {_l::*} to cycleList({_l::*})
    95.         if name of {_p}'s current inventory is "{@crate-gui-name}":
    96.             play sound "ENTITY_EXPERIENCE_ORB_PICKUP" to {_p} with volume 1 and pitch 3
    97.             set {_i} to 0
    98.             loop 7 times:
    99.                 set slot loop-number + 9 of {_p}'s current inventory to {_l::%loop-number%}
    100.         wait loop-value
    101.     if {_new}:
    102.         delete {csgocrate::opening::%{_p}%}
    103.     set {_f} to {_l::4}
    104.     play sound "ENTITY_FIREWORK_BLAST" to {_p} with volume 1 and pitch 1
    105.     loop 3 times:
    106.         show mob spawner flames at {_p} to all players
    107.     give {_f} to {_p}
    108.     send "&aYou got &e%{_f}% &afrom a CSGO crate!" to {_p}
    109.    
    110. function cycleList(l: objects) :: objects:
    111.     loop {_l::*}:
    112.         set {_i} to loop-index parsed as a number + 1
    113.         set {_out::%{_i}%} to loop-value
    114.     set {_s} to size of {_out::*} + 1
    115.     set {_out::1} to {_out::%{_s}%}
    116.     delete {_out::%{_s}%}
    117.     return {_out::*}
    118.            
    119. on right click:
    120.     tool of player is player head
    121.     if {csgocrate::opening::%player%} is set:
    122.         openCSGOCrate(player, false)
    123.         stop
    124.     if {csgocrate::items::*} is not set:
    125.         message "&cNo items defined!"
    126.         stop
    127.     remove 1 player head from tool of player
    128.     openCSGOCrate(player, true)
    Video:
    (It has sound effects but my recording software didn't add it)
    Also if you find any bugs please tell me and I'll try my best to fix them
     
    • Winner Winner x 1
  12. Runakai

    Moderator Supporter

    Joined:
    Apr 27, 2018
    Messages:
    494
    Likes Received:
    31
    Yeah, there is a little one. If I add e.g sunflowers just with different names it's kinda buggy. Sometimes there appear 2 "10.000Coins" sunflowers even though I just add 1
     
  13. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
    Do you mean that there appear two in the opening itself or in the item list
     
  14. Runakai

    Moderator Supporter

    Joined:
    Apr 27, 2018
    Messages:
    494
    Likes Received:
    31
    Both. In the item list it stacks with every sunflower added and in the opening its 2 of them instead of 1
     
  15. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
    Okay I will try rt fix it tomorrow as I don't have much time now, but there might be a chance I get it done today
     
  16. Runakai

    Moderator Supporter

    Joined:
    Apr 27, 2018
    Messages:
    494
    Likes Received:
    31
    Take your time! You can do it whenever you feel like ;=)
     
  17. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
    Okay I think I've fixed the bugs, but if you find any that I've missed, tell me.
    Code (Skript):
    1. options:
    2.     items-gui-name: &aCrate Items
    3.     crate-gui-name: &aCSGO Crate
    4.  
    5. command /csgoitems [<text>]:
    6.     permission: admin
    7.     trigger:
    8.         set {_s::*} to split arg-1 at " "
    9.         if {_s::1} is "list":
    10.             loop {csgocrate::items::*}:
    11.                 set {_t} to "%loop-value%<|>%name of loop-value%"
    12.                 add 1 to {_items::%{_t}%}
    13.             if {_items::*} is not set:
    14.                 message "&cNo items defined!"
    15.                 stop
    16.             set {_rows} to rounded up (size of {_items::*} / 9)
    17.             open chest with {_rows} rows named "{@items-gui-name}" to player
    18.             set {_i} to 0
    19.             loop {_items::*}:
    20.                 delete {_l::*}
    21.                 set {_l::*} to split loop-index at "<|>"
    22.                 set slot {_i} of player's current inventory to {_l::1} parsed as a item named "&a%{_l::2}%" with lore "&7Chance: %loop-value%"
    23.                 add 1 to {_i}
    24.             stop
    25.         if {_s::1} is "add":
    26.             if {_s::2} is not set:
    27.                 message "&cPlease input a second argument! Usage: /csgoitems add <chance> (your held item will be the item)"
    28.                 stop
    29.             if {_s::2} parsed as a number is not set:
    30.                 message "&cThe second argument has to be a number! Usage: /csgoitems add <chance> (your held item will be the item)"
    31.                 stop
    32.             set {_c} to {_s::2} parsed as a number
    33.             if {_c} <= 0:
    34.                 message "&cYour number must be positive and can't be 0! Usage: /csgoitems add <chance> (your held item will be the item)"
    35.                 stop
    36.             if "%{_c}%" contains ".":
    37.                 message "&cYour number must be a full number (1, 4, 8, 3) Usage: /csgoitems add <chance> (your held item will be the item)"
    38.                 stop
    39.             if tool of player is air:
    40.                 message "&cYou can't add air to the list! Usage: /csgoitems add <chance> (your held item will be the item)"
    41.                 stop
    42.             set {_item} to "%tool of player%" parsed as an item
    43.             set name of {_item} to name of tool of player
    44.             set lore of {_item} to lore of tool of player
    45.             loop {_c} times:
    46.                 add {_item} to {csgocrate::items::*}
    47.             message "&a%firstCapital(tool of player)% added to the list with chance %{_c}%!"
    48.             stop
    49.         if {_s::1} is "remove":
    50.             if {_s::2} is not set:
    51.                 message "&cPlease input a second argument! Usage: /csgoitems remove <item>"
    52.                 stop
    53.             delete {_s::1}
    54.             set {_item} to join {_s::*} with " "
    55.             if {_item} parsed as a item is not set:
    56.                 message "&cThe second argument has to be a item! Usage: /csgoitems remove <item>"
    57.                 stop
    58.             loop {csgocrate::items::*}:
    59.                 "%loop-value%" is "%{_item} parsed as a item%"
    60.                 delete {csgocrate::items::%loop-index%}
    61.             message "&a%firstCapital({_item})% removed from the list!"
    62.  
    63. on inventory click:
    64.     name of player's current inventory is "{@items-gui-name}" or "{@crate-gui-name}"
    65.     cancel event
    66.                
    67. function firstCapital(t: object) :: string:
    68.     set {_l::*} to split "%{_t}%" at ""
    69.     set {_l::1} to {_l::1} in upper case
    70.     return join {_l::*} with ""
    71.    
    72. on join:
    73.     delete {csgocrate::opening::%player%}
    74.    
    75. on disconnect:
    76.     delete {csgocrate::opening::%player%}
    77.    
    78. function openCSGOCrate(p: player, new: boolean):
    79.     if {_new} is true:
    80.         set {csgocrate::opening::%{_p}%} to true
    81.     open chest with 3 rows named "{@crate-gui-name}" to {_p}
    82.     loop 2 times:
    83.         loop 3 times:
    84.             set slot ((loop-number-2) - 1) * 9 + ((loop-number-1) - 1) * 8 of {_p}'s current inventory to black glass named ""
    85.     loop 2 times:
    86.         loop 2 times:
    87.             loop 3 times:
    88.                 set slot (((loop-number-3) + ((loop-number-2) - 1) * 18) + ((loop-number-1) - 1) * 4) of {_p}'s current inventory to red glass named ""
    89.     loop 2 times:
    90.         set slot ((loop-number - 1) * 18) + 4 of {_p}'s current inventory to torch named ""
    91.     if {_new} is false:
    92.         stop
    93.     loop 100 times:
    94.         add random element of {csgocrate::items::*} to {_items::*}
    95.     loop 10 times:
    96.         add 0.15 seconds to {_times::*}
    97.     loop 10 times:
    98.         add "%loop-number/20+0.15% seconds" parsed as a timespan to {_times::*}
    99.     set {_l::*} to {_items::*}
    100.     loop {_times::*}:
    101.         set {_l::*} to cycleList({_l::*})
    102.         if name of {_p}'s current inventory is "{@crate-gui-name}":
    103.             play sound "ENTITY_EXPERIENCE_ORB_PICKUP" to {_p} with volume 1 and pitch 3
    104.             set {_i} to 0
    105.             loop 7 times:
    106.                 set slot loop-number + 9 of {_p}'s current inventory to {_l::%loop-number%}
    107.         wait loop-value
    108.     if {_new}:
    109.         delete {csgocrate::opening::%{_p}%}
    110.     set {_f} to {_l::4}
    111.     play sound "ENTITY_FIREWORK_BLAST" to {_p} with volume 1 and pitch 1
    112.     loop 3 times:
    113.         show mob spawner flames at {_p} to all players
    114.     give {_f} to {_p}
    115.     send "&aYou got &e%{_f}% &afrom a CSGO crate!" to {_p}
    116.    
    117. function cycleList(l: objects) :: objects:
    118.     loop {_l::*}:
    119.         set {_i} to loop-index parsed as a number + 1
    120.         set {_out::%{_i}%} to loop-value
    121.     set {_s} to size of {_out::*} + 1
    122.     set {_out::1} to {_out::%{_s}%}
    123.     delete {_out::%{_s}%}
    124.     return {_out::*}
    125.            
    126. on right click:
    127.     tool of player is player head
    128.     if {csgocrate::opening::%player%} is set:
    129.         openCSGOCrate(player, false)
    130.         stop
    131.     if {csgocrate::items::*} is not set:
    132.         message "&cNo items defined!"
    133.         stop
    134.     remove 1 player head from tool of player
    135.     openCSGOCrate(player, true)
     
  18. Runakai

    Moderator Supporter

    Joined:
    Apr 27, 2018
    Messages:
    494
    Likes Received:
    31
    Yes, there is still one. I can't remove heads with the command. They just don't disappear also: one question: Is it possible to modify this to create different crates? I don't want to have a skript for each crate :/ And: I don't know if this is fixable but if I add the head into the crate its kinda buggy when the spinning part is on. Sometimes there are steve heads and sometimes the head i added
     
    #18 Runakai, May 21, 2018
    Last edited: May 21, 2018
  19. TPGamesNL

    Supporter Addon Developer Dev Programme

    Joined:
    Jan 20, 2018
    Messages:
    1,500
    Likes Received:
    102
    Medals:
    Oh wow I just realised that I totally ignored this the last time I saw this. Well hold on I'm going to fix the bugs and add the multiple crates
     
  20. Sean Sean

    Sean Sean Member

    Joined:
    May 19, 2018
    Messages:
    16
    Likes Received:
    0
    Can you make me a toggle feature to toggle this feature here:
    Code (Skript):
    1. on left click:
    2.     player is holding any pickaxe:
    3.         player is sneaking
    4.         cooldown "sellall" of player is finish:
    5.             create cooldown "sellall" for player for 3 seconds
    6.             make player execute "/sellall"
    7.         else:
    8.             send "&dPlease wait &d%cooldown ""sellall"" of player%"
    I want the command to be "/togglesell" And whenever you do that you either turn it on or turn it off.
    Can you do that?
     

Share This Page

Loading...