Advertisement
Guest User

Untitled

a guest
Apr 6th, 2023
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 33.97 KB | Help | 0 0
  1. local UPGRADE_SYSTEM_VERSION = "2.0.0"
  2. print(">> Loaded Upgrade System v" .. UPGRADE_SYSTEM_VERSION)
  3.  
  4. ITEM_UPGRADE_CRYSTAL = 1
  5. ITEM_ENCHANT_CRYSTAL = 2
  6. ITEM_ALTER_CRYSTAL = 3
  7. ITEM_CLEAN_CRYSTAL = 4
  8. ITEM_FORTUNE_CRYSTAL = 5
  9. ITEM_FAITH_CRYSTAL = 6
  10. ITEM_MIND_CRYSTAL = 7
  11. ITEM_LIMITLESS_CRYSTAL = 8
  12. ITEM_MIRRORED_CRYSTAL = 9
  13. ITEM_VOID_CRYSTAL = 10
  14.  
  15. COMMON = 1
  16. RARE = 2
  17. EPIC = 3
  18. LEGENDARY = 4
  19.  
  20. US_CONFIG = {
  21.   {
  22.     [ITEM_UPGRADE_CRYSTAL] = 26385, -- Upgrade Crystal item id
  23.     [ITEM_ENCHANT_CRYSTAL] = 26387, -- Enchantment Crystal item id
  24.     [ITEM_ALTER_CRYSTAL] = 26388, -- Alteration Crystal item id
  25.     [ITEM_CLEAN_CRYSTAL] = 26389, -- Cleansing Crystal item id
  26.     [ITEM_FORTUNE_CRYSTAL] = 26390, -- Fortune Crystal item id
  27.     [ITEM_FAITH_CRYSTAL] = 26391, -- Faith Crystal item id
  28.     [ITEM_MIND_CRYSTAL] = 26392, -- Mind Crystal item id
  29.     [ITEM_LIMITLESS_CRYSTAL] = 26393, -- Limitless Crystal item id
  30.     [ITEM_MIRRORED_CRYSTAL] = 26394, -- Mirrored Crystal item id
  31.     [ITEM_VOID_CRYSTAL] = 26395 -- Void Crystal item id
  32.   },
  33.   ITEM_SCROLL_IDENTIFY = 26386, -- Scrol of Identification item id
  34.   ITEM_UPGRADE_CATALYST = 26383, -- Upgrade Catalyst item id
  35.   CRYSTAL_EXTRACTOR = 26384, -- Crystal Extractor item id
  36.   CRYSTAL_FOSSIL = 26382, -- Crystal Fossil item id
  37.   --
  38.   UPGRADE_SUCCESS_CHANCE = {[1] = 100, [2] = 100, [3] = 95, [4] = 80, [5] = 65, [6] = 40}, -- % chance for the upgrade at given upgrade level, -1 upgrade level on failure
  39.   UPGRADE_LEVEL_DESTROY = 7, -- at which upgrade level should it break if failed, for example if = 7 then upgrading from +6 to +7-9 can destroy item on failure.
  40.   UPGRADE_DESTROY_CHANCE = {[7] = 30, [8] = 15, [9] = 5}, -- chance for the item to break at given upgrade level
  41.   --
  42.   MAX_ITEM_LEVEL = 300, -- max that Item Level can be assigned to item
  43.   MAX_UPGRADE_LEVEL = 9, -- max level that item can be upgraded to,
  44.   --
  45.   ATTACK_PER_ITEM_LEVEL = 10, -- every X Item Level +ATTACK_FROM_ITEM_LEVEL attack
  46.   ATTACK_FROM_ITEM_LEVEL = 1, -- +X bonus attack for every ATTACK_PER_ITEM_LEVEL
  47.   DEFENSE_PER_ITEM_LEVEL = 10, -- every X Item Level +DEFENSE_FROM_ITEM_LEVEL defense
  48.   DEFENSE_FROM_ITEM_LEVEL = 1, -- +X bonus defense for every DEFENSE_PER_ITEM_LEVEL
  49.   ARMOR_PER_ITEM_LEVEL = 10, -- every X Item Level +ARMOR_FROM_ITEM_LEVEL armor
  50.   ARMOR_FROM_ITEM_LEVEL = 1, -- +X bonus armor for every ARMOR_PER_ITEM_LEVEL
  51.   HITCHANCE_PER_ITEM_LEVEL = 10, -- every X Item Level +HITCHANCE_FROM_ITEM_LEVEL hit chance
  52.   HITCHANCE_FROM_ITEM_LEVEL = 1, -- +X bonus hit chance for every HITCHANCE_PER_ITEM_LEVEL
  53.   --
  54.   ITEM_LEVEL_PER_ATTACK = 6, -- +1 to Item Level for every X Attack in item
  55.   ITEM_LEVEL_PER_DEFENSE = 15, -- +1 to Item Level for every X Defense in item
  56.   ITEM_LEVEL_PER_ARMOR = 10, -- +1 to Item Level for every X Armor in item
  57.   ITEM_LEVEL_PER_HITCHANCE = 3, -- +1 to Item Level for every X Hit Chance in item
  58.   ITEM_LEVEL_PER_UPGRADE = 4, -- additional item level per upgrade level
  59.   --
  60.   ATTACK_PER_UPGRADE = 2, -- amount of bonus attack per upgrade level
  61.   DEFENSE_PER_UPGRADE = 2, -- amount of bonus defense per upgrade level
  62.   EXTRADEFENSE_PER_UPGRADE = 1, -- amount of bonus extra defense per upgrade level
  63.   ARMOR_PER_UPGRADE = 2, -- amount of bonus armor per upgrade level
  64.   HITCHANCE_PER_UPGRADE = 3, -- amount of bonus hit chance per upgrade level
  65.   --
  66.   CRYSTAL_FOSSIL_DROP_CHANCE = 1, -- 1:X chance that Crystal Fossil will drop from monster, X means that approximately every X monster will drop Crystal Fossil
  67.   UNIDENTIFIED_DROP_CHANCE = 1, -- 1:X chance that item in monster corpse will be unidentified, X means that approximately every X item will be unidentified
  68.   CRYSTAL_BREAK_CHANCE = 5, -- 1:X chance that Crystal will break when extracted from Fossil, X means that approximately every X Crystal will break
  69.   UNIQUE_CHANCE = 1, -- 1:X chance that unidentified item will become Unique, X means that approximately every X unidentified item will become unique
  70.   REQUIRE_LEVEL = true, -- block equipping items with higher Item Level than Player Level
  71.   RARITY = {
  72.     [COMMON] = {
  73.       name = "common",
  74.       maxBonus = 1, -- max amount of bonus attributes
  75.       chance = 1 -- 1:X chance that item will be common (1 = 100%)
  76.     },
  77.     [RARE] = {
  78.       name = "rare",
  79.       maxBonus = 2, -- max amount of bonus attributes
  80.       chance = 4 -- 1:X chance that item will be common (1 = 100%)
  81.     },
  82.     [EPIC] = {
  83.       name = "epic",
  84.       maxBonus = 3, -- max amount of bonus attributes
  85.       chance = 8 -- 1:X chance that item will be common (1 = 100%)
  86.     },
  87.     [LEGENDARY] = {
  88.       name = "legendary",
  89.       maxBonus = 4, -- max amount of bonus attributes
  90.       chance = 16 -- 1:X chance that item will be common (1 = 100%)
  91.     }
  92.   }
  93. }
  94.  
  95. US_ITEM_TYPES = {
  96.   ALL = 1,
  97.   WEAPON_MELEE = 2,
  98.   WEAPON_DISTANCE = 4,
  99.   WEAPON_WAND = 8,
  100.   SHIELD = 16,
  101.   HELMET = 32,
  102.   ARMOR = 64,
  103.   LEGS = 128,
  104.   BOOTS = 256,
  105.   RING = 512,
  106.   NECKLACE = 1024,
  107.   WEAPON_ANY = 14
  108. }
  109.  
  110. US_UNIQUES = {
  111.   [1] = {
  112.     name = "Flame Spirit",
  113.     attributes = {
  114.       1, -- Max HP
  115.       4, -- Melee Skills
  116.       12, -- Life Steal
  117.       30 -- Flame Strike on Attack
  118.     },
  119.     minLevel = 100, -- Required Item Level to become Unique
  120.     itemType = US_ITEM_TYPES.WEAPON_MELEE + US_ITEM_TYPES.SHIELD -- Can be rolled only for items like Swords, Axes and Clubs
  121.   },
  122.   [2] = {
  123.     name = "Ice Spirit",
  124.     attributes = {
  125.       2, -- Max MP
  126.       3, -- Magic Level
  127.       32, -- Ice Strike on Attack
  128.       44 -- Regenerate Mana on Kill
  129.     },
  130.     minLevel = 70, -- Required Item Level to become Unique
  131.     itemType = US_ITEM_TYPES.WEAPON_WAND + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE -- Can be rolled only for items like Wands, Rods, Rings, Necklaces
  132.   },
  133.   [3] = {
  134.     name = "Terra Spirit",
  135.     attributes = {
  136.       1, -- Max HP
  137.       2, -- Max MP
  138.       3, -- Magic Level
  139.       34 -- Terra Strike on Attack
  140.     },
  141.     minLevel = 70, -- Required Item Level to become Unique
  142.     itemType = US_ITEM_TYPES.WEAPON_WAND + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE -- Can be rolled only for items like Wands, Rods, Rings, Necklaces
  143.   }
  144. }
  145.  
  146. US_TYPES = {
  147.   CONDITION = 0,
  148.   OFFENSIVE = 1,
  149.   DEFENSIVE = 2,
  150.   TRIGGER = 3
  151. }
  152.  
  153. US_TRIGGERS = {
  154.   ATTACK = 0,
  155.   HIT = 1,
  156.   KILL = 2
  157. }
  158.  
  159. US_ENCHANTMENTS = {
  160.   [1] = {
  161.     name = "Max HP",
  162.     combatType = US_TYPES.CONDITION,
  163.     condition = CONDITION_ATTRIBUTES,
  164.     param = CONDITION_PARAM_STAT_MAXHITPOINTS,
  165.     VALUES_PER_LEVEL = 3,
  166.     format = function(value)
  167.       return "Max HP +" .. value
  168.     end,
  169.     itemType = US_ITEM_TYPES.HELMET + US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.LEGS + US_ITEM_TYPES.BOOTS
  170.   },
  171.   [2] = {
  172.     name = "Max MP",
  173.     combatType = US_TYPES.CONDITION,
  174.     condition = CONDITION_ATTRIBUTES,
  175.     param = CONDITION_PARAM_STAT_MAXMANAPOINTS,
  176.     VALUES_PER_LEVEL = 4,
  177.     format = function(value)
  178.       return "Max MP +" .. value
  179.     end,
  180.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  181.   },
  182.   [3] = {
  183.     name = "Magic Level",
  184.     combatType = US_TYPES.CONDITION,
  185.     condition = CONDITION_ATTRIBUTES,
  186.     param = CONDITION_PARAM_STAT_MAGICPOINTS,
  187.     VALUES_PER_LEVEL = 0.1,
  188.     format = function(value)
  189.       return "Magic Level +" .. value
  190.     end,
  191.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  192.   },
  193.   [4] = {
  194.     name = "Melee Skills",
  195.     combatType = US_TYPES.CONDITION,
  196.     condition = CONDITION_ATTRIBUTES,
  197.     param = CONDITION_PARAM_SKILL_MELEE,
  198.     VALUES_PER_LEVEL = 0.2,
  199.     format = function(value)
  200.       return "Melee Skills +" .. value
  201.     end,
  202.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  203.   },
  204.   [5] = {
  205.     name = "Fist Fighting",
  206.     combatType = US_TYPES.CONDITION,
  207.     condition = CONDITION_ATTRIBUTES,
  208.     param = CONDITION_PARAM_SKILL_FIST,
  209.     VALUES_PER_LEVEL = 0.2,
  210.     format = function(value)
  211.       return "Fist Fightning +" .. value
  212.     end,
  213.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  214.   },
  215.   [6] = {
  216.     name = "Sword Fighting",
  217.     combatType = US_TYPES.CONDITION,
  218.     condition = CONDITION_ATTRIBUTES,
  219.     param = CONDITION_PARAM_SKILL_SWORD,
  220.     VALUES_PER_LEVEL = 0.2,
  221.     format = function(value)
  222.       return "Sword Fighting +" .. value
  223.     end,
  224.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  225.   },
  226.   [7] = {
  227.     name = "Axe Fighting",
  228.     combatType = US_TYPES.CONDITION,
  229.     condition = CONDITION_ATTRIBUTES,
  230.     param = CONDITION_PARAM_SKILL_AXE,
  231.     VALUES_PER_LEVEL = 0.2,
  232.     format = function(value)
  233.       return "Axe Fighting +" .. value
  234.     end,
  235.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  236.   },
  237.   [8] = {
  238.     name = "Club Fighting",
  239.     combatType = US_TYPES.CONDITION,
  240.     condition = CONDITION_ATTRIBUTES,
  241.     param = CONDITION_PARAM_SKILL_CLUB,
  242.     VALUES_PER_LEVEL = 0.2,
  243.     format = function(value)
  244.       return "Club Fighting +" .. value
  245.     end,
  246.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  247.   },
  248.   [9] = {
  249.     name = "Distance Fighting",
  250.     combatType = US_TYPES.CONDITION,
  251.     condition = CONDITION_ATTRIBUTES,
  252.     param = CONDITION_PARAM_SKILL_DISTANCE,
  253.     VALUES_PER_LEVEL = 0.2,
  254.     format = function(value)
  255.       return "Distance Fighting +" .. value
  256.     end,
  257.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  258.   },
  259.   [10] = {
  260.     name = "Shielding",
  261.     combatType = US_TYPES.CONDITION,
  262.     condition = CONDITION_ATTRIBUTES,
  263.     param = CONDITION_PARAM_SKILL_SHIELD,
  264.     VALUES_PER_LEVEL = 0.2,
  265.     format = function(value)
  266.       return "Shielding +" .. value
  267.     end,
  268.     itemType = US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  269.   },
  270.   [11] = {
  271.     name = "Mana Shield",
  272.     minLevel = 50,
  273.     combatType = US_TYPES.CONDITION,
  274.     condition = CONDITION_MANASHIELD,
  275.     format = function(value)
  276.       return "Mana Shield"
  277.     end,
  278.     itemType = US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE
  279.   },
  280.   [12] = {
  281.     name = "Life Steal",
  282.     combatType = US_TYPES.OFFENSIVE,
  283.     combatDamage = COMBAT_PHYSICALDAMAGE + COMBAT_ENERGYDAMAGE + COMBAT_EARTHDAMAGE + COMBAT_FIREDAMAGE + COMBAT_ICEDAMAGE +
  284.       COMBAT_HOLYDAMAGE +
  285.       COMBAT_DEATHDAMAGE,
  286.     VALUES_PER_LEVEL = 0.1,
  287.     format = function(value)
  288.       return "Heal for " .. value .. "%% of dealt damage"
  289.     end,
  290.     itemType = US_ITEM_TYPES.WEAPON_MELEE + US_ITEM_TYPES.WEAPON_DISTANCE,
  291.     chance = 10
  292.   },
  293.   [13] = {
  294.     name = "Experience",
  295.     VALUES_PER_LEVEL = 0.35,
  296.     format = function(value)
  297.       return "Experience +" .. value .. "%%"
  298.     end,
  299.     itemType = US_ITEM_TYPES.BOOTS,
  300.     chance = 30
  301.   },
  302.   [14] = {
  303.     name = "Physical Damage",
  304.     combatType = US_TYPES.OFFENSIVE,
  305.     combatDamage = COMBAT_PHYSICALDAMAGE,
  306.     VALUES_PER_LEVEL = 0.3,
  307.     format = function(value)
  308.       return "Physical Damage +" .. value .. "%%"
  309.     end,
  310.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  311.   },
  312.   [15] = {
  313.     name = "Energy Damage",
  314.     combatType = US_TYPES.OFFENSIVE,
  315.     combatDamage = COMBAT_ENERGYDAMAGE,
  316.     VALUES_PER_LEVEL = 0.2,
  317.     format = function(value)
  318.       return "Energy Damage +" .. value .. "%%"
  319.     end,
  320.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  321.   },
  322.   [16] = {
  323.     name = "Earth Damage",
  324.     combatType = US_TYPES.OFFENSIVE,
  325.     combatDamage = COMBAT_EARTHDAMAGE,
  326.     VALUES_PER_LEVEL = 0.2,
  327.     format = function(value)
  328.       return "Earth Damage +" .. value .. "%%"
  329.     end,
  330.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  331.   },
  332.   [17] = {
  333.     name = "Fire Damage",
  334.     combatType = US_TYPES.OFFENSIVE,
  335.     combatDamage = COMBAT_FIREDAMAGE,
  336.     VALUES_PER_LEVEL = 0.2,
  337.     format = function(value)
  338.       return "Fire Damage +" .. value .. "%%"
  339.     end,
  340.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  341.   },
  342.   [18] = {
  343.     name = "Ice Damage",
  344.     combatType = US_TYPES.OFFENSIVE,
  345.     combatDamage = COMBAT_ICEDAMAGE,
  346.     VALUES_PER_LEVEL = 0.2,
  347.     format = function(value)
  348.       return "Ice Damage +" .. value .. "%%"
  349.     end,
  350.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  351.   },
  352.   [19] = {
  353.     name = "Holy Damage",
  354.     combatType = US_TYPES.OFFENSIVE,
  355.     combatDamage = COMBAT_HOLYDAMAGE,
  356.     VALUES_PER_LEVEL = 0.2,
  357.     format = function(value)
  358.       return "Holy Damage +" .. value .. "%%"
  359.     end,
  360.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  361.   },
  362.   [20] = {
  363.     name = "Death Damage",
  364.     combatType = US_TYPES.OFFENSIVE,
  365.     combatDamage = COMBAT_DEATHDAMAGE,
  366.     VALUES_PER_LEVEL = 0.2,
  367.     format = function(value)
  368.       return "Death Damage +" .. value .. "%%"
  369.     end,
  370.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  371.   },
  372.   [21] = {
  373.     name = "Elemental Damage",
  374.     combatType = US_TYPES.OFFENSIVE,
  375.     combatDamage = COMBAT_ENERGYDAMAGE + COMBAT_EARTHDAMAGE + COMBAT_FIREDAMAGE + COMBAT_ICEDAMAGE + COMBAT_HOLYDAMAGE + COMBAT_DEATHDAMAGE,
  376.     VALUES_PER_LEVEL = 0.2,
  377.     format = function(value)
  378.       return "Elemental Damage +" .. value .. "%%"
  379.     end,
  380.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS,
  381.     chance = 10
  382.   },
  383.   [22] = {
  384.     name = "Physical Protection",
  385.     combatType = US_TYPES.DEFENSIVE,
  386.     combatDamage = COMBAT_PHYSICALDAMAGE,
  387.     VALUES_PER_LEVEL = 0.1,
  388.     format = function(value)
  389.       return "Physical Protection +" .. value .. "%%"
  390.     end,
  391.     itemType = US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.BOOTS + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  392.   },
  393.   [23] = {
  394.     name = "Energy Protection",
  395.     combatType = US_TYPES.DEFENSIVE,
  396.     combatDamage = COMBAT_ENERGYDAMAGE,
  397.     VALUES_PER_LEVEL = 0.15,
  398.     format = function(value)
  399.       return "Energy Protection +" .. value .. "%%"
  400.     end,
  401.     itemType = US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.BOOTS + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  402.   },
  403.   [24] = {
  404.     name = "Earth Protection",
  405.     combatType = US_TYPES.DEFENSIVE,
  406.     combatDamage = COMBAT_EARTHDAMAGE,
  407.     VALUES_PER_LEVEL = 0.15,
  408.     format = function(value)
  409.       return "Earth Protection +" .. value .. "%%"
  410.     end,
  411.     itemType = US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.BOOTS + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  412.   },
  413.   [25] = {
  414.     name = "Fire Protection",
  415.     combatType = US_TYPES.DEFENSIVE,
  416.     combatDamage = COMBAT_FIREDAMAGE,
  417.     VALUES_PER_LEVEL = 0.15,
  418.     format = function(value)
  419.       return "Fire Protection +" .. value .. "%%"
  420.     end,
  421.     itemType = US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.BOOTS + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  422.   },
  423.   [26] = {
  424.     name = "Ice Protection",
  425.     combatType = US_TYPES.DEFENSIVE,
  426.     combatDamage = COMBAT_ICEDAMAGE,
  427.     VALUES_PER_LEVEL = 0.15,
  428.     format = function(value)
  429.       return "Ice Protection +" .. value .. "%%"
  430.     end,
  431.     itemType = US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.BOOTS + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  432.   },
  433.   [27] = {
  434.     name = "Holy Protection",
  435.     combatType = US_TYPES.DEFENSIVE,
  436.     combatDamage = COMBAT_HOLYDAMAGE,
  437.     VALUES_PER_LEVEL = 0.15,
  438.     format = function(value)
  439.       return "Holy Protection +" .. value .. "%%"
  440.     end,
  441.     itemType = US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.BOOTS + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  442.   },
  443.   [28] = {
  444.     name = "Death Protection",
  445.     combatType = US_TYPES.DEFENSIVE,
  446.     combatDamage = COMBAT_DEATHDAMAGE,
  447.     VALUES_PER_LEVEL = 0.15,
  448.     format = function(value)
  449.       return "Death Protection +" .. value .. "%%"
  450.     end,
  451.     itemType = US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.BOOTS + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  452.   },
  453.   [29] = {
  454.     name = "Elemental Protection",
  455.     combatType = US_TYPES.DEFENSIVE,
  456.     combatDamage = COMBAT_ENERGYDAMAGE + COMBAT_EARTHDAMAGE + COMBAT_FIREDAMAGE + COMBAT_ICEDAMAGE + COMBAT_HOLYDAMAGE + COMBAT_DEATHDAMAGE,
  457.     VALUES_PER_LEVEL = 0.05,
  458.     format = function(value)
  459.       return "Elemental Protection +" .. value .. "%%"
  460.     end,
  461.     itemType = US_ITEM_TYPES.ARMOR + US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.BOOTS + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS,
  462.     chance = 10
  463.   },
  464.   [30] = {
  465.     name = "Flame Strike on Attack",
  466.     combatType = US_TYPES.TRIGGER,
  467.     triggerType = US_TRIGGERS.ATTACK,
  468.     VALUES_PER_LEVEL = 2.5,
  469.     execute = function(attacker, target, damage)
  470.       if math.random(100) < 20 then
  471.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_FIRE)
  472.         doTargetCombatHealth(attacker:getId(), target, COMBAT_FIREDAMAGE, 1, damage, CONST_ME_FIREATTACK, ORIGIN_CONDITION)
  473.       end
  474.     end,
  475.     format = function(value)
  476.       return "20%% to cast Flame Strike on Attack dealing 1-" .. value .. " damage"
  477.     end,
  478.     itemType = US_ITEM_TYPES.WEAPON_ANY
  479.   },
  480.   [31] = {
  481.     name = "Flame Strike on Hit",
  482.     combatType = US_TYPES.TRIGGER,
  483.     triggerType = US_TRIGGERS.HIT,
  484.     VALUES_PER_LEVEL = 2.5,
  485.     execute = function(attacker, target, damage)
  486.       if math.random(100) < 20 then
  487.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_FIRE)
  488.         doTargetCombatHealth(attacker:getId(), target, COMBAT_FIREDAMAGE, 1, damage, CONST_ME_FIREATTACK, ORIGIN_CONDITION)
  489.       end
  490.     end,
  491.     format = function(value)
  492.       return "20%% to cast Flame Strike on Hit dealing 1-" .. value .. " damage"
  493.     end,
  494.     itemType = US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  495.   },
  496.   [32] = {
  497.     name = "Ice Strike on Attack",
  498.     combatType = US_TYPES.TRIGGER,
  499.     triggerType = US_TRIGGERS.ATTACK,
  500.     VALUES_PER_LEVEL = 2.5,
  501.     execute = function(attacker, target, damage)
  502.       if math.random(100) < 20 then
  503.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_SMALLICE)
  504.         doTargetCombatHealth(attacker:getId(), target, COMBAT_ICEDAMAGE, 1, damage, CONST_ME_ICEATTACK, ORIGIN_CONDITION)
  505.       end
  506.     end,
  507.     format = function(value)
  508.       return "20%% to cast Ice Strike on Attack dealing 1-" .. value .. " damage"
  509.     end,
  510.     itemType = US_ITEM_TYPES.WEAPON_ANY
  511.   },
  512.   [33] = {
  513.     name = "Ice Strike on Hit",
  514.     combatType = US_TYPES.TRIGGER,
  515.     triggerType = US_TRIGGERS.HIT,
  516.     VALUES_PER_LEVEL = 2.5,
  517.     execute = function(attacker, target, damage)
  518.       if math.random(100) < 20 then
  519.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_SMALLICE)
  520.         doTargetCombatHealth(attacker:getId(), target, COMBAT_ICEDAMAGE, 1, damage, CONST_ME_ICEATTACK, ORIGIN_CONDITION)
  521.       end
  522.     end,
  523.     format = function(value)
  524.       return "20%% to cast Ice Strike on Hit dealing 1-" .. value .. " damage"
  525.     end,
  526.     itemType = US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  527.   },
  528.   [34] = {
  529.     name = "Terra Strike on Attack",
  530.     combatType = US_TYPES.TRIGGER,
  531.     triggerType = US_TRIGGERS.ATTACK,
  532.     VALUES_PER_LEVEL = 2.5,
  533.     execute = function(attacker, target, damage)
  534.       if math.random(100) < 20 then
  535.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_SMALLEARTH)
  536.         doTargetCombatHealth(attacker:getId(), target, COMBAT_EARTHDAMAGE, 1, damage, CONST_ME_CARNIPHILA, ORIGIN_CONDITION)
  537.       end
  538.     end,
  539.     format = function(value)
  540.       return "20%% to cast Terra Strike on Attack dealing 1-" .. value .. " damage"
  541.     end,
  542.     itemType = US_ITEM_TYPES.WEAPON_ANY
  543.   },
  544.   [35] = {
  545.     name = "Terra Strike on Hit",
  546.     combatType = US_TYPES.TRIGGER,
  547.     triggerType = US_TRIGGERS.HIT,
  548.     VALUES_PER_LEVEL = 2.5,
  549.     execute = function(attacker, target, damage)
  550.       if math.random(100) < 20 then
  551.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_SMALLEARTH)
  552.         doTargetCombatHealth(attacker:getId(), target, COMBAT_EARTHDAMAGE, 1, damage, CONST_ME_CARNIPHILA, ORIGIN_CONDITION)
  553.       end
  554.     end,
  555.     format = function(value)
  556.       return "20%% to cast Terra Strike on Hit dealing 1-" .. value .. " damage"
  557.     end,
  558.     itemType = US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  559.   },
  560.   [36] = {
  561.     name = "Death Strike on Attack",
  562.     combatType = US_TYPES.TRIGGER,
  563.     triggerType = US_TRIGGERS.ATTACK,
  564.     VALUES_PER_LEVEL = 2.5,
  565.     execute = function(attacker, target, damage)
  566.       if math.random(100) < 20 then
  567.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_DEATH)
  568.         doTargetCombatHealth(attacker:getId(), target, COMBAT_DEATHDAMAGE, 1, damage, CONST_ME_MORTAREA, ORIGIN_CONDITION)
  569.       end
  570.     end,
  571.     format = function(value)
  572.       return "20%% to cast Death Strike on Attack dealing 1-" .. value .. " damage"
  573.     end,
  574.     itemType = US_ITEM_TYPES.WEAPON_ANY
  575.   },
  576.   [37] = {
  577.     name = "Death Strike on Hit",
  578.     combatType = US_TYPES.TRIGGER,
  579.     triggerType = US_TRIGGERS.HIT,
  580.     VALUES_PER_LEVEL = 2.5,
  581.     execute = function(attacker, target, damage)
  582.       if math.random(100) < 20 then
  583.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_DEATH)
  584.         doTargetCombatHealth(attacker:getId(), target, COMBAT_DEATHDAMAGE, 1, damage, CONST_ME_MORTAREA, ORIGIN_CONDITION)
  585.       end
  586.     end,
  587.     format = function(value)
  588.       return "20%% to cast Death Strike on Hit dealing 1-" .. value .. " damage"
  589.     end,
  590.     itemType = US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  591.   },
  592.   [38] = {
  593.     name = "Divine Missile on Attack",
  594.     combatType = US_TYPES.TRIGGER,
  595.     triggerType = US_TRIGGERS.ATTACK,
  596.     VALUES_PER_LEVEL = 2.5,
  597.     execute = function(attacker, target, damage)
  598.       if math.random(100) < 20 then
  599.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_SMALLHOLY)
  600.         doTargetCombatHealth(attacker:getId(), target, COMBAT_HOLYDAMAGE, 1, damage, CONST_ME_HOLYDAMAGE, ORIGIN_CONDITION)
  601.       end
  602.     end,
  603.     format = function(value)
  604.       return "20%% to cast Divine Missile on Attack dealing 1-" .. value .. " damage"
  605.     end,
  606.     itemType = US_ITEM_TYPES.WEAPON_ANY
  607.   },
  608.   [39] = {
  609.     name = "Divine Missile on Hit",
  610.     combatType = US_TYPES.TRIGGER,
  611.     triggerType = US_TRIGGERS.HIT,
  612.     VALUES_PER_LEVEL = 2.5,
  613.     execute = function(attacker, target, damage)
  614.       if math.random(100) < 20 then
  615.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_SMALLHOLY)
  616.         doTargetCombatHealth(attacker:getId(), target, COMBAT_HOLYDAMAGE, 1, damage, CONST_ME_HOLYDAMAGE, ORIGIN_CONDITION)
  617.       end
  618.     end,
  619.     format = function(value)
  620.       return "20%% to cast Divine Missile on Hit dealing 1-" .. value .. " damage"
  621.     end,
  622.     itemType = US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  623.   },
  624.   [40] = {
  625.     name = "Energy Strike on Attack",
  626.     combatType = US_TYPES.TRIGGER,
  627.     triggerType = US_TRIGGERS.ATTACK,
  628.     VALUES_PER_LEVEL = 2.5,
  629.     execute = function(attacker, target, damage)
  630.       if math.random(100) < 20 then
  631.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_ENERGY)
  632.         doTargetCombatHealth(attacker:getId(), target, COMBAT_ENERGYDAMAGE, 1, damage, CONST_ME_ENERGYAREA, ORIGIN_CONDITION)
  633.       end
  634.     end,
  635.     format = function(value)
  636.       return "20%% to cast Energy Strike on Attack dealing 1-" .. value .. " damage"
  637.     end,
  638.     itemType = US_ITEM_TYPES.WEAPON_ANY
  639.   },
  640.   [41] = {
  641.     name = "Energy Strike on Hit",
  642.     combatType = US_TYPES.TRIGGER,
  643.     triggerType = US_TRIGGERS.HIT,
  644.     VALUES_PER_LEVEL = 2.5,
  645.     execute = function(attacker, target, damage)
  646.       if math.random(100) < 20 then
  647.         attacker:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_ENERGY)
  648.         doTargetCombatHealth(attacker:getId(), target, COMBAT_ENERGYDAMAGE, 1, damage, CONST_ME_ENERGYAREA, ORIGIN_CONDITION)
  649.       end
  650.     end,
  651.     format = function(value)
  652.       return "20%% to cast Energy Strike on Hit dealing 1-" .. value .. " damage"
  653.     end,
  654.     itemType = US_ITEM_TYPES.SHIELD + US_ITEM_TYPES.HELMET + US_ITEM_TYPES.LEGS
  655.   },
  656.   [42] = {
  657.     name = "Explosion on Kill",
  658.     minLevel = 20,
  659.     combatType = US_TYPES.TRIGGER,
  660.     triggerType = US_TRIGGERS.KILL,
  661.     VALUES_PER_LEVEL = 0.2,
  662.     execute = function(player, value, center, target)
  663.       local damage = math.ceil(target:getMaxHealth() * (value / 100))
  664.       exoriEffect(center, CONST_ME_FIREAREA)
  665.       doAreaCombatHealth(player:getId(), COMBAT_FIREDAMAGE, center, 2, damage, damage, CONST_ME_NONE, ORIGIN_CONDITION)
  666.     end,
  667.     format = function(value)
  668.       return "Explosion on Kill dealing " .. value .. "%% Max HP of a killed monster"
  669.     end,
  670.     itemType = US_ITEM_TYPES.WEAPON_ANY
  671.   },
  672.   [43] = {
  673.     name = "Health on Kill",
  674.     combatType = US_TYPES.TRIGGER,
  675.     triggerType = US_TRIGGERS.KILL,
  676.     VALUES_PER_LEVEL = 2,
  677.     execute = function(player, value, center, target)
  678.       player:addHealth(value)
  679.     end,
  680.     format = function(value)
  681.       return "Regenerate " .. value .. " Health on Kill"
  682.     end,
  683.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE,
  684.     chance = 25
  685.   },
  686.   [44] = {
  687.     name = "Mana on Kill",
  688.     combatType = US_TYPES.TRIGGER,
  689.     triggerType = US_TRIGGERS.KILL,
  690.     VALUES_PER_LEVEL = 3,
  691.     execute = function(player, value, center, target)
  692.       player:addMana(value)
  693.     end,
  694.     format = function(value)
  695.       return "Regenerate " .. value .. " Mana on Kill"
  696.     end,
  697.     itemType = US_ITEM_TYPES.WEAPON_ANY + US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE,
  698.     chance = 25
  699.   },
  700.   [45] = {
  701.     name = "Mana Steal",
  702.     combatType = US_TYPES.OFFENSIVE,
  703.     combatDamage = COMBAT_ENERGYDAMAGE + COMBAT_EARTHDAMAGE + COMBAT_FIREDAMAGE + COMBAT_ICEDAMAGE + COMBAT_HOLYDAMAGE + COMBAT_DEATHDAMAGE,
  704.     VALUES_PER_LEVEL = 0.1,
  705.     format = function(value)
  706.       return "Regenerate Mana for " .. value .. "%% of dealt damage"
  707.     end,
  708.     itemType = US_ITEM_TYPES.WEAPON_WAND + US_ITEM_TYPES.WEAPON_DISTANCE,
  709.     chance = 10
  710.   },
  711.   [46] = {
  712.     name = "Full HP on Kill",
  713.     combatType = US_TYPES.TRIGGER,
  714.     triggerType = US_TRIGGERS.KILL,
  715.     VALUES_PER_LEVEL = 0.05,
  716.     execute = function(player, value, center, target)
  717.       if math.random(100) < value then
  718.         player:addHealth(player:getMaxHealth())
  719.       end
  720.     end,
  721.     format = function(value)
  722.       return value .. "%% to regenerate full HP on Kill"
  723.     end,
  724.     itemType = US_ITEM_TYPES.RING,
  725.     minLevel = 20,
  726.     chance = 5
  727.   },
  728.   [47] = {
  729.     name = "Full MP on Kill",
  730.     combatType = US_TYPES.TRIGGER,
  731.     triggerType = US_TRIGGERS.KILL,
  732.     VALUES_PER_LEVEL = 0.05,
  733.     execute = function(player, value, center, target)
  734.       if math.random(100) < value then
  735.         player:addMana(player:getMaxMana())
  736.       end
  737.     end,
  738.     format = function(value)
  739.       return value .. "%% to regenerate full MP on Kill"
  740.     end,
  741.     itemType = US_ITEM_TYPES.RING,
  742.     minLevel = 20,
  743.     chance = 5
  744.   },
  745.   [48] = {
  746.     name = "Mass Healing on Attack",
  747.     combatType = US_TYPES.TRIGGER,
  748.     triggerType = US_TRIGGERS.HIT,
  749.     VALUES_PER_LEVEL = 0.2,
  750.     execute = function(attacker, target, damage)
  751.       if math.random(100) < damage then
  752.         local min = (attacker:getLevel() / 5) + (attacker:getMagicLevel() * 4.6) + 100
  753.         local max = (attacker:getLevel() / 5) + (attacker:getMagicLevel() * 9.6) + 125
  754.  
  755.         doAreaCombatHealth(target:getId(), COMBAT_HEALING, attacker:getPosition(), 6, min, max, CONST_ME_MAGIC_BLUE)
  756.       end
  757.     end,
  758.     format = function(value)
  759.       return value .. "%% to cast Mass Healing on Attack"
  760.     end,
  761.     itemType = US_ITEM_TYPES.WEAPON_WAND,
  762.     minLevel = 10,
  763.     chance = 15
  764.   },
  765.   [49] = {
  766.     name = "Increased Healing",
  767.     VALUES_PER_LEVEL = 0.35,
  768.     format = function(value)
  769.       return value .. "%% more healing from all sources"
  770.     end,
  771.     itemType = US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE,
  772.     minLevel = 25,
  773.     chance = 20
  774.   },
  775.   [50] = {
  776.     name = "Additonal Gold",
  777.     VALUES_PER_LEVEL = 0.5,
  778.     format = function(value)
  779.       return value .. "%% more gold from loot"
  780.     end,
  781.     itemType = US_ITEM_TYPES.BOOTS,
  782.     minLevel = 10,
  783.     chance = 30
  784.   },
  785.   [51] = {
  786.     name = "Double Damage",
  787.     combatType = US_TYPES.OFFENSIVE,
  788.     VALUES_PER_LEVEL = 0.05,
  789.     format = function(value)
  790.       return value .. "%% to deal double damage"
  791.     end,
  792.     itemType = US_ITEM_TYPES.WEAPON_ANY,
  793.     minLevel = 80,
  794.     chance = 5
  795.   },
  796.   [52] = {
  797.     name = "Revive on death",
  798.     VALUES_PER_LEVEL = 0.05,
  799.     format = function(value)
  800.       return value .. "%% to be revived"
  801.     end,
  802.     itemType = US_ITEM_TYPES.BOOTS,
  803.     minLevel = 50,
  804.     chance = 30
  805.   },
  806.   [53] = {
  807.     name = "Damage Buff",
  808.     combatType = US_TYPES.TRIGGER,
  809.     triggerType = US_TRIGGERS.KILL,
  810.     VALUES_PER_LEVEL = 0.5,
  811.     execute = function(player, value)
  812.       if math.random(100) < 20 then
  813.         local pid = player:getId()
  814.         local buffId = 1
  815.         if not US_BUFFS[pid] then
  816.           US_BUFFS[pid] = {}
  817.         end
  818.         if not US_BUFFS[pid][buffId] then
  819.           US_BUFFS[pid][buffId] = {}
  820.           US_BUFFS[pid][buffId].value = value
  821.           player:sendTextMessage(MESSAGE_INFO_DESCR, "Damage Buff applied for 8 seconds!")
  822.           US_BUFFS[pid][buffId].event = addEvent(us_RemoveBuff, 8000, pid, buffId, "Damage Buff")
  823.         else
  824.           stopEvent(US_BUFFS[pid][buffId].event)
  825.           US_BUFFS[pid][buffId].value = value
  826.           player:sendTextMessage(MESSAGE_INFO_DESCR, "Damage Buff reapplied for 8 seconds!")
  827.           US_BUFFS[pid][buffId].event = addEvent(us_RemoveBuff, 8000, pid, buffId, "Damage Buff")
  828.         end
  829.       end
  830.     end,
  831.     format = function(value)
  832.       return "20%% to get " .. value .. "%% damage buff for 8 sec. on Kill"
  833.     end,
  834.     itemType = US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE,
  835.     minLevel = 30,
  836.     chance = 10
  837.   },
  838.   [54] = {
  839.     name = "Max HP Buff",
  840.     combatType = US_TYPES.TRIGGER,
  841.     triggerType = US_TRIGGERS.KILL,
  842.     buff = true,
  843.     VALUES_PER_LEVEL = 0.5,
  844.     execute = function(player, value)
  845.       if math.random(100) < 20 then
  846.         local pid = player:getId()
  847.         local buffId = 2
  848.         if not US_BUFFS[pid] then
  849.           US_BUFFS[pid] = {}
  850.         end
  851.         if not US_BUFFS[pid][buffId] then
  852.           US_BUFFS[pid][buffId] = {}
  853.           US_BUFFS[pid][buffId].condition = Condition(CONDITION_ATTRIBUTES)
  854.           US_BUFFS[pid][buffId].condition:setParameter(CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100 + value)
  855.           US_BUFFS[pid][buffId].condition:setParameter(CONDITION_PARAM_TICKS, 8000)
  856.           US_BUFFS[pid][buffId].condition:setParameter(CONDITION_PARAM_SUBID, 3245)
  857.           US_BUFFS[pid][buffId].condition:setParameter(CONDITION_PARAM_BUFF_SPELL, true)
  858.           player:addCondition(US_BUFFS[pid][buffId].condition)
  859.           player:sendTextMessage(MESSAGE_INFO_DESCR, "Max HP Buff applied for 8 seconds!")
  860.           US_BUFFS[pid][buffId].event = addEvent(us_RemoveBuff, 8000, pid, buffId, "Max HP Buff")
  861.         else
  862.           stopEvent(US_BUFFS[pid][buffId].event)
  863.           player:sendTextMessage(MESSAGE_INFO_DESCR, "Max HP Buff reapplied for 8 seconds!")
  864.           US_BUFFS[pid][buffId].event = addEvent(us_RemoveBuff, 8000, pid, buffId, "Max HP Buff")
  865.           player:removeCondition(US_BUFFS[pid][buffId].condition)
  866.           player:addCondition(US_BUFFS[pid][buffId].condition)
  867.         end
  868.       end
  869.     end,
  870.     format = function(value)
  871.       return "20%% to get " .. value .. "%% Max HP buff for 8 sec. on Kill"
  872.     end,
  873.     itemType = US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE,
  874.     minLevel = 30,
  875.     chance = 10
  876.   },
  877.   [55] = {
  878.     name = "Max MP Buff",
  879.     combatType = US_TYPES.TRIGGER,
  880.     triggerType = US_TRIGGERS.KILL,
  881.     buff = true,
  882.     VALUES_PER_LEVEL = 0.5,
  883.     execute = function(player, value)
  884.       if math.random(100) < 20 then
  885.         local pid = player:getId()
  886.         local buffId = 3
  887.         if not US_BUFFS[pid] then
  888.           US_BUFFS[pid] = {}
  889.         end
  890.         if not US_BUFFS[pid][buffId] then
  891.           US_BUFFS[pid][buffId] = {}
  892.           US_BUFFS[pid][buffId].condition = Condition(CONDITION_ATTRIBUTES)
  893.           US_BUFFS[pid][buffId].condition:setParameter(CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 100 + value)
  894.           US_BUFFS[pid][buffId].condition:setParameter(CONDITION_PARAM_TICKS, 8000)
  895.           US_BUFFS[pid][buffId].condition:setParameter(CONDITION_PARAM_SUBID, 3246)
  896.           US_BUFFS[pid][buffId].condition:setParameter(CONDITION_PARAM_BUFF_SPELL, true)
  897.           player:addCondition(US_BUFFS[pid][buffId].condition)
  898.           player:sendTextMessage(MESSAGE_INFO_DESCR, "Max MP Buff applied for 8 seconds!")
  899.           US_BUFFS[pid][buffId].event = addEvent(us_RemoveBuff, 8000, pid, buffId, "Max MP Buff")
  900.         else
  901.           stopEvent(US_BUFFS[pid][buffId].event)
  902.           player:sendTextMessage(MESSAGE_INFO_DESCR, "Max MP Buff reapplied for 8 seconds!")
  903.           US_BUFFS[pid][buffId].event = addEvent(us_RemoveBuff, 8000, pid, buffId, "Max MP Buff")
  904.           player:removeCondition(US_BUFFS[pid][buffId].condition)
  905.           player:addCondition(US_BUFFS[pid][buffId].condition)
  906.         end
  907.       end
  908.     end,
  909.     format = function(value)
  910.       return "20%% to get " .. value .. "%% Max MP buff for 8 sec. on Kill"
  911.     end,
  912.     itemType = US_ITEM_TYPES.RING + US_ITEM_TYPES.NECKLACE,
  913.     minLevel = 30,
  914.     chance = 10
  915.   }
  916. }
  917.  
  918. function exoriEffect(center, effect)
  919.   for i = -1, 1 do
  920.     local top = Position(center.x + i, center.y - 1, center.z)
  921.     local middle = Position(center.x + i, center.y, center.z)
  922.     local bottom = Position(center.x + i, center.y + 1, center.z)
  923.     top:sendMagicEffect(effect)
  924.     middle:sendMagicEffect(effect)
  925.     bottom:sendMagicEffect(effect)
  926.   end
  927. end
  928.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement