summaryrefslogtreecommitdiff
path: root/npc/003-5/jeweler.txt
blob: 75f7109a173b5dcb8f90ec6963005fe64512c751 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
// TMW2 Script
// Author:
//    Jesusalva
// Description:
//  Sells and crafts jewels
//
// Notes:
//  Gold/Silver/Copper+Tin Ore (dropped by bifs) → Pieces or Ingot, depends on what you want to forge
//  Jeweler only works with Gold/Silver/Bronze PIECES. The Ingots are for forges.
//  Jeweler can also polish raw gemstones for a comission ($$$)
//  Polished gemstones can be inserted on rings.
//  The less precious the ring, heavier and less defense value.
//
//  All three rings can be swapped by a Light Ring (you will lose any gemstone on them!).
//  Still pending discussion.

003-5,33,37,0	script	Jeweler	NPC_FEMALE_TONORI,{
    mesn l("Inya, the Jeweler");
    mesq l("Hello!");
    goto L_Menu;

L_Menu:
    mes "";
    mesn strcharinfo(0);
    menu
        l("I want to shop."), -,
        l("I want to craft rings."), L_Craft,
        l("I want to create polished gemstones."), L_Gemstone,
        l("I want to remove all stuff applied to my ring!"), L_Clear,
        l("Nothing, sorry."), L_Close;

    npcshopattach(.name$);
    openshop;
    closedialog;
    close;

L_Craft:
    mes "";
    mesn l("Inya, the Jeweler");
    mesq l("Of course, I actually have two options:");
    mes l("- 5 @@, with 1200 GP, for a @@.", getitemlink(GoldPieces), getitemlink(GoldenRing));
    mes l("- %d %s with %d GP, for a %s.", 2, getitemlink(SilverIngot), 1200, getitemlink(SilverRing)); // TODO
    next;
    menu
        rif(countitem(GoldPieces) >= 5 && Zeny >= 1200, l("Yes, deal. Gimme the gold ring.")), -,
        rif(countitem(SilverIngot) >= 2 && Zeny >= 1200, l("Yes, deal. Gimme the silver ring.")), -,
        l("...I'll be back later."), L_Close;

    switch (@menu) {
        case 1:
            inventoryplace GoldenRing, 1;
            delitem GoldPieces, 5;
            Zeny=Zeny-1200;
            getitem GoldenRing, 1;
            getexp 100, 25;
            break;
        case 2:
            inventoryplace SilverRing, 1;
            delitem SilverIngot, 2; // TODO
            Zeny-=1200;
            getitem SilverRing, 1;
            getexp 50, 15;
            break;
    }
    mes "";
    mesn l("Inya, the Jeweler");
    mesq l("Here you go! Anything else?");
    next;
    goto L_Menu;

L_Gemstone:
    mes "";
    mesn l("Inya, the Jeweler");
    mesq l("Polished gemstones can be dragged and insert on rings. They'll give special stats to rings, but these gems cannot be removed easily.");
    mesq l("I charge a service fee of @@ GP, and two gemstones.", 300);
    next;
    if (Zeny < 300) {
        mesn l("Inya, the Jeweler");
        mesq lg("You clearly don't have money, so let's not bother with that right now.");
        next;
        goto L_Menu;
    }
    if (!countitem(GoldenRing) && !countitem(SilverRing)) {
        mesn l("Inya, the Jeweler");
        mesq l("You don't have a ring but I can polish the gemstones nonetheless.");
        next;
    }
    select
        l("Not today, sorry."),
        rif(countitem(Diamond) >= 2 , l("Diamond (+2 vit)")),
        rif(countitem(Ruby) >= 2    , l("Ruby (+2 str)")),
        rif(countitem(Emerald) >= 2 , l("Emerald (+2 luck)")),
        rif(countitem(Sapphire) >= 2, l("Sapphire (+2 int)")),
        rif(countitem(Topaz) >= 2   , l("Topaz (+2 agi)")),
        rif(countitem(Amethyst) >= 2, l("Amethyst (+2 dex)"));

    mes "";
    if (@menu == 1)
        goto L_Menu;

    // As usual, I don't care with cheaters, so if you somehow cheat money or gemstones, YOU WILL LOSE ALL REAGENTS. No refunds.
    inventoryplace PolishedDiamond-2+@menu, 1;
    delitem Diamond-2+@menu, 2;
    Zeny-=300;
    getitem PolishedDiamond-2+@menu, 1;
    getexp 800, 0;
    goto L_Menu;


/* TODO Special rings
L_Pearl:
    inventoryplace GoldenPearlRing;
    delitem GoldenRing, 1;
    Zeny=Zeny-1000;
    delitem Pearl, 3;
    getitem GoldenPearlRing, 1;
    getexp 1000, 0;
    goto L_Menu;

L_BlackPearl:
    inventoryplace GoldenBlackPearlRing;
    delitem GoldenRing, 1;
    Zeny=Zeny-1000;
    delitem BlackPearl, 1;
    getitem GoldenBlackPearlRing, 1;
    getexp 1000, 0;
    goto L_Menu;
*/

L_Clear:
    mesn l("Inya, the Jeweler");
    mesq l("Oh... Of course! I'll even do this for free!");
    next;
    mesn l("Inya, the Jeweler");
    mesq l("Just be really, REALLY sure you want to do it. I mean, the gemstone will break.");
    mesq l("It's not warranted you'll be able to get the powder back, either.");
    next;
    mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
    .@item_index = requestitemindex();
    if (.@item_index < 0)
        goto L_Menu;

    // Check if we received an item
    getinventorylist();
    .@item=@inventorylist_id[.@item_index];

    if (is_staff())
    mesf "Item Index %d (%s) - ID %d", .@item_index, getitemlink(.@item), .@item;

    // Is it the one we're looking for?
    if (.@item != GoldenRing && .@item != SilverRing) {
        mesn;
        mesq l("Well, that's not a ring.");
        next;
        goto L_Menu;
    }

    // Retrieve the gemstone ID. Must be on slot 1 (aka. 0)!
    .@gem=getcardbyindex(.@item_index, 0);
    // Skip bound rings. It would be stupid '-'
    if (!checkbound(.@item)) {
        failedremovecardsindex .@item_index, 1;
        // No inventoryplace check here
        // DiamondPowder = 858. PolishedDiamond = 5031
        if (.@gem > 5000)
            getitem .@gem-4173, 1;
        mesn;
        mesq l("Well... Here you go!");
        next;
    } else {
        mesn;
        mesq l("I don't work with bound items.");
        next;
    }

    goto L_Menu;

L_Close:
    closedialog;
    goodbye;
    end;

OnInit:
    .@npcId = getnpcid(.name$);
    setunitdata(.@npcId, UDT_HEADTOP, NPCEyesT);
    setunitdata(.@npcId, UDT_HEADMIDDLE, VneckJumper);
    setunitdata(.@npcId, UDT_HEADBOTTOM, RaidTrousers);
    setunitdata(.@npcId, UDT_WEAPON, LousyMoccasins); // Boots
    setunitdata(.@npcId, UDT_HAIRSTYLE, 3);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 8);
    npcsit;

    .sex = G_FEMALE;
    .distance = 5;

    sleep(SHOPWAIT);
    tradertype(NST_MARKET);
    sellitem WeddingRing, 5000, 50;
    sellitem GoldenBlackPearlRing, 500000, 1; // I'm joking of course. Don't tell me you'll pay half MILLION for... this?
    end;

OnClock2214:
    restoreshopitem WeddingRing, 5000, 50;
    restoreshopitem GoldenBlackPearlRing, 500000, 1;
    end;

// Pay your taxes!
OnBuyItem:
    debugmes("Purchase confirmed");
    PurchaseTaxes();
    end;

OnSellItem:
    debugmes("Sale confirmed");
    SaleTaxes();
    end;

}