• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Create Item

Level 17
Joined
Nov 13, 2006
Messages
1,814
JASS:
function AddRandomBonus takes integer id, integer grade, integer itype, integer amount returns nothing
    local integer i = 1
    local integer rnd
    local integer array index //real index
    local integer array bonus //bonus attached to index
    local integer maxindex //max index for loop
    local real array c //chance array, assigned to indexs
    local real rc // random chance (0,99)
    local integer st

    if itype == 1 or itype ==2 or itype == 4 or itype == 5 then
        set st = LoadInteger(udg_CItem_Table, id, 3)
        set index[0] = 22 // experience bonus after a kill
        set index[1] = 23 // drop rate for rare item
        set index[2] = 24 // gold rate
        set index[3] = 27 // hp reg
        set index[4] = 31 // mp reg
        set index[5] = 73 // accurancy bonus
        set index[6] = 74 // evasion bonus
        set index[7] = 8 // level req decrease
        set index[8] = 44 // bonus str
        set index[9] = 45 // bonus agi
        set index[10] = 46 // bonus int
        set index[11] = 40 // bonus movment speed
        set index[12] = 47 // bonus attack speed
        set index[13] = 48 // reflect damage
        set index[14] = 70 // defence level
        set index[15] = 75 // pdef
        set index[16] = 76 // fire def
        set index[17] = 77 // water def
        set index[18] = 78 // lightning def
        set index[19] = 79 // poison def
        set index[20] = 80 // earth def
        set index[21] = 64 // hp
        set index[22] = 65 // mp
        set index[23] = 68 // bonus socket
        set index[24] = 67 // bonus duratibility
        set index[25] = 62 // pattack
        set index[26] = 63 // mattack
        set index[27] = 28 // hp steal
        set index[28] = 29 // hp per kill
        set index[29] = 32 // mp steal
        set index[30] = 33 // mp per kill
        set index[31] = 81 // shop discount

        set c[0] = 10 // experience bonus after a kill
        set c[1] = 5 // drop rate for rare item
        set c[2] = 7 // gold rate
        set c[3] = 20 // hp reg
        set c[4] = 20 // mp reg
        if st == 3 then
         set c[5] = 0 // accurancy bonus
         set c[6] = 0 // evasion bonus
        else
         set c[5] = 10 // accurancy bonus
         set c[6] = 10 // evasion bonus
        endif
        set c[7] = 7 // level req decrease
        if st == 3 then
          set c[8] = 3 // bonus str
          set c[9] = 1 // bonus agi
          set c[10] = 10 // bonus int
        else
          set c[8] = 7 // bonus str
          set c[9] = 7 // bonus agi
          set c[10] = 1 // bonus int
        endif
        if st == 2 then
          set c[11] = 6 // bonus movment speed
          set c[12] = 4 // bonus attack speed
        else
          set c[11] = 1 // bonus movment speed
          set c[12] = 1 // bonus attack speed
        endif
        set c[13] = 3 // reflect damage
        set c[14] = 2 // defence level
        set c[15] = 15 // pdef
        set c[16] = 15 // fire def
        set c[17] = 15 // water def
        set c[18] = 15 // lightning def
        set c[19] = 15 // poison def
        set c[20] = 15 // earth def
        set c[21] = 13 // hp
        set c[22] = 13 // mp
        set c[23] = 3 // bonus socket
        set c[24] = 12 // bonus duratibility
        if st == 3 then
          set c[25] = 0 // pattack
          set c[26] = 2 // mattack
        else
          set c[25] = 2 // pattack
          set c[26] = 0 // mattack
        endif
        set c[27] = 2 // hp steal
        set c[28] = 6 // hp per kill
        set c[29] = 3 // mp steal
        set c[30] = 6 // mp per kill
        set c[31] = 2 // shop discount

        set bonus[0] = GetRandomInt(grade / 10 + 1, grade / 5 + 7) // experience bonus after a kill
        set bonus[1] = GetRandomInt(grade / 20 + 1, grade / 10 + 5) // drop rate for rare item
        set bonus[2] = GetRandomInt(grade / 10 + 1, grade / 5 + 12) // gold rate
        set bonus[3] = GetRandomInt(grade / 15 + 1, grade / 8 + 1) // hp reg
        set bonus[4] = GetRandomInt(grade / 15 + 1, grade / 8 + 1) // mp reg
        set bonus[5] = GetRandomInt(grade / 2 + 1, grade * 3) // accurancy bonus
        set bonus[6] = GetRandomInt(grade / 3 + 1, grade * 2) // evasion bonus
        set bonus[7] = -GetRandomInt(1, 2) // level req decrease
        set bonus[8] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus str
        set bonus[9] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus agi
        set bonus[10] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus int
        set bonus[11] = GetRandomInt(grade / 10 + 1, grade / 2 + 15) // bonus movment speed
        set bonus[12] = GetRandomInt(grade / 10 + 1, grade / 2 + 10) // bonus attack speed
        set bonus[13] = GetRandomInt(grade / 50 + 1, grade / 20 + 2) // reflect damage
        set bonus[14] = GetRandomInt(grade / 50 + 1, grade / 20 + 3) // defence level
        set bonus[15] = GetRandomInt(grade + 1, grade * 3 + 3) // pdef
        set bonus[16] = GetRandomInt(grade + 1, grade * 3 + 3) // fire def
        set bonus[17] = GetRandomInt(grade + 1, grade * 3 + 3) // water def
        set bonus[18] = GetRandomInt(grade + 1, grade * 3 + 3) // lightning def
        set bonus[19] = GetRandomInt(grade + 1, grade * 3 + 3) // poison def
        set bonus[20] = GetRandomInt(grade + 1, grade * 3 + 3) // earth def
        set bonus[21] = GetRandomInt(grade + 5, grade * 2 + 10) // hp
        set bonus[22] = GetRandomInt(grade + 5, grade * 2 + 10) // mp
        if itype != 5 then
            set bonus[23] = GetRandomInt(1, grade / 50 + 1) // inc socket
        else
            set bonus[23] = 0 // inc socket
        endif
        set bonus[24] = GetRandomInt(grade / 2 + 10, grade * 2 + 15) // inc duratibility
        set bonus[25] = GetRandomInt(grade + 3, grade * 2 + 5) // pattack
        set bonus[26] = GetRandomInt(grade + 3, grade * 2 + 5) // mattack
        set bonus[27] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // hp steal
        set bonus[28] = GetRandomInt(grade / 2 + 1, grade * 2 + 5) // hp per kill
        set bonus[29] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // mp steal
        set bonus[30] = GetRandomInt(grade / 2 + 1, grade * 2 + 5) // mp per kill
        set bonus[31] = GetRandomInt(1, 3) // //shop discount

        set maxindex = 31
    elseif itype == 3 then
        set st = LoadInteger(udg_CItem_Table, id, 3)
        set index[0] = 22 // experience bonus after a kill
        set index[1] = 23 // drop rate for rare item
        set index[2] = 24 // gold rate
        set index[3] = 28 // hp steal
        set index[4] = 29 // hp per kill
        set index[5] = 32 // mp steal
        set index[6] = 33 // mp per kill
        set index[7] = 73 // accurancy bonus
        set index[8] = 8 // level req decrease
        set index[9] = 44 // bonus str
        set index[10] = 45 // bonus agi
        set index[11] = 46 // bonus int
        set index[12] = 47 // bonus attack speed
        set index[13] = 49 // chance for armor penetration
        set index[14] = 69 // attack level
        set index[15] = 66 // critical chance
        set index[16] = 55 // critical damage
        set index[17] = 56 // pet power
        set index[18] = 57 // bonus fire damage
        set index[19] = 58 // bonus water damage
        set index[20] = 59 // bonus lightning damage
        set index[21] = 60 // bonus poison damage
        set index[22] = 61 // bonus earth damage
        set index[23] = 75 // pdef
        set index[24] = 76 // fire def
        set index[25] = 77 // water def
        set index[26] = 78 // lightning def
        set index[27] = 79 // poison def
        set index[28] = 80 // earth def
        set index[29] = 64 // hp
        set index[30] = 65 // mp
        set index[31] = 68 // bonus socket
        set index[32] = 67 // bonus duratibility
        set index[33] = 62 // pattack
        set index[34] = 63 // mattack
        set index[35] = 70 // defence level
        set index[36] = 81 // shop discount
        set index[37] = 27 // hp reg
        set index[38] = 31 // mp reg
        set index[39] = 25 // activation id

        set c[0] = 4 // experience bonus after a kill
        set c[1] = 9 // drop rate for rare item
        set c[2] = 9 // gold rate
        set c[3] = 11 // hp steal
        set c[4] = 7 // hp per kill
        set c[5] = 11 // mp steal
        set c[6] = 7 // mp per kill
        if st < 8 then
          set c[7] = 10 // accurancy bonus
          set c[12] = 10 // bonus attack speed
          set c[18] = 3 // bonus fire damage
          set c[19] = 3 // bonus water damage
          set c[20] = 3 // bonus lightning damage
          set c[21] = 3 // bonus poison damage
          set c[22] = 3 // bonus earth damage
          set c[33] = 17 // pattack
          set c[34] = 0 // mattack
        else
          set c[7] = 0 // accurancy bonus
          set c[12] = 0 // bonus attack speed
          set c[18] = 0 // bonus fire damage
          set c[19] = 0 // bonus water damage
          set c[20] = 0 // bonus lightning damage
          set c[21] = 0 // bonus poison damage
          set c[22] = 0 // bonus earth damage
          set c[33] = 0 // pattack
          set c[34] = 17 // mattack
        endif
        set c[8] = 9 // level req decrease
        set c[9] = 5 // bonus str
        set c[10] = 5 // bonus agi
        set c[11] = 5 // bonus int
        set c[13] = 2 // chance for armor penetration
        set c[14] = 9 // attack level
        set c[15] = 12 // critical chance
        set c[16] = 5 // critical damage
        set c[17] = 1 // pet power
        set c[23] = 4 // pdef
        set c[24] = 4 // fire def
        set c[25] = 4 // water def
        set c[26] = 4 // lightning def
        set c[27] = 4 // poison def
        set c[28] = 4 // earth def
        set c[29] = 5 // hp
        set c[30] = 5 // mp
        set c[31] = 2 // bonus socket
        set c[32] = 12 // bonus duratibility
        set c[35] = 5 // defence level
        set c[36] = 3 // shop discount
        set c[37] = 4 // hp reg
        set c[38] = 4 // mp reg
        set c[39] = 2 // activation id

        set bonus[0] = GetRandomInt(grade / 10 + 1, grade / 5 + 7) // experience bonus after a kill
        set bonus[1] = GetRandomInt(grade / 20 + 1, grade / 10 + 5) // drop rate for rare item
        set bonus[2] = GetRandomInt(grade / 10 + 1, grade / 5 + 12) // gold rate
        set bonus[3] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // hp steal
        set bonus[4] = GetRandomInt(grade / 2 + 1, grade * 2 + 5) // hp per kill
        set bonus[5] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // mp steal
        set bonus[6] = GetRandomInt(grade / 2 + 1, grade * 2 + 5) // mp per kill
        set bonus[7] = GetRandomInt(grade + 1, grade * 5 + 5) // accurancy bonus
        set bonus[8] = -GetRandomInt( 1, 2) // level req decrease
        set bonus[9] = GetRandomInt(grade / 30 + 1, grade / 10 + 2) // bonus str
        set bonus[10] = GetRandomInt(grade / 30 + 1, grade / 10 + 2) // bonus agi
        set bonus[11] = GetRandomInt(grade / 30 + 1, grade / 10 + 2) // bonus int
        set bonus[12] = GetRandomInt(grade / 20 + 1, grade) // bonus attack speed
        set bonus[13] = GetRandomInt(grade / 50 + 1, grade / 50 + 3) // chance for armor penetration
        set bonus[14] = GetRandomInt(grade / 50 + 1, grade / 20 + 3) // attack level
        set bonus[15] = GetRandomInt(1, grade / 20 + 1) // critical chance
        set bonus[16] = GetRandomInt(3, grade / 10 + 10) // critical damage
        set bonus[17] = GetRandomInt(3, grade / 10 + 10) // pet power
        set bonus[18] = GetRandomInt(grade, grade * 3) // bonus fire damage
        set bonus[19] = GetRandomInt(grade, grade * 3) // bonus water damage
        set bonus[20] = GetRandomInt(grade, grade * 3) // bonus lightning damage
        set bonus[21] = GetRandomInt(grade+5, grade * 3+5) // bonus poison damage
        set bonus[22] = GetRandomInt(grade, grade * 3) // bonus earth damage
        set bonus[23] = GetRandomInt(grade + 1, grade * 3 + 3) // pdef
        set bonus[24] = GetRandomInt(grade + 1, grade * 3 + 3) // fire def
        set bonus[25] = GetRandomInt(grade + 1, grade * 3 + 3) // water def
        set bonus[26] = GetRandomInt(grade + 1, grade * 3 + 3) // lightning def
        set bonus[27] = GetRandomInt(grade + 1, grade * 3 + 3) // poison def
        set bonus[28] = GetRandomInt(grade + 1, grade * 3 + 3) // earth def
        set bonus[29] = GetRandomInt(grade + 5, grade * 2 + 10) // hp
        set bonus[30] = GetRandomInt(grade + 5, grade * 2 + 10) // mp
        set bonus[31] = GetRandomInt(1, grade / 50 + 1) // inc socket
        set bonus[32] = GetRandomInt(grade / 2 + 10, grade * 2 + 15) // inc duratibility
        set bonus[33] = GetRandomInt(grade + 3, grade * 2 + 5) // pattack
        set bonus[34] = GetRandomInt(grade + 3, grade * 2 + 5) // mattack
        set bonus[35] = GetRandomInt(grade / 50 + 1, grade / 20 + 3) // defence level
        set bonus[36] = GetRandomInt(2, 5) // //shop discount
        set bonus[37] = GetRandomInt(grade / 15 + 1, grade / 8 + 1) // hp reg
        set bonus[38] = GetRandomInt(grade / 15 + 1, grade / 8 + 1) // mp reg
        set bonus[39] = GetRandomInt(1, 9) // activation id
        set maxindex = 39
    elseif itype == 9 then
        set index[0] = 22 // experience bonus after a kill
        set index[1] = 23 // drop rate for rare item
        set index[2] = 24 // gold rate
        set index[3] = 27 // hp reg
        set index[4] = 28 // hp steal
        set index[5] = 29 // hp per kill
        set index[6] = 31 // mp reg
        set index[7] = 32 // mp steal
        set index[8] = 33 // mp per kill
        set index[9] = 44 // bonus str
        set index[10] = 45 // bonus agi
        set index[11] = 46 // bonus int
        set index[12] = 48 // reflect damage
        set index[13] = 49 // chance for armor penetration
        set index[14] = 75 // pdef
        set index[15] = 76 // fire def
        set index[16] = 77 // water def
        set index[17] = 78 // lightning def
        set index[18] = 79 // poison def
        set index[19] = 80 // earth def
        set index[20] = 64 // hp
        set index[21] = 65 // mp
        set index[22] = 68 // bonus socket
        set index[23] = 67 // bonus duratibility
        set index[24] = 62 // pattack
        set index[25] = 63 // mattack
        set index[26] = 69 // attack level
        set index[27] = 70 // defence level
        set index[28] = 66 // critical chance
        set index[29] = 55 // critical damage
        set index[30] = 81 // shop discount
        set index[31] = 74 // evasion

        set c[0] = 10 // experience bonus after a kill
        set c[1] = 10 // drop rate for rare item
        set c[2] = 10 // gold rate
        set c[3] = 7 // hp reg
        set c[4] = 10 // hp steal
        set c[5] = 7 // hp per kill
        set c[6] = 7 // mp reg
        set c[7] = 8 // mp steal
        set c[8] = 7 // mp per kill
        set c[9] = 3 // bonus str
        set c[10] = 3 // bonus agi
        set c[11] = 3 // bonus int
        set c[12] = 3 // reflect damage
        set c[13] = 2 // chance for armor penetration
        set c[14] = 2 // pdef
        set c[15] = 2 // fire def
        set c[16] = 2 // water def
        set c[17] = 2 // lightning def
        set c[18] = 2 // poison def
        set c[19] = 2 // earth def
        set c[20] = 11 // hp
        set c[21] = 11 // mp
        set c[22] = 7 // bonus socket
        set c[23] = 4 // bonus duratibility
        set c[24] = 3 // pattack
        set c[25] = 3 // mattack
        set c[26] = 10 // attack level
        set c[27] = 10 // defence level
        set c[28] = 6 // critical chance
        set c[29] = 5 // critical damage
        set c[30] = 7 // shop discount
        set c[31] = 1 // evasion

        set bonus[0] = GetRandomInt(grade / 10 + 1, grade / 5 + 7) // experience bonus after a kill
        set bonus[1] = GetRandomInt(grade / 20 + 1, grade / 10 + 5) // drop rate for rare item
        set bonus[2] = GetRandomInt(grade / 10 + 1, grade / 5 + 12) // gold rate
        set bonus[3] = GetRandomInt(grade / 15 + 1, grade / 8 + 5) // hp reg
        set bonus[4] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // hp steal
        set bonus[5] = GetRandomInt(grade / 2 + 1, grade * 2 + 1) // hp per kill
        set bonus[6] = GetRandomInt(grade / 15 + 1, grade / 8 + 1) // mp reg
        set bonus[7] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // mp steal
        set bonus[8] = GetRandomInt(grade / 2 + 1, grade * 2 + 5) // mp per kill
        set bonus[9] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus str
        set bonus[10] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus agi
        set bonus[11] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus int
        set bonus[12] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // reflect damage
        set bonus[13] = GetRandomInt(grade / 50 + 1, grade / 50 + 3) // chance for armor penetration
        set bonus[14] = GetRandomInt(grade + 1, grade * 3 + 3) // pdef
        set bonus[15] = GetRandomInt(grade + 1, grade * 3 + 3) // fire def
        set bonus[16] = GetRandomInt(grade + 1, grade * 3 + 3) // water def
        set bonus[17] = GetRandomInt(grade + 1, grade * 3 + 3) // lightning def
        set bonus[18] = GetRandomInt(grade + 1, grade * 3 + 3) // poison def
        set bonus[19] = GetRandomInt(grade + 1, grade * 3 + 3) // earth def
        set bonus[20] = GetRandomInt(grade + 5, grade * 2 + 10) // hp
        set bonus[21] = GetRandomInt(grade + 5, grade * 2 + 10) // mp
        set bonus[22] = GetRandomInt(1, grade / 50 + 1) // inc socket
        set bonus[23] = GetRandomInt(grade / 2 + 10, grade * 2 + 15) // inc duratibility
        set bonus[24] = GetRandomInt(grade + 3, grade * 2 + 5) // pattack
        set bonus[25] = GetRandomInt(grade + 3, grade * 2 + 5) // mattack
        set bonus[26] = GetRandomInt(grade / 50 + 1, grade / 20 + 3) // attack level
        set bonus[27] = GetRandomInt(grade / 50 + 1, grade / 20 + 3) // defence level
        set bonus[28] = GetRandomInt(1, grade / 20 + 1) // critical chance
        set bonus[29] = GetRandomInt(3, grade / 10 + 10) // critical damage
        set bonus[30] = GetRandomInt(3, 7) // //shop discount
        set bonus[31] = GetRandomInt(grade + 1, grade * 2 + 10) // evasion

        set maxindex = 31
    elseif itype == 6 or itype == 8 then
        set index[1] = 69 // attack level
        set index[2] = 66 // critical chance
        set index[3] = 55 // critical damage
        set index[4] = 48 // reflect damage
        set index[5] = 70 // defence level
        set index[6] = 22 // experience bonus after a kill
        set index[7] = 23 // drop rate for rare item
        set index[8] = 24 // gold rate
        set index[9] = 44 // bonus str
        set index[10] = 45 // bonus agi
        set index[11] = 46 // bonus int
        set index[12] = 27 // hp reg
        set index[13] = 28 // hp steal
        set index[14] = 29 // hp per kill
        set index[15] = 31 // mp reg
        set index[16] = 32 // mp steal
        set index[17] = 33 // mp per kill
        set index[18] = 67 // bonus duratibility
        set index[19] = 62 // pattack
        set index[20] = 63 // mattack
        set index[21] = 75 // pdef
        set index[22] = 76 // fire def
        set index[23] = 77 // water def
        set index[24] = 78 // lightning def
        set index[25] = 79 // poison def
        set index[26] = 80 // earth def
        set index[27] = 64 // hp
        set index[28] = 65 // mp
        set index[29] = 81 // shop discount
        set index[30] = 73 // accurancy bonus
        set index[31] = 74 // evasion bonus

        set c[1] = 9 // attack level
        set c[2] = 12 // critical chance
        set c[3] = 10 // critical damage
        set c[4] = 5 // reflect damage
        set c[5] = 5 // defence level
        set c[6] = 6 // experience bonus after a kill
        set c[7] = 4 // drop rate for rare item
        set c[8] = 5 // gold rate
        set c[9] = 3 // bonus str
        set c[10] = 3 // bonus agi
        set c[11] = 3 // bonus int
        set c[12] = 8 // hp reg
        set c[13] = 8 // hp steal
        set c[14] = 8 // hp per kill
        set c[15] = 8 // mp reg
        set c[16] = 8 // mp steal
        set c[17] = 8 // mp per kill
        set c[18] = 11 // bonus duratibility
        set c[19] = 13 // pattack
        set c[20] = 13 // mattack
        set c[21] = 4 // pdef
        set c[22] = 4 // fire def
        set c[23] = 4 // water def
        set c[24] = 4 // lightning def
        set c[25] = 4 // poison def
        set c[26] = 4 // earth def
        set c[27] = 7 // hp
        set c[28] = 7 // mp
        set c[29] = 3 // shop discount
        set c[30] = 6 // accurancy bonus
        set c[31] = 6 // evasion bonus

        set bonus[1] = GetRandomInt(grade / 50 + 1, grade / 20 + 3) // attack level
        set bonus[2] = GetRandomInt(1, grade / 20 + 1) // critical chance
        set bonus[3] = GetRandomInt(3, grade / 10 + 10) // critical damage
        set bonus[4] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // reflect damage
        set bonus[5] = GetRandomInt(grade / 50 + 1, grade / 20 + 3) // defence level
        set bonus[6] = GetRandomInt(grade / 10 + 1, grade / 5 + 7) // experience bonus after a kill
        set bonus[7] = GetRandomInt(grade / 20 + 1, grade / 10 + 5) // drop rate for rare item
        set bonus[8] = GetRandomInt(grade / 10 + 1, grade / 5 + 12) // gold rate
        set bonus[9] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus str
        set bonus[10] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus agi
        set bonus[11] = GetRandomInt(grade / 20 + 1, grade / 10 + 1) // bonus int
        set bonus[12] = GetRandomInt(grade / 15 + 1, grade / 8 + 5) // hp reg
        set bonus[13] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // hp steal
        set bonus[14] = GetRandomInt(grade / 2 + 1, grade * 2 + 2) // hp per kill
        set bonus[15] = GetRandomInt(grade / 15 + 1, grade / 8 + 2) // mp reg
        set bonus[16] = GetRandomInt(grade / 20 + 1, grade / 10 + 2) // mp steal
        set bonus[17] = GetRandomInt(grade / 2 + 1, grade * 2 + 5) // mp per kill
        set bonus[18] = GetRandomInt(grade / 2 + 10, grade * 2 + 15) // inc duratibility
        set bonus[19] = GetRandomInt(grade + 3, grade * 2 + 5) // pattack
        set bonus[20] = GetRandomInt(grade + 3, grade * 2 + 5) // mattack
        set bonus[21] = GetRandomInt(grade + 1, grade * 3 + 3) // pdef
        set bonus[22] = GetRandomInt(grade + 1, grade * 3 + 3) // fire def
        set bonus[23] = GetRandomInt(grade + 1, grade * 3 + 3) // water def
        set bonus[24] = GetRandomInt(grade + 1, grade * 3 + 3) // lightning def
        set bonus[25] = GetRandomInt(grade + 1, grade * 3 + 3) // poison def
        set bonus[26] = GetRandomInt(grade + 1, grade * 3 + 3) // earth def
        set bonus[27] = GetRandomInt(grade + 5, grade * 2 + 10) // hp
        set bonus[28] = GetRandomInt(grade + 5, grade * 2 + 10) // mp
        set bonus[29] = GetRandomInt(2, 5) // //shop discount
        set bonus[30] = GetRandomInt(grade / 2 + 1, grade * 3) // accurancy bonus
        set bonus[31] = GetRandomInt(grade / 3 + 1, grade * 2) // evasion bonus

        set maxindex = 31
    elseif itype == 11 then
        set index[0] = 22 // experience bonus after a kill
        set index[1] = 23 // drop rate for rare item
        set index[2] = 24 // gold rate
        set index[3] = 29 // hp per kill
        set index[4] = 33 // mp per kill
        set index[5] = 44 // bonus str
        set index[6] = 45 // bonus agi
        set index[7] = 46 // bonus int
        set index[8] = 69 // attack level
        set index[9] = 70 // defence level
        set index[10] = 66 // critical chance
        set index[11] = 55 // critical damage
        set index[12] = 81 // shop discount
        set index[13] = 27 // hp reg
        set index[14] = 31 // mp reg
        set index[15] = 73 // accurancy bonus
        set index[16] = 74 // evasion bonus

        set c[0] = 15 // experience bonus after a kill
        set c[1] = 10 // drop rate for rare item
        set c[2] = 20 // gold rate
        set c[3] = 8 // hp per kill
        set c[4] = 8 // mp per kill
        set c[5] = 9 // bonus str
        set c[6] = 9 // bonus agi
        set c[7] = 9 // bonus int
        set c[8] = 4 // attack level
        set c[9] = 4 // defence level
        set c[10] = 3 // critical chance
        set c[11] = 2 // critical damage
        set c[12] = 7 // shop discount
        set c[13] = 5 // hp reg
        set c[14] = 5 // mp reg
        set c[15] = 3 // accurancy bonus
        set c[16] = 3 // evasion bonus

        set bonus[0] = GetRandomInt(grade / 30 + 1, grade / 15 + 2) // experience bonus after a kill
        set bonus[1] = GetRandomInt(grade / 50 + 1, grade / 30 + 2) // drop rate for rare item
        set bonus[2] = GetRandomInt(grade / 30 + 1, grade / 15 + 5) // gold rate
        set bonus[3] = GetRandomInt(grade / 10 + 1, grade/2 + 1) // hp per kill
        set bonus[4] = GetRandomInt(grade / 10 + 1, grade/2 + 5) // mp per kill
        set bonus[5] = GetRandomInt(grade / 50 + 1, grade / 25 + 1) // bonus str
        set bonus[6] = GetRandomInt(grade / 50 + 1, grade / 25 + 1) // bonus agi
        set bonus[7] = GetRandomInt(grade / 50 + 1, grade / 25 + 1) // bonus int
        set bonus[8] = GetRandomInt(grade / 50 + 1, grade / 20 + 2) // attack level
        set bonus[9] = GetRandomInt(grade / 50 + 1, grade / 20 + 2) // defence level
        set bonus[10] = GetRandomInt(1, grade / 50 + 1) // critical chance
        set bonus[11] = GetRandomInt(1, grade / 33 + 3) // critical damage
        set bonus[12] = GetRandomInt(1, grade / 30) // //shop discount
        set bonus[13] = GetRandomInt(grade / 25 + 1, grade / 15 + 2) // hp reg
        set bonus[14] = GetRandomInt(grade / 25 + 1, grade / 15 + 2) // mp reg
        set bonus[15] = GetRandomInt(grade / 2 + 1, grade +1) // accurancy bonus
        set bonus[16] = GetRandomInt(grade / 3 + 1, grade +1) // evasion bonus

        set maxindex = 16
    endif
    loop
        exitwhen i > amount

        set rnd = GetRandomInt(0, maxindex)
        set rc = GetRandomReal(0,99)
        loop
        exitwhen c[rnd] > rc
          set rnd = GetRandomInt(0, maxindex)
          set rc = GetRandomReal(0,99)
          if index[rnd] == 25 and LoadInteger(udg_CItem_Table, id, 25) > 0 then
               set rc = 9999
          endif
        endloop
        if index[rnd] == 8 then
            if (LoadInteger(udg_CItem_Table, id, 8) + bonus[rnd]) < 0 then
                set bonus[rnd] = 0
            else
                call SaveInteger(udg_CItem_Table, id, 72, bonus[rnd])
                call SaveInteger(udg_CItem_Table, id, 8, LoadInteger(udg_CItem_Table, id, 8) + bonus[rnd])
            endif

        elseif index[rnd] == 67 then
            call SaveInteger(udg_CItem_Table, id, 67, bonus[rnd])
            call SaveReal(udg_CItem_Table, id, 15, LoadReal(udg_CItem_Table, id, 15) + bonus[rnd])
            call SaveReal(udg_CItem_Table, id, 14, LoadReal(udg_CItem_Table, id, 14) + bonus[rnd])
        elseif index[rnd] == 68 then
            call SaveInteger(udg_CItem_Table, id, 68, bonus[rnd])
            set index[rnd] = 20
        endif
        
        if index[rnd] != 8 and index[rnd] != 67 then
            call SaveInteger(udg_CItem_Table, id, index[rnd], LoadInteger(udg_CItem_Table, id, index[rnd]) + bonus[rnd])
        endif
        set i = i + 1
    endloop

endfunction

function CreatePotion takes integer itype, real x, real y, integer lvreq, integer btype, integer value, integer dur, integer eff returns integer
    local item itm
    local integer id = 0
    local integer it
    if itype > 0 and btype > 0 and value > 0 then
        set it = 0
        if itype == 1 then
            set it = 'pghe'
        elseif itype == 2 then
            set it = 'pgma'
        elseif itype == 3 then
            set it = 'I00S'
        elseif itype == 4 then
            set it = 'I00T'
        endif
        if it != 0 then
            set itm = CreateItem(it, x, y)
            set id = GetHandleId(itm)
            call SaveInteger(udg_CItem_Table, id, btype, value)
            call SaveInteger(udg_CItem_Table, id, 8, lvreq)
            call SaveInteger(udg_CItem_Table, id, 5, dur)
            call SaveInteger(udg_CItem_Table, id, 2, itype)
            call SaveInteger(udg_CItem_Table, id, 3, btype)
            call SaveItemHandle(udg_CItem_Table, id, 100, itm)
            call SaveInteger(udg_CItem_Table, id, 19, eff)
        endif
        set itm = null
    endif
    return id
endfunction

function GenerateEQ takes integer itype, integer subtype, integer quality, integer grade, integer lv, real x, real y, boolean rndDef, integer maxsocket returns integer
    local integer rnd = GetRandomInt(0, 99)
    local integer mingrade = 1
    local integer ethernal = 0
    local integer pdef
    local integer mdef
    local integer mdef1 = 0
    local integer mdef2 = 0
    local integer mdef3 = 0
    local integer mdef4 = 0
    local integer mdef5 = 0
    local integer i
    local integer tmdef
    local integer id
    local real m
    local real m2
    local item itm
    if itype == 7 then
        set itype = 3
        set subtype = GetRandomInt(0, 9)
    endif

    if grade == - 1 and rnd < 10 then
        set ethernal = 1
    endif

    set rnd = GetRandomInt(0, 99)

    if grade == - 1 then
        if lv < 1 then
            set lv = 1
        endif
        if lv > 10 then
            set mingrade = lv - 10
        endif
        set grade = GetRandomInt(mingrade, lv)
        if lv > grade then
            set lv = grade
        endif
    endif

    if itype == - 1 or subtype == -1 then
       if itype == -1 then
        set itype = GetRandomInt(1, 9)
       endif
        if itype == 7 then
            set itype = 3
            set subtype = GetRandomInt(1, 9)
        elseif itype == 9 then
            set itype = 11
        endif
        if itype == 1 or itype == 2 or itype == 4 then
            set subtype = GetRandomInt(1, 3)
        elseif itype == 3 then
            set subtype = GetRandomInt(1, 9)
        else
            set subtype = 1
        endif
    endif

    if itype == 11 then
       if quality == -1 then
           set rnd = GetRandomInt(0, 99)
           if rnd < 2 then
              set quality = 3
           elseif rnd < 10 then
              set quality = 2
           else
              set quality = 1
           endif
       endif
    endif

    set itm = AddCustomItem (x, y, itype, subtype, quality)
    call SetItemBaseData (itm, itype, subtype, quality, grade, lv, ethernal, 0, 0, maxsocket, 0)

    set id = GetHandleId(itm)
    call SaveItemHandle(udg_CItem_Table, id, 100, itm)
    if itype == 1 or itype == 2 or itype == 4 then
        if itype == 1 then
            set m = 0.7
        elseif itype == 2 then
            set m = 1
        elseif itype == 4 then
            set m = 0.55
        endif
        if subtype == 1 then
            set m2 = 1.5
            set pdef = R2I((10.00 * 3.33 * grade * ((8 + quality) / 10.00)) * m) + 30
            set mdef = R2I((3 * 3.33 * grade * ((8 + quality) / 10.00)) * m) + 10
        elseif subtype == 2 then
            set m2 = 1.25
            set pdef = R2I((5.00 * 3.33 * grade * ((8 + quality) / 10.00)) * m) + 15
            set mdef = R2I((5 * 3.33 * grade * ((8 + quality) / 10.00)) * m) + 15
        elseif subtype == 3 then
            set m2 = 1
            set pdef = R2I((3.00 * 3.33 * grade * ((8 + quality) / 10.00)) * m) + 10
            set mdef = R2I((10 * 3.33 * grade * ((8 + quality) / 10.00)) * m) + 30
        endif
        if rndDef then

            set tmdef = mdef * 5
            set i = GetRandomInt(0, mdef * 2)
            set tmdef = tmdef - i
            set mdef1 = i
            set i = GetRandomInt(0, mdef * 2)
            set tmdef = tmdef - i
            set mdef2 = i
            set i = GetRandomInt(0, mdef * 2)
            if i > tmdef then
                set mdef3 = tmdef
                set tmdef = 0
            else
                set tmdef = tmdef - i
                set mdef3 = i
            endif
            set i = GetRandomInt(0, mdef * 2)
            if i > tmdef then
                set mdef4 = tmdef
                set tmdef = 0
            else
                set tmdef = tmdef - i
                set mdef4 = i
            endif
            set i = GetRandomInt(0, mdef * 2)
            if i > tmdef then
                set mdef4 = tmdef
                set tmdef = 0
            else
                set tmdef = tmdef - i
                set mdef4 = i
            endif
        else
            set mdef1 = mdef
            set mdef2 = mdef
            set mdef3 = mdef
            set mdef4 = mdef
            set mdef5 = mdef
        endif

        call SaveInteger(udg_CItem_Table, id, 26, R2I(m2 * m * 10.00 * grade * ((8 + quality) / 10.00)))
        call SaveInteger(udg_CItem_Table, id, 34, R2I(pdef))
        call SaveInteger(udg_CItem_Table, id, 35, R2I(mdef1))
        call SaveInteger(udg_CItem_Table, id, 36, R2I(mdef2))
        call SaveInteger(udg_CItem_Table, id, 37, R2I(mdef3))
        call SaveInteger(udg_CItem_Table, id, 38, R2I(mdef4))
        call SaveInteger(udg_CItem_Table, id, 39, R2I(mdef5))

    elseif itype == 3 then
       if subtype < 8 then
         call SaveInteger(udg_CItem_Table, id, 52, R2I((grade * (8 + quality) / 10.00) * WeaponDamageModifier(subtype)) )
       else
         call SaveInteger(udg_CItem_Table, id, 53, R2I((grade * (8 + quality) / 10.00) * WeaponDamageModifier(subtype)) )
       endif
    elseif itype == 9 then
        call SaveInteger(udg_CItem_Table, id, 50, R2I((grade * (8 + quality) / 10.00) / 3 + 1))
        call SaveInteger(udg_CItem_Table, id, 51, R2I((grade * (8 + quality) / 10.00) / 3 + 1) )
    elseif itype == 5 then
        call SaveInteger(udg_CItem_Table, id, 34, R2I((grade * (8 + quality) / 10.00) * 3 + 30))
        call SaveInteger(udg_CItem_Table, id, 43, R2I((grade * (8 + quality) / 10.00) / 10 + 5))
    elseif itype == 8 then
        call SaveInteger(udg_CItem_Table, id, 34, R2I((grade * (8 + quality) / 10.00) * 8.75 + 30))
        call SaveInteger(udg_CItem_Table, id, 41, R2I((grade * (8 + quality) / 10.00) * 1.5 + 10))
        call SaveInteger(udg_CItem_Table, id, 42, R2I((grade * (8 + quality) / 10.00) * 1 + 10))
    elseif itype == 6 then
        call SaveInteger(udg_CItem_Table, id, 52, R2I((grade * (8 + quality) * 0.135) + 1))
        call SaveInteger(udg_CItem_Table, id, 53, R2I((grade * (8 + quality) * 0.135) + 1))
        call SaveInteger(udg_CItem_Table, id, 54, R2I((grade * (8 + quality) / 250.00) + 1))
    endif
  

    if quality == 1 then
        if itype == 11 then
           call AddRandomBonus (id, grade, itype, GetRandomInt(1,2))
        endif
    elseif quality == 2 then
        if itype == 11 then
           call AddRandomBonus (id, grade, itype, GetRandomInt(3,4))
        endif
    elseif quality == 3 then
        if itype == 11 then
           call AddRandomBonus (id, grade, itype, GetRandomInt(5,7))
        else
        set rnd = GetRandomInt(0, 9)
        if rnd < 7 then
            call AddRandomBonus (id, grade, itype, 1)
        elseif rnd < 9 then
            call AddRandomBonus (id, grade, itype, 2)
        elseif rnd == 9 then
            call AddRandomBonus (id, grade, itype, 3)
        endif
        endif
    elseif quality == 4 then
        set rnd = GetRandomInt(0, 9)
        if rnd < 4 then
            call AddRandomBonus (id, grade, itype, 2)
        elseif rnd < 7 then
            call AddRandomBonus (id, grade, itype, 3)
        elseif rnd == 9 then
            call AddRandomBonus (id, grade, itype, 4)
        endif
    elseif quality == 5 then
        set rnd = GetRandomInt(0, 9)
        if rnd < 5 then
            call AddRandomBonus (id, grade, itype, 3)
        elseif rnd < 9 then
            call AddRandomBonus (id, grade, itype, 4)
        else
            call AddRandomBonus (id, grade, itype, 5)
        endif
    elseif quality == 6 then
        set rnd = GetRandomInt(0, 9)
        if rnd < 4 then
            call AddRandomBonus (id, grade, itype, 4)
        elseif rnd < 6 then
            call AddRandomBonus (id, grade, itype, 5)
        elseif rnd < 9 then
            call AddRandomBonus (id, grade, itype, 6)
        elseif rnd == 9 then
            call AddRandomBonus (id, grade, itype, 7)
        endif
    endif
 
    set itm = null
    return id
endfunction

function GenerateUnique takes integer pl, integer u, real x, real y returns integer
    local integer itype = LoadInteger(udg_CItem_Table, -u, 2)
    local integer subtype = LoadInteger(udg_CItem_Table, -u, 3)
    local integer quality = 7
    local integer grade = LoadInteger(udg_CItem_Table, -u, 7)
    local integer lv = LoadInteger(udg_CItem_Table, -u, 8)
    local integer ethernal = LoadInteger(udg_CItem_Table, -u, 13)
    local integer maxsocket = LoadInteger(udg_CItem_Table, -u, 12)
    local integer id
    local real um = 1.2 //unique modificator, example if its is 1.2 then its mean 1.2x bigger than compared the normal item
    local integer pdef
    local integer mdef
    local real m
    local real m2
    local item itm
    local integer i = 22

    if itype > 0 and u > 0 then
        if itype != 1 and itype != 2 and itype != 3 and itype != 4 and itype != 9 then
            set maxsocket = 0
        endif

        set itm = AddCustomItem (x, y, itype, subtype, quality)
        call SetItemBaseData (itm, itype, subtype, quality, grade, lv, ethernal, 0, 0, maxsocket, 0)
        set id = GetHandleId(itm)
        call SaveItemHandle(udg_CItem_Table, id, 100, itm)
        set itm = null
        call SaveInteger(udg_CItem_Table, id, 0, u)
        if itype == 1 or itype == 2 or itype == 4 then
            if itype == 1 then
                set m = 0.7
            elseif itype == 2 then
                set m = 1
            elseif itype == 4 then
                set m = 0.55
            endif
            if subtype == 1 then
                set m2 = 1.5
                set pdef = R2I((10.00 * 3.33 * grade * um) * m) + 30
                set mdef = R2I((3 * 3.33 * grade * um) * m) + 10
            elseif subtype == 2 then
                set m2 = 1.25
                set pdef = R2I((5.00 * 3.33 * grade * um) * m) + 15
                set mdef = R2I((5 * 3.33 * grade * um) * m) + 15
            elseif subtype == 3 then
                set m2 = 1
                set pdef = R2I((3.00 * 3.33 * grade * um) * m) + 10
                set mdef = R2I((10 * 3.33 * grade * um) * m) + 30
            endif

            call SaveInteger(udg_CItem_Table, id, 26, R2I(m2 * m * 10.00 * grade * um))
            call SaveInteger(udg_CItem_Table, id, 34, R2I(pdef))
            call SaveInteger(udg_CItem_Table, id, 35, R2I(mdef))
            call SaveInteger(udg_CItem_Table, id, 36, R2I(mdef))
            call SaveInteger(udg_CItem_Table, id, 37, R2I(mdef))
            call SaveInteger(udg_CItem_Table, id, 38, R2I(mdef))
            call SaveInteger(udg_CItem_Table, id, 39, R2I(mdef))

        elseif itype == 3 then
            if subtype < 8 then
                call SaveInteger(udg_CItem_Table, id, 52, R2I((grade * um) * WeaponDamageModifier(subtype)) )
            else
                call SaveInteger(udg_CItem_Table, id, 53, R2I((grade * um) * WeaponDamageModifier(subtype)) )
            endif
        elseif itype == 5 then
            call SaveInteger(udg_CItem_Table, id, 34, R2I((grade * um) * 3 + 30))
            call SaveInteger(udg_CItem_Table, id, 43, R2I((grade * um) / 10 + 5))
        elseif itype == 8 then
            call SaveInteger(udg_CItem_Table, id, 34, R2I((grade * um) * 8.75 + 30))
            call SaveInteger(udg_CItem_Table, id, 41, R2I((grade * um) * 1.5 + 10))
            call SaveInteger(udg_CItem_Table, id, 42, R2I((grade * um) * 1 + 10))
        elseif itype == 6 then
            call SaveInteger(udg_CItem_Table, id, 52, R2I((grade * um / 10 * 0.135) + 1))
            call SaveInteger(udg_CItem_Table, id, 53, R2I((grade * um / 10 * 0.135) + 1))
            call SaveInteger(udg_CItem_Table, id, 54, R2I((grade * u / 10 / 250.00) + 1))
        endif

        loop
        exitwhen i > 99
         if LoadInteger(udg_CItem_Table, -u, i) != 0 then
           call SaveInteger(udg_CItem_Table, id, i, LoadInteger(udg_CItem_Table, -u, i))
         endif
        set i = i + 1
        endloop
        return id
    else
        return 0
    endif
endfunction

function GenerateEQDrop takes integer cv, unit du returns integer
    local integer boss = 0
    local integer lv
    local integer drop = udg_Stat_Drop_Bonus[cv]
    local integer rnd
    local integer quality = 0
    local integer bbonus = 0
    local integer id
    if  IsUnitType(du, UNIT_TYPE_HERO) then
        set boss = 500
        set quality = 2
        set lv = GetHeroLevel(du)
    else
        set lv = GetUnitLevel(du)
    endif

    set rnd = GetRandomInt(boss,((100+drop)/100) * (((udg_Difficulty - 1) * 50 + boss)+600))  

    if rnd < 200 then
    elseif rnd < 400 then
        set quality = quality+1
    elseif rnd < 500 then
        set quality = quality+2
    elseif rnd < 750 then
        set quality = quality+3
    else
        set quality = quality+4
    endif

    set id = GenerateEQ (-1, -1, quality, -1, lv, GetUnitX(du), GetUnitY(du), true, -1)
    call AddItemRot (LoadItemHandle(udg_CItem_Table, id, 100), GetPlayerId(GetOwningPlayer(udg_UDexUnits[cv]))+1)
    return id
endfunction

function Trig_create_item_Actions takes nothing returns nothing
    local integer pl = GetPlayerId(GetTriggerPlayer()) + 1
    local unit u = udg_Hero[pl]

        //call GenerateEQ (- 1, - 1, -1, GetHeroLevel(u), GetHeroLevel(u), GetUnitX(u), GetUnitY(u), false, - 1)
        call GenerateEQ (3, -1, 6, 2, 2, GetUnitX(u), GetUnitY(u), false, - 1)

//call SetItemBaseData (itm, itype, subtype, quality, grade, lvreq, ethernal, dur, maxdur, maxsocket, setid)
//call SetItemProperties1 (id, hp, hpreg, hpsteal, hpkill, mp, mpreg, mpsteal, mpkill, phydef, fdef, wdef, ldef, pdef, edef)
//call SetItemProperties2 (id, mspeed, acc, eva, str, agi, int, attspd, block, exp, gold, drop)
//call SetItemProperties3 (id, refl, armpen, attlv, deflv, pdmg, mdmg, crit, cdmg, pp, bdmg1, bdmg2, bdmg3, bdmg4, bdmg5)

    set u = null
endfunction

//===========================================================================
function InitTrig_Create_item takes nothing returns nothing
    set gg_trg_Create_item = CreateTrigger( )
    call TriggerRegisterPlayerEventEndCinematic( gg_trg_Create_item, Player(0) )
    call TriggerAddAction( gg_trg_Create_item, function Trig_create_item_Actions )
endfunction
Last edited:
Top