Well not at home right now and I don't have your items so it's a bit hard to test, but this should more or less do the job. You also should be able to factorise it a bit (especially the forge part).
prontera,156,326,4 script Craftsman::alacra 1_M_SMITH,{ set .@npcname$, "[Craftsman]"; mes .@npcname$; mes "What can I do for you, young adventurer?"; if (select("Insert an Power Item","Power items?") == 1) { next; mes .@npcname$; mes "Sure."; mes "Which kind of item do you wanna insert a gim in?"; set .@[member="choice"], select("An armor","A footgear","A shield","A garment") - 1; next; mes .@npcname$; switch(.@[member="choice"]) { case 0: //armor copyarray .@itemId[0], $quintsId[0], getarraysize($quintsId); if(getequipid(EQI_ARMOR) == -1) { mes "Sorry, but you need an equiped armor for me to empower it."; close; } break; case 1: //footgear copyarray .@itemId[0], $glyphsId[0], getarraysize($glyphsId); if(getequipid(EQI_SHOES) == -1) { mes "Sorry, but you need an equiped footgear for me to empower it."; close; } break; case 2: //shield copyarray .@itemId[0], $sealsId[0], getarraysize($sealsId); if(getequipid(EQI_HAND_R) == -1 || getequipweaponlv(EQI_HAND_L) != 0) { mes "Sorry, but you need an equiped armor for me to empower it."; close; } break; case 3: //garment copyarray .@itemId[0], $marksId[0], getarraysize($marksId); if(getequipid(EQI_GARMENT) == -1) { mes "Sorry, but you need an equiped garment for me to empower it."; close; } break; } mes "Allright. So which item do you want to insert?"; set .@menu$, ""; for(set .@i,0; .@i<getarraysize(.@itemId); set .@i,.@i+1) { set .@menu$, .@menu$ + getitemname(.@itemId[.@i]); } set .@itemChoice, select(.@menu$) - 1; next; mes .@npcname$; mes "So, you wanna add a " + getitemname(.@itemId[.@itemChoice]) + ", on your right?"; if(select("Yes","No") == 1) { if(countitem(.@itemId[.@itemChoice]) == 0) { next; mes .@npcname$; mes "Sorry but...You don't have this item. I need at least to be able to work."; close; } } else { next; mes .@npcname$; mes "Oh...Thought so..."; close; } //update switch(.@[member="choice"]) { case 0: //armor //retrieve compounded cards and refine set .@cardId1, getequipcardid(EQI_ARMOR,0); set .@refine, getequiprefinerycnt(EQI_ARMOR); next; mes .@npcname$; mes "Perfect. Wait a second."; getitem2 getequipid(EQI_ARMOR), 1, 1, .@refine, 0, .@cardId1, .@itemId[.@itemChoice], 0, 0; delitem .@itemId[.@itemChoice], 1; break; case 1: //footgear //retrieve compounded cards and refine set .@cardId1, getequipcardid(EQI_SHOES,0); set .@refine, getequiprefinerycnt(EQI_SHOES); next; mes .@npcname$; mes "Perfect. Wait a second."; getitem2 getequipid(EQI_SHOES), 1, 1, .@refine, 0, .@cardId1, .@itemId[.@itemChoice], 0, 0; delitem .@itemId[.@itemChoice], 1; break; case 2: //shield //retrieve compounded cards and refine set .@cardId1, getequipcardid(EQI_HAND_R,0); set .@refine, getequiprefinerycnt(EQI_HAND_R); next; mes .@npcname$; mes "Perfect. Wait a second."; getitem2 getequipid(EQI_HAND_R), 1, 1, .@refine, 0, .@cardId1, .@itemId[.@itemChoice], 0, 0; delitem .@itemId[.@itemChoice], 1; break; case 3: //garment //retrieve compounded cards and refine set .@cardId1, getequipcardid(EQI_GARMENT,0); set .@refine, getequiprefinerycnt(EQI_GARMENT); next; mes .@npcname$; mes "Perfect. Wait a second."; getitem2 getequipid(EQI_GARMENT), 1, 1, .@refine, 0, .@cardId1, .@itemId[.@itemChoice], 0, 0; delitem .@itemId[.@itemChoice], 1; break; } next; mes .@npcname$; mes "Here you go."; mes "Hope to see you soon again."; } else { next; mes .@npcname$; mes "I can carve some items which will grant you new powers directly into your armor pieces."; mes "I can add a Quint into an Armor."; mes "A Glyph into footgears."; mes "A Seal into a shield."; mes "Or a Mark into a garment."; mes "Just talk to me with the correct Power Item in your inventory, and the item you wanna to engrave equiped."; } close; OnInit: setarray $quintsId[0],28060,28061,28062,28063,28064,28065,28066,28067,28068,28069; setarray $glyphsId[0],28050,28051,28052,28053,28054,28055,28056,28057,28058,28059; setarray $sealsId[0],28040,28041,28042,28043,28044,28045,28046,28047,28048,28049; setarray $marksId[0],28030,28031,28032,28033,28034,28035,28036,28037,28038,28039; end;}
Second Edit: I've completed it just before refreshing and see you've changed the request...Thought you can probably update it by yourself now, to fit the new changes. If not, just tell me.