Jump to content
  • 0
DrakeSky

Euphys Quest Shop 1.6c - Waiting Room

Question

Need help... Where should I put the waiting room? TIA

//===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.6c
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//===== Additional Comments: =================================
//= 1.0 Initial script.
//= 1.2 Added category support.
//= 1.3 More options and fixes.
//= 1.4 Added debug settings.
//= 1.5 Replaced categories with shop IDs.
//= 1.6 Added support for purchasing stackables.
//= 1.6a Added support for previewing costumes and robes.
//= 1.6b Added 'disable_items' command.
//= 1.6c Replaced function 'A_An' with "F_InsertArticle".
//============================================================

// Shop NPCs -- supplying no argument displays entire menu.
//    callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
//  ADD YOUR NPC HERE
//============================================================
prontera,164,203,6    script    Quest Shop#1    998,{ callfunc "qshop"; }
// prontera,165,203,6    script    Quest Shop#2    998,{ callfunc "qshop",1,2; }    // call the shop 1 and 2 defined below
// etc.. Add your Shop NPCs 'Quest Shop#XXX' here
//============================================================


// Script Core - DO NOT DUPLICATE THIS NPC !!!!!!!!!!!!!
//============================================================
-    script    quest_shop    -1,{
function Add; function Chk; function Slot;
OnInit:
    freeloop(1);

// -----------------------------------------------------------
//  Basic shop settings.
// -----------------------------------------------------------

    set .Announce,1;    // Announce quest completion? (1: yes / 0: no)
    set .ShowSlot,1;    // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
    set .ShowID,1;      // Show item IDs? (1: yes / 0: no)
    set .ShowZeny,0;    // Show Zeny cost, if any? (1: yes / 0: no)
    set .MaxStack,100;    // Max number of quest items purchased at one time.

// -----------------------------------------------------------
//  Points variable -- optional quest requirement.
//    setarray .Points$[0],"<variable name>","<display name>";
// -----------------------------------------------------------

    setarray .Points$[0],
        "#CASHPOINTS", "Cash Points";


//=====================================================================================
// ------------------- ADD YOUR SHOPS NAME AND ITEMS SHOPS STARTING HERE --------------
//=====================================================================================

// -----------------------------------------------------------
//  Shop IDs -- to add shops, copy dummy data at bottom of file.
//    setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
// -----------------------------------------------------------

    setarray .Shops$[1],
        "Costume Upper",    // Shop Named 1
        "Costume Middle",    // Shop Named 2
        "Costume Lower",        // Shop Named 3
        "Costume Garment";        // Shop Named 4

// -----------------------------------------------------------
//  Quest items -- do NOT use a reward item more than once!
//    Add(<shop ID>,<reward ID>,<reward amount>,
//        <Zeny cost>,<point cost>,
//        <required item ID>,<required item amount>{,...});
// -----------------------------------------------------------

    Add(1,31290,1,0,0,40129,15,641,1,1039,250,969,1,976,1,2255,1,2227,1);
    Add(1,31291,1,0,0,40129,15,642,1,1039,250,969,1,975,1,2255,1,2227,1);
    Add(1,31090,1,0,0,40129,15,619,1,7121,250,969,1,980,1,2254,1,2221,1);
    Add(1,31098,1,0,0,40129,15,638,1,1022,250,969,1,981,1,10007,1,2274,1);
    Add(1,31140,1,0,0,40129,15,628,1,7166,250,969,1,983,1,2248,1,1030,1);
    Add(1,31187,1,0,0,40129,15,622,1,1059,250,969,1,983,1,2250,1,7510,1);
    Add(1,31190,1,0,0,40129,15,639,1,1020,250,969,1,975,1,661,1,10016,1);
    
    Add(2,20406,1,0,0,40129,15,642,1,1098,250,969,1,979,1,2626,1,7023,1);
    Add(2,20314,1,0,0,40129,15,625,1,7126,250,969,1,983,1,5007,1,5104,1);
    Add(2,31122,1,0,0,40129,15,624,1,930,250,969,1,975,1,2258,1,5096,1);
    
    Add(3,31057,1,0,0,40129,15,626,1,7216,250,969,1,983,1,2507,1,1232,1);
    Add(3,20405,1,0,0,40129,15,626,1,7216,250,969,1,975,1,2507,1,1232,1);
    Add(3,31189,1,0,0,40129,15,633,1,7216,250,969,1,975,1,10019,1,5002,1);


    Add(4,20512,1,0,0,40129,15,640,1,538,250,969,1,975,1,2327,1,5019,1);

// -----------------------------------------------------------

//=====================================================================================
// ------------------- YOUR SHOPS AND ITEMS SHOPS HAVE BEEN ADDED ---------------------
//=====================================================================================

    freeloop(0);
    set .menu$,"";
    for(set [email protected],1; [email protected]<=getarraysize(.Shops$); set [email protected],[email protected]+1) {
        set .menu$, .menu$+.Shops$[[email protected]]+":";
        npcshopdelitem "qshop"[email protected],909;
    }
    end;

OnMenu:
    set [email protected], getarraysize(@i);
    if ([email protected]) set @shop_index, select(.menu$);
    else if ([email protected] == 1) set @shop_index, @i[0];
    else {
        for(set [email protected],0; [email protected]<[email protected]; set [email protected],[email protected]+1)
            set [email protected]$, [email protected]$+.Shops$[@i[[email protected]]]+":";
        set @shop_index, @i[select([email protected]$)-1];
    }
    deletearray @i[0],getarraysize(@i);
    if (.Shops$[@shop_index] == "") {
        message strcharinfo(0),"An error has occurred.";
        end;
    }
    dispbottom "Select one item at a time.";
    callshop "qshop"[email protected]_index,1;
    npcshopattach "qshop"[email protected]_index;
    end;

OnBuyItem:
    // [email protected][] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
    setarray [email protected][0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
    copyarray [email protected][3],getd(".q_"[email protected]_index+"_"[email protected][0]+"[0]"),getarraysize(getd(".q_"[email protected]_index+"_"[email protected][0]));
    set [email protected][2],[email protected][1]*[email protected][3];
    if ([email protected][2] || [email protected][2] > 30000) {
        message strcharinfo(0),"You can't purchase that many "+getitemname([email protected][0])+".";
        end;
    }
    mes "[Quest Shop]";
    mes "Reward: ^0055FF"+(([email protected][2] > 1)[email protected][2]+"x ":"")+Slot([email protected][0])+"^000000";
    mes "Requirements:";
    disable_items;
    if ([email protected][4]) mes " > "+Chk(Zeny,[email protected][4]*[email protected][1])+([email protected][4]*[email protected][1])+" Zeny^000000";
    if ([email protected][5]) mes " > "+Chk(getd(.Points$[0]),[email protected][5]*[email protected][1])+([email protected][5]*[email protected][1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+([email protected][5]*[email protected][1])+")^000000";
    if ([email protected][6]) for(set [email protected],6; [email protected]<getarraysize([email protected]q); set [email protected]i,[email protected]i+2)
        mes " > "+Chk(countitem([email protected][[email protected]]),[email protected][[email protected]+1]*[email protected][1])+((.ShowID)?"{"[email protected][[email protected]]+"} ":"")+Slot([email protected][[email protected]])+" ("+countitem([email protected][[email protected]])+"/"+([email protected][[email protected]+1]*[email protected][1])+")^000000";
    next;
    setarray @qe[1], getiteminfo([email protected][0],5), getiteminfo([email protected][0],11);
    if (@qe[2] > 0 && ((@qe[1] & EQP_HEAD_LOW) || (@qe[1] & EQP_HEAD_TOP) || (@qe[1] & EQP_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_TOP) || (@qe[1] & EQP_COSTUME_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_LOW) || (@qe[1] & EQP_GARMENT) || (@qe[1] & EQP_COSTUME_GARMENT)))
        set [email protected],1;
    addtimer 1000, strnpcinfo(0)+"::OnEnd";
    while(1) {
        switch(select(" ~ Purchase ^0055FF"+getitemname([email protected][0])+"^000000:"+(([email protected] && [email protected][7])?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
        case 1:
            if (@qe[0]) {
                mes "[Quest Shop]";
                mes "You're missing one or more quest requirements.";
                close;
            }
            if (!checkweight([email protected][0],[email protected][2])) {
                mes "[Quest Shop]";
                mes "^FF0000You need "+((([email protected][2]*getiteminfo([email protected][0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
                close;
            }
            if ([email protected][4]) set Zeny, Zeny-([email protected][4]*[email protected][1]);
            if ([email protected][5]) setd .Points$[0], getd(.Points$[0])-([email protected][5]*[email protected][1]);
            if ([email protected][6]) for(set [email protected],6; [email protected]<getarraysize([email protected]q); set [email protected]i,[email protected]i+2)
                delitem [email protected]q[[email protected]i],[email protected]q[[email protected]i+1]*[email protected]q[1];
            getitem [email protected]q[0],[email protected]q[2];
            if (.Announce) announce strcharinfo(0)+" has created "+(([email protected]q[2] > 1)[email protected][2]+"x "+getitemname([email protected][0]):callfunc("F_InsertArticle",getitemname([email protected][0])))+"!",0;
            specialeffect2 EF_FLOWERLEAF;
            close;
        case 2:
            setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1;
            if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2];
            else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2];
            else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2];
            else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2];
            break;
        case 3:
            close;
        }
    }

OnEnd:
    if (@qe[7]) {
        changelook LOOK_HEAD_BOTTOM, @qe[3];
        changelook LOOK_HEAD_TOP, @qe[4];
        changelook LOOK_HEAD_MID, @qe[5];
        changelook LOOK_ROBE, @qe[6];
    }
    deletearray @qe[0],8;
    end;

function Add {
    if (getitemname(getarg(1)) == "null") {
        debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
        return;
    }
    setarray [email protected][0],getarg(2),getarg(3),getarg(4);
    for(set [email protected],5; [email protected]<getargcount(); set [email protected],[email protected]+2) {
        if (getitemname(getarg([email protected])) == "null") {
            debugmes "Quest requirement #"+getarg([email protected])+" invalid (skipped).";
            return;
        } else
            setarray [email protected][[email protected]],getarg([email protected]),getarg([email protected]+1);
    }
    copyarray getd(".q_"+getarg(0)+"_"+getarg(1)+"[0]"),[email protected][0],getarraysize([email protected]);
    npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
    return;
}

function Chk {
    if (getarg(0) < getarg(1)) {
        set @qe[0],1;
        return "^FF0000";
    } else
        return "^00FF00";
}

function Slot {
    set [email protected]$,getitemname(getarg(0));
    switch(.ShowSlot) {
        case 1: if (!getitemslots(getarg(0))) return [email protected]$;
        case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return [email protected]$+" ["+getitemslots(getarg(0))+"]";
        default: return [email protected]$;
    }
}
}

function    script    qshop    {
    deletearray @i[0],getarraysize(@i);
    for(set [email protected],0; [email protected]<getargcount(); set [email protected],[email protected]+1)
        set @i[[email protected]],getarg([email protected]);
    doevent "quest_shop::OnMenu";
    end;
}


// Dummy shop data -- copy as needed.
//============================================================
-    shop    qshop1    -1,909:-1
-    shop    qshop2    -1,909:-1
-    shop    qshop3    -1,909:-1
-    shop    qshop4    -1,909:-1
-    shop    qshop5    -1,909:-1


 

Edited by Emistry
codebox
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0
prontera,164,203,6    script    Quest Shop#1    998,{ callfunc "qshop"; }
prontera,164,203,6    script    Quest Shop#1    998,{ 
	callfunc "qshop"; 
	end;

	OnInit:
	waitingroom "Quest Shop", 0;
	end;
	}

 

  • Love 1
Link to comment
Share on other sites

  • 0
On 6/6/2020 at 12:39 AM, Katazui said:
prontera,164,203,6    script    Quest Shop#1    998,{ callfunc "qshop"; }
prontera,164,203,6    script    Quest Shop#1    998,{ 
	callfunc "qshop"; 
	end;

	OnInit:
	waitingroom "Quest Shop", 0;
	end;
	}

 

Perfect! Great Help!

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.