Advertisement
dunc001

EBT

Sep 6th, 2016
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 17.90 KB | None | 0 0
  1. function OnDying(Actor akKiller)
  2.  
  3.     Float Spasm
  4.     Float random2
  5.     Int iBleeding = 0
  6.     Int random = utility.RandomInt(3, 5)
  7.     if NodeChecked == false
  8.         utility.wait(0.200000)
  9.         if NodeChecked == false
  10.             utility.wait(0.500000)
  11.         endIf
  12.     endIf
  13.     if bKillmoved == true && akKiller != target && target != none
  14.         spAmount = zblood_spas_amount.GetValueInt()
  15.         while iBleeding < random && target != none && target.Is3DLoaded() == true
  16.             if !target.WornHasKeyword(DecapKeyword)
  17.                 self.randomHitTextureRandomLocation()
  18.                 iBleeding += 1
  19.                 random = utility.RandomInt(6, 7)
  20.             else
  21.                 Bool bBleedingHead
  22.                 if bBleedingHead == false
  23.                     random = utility.RandomInt(9, 12)
  24.                     bBleedingHead == true
  25.                 endIf
  26.                 if iBleeding < 8
  27.                     self.randomHitSplatterHEAD()
  28.                 endIf
  29.                 BloodVisual.Play(target as objectreference, 0.200000, none)
  30.                 iBleeding += 1
  31.                 if iBleeding < 11
  32.                     if utility.RandomFloat(0.0100000, 1.00000) <= zblood_spas_chance_head.GetValue()
  33.                         Spasm = utility.RandomInt(spAmount + 5, spAmount + 20) as Float
  34.                         if zblood_spas_mass.GetValueInt() == 1
  35.                             Spasm = target.GetMass() / utility.RandomInt(spAmount, spAmount + 2) as Float
  36.                         elseIf Spasm > 51 as Float
  37.                             Spasm -= 20 as Float
  38.                         endIf
  39.                         target.ApplyHavokImpulse(0.000000, 0.000000, 1.00000, Spasm)
  40.                     endIf
  41.                     utility.wait(1 as Float)
  42.                 else
  43.                     utility.wait(2 as Float)
  44.                 endIf
  45.             endIf
  46.         endWhile
  47.         target.PlayImpactEffect(BloodSpurtLarge, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  48.         target.PlayImpactEffect(BloodSpurtNormal, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  49.     elseIf target.WornHasKeyword(DecapKeyword) && target != none
  50.         random = utility.RandomInt(8, 10)
  51.         while iBleeding < random && target != none && target.Is3DLoaded() == true
  52.             if iBleeding < 3
  53.                 self.randomHitSplatterHEADless()
  54.             endIf
  55.             BloodVisual.Play(target as objectreference, 0.200000, none)
  56.             iBleeding += 1
  57.             if iBleeding < 8
  58.                 if utility.RandomFloat(0.0100000, 1.00000) <= zblood_spas_chance_head.GetValue()
  59.                     Spasm = utility.RandomInt(spAmount, spAmount + 15) as Float
  60.                     if zblood_spas_mass.GetValueInt() == 1
  61.                         Spasm = target.GetMass() / utility.RandomInt(spAmount, spAmount + 2) as Float
  62.                     elseIf Spasm > 51 as Float
  63.                         Spasm -= 20 as Float
  64.                     endIf
  65.                     target.ApplyHavokImpulse(0.000000, 0.000000, 1.00000, Spasm)
  66.                 endIf
  67.                 utility.wait(1 as Float)
  68.             else
  69.                 utility.wait(2 as Float)
  70.             endIf
  71.         endWhile
  72.         target.PlayImpactEffect(BloodSpurtNormal, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  73.     endIf
  74.     if isFirstHit == true && isValidHit == false
  75.         utility.wait(3.50000)
  76.     endIf
  77.     if akKiller.GetRace() == WerewolfBeastRace
  78.         self.randomHitTextureRandomLocation()
  79.         self.randomHitTextureRandomLocation()
  80.         self.randomHitTextureRandomLocation()
  81.     endIf
  82.     if (isValidHit == true || bKillmoved == true) && target.IsDead() && isSummon == false && target.Is3DLoaded() == true
  83.         Int picktexturepool = utility.RandomInt(0, 3)
  84.         spAmount = zblood_spas_amount.GetValueInt()
  85.         iBleeding = 0
  86.         Float bodylocationx = target.GetPositionX()
  87.         Float bodylocationy = target.GetPositionY()
  88.         utility.wait(1.50000)
  89.         while bodylocationx != target.GetPositionX() && bodylocationy != target.GetPositionY() && target.IsDead() && target.Is3DLoaded() == true
  90.             if zblood_spas_mass.GetValueInt() == 1
  91.                 Spasm = target.GetMass() / utility.RandomInt(spAmount, spAmount + 5) as Float
  92.                 Spasm += (spAmount / 2) as Float
  93.             else
  94.                 Spasm = (utility.RandomInt(spAmount, spAmount + 30) - random) as Float
  95.             endIf
  96.             if target != none
  97.                 target.PlayImpactEffect(BloodSpurtArrow, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  98.                 if bKillmoved == true && !target.WornHasKeyword(DecapKeyword)
  99.                     target.PlayImpactEffect(BloodSpurtLarge, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  100.                 endIf
  101.                 if bKillmoved == true && !target.WornHasKeyword(DecapKeyword) && utility.RandomFloat(0.0100000, 1.00000) <= zblood_spas_chance_kill.GetValue()
  102.                     random = utility.RandomInt(0, 1)
  103.                     while target.IsDead() && target.Is3DLoaded() == true && random <= 6
  104.                         Int spas_times
  105.                         target.PlayImpactEffect(BloodSpurtLarge, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  106.                         if random == 3 || random == 6
  107.                             self.randomHitTextureSmall()
  108.                             target.PlayImpactEffect(BloodSpurtNormal, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  109.                         endIf
  110.                         if random == 5
  111.                             Spasm *= 0.550000
  112.                         endIf
  113.                         Float spas_times_RND = utility.RandomFloat(0.0500000, 0.900000)
  114.                         if spas_times_RND <= 0.200000
  115.                             spas_times = 7
  116.                         else
  117.                             spas_times = 3
  118.                         endIf
  119.                         while target.IsDead() && target.Is3DLoaded() == true && iBleeding <= spas_times
  120.                             spX = utility.RandomFloat(-0.300000, 0.300000)
  121.                             spY = utility.RandomFloat(-0.300000, 0.300000)
  122.                             spZ = utility.RandomFloat(1 as Float, 0.800000)
  123.                             target.ApplyHavokImpulse(spX, spY, spZ, Spasm)
  124.                             utility.wait(spas_times_RND)
  125.                             iBleeding += 1
  126.                         endWhile
  127.                         iBleeding = 0
  128.                         random += 1
  129.                     endWhile
  130.                     bKillmoved = false
  131.                 endIf
  132.             endIf
  133.             bodylocationx = target.GetPositionX()
  134.             bodylocationy = target.GetPositionY()
  135.             self.blooddropsDead()
  136.         endWhile
  137.         random = utility.RandomInt(19, 20)
  138.         iBleeding = 0
  139.         while iBleeding < random && target.IsDead() && target.Is3DLoaded() == true && zblood_poolEnabled.GetValueInt() == 1
  140.             if target != none && iBleeding <= 15
  141.                 if picktexturepool == 0
  142.                     target.PlayImpactEffect(BloodFXPool01_ANI, asNodeName, 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  143.                 elseIf picktexturepool == 1
  144.                     target.PlayImpactEffect(BloodFXPool02_ANI, asNodeName, 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  145.                 elseIf picktexturepool == 2
  146.                     target.PlayImpactEffect(BloodFXPool03_ANI, asNodeName, 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  147.                 elseIf picktexturepool == 3
  148.                     target.PlayImpactEffect(BloodFXPool04_ANI, asNodeName, 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  149.                 endIf
  150.             endIf
  151.             if target != none && iBleeding > 15
  152.                 if picktexturepool == 0
  153.                     target.PlayImpactEffect(BloodFXPool01, asNodeName, 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  154.                 elseIf picktexturepool == 1
  155.                     target.PlayImpactEffect(BloodFXPool02, asNodeName, 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  156.                 elseIf picktexturepool == 2
  157.                     target.PlayImpactEffect(BloodFXPool03, asNodeName, 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  158.                 elseIf picktexturepool == 3
  159.                     target.PlayImpactEffect(BloodFXPool04, asNodeName, 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  160.                 endIf
  161.             endIf
  162.             utility.wait(0.100000)
  163.             iBleeding += 1
  164.         endWhile
  165.     endIf
  166. endFunction
  167.  
  168. function randomHitTextureRandomLocationHIT()
  169.  
  170.     randomLocationX = utility.RandomFloat(-1.00000, 1.00000)
  171.     randomLocationY = utility.RandomFloat(-1.00000, 1.00000)
  172.     picktexture = utility.RandomInt(0, 2)
  173.     if target != none
  174.         if picktexture == 0
  175.             target.PlayImpactEffect(BigBloodFX01, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  176.             return
  177.         elseIf picktexture == 1
  178.             target.PlayImpactEffect(BigBloodFX02, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  179.             return
  180.         elseIf picktexture == 2
  181.             target.PlayImpactEffect(BigBloodFX03, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  182.             return
  183.         endIf
  184.     endIf
  185. endFunction
  186.  
  187. ; Skipped compiler generated GetState
  188.  
  189. function randomHitSplatterHEADless()
  190.  
  191.     picktexture = utility.RandomInt(0, 3)
  192.     if target != none
  193.         if picktexture == 0
  194.             target.PlayImpactEffect(SmallBloodFX01, "NPC Neck [Neck]", 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  195.             return
  196.         elseIf picktexture == 1
  197.             target.PlayImpactEffect(SmallBloodFX02, "NPC Neck [Neck]", 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  198.             return
  199.         elseIf picktexture == 2
  200.             target.PlayImpactEffect(SmallBloodFX03, "NPC Neck [Neck]", 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  201.             return
  202.         elseIf picktexture == 3
  203.             target.PlayImpactEffect(SmallBloodFX04, "NPC Neck [Neck]", 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  204.             return
  205.         endIf
  206.     endIf
  207. endFunction
  208.  
  209. function OnEnterBleedout()
  210.  
  211.     if AggressorRace != DragonRace || AggressorRace != AlduinRace
  212.         self.bloodDrops()
  213.     endIf
  214. endFunction
  215.  
  216. ; Skipped compiler generated GotoState
  217.  
  218. function bloodDrops()
  219.  
  220.     Int MaxAmount = 0
  221.     while target.IsBleedingOut() && target != none && MaxAmount <= 100 && target.Is3DLoaded() == true
  222.         picktexture = utility.RandomInt(0, 4)
  223.         randomLocationX = utility.RandomFloat(0.000000, 0.600000)
  224.         randomLocationY = utility.RandomFloat(0.300000, 0.900000)
  225.         if target != none
  226.             if picktexture == 0
  227.                 target.PlayImpactEffect(BloodFXDrop01, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  228.                 target.PlayImpactEffect(BloodSpurtArrow, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  229.             elseIf picktexture == 1
  230.                 target.PlayImpactEffect(BloodFXDrop02, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  231.             elseIf picktexture == 2
  232.                 target.PlayImpactEffect(BloodFXDrop03, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  233.             elseIf picktexture == 3
  234.                 target.PlayImpactEffect(BloodFXDrop04, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  235.             elseIf picktexture == 4
  236.                 target.PlayImpactEffect(BloodFXDrop05, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  237.                 target.PlayImpactEffect(BloodSpurtArrow, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  238.             endIf
  239.         endIf
  240.         utility.wait(1.20000)
  241.         MaxAmount += 1
  242.     endWhile
  243. endFunction
  244.  
  245. function randomHitTextureSmall()
  246.  
  247.     picktexture = utility.RandomInt(0, 3)
  248.     randomLocationX = utility.RandomFloat(-0.500000, 0.500000)
  249.     randomLocationY = utility.RandomFloat(-0.500000, 0.500000)
  250.     if target != none
  251.         if picktexture == 0
  252.             target.PlayImpactEffect(SmallBloodFX01, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  253.             return
  254.         elseIf picktexture == 1
  255.             target.PlayImpactEffect(SmallBloodFX02, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  256.             return
  257.         elseIf picktexture == 2
  258.             target.PlayImpactEffect(SmallBloodFX03, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  259.             return
  260.         elseIf picktexture == 3
  261.             target.PlayImpactEffect(SmallBloodFX04, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  262.             return
  263.         endIf
  264.     endIf
  265. endFunction
  266.  
  267. function blooddropsDead()
  268.  
  269.     Int MaxAmount = 0
  270.     while target != none && MaxAmount <= 2 && target.Is3DLoaded() == true
  271.         picktexture = utility.RandomInt(0, 1)
  272.         randomLocationX = utility.RandomFloat(0.000000, 0.500000)
  273.         randomLocationY = utility.RandomFloat(0.000000, 0.500000)
  274.         if target != none
  275.             if picktexture == 0
  276.                 target.PlayImpactEffect(BloodFXDropNoSpec01, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  277.             elseIf picktexture == 1
  278.                 target.PlayImpactEffect(BloodFXDropNoSpec02, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  279.             endIf
  280.         endIf
  281.         utility.wait(0.500000)
  282.         MaxAmount += 1
  283.     endWhile
  284. endFunction
  285.  
  286. function randomHitSplatterHEAD()
  287.  
  288.     picktexture = utility.RandomInt(0, 3)
  289.     if target != none
  290.         if picktexture == 0
  291.             target.PlayImpactEffect(BloodFX01, "NPC Neck [Neck]", 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  292.             return
  293.         elseIf picktexture == 1
  294.             target.PlayImpactEffect(BloodFX02, "NPC Neck [Neck]", 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  295.             return
  296.         elseIf picktexture == 2
  297.             target.PlayImpactEffect(BloodFX03, "NPC Neck [Neck]", 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  298.             return
  299.         elseIf picktexture == 3
  300.             target.PlayImpactEffect(BloodFX04, "NPC Neck [Neck]", 0 as Float, 0 as Float, -1 as Float, 512 as Float, false, true)
  301.             return
  302.         endIf
  303.     endIf
  304. endFunction
  305.  
  306. function randomHitTextureRandomLocation()
  307.  
  308.     picktexture = utility.RandomInt(0, 7)
  309.     randomLocationX = utility.RandomFloat(-2.50000, 2.50000)
  310.     randomLocationY = utility.RandomFloat(-2.50000, 2.50000)
  311.     if picktexture == 0
  312.         target.PlayImpactEffect(BloodFX01, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  313.         return
  314.     elseIf picktexture == 1
  315.         target.PlayImpactEffect(BloodFX02, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  316.         return
  317.     elseIf picktexture == 2
  318.         target.PlayImpactEffect(BloodFX03, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  319.         return
  320.     elseIf picktexture == 3
  321.         target.PlayImpactEffect(BloodFX04, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  322.         return
  323.     elseIf picktexture == 4
  324.         target.PlayImpactEffect(SmallBloodFX01, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  325.         return
  326.     elseIf picktexture == 5
  327.         target.PlayImpactEffect(SmallBloodFX02, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  328.         return
  329.     elseIf picktexture == 6
  330.         target.PlayImpactEffect(SmallBloodFX03, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  331.         return
  332.     elseIf picktexture == 7
  333.         target.PlayImpactEffect(SmallBloodFX04, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  334.         return
  335.     endIf
  336. endFunction
  337.  
  338. function randomHitTexture()
  339.  
  340.     picktexture = utility.RandomInt(0, 3)
  341.     randomLocationX = utility.RandomFloat(-0.500000, 0.500000)
  342.     randomLocationY = utility.RandomFloat(-0.500000, 0.500000)
  343.     if target != none
  344.         if picktexture == 0
  345.             target.PlayImpactEffect(BloodFX01, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  346.             return
  347.         elseIf picktexture == 1
  348.             target.PlayImpactEffect(BloodFX02, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  349.             return
  350.         elseIf picktexture == 2
  351.             target.PlayImpactEffect(BloodFX03, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  352.             return
  353.         elseIf picktexture == 3
  354.             target.PlayImpactEffect(BloodFX04, asNodeName, randomLocationX, randomLocationY, -1 as Float, 512 as Float, false, true)
  355.             return
  356.         endIf
  357.     endIf
  358. endFunction
  359.  
  360. ;-- State -------------------------------------------
  361. state busy
  362. endState
  363.  
  364. ;-- State -------------------------------------------
  365. auto state BloodEffects
  366.  
  367.     function OnEffectStart(Actor akTarget, Actor akCaster)
  368.  
  369.         target = akTarget
  370.         caster = akCaster
  371.         if target != none
  372.             healthcurrent = target.GetAV("health")
  373.             mindamage = zblood_severeMin.GetValue() * target.GetBaseAV("health")
  374.             if target.isCommandedActor() == true
  375.                 isSummon = true
  376.             endIf
  377.         endIf
  378.     endFunction
  379.  
  380.     function OnHit(objectreference akAggressor, Form akSource, Projectile akProjectile, Bool abPowerAttack, Bool abSneakAttack, Bool abBashAttack, Bool abHitBlocked)
  381.  
  382.         if !akSource as enchantment && !akSource as spell
  383.             self.GotoState("busy")
  384.             if target != none && akAggressor != none
  385.                 AggressorRace = (akAggressor as Actor).GetRace()
  386.                 if akSource.HasKeyword(WeapTypeBattleaxe) || akSource.HasKeyword(WeapTypeBow) || akSource.HasKeyword(WeapTypeDagger) || akSource.HasKeyword(WeapTypeGreatsword) || akSource.HasKeyword(WeapTypeMace) || akSource.HasKeyword(WeapTypeSword) || akSource.HasKeyword(WeapTypeWarAxe) || akSource.HasKeyword(WeapTypeWarHammer) || AggressorRace == DragonRace || AggressorRace == AlduinRace || AggressorRace == WerewolfBeastRace || akAggressor.HasKeyword(ActorTypeAnimal) || akAggressor.HasKeyword(ActorTypeGiant)
  387.                     if target.isInKillMove()
  388.                         if target as objectreference != akAggressor
  389.                             bKillmoved = true
  390.                             target.PlayImpactEffect(BloodSpurtWolf, asNodeName, 0 as Float, 0 as Float, 0 as Float, 512 as Float, false, true)
  391.                         endIf
  392.                     endIf
  393.                     if NodeChecked == false
  394.                         isValidHit = true
  395.                         if target.HasNode("NPC Spine2 [Spn2]")
  396.                             asNodeName = "NPC Spine2 [Spn2]"
  397.                         elseIf target.HasNode("NPC Spine2")
  398.                             asNodeName = "NPC Spine2"
  399.                         elseIf target.HasNode("NPC Ribcage")
  400.                             asNodeName = "NPC Ribcage"
  401.                         elseIf target.HasNode("Canine_Ribcage")
  402.                             asNodeName = "Canine_Ribcage"
  403.                         elseIf target.HasNode("Sabrecat_Ribcage[Spn4]")
  404.                             asNodeName = "Sabrecat_Ribcage[Spn4]"
  405.                         elseIf target.HasNode("[body]")
  406.                             asNodeName = "[body]"
  407.                         elseIf target.HasNode("ChaurusFlyerTorso")
  408.                             asNodeName = "ChaurusFlyerTorso"
  409.                         endIf
  410.                         NodeChecked = true
  411.                         if target.IsDead() && bKillmoved == false && !akSource.HasKeyword(WeapTypeBow)
  412.                             self.randomHitTextureSmall()
  413.                             self.randomHitTextureRandomLocationHIT()
  414.                             isFirstHit = true
  415.                         endIf
  416.                     endIf
  417.                     extrabloodchance = utility.RandomInt(1, 3)
  418.                     health = target.GetAVPercentage("health")
  419.                     damage = healthcurrent - target.GetAV("health")
  420.                     if !(abHitBlocked == true && health >= 0.500000)
  421.                         if damage >= mindamage && !akSource.HasKeyword(WeapTypeBow)
  422.                             self.randomHitTexture()
  423.                         else
  424.                             self.randomHitTextureSmall()
  425.                         endIf
  426.                         if health <= 0.500000 && extrabloodchance == 1 && bKillmoved == false
  427.                             self.randomHitTextureRandomLocationHIT()
  428.                         endIf
  429.                     endIf
  430.                 endIf
  431.             endIf
  432.             healthcurrent = target.GetAV("health")
  433.         endIf
  434.         self.GotoState("BloodEffects")
  435.     endFunction
  436. endState
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement