Advertisement
shadowmeld

Sch.lua v 1.0

Dec 25th, 2013
482
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 17.37 KB | None | 0 0
  1. function get_sets()
  2.     -- Augmented Gear
  3.     hagpantsacc  = {    name = "Hagondes Pants", augments = {   "Magic Accuracy +12"    }   }
  4.     hagbodyatk = {  name = "Hagondes Coat", augments = {    "Magic Attack Bonus +10"    }   }
  5.  
  6.     -- Static Sets 
  7.     sets.Hagondes = {   head = "Hagondes Hat",
  8.                                         body = hagbodyatk, hands = "Hagondes Cuffs",
  9.                                         legs = hagpantsacc, feet = "Hagondes Sabots"
  10.                                     }
  11.    
  12.     sets.Refresh = {    head = "Nefer Khat",
  13.                                         body = "Heka's Kalasiris", hands = "Serpentes Cuffs",
  14.                                         legs = "Nares Trews", feet = "Serpentes Sabots"
  15.                                     }
  16.    
  17.     sets.Sublimation = {    ear2 = "Savant's Earring"   }
  18.    
  19.     sets.Kite = {   feet = "Desert Boots"   }
  20.    
  21.     sets.DT = { neck = "Twilight Torque"    }
  22.     sets.PDT = set_combine(sets.DT, {   main = "Earth Staff", legs = "Hagondes Pants" })
  23.     sets.MDT = set_combine(sets.DT, sets.Hagondes)
  24.    
  25.     sets.Haste = set_combine(sets.Hagondes, {   waist = "Goading Belt"  })
  26.    
  27.     sets.INT = set_combine(sets.Hagondes, { ring1 = "Aquilo's Ring", ring2 = "Spiral Ring", back = "Toro Cape", waist = "Cognition Belt" })
  28.    
  29.     sets.MND = set_combine(sets.Hagondes, { ammo = "Kalboron Stone", head = "Gende. Caubeen", ring1 = "Solemn Ring", ring2 = "Sirona's Ring", waist = "Cascade Belt"    })
  30.    
  31.     sets.JA = {}
  32.     sets.JA.Celerity = {}
  33.    
  34.     sets.Staves = {}
  35.    
  36.     sets.Staves.Damage = {}
  37.     sets.Staves.Damage.Default = {main = "Atinian Staff"}
  38.     sets.Staves.Damage.Ice = {main = "Vourukasha I"}
  39.    
  40.     sets.Staves.Accuracy = {}
  41.     sets.Staves.Accuracy.Default = {main = "Atinian Staff"}
  42.    
  43.     sets.Staves.CastSpeed = {}
  44.     sets.Staves.CastSpeed.Default = {main = "Earth Staff"}
  45.     sets.Staves.CastSpeed.Ice = {main = "Vourukasha I"}
  46.    
  47.     sets.Staves.Cure = {main = "Chatoyant Staff"}
  48.    
  49.     sets.Staves.Drain = {main = "Chatoyant Staff"}
  50.    
  51.     sets.Obis = {}
  52.     sets.Obis.Fire = {  waist = "Karin Obi" }
  53.     sets.Obis.Earth = { waist = "Dorin Obi" }
  54.     sets.Obis.Water = { waist = "Suirin Obi"    }
  55.     sets.Obis.Wind = {  waist = "Furin Obi" }
  56.     sets.Obis.Ice = {   waist = "Hyorin Obi"    }
  57.     sets.Obis.Thunder = {   waist = "Rairin Obi"    }
  58.     sets.Obis.Light = { waist = "Korin Obi" }
  59.     sets.Obis.Dark = {  waist = "Anrin Obi" }
  60.    
  61.     sets.Matk = set_combine(sets.Hagondes, {    ammo = "Witchstone",
  62.                                                                                     neck = "Stoicheion Medal", ear1 = "Hecate's Earring", ear2 = "Moldavite Earring",
  63.                                                                                     hands = "Nares Cuffs",
  64.                                                                                     back = "Toro Cape", feet = "Gende. Galoshes"
  65.                                                                                 })
  66.     sets.Macc = set_combine(sets.Hagondes, {    ammo = "Kalboron Stone",
  67.                                                                                     neck = "Stoicheion Medal"
  68.                                                                                 })
  69.    
  70.     sets.CurePotency = set_combine(sets.Staves.Cure, {  head = "Gende. Caubeen",
  71.                                                                                                             body = "Heka's Kalasiris", hands = "Serpentes Cuffs",
  72.                                                                                                             legs = "Nares Trews", feet = "Serpentes Sabots"
  73.                                                                                                         })
  74.                                                                                                        
  75.     -- Dynamic Sets
  76.     sets.FastCast = set_combine(sets.Staves.CastSpeed.Default, {    ammo = "Incantor Stone",
  77.                                         head = "Nares Cap", ear1 = "Loquac. Earring",
  78.                                         body = "Anhur Robe", hands = "Gendewitha Gages",
  79.                                         back = "Swith Cape", legs = "Orvail Pants +1", feet = "Chelona Boots"
  80.                                     })
  81.    
  82.     grimoire_buffs = T{ 'Celerity', 'Alacrity', 'Perpetuance', 'Immanence', 'Penury', 'Parsimony', 'Rapture', 'Ebullience', 'Klimaform' }
  83.     sets.Grimoire = {}
  84.     sets.Grimoire.CastTime = {} -- Add Academic's Loafers when obtained
  85.     sets.Grimoire.Celerity = {} -- Add Argute Loafers when obtained
  86.     sets.Grimoire.Alacrity = sets.Grimoire.Celerity
  87.     sets.Grimoire.Perpetuance = {   hands = "Svnt. Bracers +2"  }
  88.     sets.Grimoire.Immanence = sets.Grimoire.Perpetuance
  89.     sets.Grimoire.Penury = {} -- Add Savant's Pants when obtained
  90.     sets.Grimoire.Parsimony = sets.Grimoire.Penury
  91.     sets.Grimoire.Rapture = {} -- Add Savant's Bonnet when obtained
  92.     sets.Grimoire.Ebullience = sets.Grimoire.Rapture
  93.     sets.Grimoire.Klimaform = {} -- Add Savant's Loafers when obtained
  94.    
  95.     sets.ElementalMagic = {}
  96.     sets.ElementalMagic.FastCast = {}
  97.     sets.ElementalMagic.FastCast.Default = set_combine(sets.Staves.CastSpeed.Default, sets.FastCast, {  neck = "Stoicheion Medal"   })
  98.     sets.ElementalMagic.FastCast.Impact = set_combine(sets.ElementalMagic.FastCast.Default, {   head = "", body = "Twilight Cloak"  })
  99.     sets.ElementalMagic.FastCast.Master = {}
  100.    
  101.     sets.ElementalMagic.Default = set_combine(sets.Staves.Damage.Default, sets.Macc, sets.INT, sets.Matk)
  102.     sets.ElementalMagic.Accuracy = set_combine(sets.INT, sets.Matk, sets.Macc)
  103.     sets.ElementalMagic.Debuff = set_combine(sets.INT, sets.Macc)
  104.     sets.ElementalMagic.Helix = sets.ElementalMagic.Default
  105.     sets.ElementalMagic.Impact = set_combine(sets.ElementalMagic.Default, { head = "", body = "Twilight Cloak"  })
  106.     sets.ElementalMagic.Master = {}
  107.    
  108.     sets.DarkMagic = {}
  109.     sets.DarkMagic.FastCast = {}
  110.     sets.DarkMagic.FastCast.Default = sets.FastCast
  111.     sets.DarkMagic.FastCast.Stun = set_combine(sets.Staves.Accuracy.Default, sets.Macc, sets.FastCast, { sub = "Caecus Grip", waist = "Goading Belt", legs = "Hagondes Pants", feet = "Hagondes Sabots" })
  112.     sets.DarkMagic.FastCast.Master = {}
  113.    
  114.     sets.DarkMagic.Default = set_combine(sets.Staves.Damage.Default, sets.Macc, {   sub = "Caecus Grip", })
  115.     sets.DarkMagic.Drain = set_combine(sets.DarkMagic.Default, sets.Staves.Drain)
  116.     sets.DarkMagic.Stun = sets.DarkMagic.FastCast.Stun
  117.     sets.DarkMagic.Master = {}
  118.    
  119.     enfeebling_potency_spells = T{ 'Slow', 'Slow II', 'Blind', 'Blind II', 'Paralyze', 'Paralyze II', 'Addle'   }
  120.     sets.EnfeeblingMagic = {}
  121.     sets.EnfeeblingMagic.FastCast = {}
  122.     sets.EnfeeblingMagic.FastCast.Master = {}
  123.    
  124.     sets.EnfeeblingMagic.WhiteMagic = {}
  125.     sets.EnfeeblingMagic.WhiteMagic.Default = set_combine(sets.Staves.Accuracy.Default, sets.MND, sets.Macc, {  sub = "Macero Grip" })
  126.     sets.EnfeeblingMagic.WhiteMagic.Potency = set_combine(sets.Staves.Accuracy.Default, sets.Macc, sets.MND, {sub = "Macero Grip"   })
  127.     sets.EnfeeblingMagic.BlackMagic = {}
  128.     sets.EnfeeblingMagic.BlackMagic.Default = set_combine(sets.Staves.Accuracy.Default, sets.INT, sets.Macc, {  sub = "Macero Grip" })
  129.     sets.EnfeeblingMagic.BlackMagic.Potency = set_combine(sets.Staves.Accuracy.Default, sets.Macc, sets.INT, {sub = "Macero Grip"   })
  130.     sets.EnfeeblingMagic.Master = {}
  131.    
  132.     enhancing_no_skill_spells = T{  'Haste', 'Refresh', 'Refresh II', 'Protect', 'Shell', 'Blink', 'Aquaveil', 'Sneak', 'Invisible' }
  133.     sets.EnhancingMagic = {}
  134.     sets.EnhancingMagic.FastCast = {}
  135.     sets.EnhancingMagic.FastCast.Default = set_combine(sets.FastCast, { waist = "Siegel Sash"   })
  136.     sets.EnhancingMagic.FastCast.Master = {}
  137.    
  138.     sets.EnhancingMagic.Default = set_combine(sets.EnhancingMagic.FastCast.Default, {   waist = "Goading Belt", legs = "Hagondes Pants", feet = "Hagondes Sabots"   })
  139.     sets.EnhancingMagic.Skill = set_combine(sets.EnhancingMagic.Default, {  sub = "Fulcio Grip", body = "Anhur Robe", waist = "Olympus Sash"    })
  140.     sets.EnhancingMagic.Stoneskin = set_combine(sets.MND, sets.EnhancingMagic.Skill, {  waist = "Siegel Sash"   })
  141.     sets.EnhancingMagic.Master = {}
  142.    
  143.     sets.HealingMagic = {}
  144.     sets.HealingMagic.FastCast = {}
  145.     sets.HealingMagic.FastCast.Default = sets.FastCast
  146.     sets.HealingMagic.FastCast.Cure = set_combine(sets.FastCast, {  body = "Heka's Kalasiris"   })
  147.     sets.HealingMagic.FastCast.Master = {}
  148.    
  149.     sets.HealingMagic.Default = sets.HealingMagic.FastCast.Default
  150.     sets.HealingMagic.Skill = { ring2 = "Sirona's Ring" }
  151.     sets.HealingMagic.Cursna = set_combine(sets.HealingMagic.Default, sets.HealingMagic.Skill, {    waist = "Goading Belt", legs = "Hagondes Pants", feet = "Hagondes Sabots"   })
  152.     sets.HealingMagic.Cure = set_combine(sets.MND, sets.HealingMagic.Skill, sets.CurePotency)
  153.     sets.HealingMagic.Master = {}
  154.    
  155.     sets.Idle = {}
  156.     sets.Idle.Default = set_combine(sets.INT, sets.PDT, sets.Refresh)
  157.     sets.Idle.Master = sets.Idle.Default
  158.    
  159.     sets.Resting = {}
  160.     sets.Resting.Default = sets.Idle.Default
  161.     sets.Resting.Master = sets.Resting.Default
  162.    
  163.     sets.Engaged = {}
  164.     sets.Engaged.Melee = set_combine(sets.Hagondes, {   main = "Atinian Staff", sub = "Pole Grip", waist = "Goading Belt"   })
  165.     sets.Engaged.Caster = sets.Idle.Default
  166.     sets.Engaged.Master = sets.Engaged.Caster
  167.    
  168.     strategems = {}
  169.     strategems['Light Arts'] = {    addend = 'addendumwhite', cost = 'penury', speed = 'celerity', aoe = 'accession', power = 'rapture', duration = 'perpetuance', accuracy = 'altruism', enmity = 'tranquility'    }
  170.     strategems['Dark Arts'] = { addend = 'addendumblack', cost = 'parsimony', speed = 'alacrity', aoe = 'manifestation', power = 'ebullience', skillchain = 'immanence', accuracy = 'focalization', enmity = 'equanimity'   }
  171.     strategems.list = T{    'addend', 'cost', 'speed', 'aoe', 'power', 'duration', 'skillchain', 'accuracy', 'enmity'   }
  172.     strategems.affected = { ElementalMagic = { 'Parsimony', 'Alacrity', 'Ebullience', 'Immanence', 'Focalization', 'Equanimity' },
  173.                                                     DarkMagic = {   'Parsimony', 'Alacrity', 'Ebullience', 'Immanence', 'Focalization', 'Eqanimity' },
  174.                                                     EnhancingMagic = {  'Penury', 'Celerity', 'Accession', 'Perpetuance'    },
  175.                                                     EnfeeblingMagic = { 'Parsimony', 'Alacrity', 'Manifestation', 'Focalization'    },
  176.                                                     HealingMagic = {    'Penury', 'Celerity', 'Accession', 'Rapture', 'Tranquility' },
  177.                                                     DivineMagic = { 'Penury', 'Celerity', 'Accession', 'Rapture', 'Tranquility' }
  178.                                                 }
  179.                                                
  180.     -- Declare aliases for strategems
  181.     for i = 1, #strategems.list do
  182.         windower.send_command('alias ' .. strategems.list[i] .. ' gs c ' .. strategems.list[i])
  183.     end
  184.    
  185.     -- Strat Queue Implementation
  186.     queue = {}
  187.     queue.max = 3
  188.     queue.delay = 1.5
  189.     queue.enabled = false
  190.     queue.entries = {}
  191. end
  192.  
  193. function precast(spell, action)
  194.     verify_equip()
  195.  
  196.     if spell.skill:find('Magic') and sets[spell.skill] then
  197.         build_casting_sets(spell)
  198.     end
  199.    
  200. end
  201.  
  202. function midcast(spell, action)
  203.  
  204.     if spell.skill:find('Magic') and sets[spell.skill] then
  205.         equip(sets[spell.skill].Master)
  206.     end
  207.  
  208. end
  209.  
  210. function aftercast(spell, action)
  211.     if T{'Idle', 'Resting', 'Engaged'}:contains(player.status) then
  212.         equip(sets[player.status].Master)
  213.     end
  214. end
  215.  
  216. function pet_midcast(spell, action)
  217.    
  218. end
  219.  
  220. function pet_aftercast(spell, action)
  221.  
  222. end
  223.  
  224. function buff_change(buff, gain_or_loss)
  225.  
  226.     if buff == 'Sublimation: Activated' and gain_or_loss == 'gain' then
  227.         sets.Idle.Master = set_combine(sets.Idle.Master, sets.Sublimation)
  228.     elseif buff == 'Sublimation: Activated' and gain_or_loss == 'loss' then
  229.         sets.Idle.Master = sets.Idle.Default
  230.     end
  231.  
  232. end
  233.  
  234. function status_change(new, old)
  235.     if T{'Zoning', 'Fishing', 'Event', 'Dead'}:contains(old) then
  236.         return
  237.     end
  238.  
  239.     if T{'Idle', 'Resting', 'Engaged'}:contains(new) then
  240.         equip(sets[new].Master)
  241.     end
  242. end
  243.  
  244. function self_command(command)
  245.    
  246.     --Handle strategem calls
  247.     if strategems.list:contains(command) then
  248.         if queue.enabled then
  249.             enqueue(command)
  250.         else
  251.             use_strategem(command)
  252.         end
  253.     end
  254.    
  255.     --equip(sets.ElementalMagic.Default)
  256. end
  257.  
  258. function use_strategem(command)
  259.  
  260.     -- Commands: addend, power, speed, cost, duration, aoe, skillchain
  261.     -- Must have either shortcuts addon or spellcast plugin loaded to handle the alias command sent to windower
  262.     if buffactive['Light Arts'] or buffactive['Addendum: White'] then
  263.         if strategems['Light Arts'][command] then
  264.             windower.send_command(strategems['Light Arts'][command])
  265.         else
  266.             windower.add_to_chat(123, 'Light Arts does not have a strategem for ' .. command .. '.')
  267.         end
  268.     elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
  269.         if strategems['Dark Arts'][command] then
  270.             windower.send_command(strategems['Dark Arts'][command])
  271.         else
  272.             windower.add_to_chat(123, 'Dark Arts does not have a strategem for ' .. command .. '.')
  273.         end
  274.     else
  275.         windower.add_to_chat(123, 'Command could not be processed, arts not up.')
  276.     end
  277.  
  278. end
  279.  
  280. function clear_queue()
  281.  
  282.     queue.entries = {}
  283.    
  284. end
  285.  
  286. function set_max_queue(value)
  287.  
  288.     -- Impose limit on max queue value, > 1 and < 6
  289.     if value < 1 or value > 5 then
  290.         windower.add_to_chat(123, 'You must set queue max to be between 1 and 5.')
  291.     elseif value > 0 and value < 6 then
  292.         queue.max = value
  293.     else
  294.         windower.add_to_chat(123, 'A non valid max value was passed into the function set_max_queue: ' .. value)
  295.     end
  296.    
  297. end
  298.  
  299. function enqueue(strat)
  300.     -- For now, the enqueue function does not convert the alias to the actual strategem command.  I may change that later to
  301.     -- write code to prevent strategems from being added to the queue that cannot be cast such as perpetuance when in dark arts.
  302.     if #queue.entries < queue.max then
  303.         if not #queue.entries:contains(strat) then
  304.             queue.entries:insert(strat, 1) -- Adds strat to the front of the queue so that when dequeued, strats are cast in the order sent.
  305.         else
  306.             windower.add_to_chat(123, 'The strategem ' .. strat .. ' is already in the queue.')
  307.         end
  308.     else
  309.         windower.add_to_chat(123, 'The queue is already at its maximum capacity')
  310.     end
  311.    
  312. end
  313.  
  314. function dequeue()
  315.  
  316.     if #queue.entries > 0 then
  317.         strat = queue.entries.remove()
  318.         use_strategem(strat)
  319.     end
  320.  
  321. end
  322.  
  323. function list_queue()
  324.  
  325.     windower.add_to_chat(123, 'Current Queue: { ' .. queue.entries:concat(', ') .. ' }')
  326.     windower.add_to_chat(123, 'Max Queue Length: ' .. queue.max)
  327.     windower.add_to_chat(123, 'Strat Delay: ' .. queue.delay)
  328.  
  329. end
  330.  
  331. function build_master(status)
  332.  
  333.     if sets[status].Master then
  334.         sets[status].Master = sets[status].Default
  335.     end
  336.  
  337. end
  338.  
  339. function build_casting_sets(spell)
  340.  
  341.     sets[spell.skill].FastCast.Master = {}
  342.     sets[spell.skill].Master = {}
  343.    
  344.     -- Build Precast set
  345.     if sets[spell.skill].FastCast[spell.english] then -- Covers Stun and Impact Casting
  346.         sets[spell.skill].FastCast.Master = sets[spell.skill].FastCast[spell.english]
  347.     elseif spell.english:find('Cure') or spell.english:find('Cura') then -- Covers Cure, Cura, and Curaga Casting
  348.         sets[spell.skill].FastCast.Master = sets[spell.skill].FastCast.Cure
  349.     elseif sets[spell.skill].FastCast.Default then -- Covers specific skill casting gear such as Stoicheion Medal or Siegel Sash
  350.         sets[spell.skill].FastCast.Master = sets[spell.skill].FastCast.Default
  351.     else
  352.         sets[spell.skill].FastCast.Master = sets.FastCast
  353.     end
  354.    
  355.     --  Adds any gear that enhances cast speed through the buff Grimoire such as Academic's Loafers
  356.     if spell.type == 'BlackMagic' and (buffactive['Dark Arts'] or buffactive['Addendum: Black']) then
  357.         sets[spell.skill].FastCast.Master = set_combine(sets[spell.skill].FastCast.Master, sets.Grimoire.CastTime)
  358.     elseif spell.type == 'WhiteMagic' and (buffactive['Light Arts'] or buffactive['Addendum: White']) then
  359.         sets[spell.skill].FastCast.Master = set_combine(sets[spell.skill].FastCast.Master, sets.Grimoire.CastTime)
  360.     end
  361.    
  362.     -- Adds relevant cast speed reduction Magian Staff if available
  363.     if sets.Staves.CastSpeed[spell.element] then
  364.         sets[spell.skill].FastCast.Master = set_combine(sets[spell.skill].FastCast.Master, sets.Staves.CastSpeed[spell.element])
  365.     end
  366.    
  367.     -- equip(sets[spell.skill].FastCast.Master)
  368.     -- windower.add_to_chat(123, "Testing Set Build, Fast Cast")
  369.  
  370.     -- Build Midcast set
  371.     if sets[spell.skill][spell.english] then
  372.         sets[spell.skill].Master = sets[spell.skill][spell.english]
  373.  
  374.         if spell.english == 'Drain' then
  375.             weather_check(spell)
  376.         end
  377.     else
  378.         if spell.skill == 'ElementalMagic' then
  379.             if spell.english:find('helix') then
  380.                 sets[spell.skill].Master = sets[spell.skill].Helix
  381.  
  382.                 weather_check(spell)
  383.             elseif T{ 'Burn', 'Frost', 'Drown', 'Shock', 'Rasp', 'Choke'    }:contains(spell.english) then
  384.                 sets[spell.skill].Master = sets[spell.skill].Debuff
  385.             else
  386.                 sets[spell.skill].Master = sets[spell.skill].Default
  387.  
  388.                 weather_check(spell)
  389.             end
  390.         elseif spell.skill == 'DarkMagic' then
  391.             windower.add_to_chat(123, spell.english)
  392.             if spell.english:find('Aspir') then
  393.                 windower.add_to_chat(123, 'made it')
  394.                 sets[spell.skill].Master = sets[spell.skill].Drain
  395.  
  396.                 weather_check(spell)
  397.             else
  398.                 sets[spell.skill].Master = sets[spell.skill].Default
  399.             end
  400.         elseif spell.skill == 'EnhancingMagic' then
  401.             if not enhancing_no_skill_spells:contains(spell.english) then
  402.                 sets[spell.skill].Master = sets[spell.skill].Skill
  403.             else
  404.                 sets[spell.skill].Master = sets[spell.skill].Default
  405.             end
  406.         elseif spell.skill == 'EnfeeblingMagic' then
  407.             if enfeebling_potency_spells:contains(spell.english) then
  408.                 sets[spell.skill].Master = sets[spell.skill][spell.type].Potency
  409.             else
  410.                 sets[spell.skill].Master = sets[spell.skill][spell.type].Default
  411.             end
  412.         elseif spell.skill == 'HealingMagic' then
  413.             if spell.english:find('Cur') then
  414.                 sets[spell.skill].Master = sets[spell.skill].Cure
  415.  
  416.                 weather_check(spell)
  417.             else
  418.                 sets[spell.skill].Master = sets[spell.skill].Default
  419.             end
  420.         end
  421.     end
  422.    
  423.    
  424.     -- This adds any relevant strategem gear to both fast cast and casting sets after they are built
  425.     for i = 1, #strategems.affected[spell.skill] do
  426.         if buffactive[strategems.affected[spell.skill][i]] and sets.Grimoire[strategems.affected[spell.skill][i]] then
  427.             sets[spell.skill].FastCast.Master = set_combine(sets[spell.skill].FastCast.Master, sets.Grimoire[strategems.affected[spell.skill][i]])
  428.             sets[spell.skill].Master = set_combine(sets[spell.skill].Master, sets.Grimoire[strategems.affected[spell.skill][i]])
  429.         end
  430.     end
  431.  
  432.     if spell.casttime > 1.9 then
  433.         equip(sets[spell.skill].FastCast.Default)
  434.     else
  435.         equip(sets[spell.skill].Master)
  436.     end
  437. end
  438.  
  439. function weather_check(spell)
  440.     if spell.element == world.day_element or spell.element == world.weather_element then
  441.         sets[spell.skill].Master = set_combine(sets[spell.skill].Master, sets.Obis[spell.element], {back = "Twilight Cape"})
  442.     end
  443. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement