Jump to content
  • 0

Costume Enchant NPC not working


ihuskie

Question


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  12
  • Reputation:   1
  • Joined:  10/08/12
  • Last Seen:  

Hi All can i seek for your assistance why my enchant NPC will not allow me to proceed after i choose the costume that i want to enchant by the way "30004" is the itemid i set for the transaction.

 

update : I was able to enchant top mid and low headgear costume but for garment it doesnt work

 

here's my script

//===== rAthena Script =======================================
//= Costume Enchanter
//===== By ===================================================
//= llchrisll
//===== Version ==============================================
//= 1.0 - Initial Version
//= 1.1 - Added support for all costume slots
//      - Added forgotten "Reset Enchantment" menu option
//= 1.2 - Added support to use an price to enchant
//      - Removed the unecessary variable for Reset Enchantment
//      - Modified the menu creation
//===== Tested With ==========================================
//= rAthena 03/26/2018 Revision
//= GIT Hash: 333f0dddc8353663eacba0423751988c9bc38e34
//===== Description ==========================================
//= This NPC allows players to enchant Costumes.
//= Selectable Enchants and reseting the Enchantments.
//===== Request =============================================
//= by Vegas (https://rathena.org/board/profile/53497-vegas/)
//= Topic: https://rathena.org/board/topic/115174-runen-enchanter-npc-for-custom-upper-middle-lower/
//============================================================
prontera,151,171,4    script    Costume Enchanter    101,{

disable_items;
mes .n$;
mes "Hello, "+strcharinfo(0)+"!";
mes "If you like I can enchant your costume equipment with any enchantment I have in store";
mes ( (.exchange_cost[0] > 0)?"in exchange for "+.enchant_cost[1]+"x "+getitemname(.enchant_cost[0]):"for free")+".";
mes "I can also reset an Enchantment "+ ((.enchant_reset[0] > 0)?", but I require "+.enchant_reset[1]+"x "+getitemname(.enchant_reset[0]):"for free")+".";
next;
switch(select("- Enchant Costumes:- Reset Enchantment:- Nevermind")) {
    
    case 1:
    mes .n$;
    mes "Please select the Costume you want me to enchant:";
    for ( set .@s,0; .@s < getarraysize(.enchant_slot); set .@s,.@s + 1) {
        switch(.enchant_slot[.@s]) {
            case EQI_COSTUME_HEAD_TOP: set .@c_slot$,"Top Headgear"; break;
            case EQI_COSTUME_HEAD_MID: set .@c_slot$,"Mid Headgear"; break;
            case EQI_COSTUME_HEAD_LOW: set .@c_slot$,"Low Headgear"; break;
            case EQI_COSTUME_GARMENT: set .@c_slot$,"Garment"; break;
            case EQI_SHADOW_ARMOR: set .@c_slot$,"Armor"; break;
            case EQI_SHADOW_WEAPON: set .@c_slot$,"Weapon"; break;
            case EQI_SHADOW_SHIELD: set .@c_slot$,"Shield"; break;
            case EQI_SHADOW_SHOES: set .@c_slot$,"Shoes"; break;
            case EQI_SHADOW_ACC_R: set .@c_slot$,"Accessory Right"; break;
            case EQI_SHADOW_ACC_L: set .@c_slot$,"Accessory Left"; break;
        }
        set .@c_m$,.@c_m$ + ((getequipid(.enchant_slot[.@s]) != -1)?.@c_slot$ + " - "+getitemname(getequipid(.enchant_slot[.@s])):"") + ( (.enchant_slot[.@s+1] != 0)?":":"");
    }
    set .@c_m$,.@c_m$ + ":- Cancel";
    set .@c,select(.@c_m$);
    if(.@c >= getarraysize(.enchant_slot)) close;
    set .@part,.enchant_slot[.@c-1];
    next;
    mes .n$;
    if(getequipid(.@part) == -1) {
        mes "It looks like you don't have any costume equipped on there.";
        close;
    }
    set .@hg,getequipid(.@part); // Saving Item ID
    set .@ref,getequiprefinerycnt(.@part);     // Saving Refine Level, if there is one
    set .@card1,getequipcardid(.@part,0); // Save Item ID of Card Slot 1
    mes "Selected Costume: "+getitemname(getequipid(.@part));
    if(getequipcardid(.@part,3) != 0) {
        mes "But it looks like you already have an enchantment in this costume.";
        close;
    }
    mes "Now please select the Enchantment:";
    next;
    for ( set .@e,0; .@e < getarraysize(.enchant_id); set .@e,.@e + 1)
        set .@e_m$,.@e_m$ + "> "+getitemname(.enchant_id[.@e])+ ( (.enchant_id[.@e+1] != 0)?":":"");
    set .@rune,select(.@e_m$) - 1;
    mes .n$;
    mes "Selected Enchantment: "+getitemname(.enchant_id[.@rune]);
    if(.enchant_cost[0] > 0 && countitem(.enchant_cost[0]) < .enchant_cost[1]) {
        mes "But it looks like you don't have enough "+getitemname(.enchant_cost[0])+"!";
        close;
    }
    mes "Proceed?";
    if(select("- Yes:- No") - 1) close;
    next;
    if(.enchant_cost[0] > 0)
        delitem .enchant_cost[0],.enchant_cost[1];
    delequip .@part;
    getitem2 .@hg,1,1,.@ref,0,.@card1,0,0,.enchant_id[.@rune];
    equip .@hg;
    mes .n$;
    mes "The enchantment was a success.";
    mes "See ya next time.";
    enable_items;
    break;
        
    case 2:
    mes .n$;
    mes "Please select the Costume you want me to reset the enchantment!";
    for ( set .@s,0; .@s < getarraysize(.enchant_slot); set .@s,.@s + 1) {
        switch(.enchant_slot[.@s]) {
            case EQI_COSTUME_HEAD_TOP: set .@c_slot$,"Top Headgear"; break;
            case EQI_COSTUME_HEAD_MID: set .@c_slot$,"Mid Headgear"; break;
            case EQI_COSTUME_HEAD_LOW: set .@c_slot$,"Low Headgear"; break;
            case EQI_COSTUME_GARMENT: set .@c_slot$,"Garment"; break;
            case EQI_SHADOW_ARMOR: set .@c_slot$,"Armor"; break;
            case EQI_SHADOW_WEAPON: set .@c_slot$,"Weapon"; break;
            case EQI_SHADOW_SHIELD: set .@c_slot$,"Shield"; break;
            case EQI_SHADOW_SHOES: set .@c_slot$,"Shoes"; break;
            case EQI_SHADOW_ACC_R: set .@c_slot$,"Accessory Right"; break;
            case EQI_SHADOW_ACC_L: set .@c_slot$,"Accessory Left"; break;
        }
        set .@c_m$,.@c_m$ + ((getequipid(.enchant_slot[.@s]) != -1)?.@c_slot$ + " - "+getitemname(getequipid(.enchant_slot[.@s])):"") + ( (.enchant_slot[.@s+1] != 0)?":":"");
    }
    set .@c_m$,.@c_m$ + ":- Cancel";
    set .@c,select(.@c_m$);
    if(.@c >= getarraysize(.enchant_slot)) close;
    set .@part,.enchant_slot[.@c-1];
    next;
    mes .n$;
    if(getequipcardid(.@part,3) == 0) {
        mes "It looks like you don't have any enchantment in this costume.";
        close;
    }
    set .@hg,getequipid(.@part); // Saving Item ID
    set .@ref,getequiprefinerycnt(.@part);     // Saving Refine Level, if there is one
    set .@card1,getequipcardid(.@part,0); // Save Item ID of Card Slot 1
    mes "Selected Costume: "+getitemname(getequipid(.@part));
    if(.enchant_reset[0] > 0 && countitem(.enchant_reset[0]) < .enchant_reset[1]) {
        mes "But you don't have the required Items to reset the enchantment!";
        close;
    }
    mes "Proceed?";
    if(select("- Yes:- No") - 1) close;
    next;
    if(.enchant_reset[0]) 
        delitem .enchant_reset[0],.enchant_reset[1];
    delequip .@part;
    getitem2 .@hg,1,1,.@ref,0,.@card1,0,0,0;
    equip .@hg;
    mes .n$;
    mes "The enchantment has been reseted.";
    mes "See ya next time.";
    break;
    
    case 3: break;
}
end;

OnInit:
set .n$,"[Costume Enchanter]";
// Enter here every Costume Slot, which you want to be enchantable
// Valid Entries:
// - EQI_COSTUME_HEAD_TOP
// - EQI_COSTUME_HEAD_MID
// - EQI_COSTUME_HEAD_LOW
// - EQI_COSTUME_GARMENT
// - EQI_SHADOW_ARMOR
// - EQI_SHADOW_WEAPON
// - EQI_SHADOW_SHIELD
// - EQI_SHADOW_SHOES
// - EQI_SHADOW_ACC_R
// - EQI_SHADOW_ACC_L
setarray .enchant_slot[0],EQI_COSTUME_HEAD_TOP,EQI_COSTUME_HEAD_MID,EQI_COSTUME_HEAD_LOW,EQI_COSTUME_GARMENT;
// Enchantment ID's
setarray .enchant_id[0],4720,4721;
// Price for enchanting:
// To disable the price, put 0 as values
setarray .enchant_cost[0],30004,100; // Item ID,Amount
// Price for reseting:
// To disable the price, put 0 as values
setarray .enchant_reset[0],30004,100; // Item ID,Amount
end;
}

 

Edited by ihuskie
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  10
  • Topics Per Day:  0.00
  • Content Count:  177
  • Reputation:   25
  • Joined:  12/24/14
  • Last Seen:  

Change this :

if(.@c >= getarraysize(.enchant_slot)) close;

To this :

if(.@c > getarraysize(.enchant_slot)) close;

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...