- 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: