INCLUDE StdLib\inventory.l2c
// ===================================================================================================================
// START OF EDITING PART (YOU SHOULD CHANGE THE SETTINGS FROM BELOW TO YOUR NEEDS)
// ===================================================================================================================
DEFINE_GLOBAL STRING item_name "Vesper Shaper"<-- tên vũ khí cần Enchant
DEFINE_GLOBAL STRING normal_enchant_name "Blessed Scroll: Enchant Weapon (S)"
DEFINE_GLOBAL STRING blessed_enchant_name
DEFINE_GLOBAL INT type_of_enchanting 3 "Blessed Scroll: Enchant Armor (S)"
// 1 - Normal enchant each One by One; enchant bình thu?ng t?ng cái
// 2 - Normal enchant each One to Top; Enchant BT t?ng cái t?i max
// 3 - Blessed enchant only one item; Bless Enchant 1 item
// 4 - Blessed enchant each One to Top; Bless Enchant t?ng cai t?i max
// 5 - Blessed enchant each One by One an keep the highest; enchant t?ng cái + b?ng nhau và gi? lai cai cao nh?t (+1 +1 +1 =>>+2+2+2)
// 6 - Normal enchant each One by One and stop to Top; tuong t? 5 nhung b?ng d?y thu?ng. ch? d?ng l?i khi lên max
// 7 - Blessed enchant each One by One and stop to Top;
DEFINE_GLOBAL INT keep_items_num 1
DEFINE_GLOBAL INT enchant_to_top 30
DEFINE_GLOBAL INT enchant_safe 30
DEFINE_GLOBAL INT min_little_delay 2000 // min_little_delay should be always lower than max_little_delay - these two are for random delay between the values.
DEFINE_GLOBAL INT max_little_delay 3000 // max_little_delay should be always higher than main_little_delay - this two will add some delay so carefull what you set.
// ===================================================================================================================
// END OF EDITING PART (DON'T CHANGE NOTHING FROM BELOW)
// ===================================================================================================================
//
// AIO Auto Enchant v1.2 - have 7 methods of enchanting and is safe for auto kick
// (don't cancel the enchant window when ingame)
// Fully working with L2NET v370 and on L2J Gracia Final (ct2.3) servers.
//
// special thanks to: slothmo, mpj123, rocket666, easy2k4, trixy and everybody working for l2net project
// made by iosc
// ===================================================================================================================
// ===================================================================================================================
DEFINE_GLOBAL INT min_delay 2000
DEFINE_GLOBAL INT max_delay 3000
DEFINE_GLOBAL INT rand_delay 0
DEFINE_GLOBAL INT some_loop 0
DEFINE_GLOBAL INT item_uid 0
DEFINE_GLOBAL INT enchant_result 9999
DEFINE_GLOBAL INT n_scroll_id 0
DEFINE_GLOBAL INT b_scroll_id 0
DEFINE_GLOBAL INT n_scrolls_count 0
DEFINE_GLOBAL INT b_scrolls_count 0
DEFINE_GLOBAL Inventory n_enchant_scroll 0
DEFINE_GLOBAL Inventory b_enchant_scroll 0
DEFINE_GLOBAL ARRAYLIST full_inventory 0
ITEM_GET_ID n_scroll_id "<&normal_enchant_name&>"
ITEM_GET_ID b_scroll_id "<&blessed_enchant_name&>"
GET_INVENTORY full_inventory
PRINT_TEXT "10 seconds ========================"
PRINT_TEXT "== AIO Auto Enchant Script v1.1"
PRINT_TEXT "================================"
SLEEP 1000
//SLEEP "<&little_delay&>"
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
ITEM_COUNT b_scrolls_count "<&b_scroll_id&>"
FOREACH x Inventory full_inventory
IF full_inventory.x.name == normal_enchant_name
n_enchant_scroll = full_inventory.x
ENDIF
IF full_inventory.x.name == blessed_enchant_name
b_enchant_scroll = full_inventory.x
ENDIF
NEXTEACH
IF n_scrolls_count == ONE
PRINT_TEXT "You don't have <&normal_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
SWITCH type_of_enchanting
CASE #i3
CASE #i4
CASE #i5
CASE #i7
IF b_scrolls_count == ONE
PRINT_TEXT "You don't have <&blessed_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
BREAK 1
DEFAULT
BREAK 1
ENDSWITCH
SWITCH type_of_enchanting
CASE #i1
PRINT_TEXT "== "
PRINT_TEXT "== You chosed the One by One method"
PRINT_TEXT "== Enchanting: <&item_name&>"
PRINT_TEXT "== Keeping: <&keep_items_num&>"
PRINT_TEXT "== "
PRINT_TEXT "15 seconds ========================="
SLEEP 9000
CALL EnchantEachOnebyOne
BREAK 1
CASE #i2
PRINT_TEXT "== "
PRINT_TEXT "== You chosed the One to Top method"
PRINT_TEXT "== Enchanting: <&item_name&>"
PRINT_TEXT "== Enchant till: +<&enchant_to_top&>"
PRINT_TEXT "== "
PRINT_TEXT "15 seconds ========================="
SLEEP 9000
CALL EnchantEachOnetoTop
BREAK 1
CASE #i3
PRINT_TEXT "== "
PRINT_TEXT "== You chosed Blessed Enchant one item"
PRINT_TEXT "== Enchanting: <&item_name&>"
PRINT_TEXT "== Enchant till: +<&enchant_to_top&>"
PRINT_TEXT "== Safe enchant is set to: +<&enchant_safe&>"
PRINT_TEXT "== "
PRINT_TEXT "15 seconds ========================="
SLEEP 9000
CALL BlessedEnchantOne
BREAK 1
CASE #i4
PRINT_TEXT "== "
PRINT_TEXT "== You chosed Blessed Enchant each One to Top"
PRINT_TEXT "== Enchanting: <&item_name&>"
PRINT_TEXT "== Enchant till: +<&enchant_to_top&>"
PRINT_TEXT "== Safe enchant is set to: +<&enchant_safe&>"
PRINT_TEXT "== "
PRINT_TEXT "15 seconds ========================="
SLEEP 9000
CALL EnchantEachOnetoTop
BREAK 1
CASE #i5
PRINT_TEXT "== "
PRINT_TEXT "== You chosed Blessed Enchant each One by One"
PRINT_TEXT "== Enchanting: <&item_name&>"
PRINT_TEXT "== Keep enchanted: <&keep_items_num&>"
PRINT_TEXT "== Safe enchant is set to: +<&enchant_safe&>"
PRINT_TEXT "== "
PRINT_TEXT "15 seconds ========================="
SLEEP 9000
CALL EnchantEachOnebyOne
BREAK 1
CASE #i6
PRINT_TEXT "== "
PRINT_TEXT "== You chosed each One by One and stop to Top"
PRINT_TEXT "== Enchanting: <&item_name&>"
PRINT_TEXT "== Keep - <&keep_items_num&> - items or stop to +<&enchant_to_top&>"
PRINT_TEXT "== "
PRINT_TEXT "15 seconds ========================="
SLEEP 9000
CALL EnchantEachOnebyOne
BREAK 1
CASE #i7
PRINT_TEXT "== "
PRINT_TEXT "== You chosed Blessed - One by One and stop to Top"
PRINT_TEXT "== Enchanting: <&item_name&>"
PRINT_TEXT "== Enchant till: +<&enchant_to_top&>"
PRINT_TEXT "== "
PRINT_TEXT "15 seconds ========================="
SLEEP 9000
CALL EnchantEachOnebyOne
BREAK 1
DEFAULT
PRINT_TEXT "Bad option chosen at Type of Enchant"
ENDSWITCH
LABEL THE_END
GET_RAND rand_delay "<&min_little_delay&>" "<&max_little_delay&>"
SLEEP "<&rand_delay&>"
full_inventory.clear
GET_INVENTORY full_inventory
GET_RAND rand_delay "<&min_little_delay&>" "<&max_little_delay&>"
SLEEP "<&rand_delay&>"
PRINT_TEXT "==============================="
PRINT_TEXT "== Thanks for using AIO Auto Enchant Script =="
PRINT_TEXT "==============================="
FOREACH x Inventory full_inventory
IF full_inventory.x.name == item_name
PRINT_TEXT "== <&item_name&> +<&full_inventory.x.enchant&>"
ENDIF
NEXTEACH
PRINT_TEXT "=======================iosc======"
END_SCRIPT
FUNCTION EnchantEachOnebyOne
DEFINE ARRAYLIST current_items 0
DEFINE INT total_items 0
DEFINE INT enchanting_level 0
DEFINE INT lag_flag1 0
DEFINE INT lag_flag2 0
DEFINE INT lag_flag6 0
DEFINE INT bless_start 0
LABEL A_FLAGS
current_items.clear
full_inventory.clear
GET_INVENTORY full_inventory
GET_RAND rand_delay "<&min_little_delay&>" "<&max_little_delay&>"
SLEEP "<&rand_delay&>"
enchanting_level = #i65535
total_items = ZERO
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
ITEM_COUNT b_scrolls_count "<&b_scroll_id&>"
IF ( type_of_enchanting == #i5 ) && ( bless_start == ONE )
FOREACH x Inventory full_inventory
IF ( full_inventory.x.name == item_name ) && ( full_inventory.x.enchant > ZERO )
total_items = total_items + ONE
IF full_inventory.x.enchant < enchanting_level
enchanting_level = full_inventory.x.enchant
ENDIF
ENDIF
NEXTEACH
ELSE
IF type_of_enchanting == #i6
FOREACH x Inventory full_inventory
IF full_inventory.x.name == item_name
total_items = total_items + ONE
IF (full_inventory.x.enchant < enchanting_level) && ( full_inventory.x.enchant < enchant_to_top )
enchanting_level = full_inventory.x.enchant
ENDIF
ENDIF
NEXTEACH
ELSE
IF type_of_enchanting == #i7
FOREACH x Inventory full_inventory
IF full_inventory.x.name == item_name
IF ( full_inventory.x.enchant < enchanting_level ) && ( full_inventory.x.enchant < enchant_to_top )
enchanting_level = full_inventory.x.enchant
ENDIF
ENDIF
NEXTEACH
ELSE
FOREACH x Inventory full_inventory
IF full_inventory.x.name == item_name
total_items = total_items + ONE
IF full_inventory.x.enchant < enchanting_level
enchanting_level = full_inventory.x.enchant
ENDIF
ENDIF
NEXTEACH
ENDIF
ENDIF
ENDIF
FOREACH x Inventory full_inventory
IF full_inventory.x.name == item_name
IF full_inventory.x.enchant == enchanting_level
current_items.ADD full_inventory.x.id
ENDIF
ENDIF
NEXTEACH
IF current_items.count == ZERO
lag_flag1 = lag_flag1 + ONE
IF lag_flag1 == #i3
PRINT_TEXT "No more items to echant."
JUMP_TO_LABEL THE_END
ENDIF
JUMP_TO_LABEL A_FLAGS
lag_flag1 = ZERO
ENDIF
FOREACH y INT current_items
IF type_of_enchanting != #i7
IF total_items <= keep_items_num
lag_flag1 = lag_flag1 + ONE
IF lag_flag1 == #i3
PRINT_TEXT "We are done here. Your items number is <&total_items&>"
JUMP_TO_LABEL THE_END
ENDIF
JUMP_TO_LABEL A_FLAGS
ENDIF
ENDIF
IF n_scrolls_count == ONE
lag_flag2 = lag_flag2 + ONE
IF lag_flag2 == #i3
PRINT_TEXT "You are out of <&normal_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
JUMP_TO_LABEL A_FLAGS
ENDIF
IF ( type_of_enchanting == #i5 ) || ( type_of_enchanting == #i7 )
IF b_scrolls_count == ONE
lag_flag6 = lag_flag6 + ONE
IF lag_flag6 == #i3
PRINT_TEXT "You are out of <&blessed_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
JUMP_TO_LABEL A_FLAGS
ENDIF
ENDIF
lag_flag1 = ZERO
lag_flag2 = ZERO
lag_flag6 = ZERO
item_uid = current_items.y
IF ( type_of_enchanting == #i5 ) || ( type_of_enchanting == #i7 )
IF enchanting_level < enchant_safe
CALL Enchanting VOID 1 n_enchant_scroll.id
ELSE
CALL Enchanting VOID 1 b_enchant_scroll.id
IF type_of_enchanting == #i5
bless_start = ONE
ENDIF
ENDIF
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
ITEM_COUNT b_scrolls_count "<&b_scroll_id&>"
IF enchant_result > ZERO
IF type_of_enchanting == #i5
total_items = total_items - ONE
ELSE
JUMP_TO_LABEL A_FLAGS
ENDIF
PRINT_TEXT "Enchanting <&item_name&> faild at +<&enchanting_level&>. (<&n_scrolls_count&>/<&b_scrolls_count&> scrolls left)"
ELSE
PRINT_TEXT "Enchanting <&item_name&> succeeded from +<&enchanting_level&>. (<&n_scrolls_count&>/<&b_scrolls_count&> scrolls left)"
ENDIF
ELSE
CALL Enchanting VOID 1 n_enchant_scroll.id
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
IF enchant_result > ZERO
total_items = total_items - ONE
PRINT_TEXT "<&item_name&> was cristalized at +<&enchanting_level&>. (<&n_scrolls_count&> scrolls left)"
ELSE
PRINT_TEXT "Enchanting <&item_name&> succeeded from +<&enchanting_level&>. (<&n_scrolls_count&> scrolls left)"
ENDIF
ENDIF
NEXTEACH
JUMP_TO_LABEL A_FLAGS
RETURN VOID
FUNCTION EnchantEachOnetoTop
DEFINE INT enchant_level 0
DEFINE INT lag_flag3 0
DEFINE INT lag_flag4 0
DEFINE INT lag_flag5 0
LABEL B_FLAGS
full_inventory.clear
GET_INVENTORY full_inventory
GET_RAND rand_delay "<&min_little_delay&>" "<&max_little_delay&>"
SLEEP "<&rand_delay&>"
item_uid = ZERO
enchant_level = ZERO
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
ITEM_COUNT b_scrolls_count "<&b_scroll_id&>"
FOREACH x Inventory full_inventory
IF full_inventory.x.name == item_name
IF full_inventory.x.enchant < enchant_to_top
item_uid = full_inventory.x.id
enchant_level = full_inventory.x.enchant
ENDIF
ENDIF
NEXTEACH
IF item_uid == ZERO
lag_flag3 = lag_flag3 + ONE
IF lag_flag3 == #i3
PRINT_TEXT "We are done here. No more items to enchant."
JUMP_TO_LABEL THE_END
ENDIF
JUMP_TO_LABEL B_FLAGS
ENDIF
IF n_scrolls_count == ONE
lag_flag4 = lag_flag4 + ONE
IF lag_flag4 == #i3
PRINT_TEXT "You are out of <&normal_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
JUMP_TO_LABEL B_FLAGS
ENDIF
IF type_of_enchanting == #i4
IF b_scrolls_count == ONE
lag_flag5 = lag_flag5 + ONE
IF lag_flag5 == #i3
PRINT_TEXT "You are out of <&blessed_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
JUMP_TO_LABEL B_FLAGS
ENDIF
lag_flag5 = ZERO
ENDIF
lag_flag3 = ZERO
lag_flag4 = ZERO
DO
IF n_scrolls_count == ONE
PRINT_TEXT "You are out of <&normal_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
IF type_of_enchanting == #i4
IF b_scrolls_count == ONE
PRINT_TEXT "You are out of <&blessed_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
IF enchant_level < enchant_safe
CALL Enchanting VOID 1 n_enchant_scroll.id
ELSE
CALL Enchanting VOID 1 b_enchant_scroll.id
ENDIF
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
ITEM_COUNT b_scrolls_count "<&b_scroll_id&>"
IF enchant_result > ZERO
PRINT_TEXT "Enchanting <&item_name&> faild at +<&enchant_level&>. (<&n_scrolls_count&>/<&b_scrolls_count&> scrolls left)"
enchant_level = ZERO
ELSE
enchant_level = enchant_level + ONE
PRINT_TEXT "Enchanting <&item_name&> succeeded to +<&enchant_level&>. (<&n_scrolls_count&>/<&b_scrolls_count&> scrolls left)"
ENDIF
ELSE
CALL Enchanting VOID 1 n_enchant_scroll.id
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
IF enchant_result > ZERO
PRINT_TEXT "<&item_name&> was cristalized at +<&enchant_level&>. (<&n_scrolls_count&> scrolls left)"
JUMP_TO_LABEL B_FLAGS
ELSE
enchant_level = enchant_level + ONE
PRINT_TEXT "Enchanting <&item_name&> succeeded to +<&enchant_level&>. (<&n_scrolls_count&> scrolls left)"
ENDIF
ENDIF
LOOP enchant_level < enchant_to_top
JUMP_TO_LABEL B_FLAGS
RETURN VOID
FUNCTION BlessedEnchantOne
DEFINE INT enchant_level 0
DEFINE INT lag_flag8 0
LABEL C_FLAGS
full_inventory.clear
GET_INVENTORY full_inventory
GET_RAND rand_delay "<&min_little_delay&>" "<&max_little_delay&>"
SLEEP "<&rand_delay&>"
item_uid = ZERO
enchant_level = ZERO
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
ITEM_COUNT b_scrolls_count "<&b_scroll_id&>"
FOREACH x Inventory full_inventory
IF full_inventory.x.name == item_name
IF full_inventory.x.enchant < enchant_to_top
item_uid = full_inventory.x.id
enchant_level = full_inventory.x.enchant
ENDIF
ENDIF
NEXTEACH
IF item_uid == ZERO
lag_flag8 = lag_flag8 + ONE
IF lag_flag8 == #i3
PRINT_TEXT "No item to enchant!"
JUMP_TO_LABEL THE_END
ENDIF
JUMP_TO_LABEL C_FLAGS
ENDIF
lag_flag8 = ZERO
DO
IF n_scrolls_count == ONE
PRINT_TEXT "You are out of <&normal_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
IF b_scrolls_count == ONE
PRINT_TEXT "You are out of <&blessed_enchant_name&>"
JUMP_TO_LABEL THE_END
ENDIF
IF enchant_level < enchant_safe
CALL Enchanting VOID 1 n_enchant_scroll.id
ELSE
CALL Enchanting VOID 1 b_enchant_scroll.id
ENDIF
ITEM_COUNT b_scrolls_count "<&b_scroll_id&>"
ITEM_COUNT n_scrolls_count "<&n_scroll_id&>"
IF enchant_result > ZERO
PRINT_TEXT "Enchanting <&item_name&> faild at +<&enchant_level&>. (<&n_scrolls_count&>/<&b_scrolls_count&> scrolls left)"
enchant_level = ZERO
ELSE
enchant_level = enchant_level + ONE
PRINT_TEXT "Enchanting <&item_name&> succeeded to +<&enchant_level&>. (<&n_scrolls_count&>/<&b_scrolls_count&> scrolls left)"
ENDIF
LOOP enchant_level < enchant_to_top
JUMP_TO_LABEL THE_END
RETURN VOID
FUNCTION Enchanting 1 scroll_id
enchant_result = #i9999
some_loop = ZERO
GET_RAND rand_delay "<&min_little_delay&>" "<&max_little_delay&>"
SLEEP "<&rand_delay&>"
SET_EVENT "<&SCRIPTEVENT_SERVERPACKET&>" "<&SYSTEM_CURRENTFILE&>" InsertItem 124
DEFINE BYTEBUFFER use_scroll_buffer 256
use_scroll_buffer.write_byte #i25
use_scroll_buffer.write_int32 scroll_id
use_scroll_buffer.write_int32 #i0
use_scroll_buffer.trim_to_index
INJECTBB use_scroll_buffer
DELETE use_scroll_buffer
WHILE some_loop == ZERO
SLEEP 50
WEND
LOCK A
SLEEP 50
UNLOCK A
RETURN VOID
FUNCTION InsertItem
LOCK A
some_loop = ONE
SET_EVENT "<&SCRIPTEVENT_SERVERPACKET&>" "<&SYSTEM_CURRENTFILE&>" BlankFunc 124
SET_EVENT "<&SCRIPTEVENT_SERVERPACKETEX&>" "<&SYSTEM_CURRENTFILE&>" ClickOK 129
GET_RAND rand_delay "<&min_little_delay&>" "<&max_little_delay&>"
SLEEP "<&rand_delay&>"
DEFINE BYTEBUFFER use_item_buffer 256
use_item_buffer.write_byte #i208
use_item_buffer.write_int16 #i76
use_item_buffer.write_int32 item_uid
use_item_buffer.trim_to_index
INJECTBB use_item_buffer
DELETE use_item_buffer
RETURN VOID
FUNCTION ClickOK
SET_EVENT "<&SCRIPTEVENT_SERVERPACKETEX&>" "<&SYSTEM_CURRENTFILE&>" BlankFunc 129
SET_EVENT "<&SCRIPTEVENT_SERVERPACKET&>" "<&SYSTEM_CURRENTFILE&>" EnchantComplete 135
GET_RAND rand_delay "<&min_delay&>" "<&max_delay&>"
SLEEP "<&rand_delay&>"
DEFINE BYTEBUFFER confirm_enchant_buffer 256
confirm_enchant_buffer.write_byte #i95
confirm_enchant_buffer.write_int32 item_uid
confirm_enchant_buffer.write_int32 #i0
confirm_enchant_buffer.trim_to_index
INJECTBB confirm_enchant_buffer
DELETE confirm_enchant_buffer
RETURN VOID
FUNCTION EnchantComplete
SET_EVENT "<&SCRIPTEVENT_SERVERPACKET&>" "<&SYSTEM_CURRENTFILE&>" BlankFunc 135
DEFINE INT result_byte 0
PACKET.READ_BYTE result_byte
PACKET.READ_INT32 enchant_result
DELETE result_byte
UNLOCK A
RETURN VOID
FUNCTION BlankFunc
SLEEP 25 //e = mc^2 nonsence
RETURN VOID