summaryrefslogtreecommitdiff
path: root/npc/025-1/rum.txt
blob: 68a6e16765d0a95aef7880b2dcda7369ca15c0d1 (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
// TMW2 Scripts
// Author:
//    Jesusalva
// Description:
//    Crazyfefe Rum
// Variables:
//    FORTRESS_DATE = When the Rum started being done
//    FORTRESS_DONE = When the Rum will be ready
//    FORTRESS_AMMO = How much Rum you're trying to make
//  Success Rate is based on how much you're trying to do and how long ago that was

025-1,106,56,0	script	Rum Barrel	NPC_NO_SPRITE,{
    goto L_Main;
    // rumbarrel_chance()
    // Returns chance (0~10,000) to successfully obtain sake
    // FORTRESS_DONE/FORTRESS_DATE is taken in account
    function rumbarrel_chance {
        .@max=10000;
        .@base=FORTRESS_DATE;//-(FORTRESS_DONE-FORTRESS_DATE);
        // .@c = how much time is left until completion
        // .@d = original amount of time required
        // .@e = Current time
        .@c=FORTRESS_DONE-.@base; //-gettimetick(2);
        .@d=FORTRESS_DATE-.@base; //-FORTRESS_DONE;
        .@e=gettimetick(2)-.@base;

        // We must divide everything by 10 to cause imprecision
        // aka. don't cause overflow bug
        .@c=.@c/10;
        .@d=.@d/10;
        .@e=.@e/10;

        //debugmes "%d - %d - %d", .@d, .@e, .@c;
        //debugmes "Start - Now - Finish";
        if (.@c == 0)
            return .@max;
        if ($@GM_OVERRIDE) debugmes "Ratio: %d/%d = %d", .@e, .@c, (.@e*.@max)/.@c;
        return min(10000, (.@e*.@max)/.@c);
    }

L_Main:
    if (!FORTRESS_DATE) {
        mesn;
        mesc l("Do you want to make %s?", l("Rum"));
        mesc l("This barrel is a courtesy from Dimond Cove Inn.");
        next;
        select
            l("Information"),
            l("Yes"),
            l("No");
        mes "";

        switch (@menu) {
            case 1:
                mesc l("Produced item:");
                mesc l("@@", getitemlink(CrazyRum));
                mesc l("%s (rare)", getitemlink(WhiskeyAle));
                mes "";
                mesc l("Cost per %s glass:", l("twelve"));
                mesc l("* @@/@@ @@", countitem(Beer), 5, getitemlink(Beer));
                mesc l("* @@/@@ @@", countitem(ArtichokeHerb), 25, getitemlink(ArtichokeHerb));
                mesc l("* @@/@@ @@", countitem(Fungus), 25, getitemlink(Fungus));
                mesc l("* @@/@@ @@", countitem(RedApple), 25, getitemlink(RedApple));
                mesc l("* @@/@@ @@", countitem(Milk), 25, getitemlink(Milk));
                mesc l("* @@/@@ @@", countitem(ShadowHerb), 100, getitemlink(ShadowHerb));
                mesc l("* @@ Water Bottle", 1);
                next;
            break;
            case 2:
                mesc l("How many batches do you want to produce? (max. 5)");
                input .@glass_count;
                if (.@glass_count < 1 ||
                    .@glass_count > 5 ||
                    countitem(ArtichokeHerb) < 25*.@glass_count ||
                    countitem(Fungus) < 25*.@glass_count ||
                    countitem(RedApple) < 25*.@glass_count ||
                    countitem(Beer) < 5*.@glass_count ||
                    countitem(Milk) < 25*.@glass_count ||
                    countitem(ShadowHerb) < 100*.@glass_count
                    ) {
                    mesc l("Not enough ingredients or invalid amount."), 1;
                    break;
                }
                mesc l("Which water will you use?");
                mesc l("The bottom-most the water, the better the bonus.");
                menuint
                    l("Cancel"), -1,
                    rif(countitem(BottleOfSewerWater) >= .@glass_count, l("Sewer Water")), 0,
                    rif(countitem(BottleOfSeaWater) >= .@glass_count, l("Sea Water")), 3600,
                    rif(countitem(BottleOfTonoriWater) >= .@glass_count, l("Tonori Water")), 11760,
                    rif(countitem(BottleOfWoodlandWater) >= .@glass_count, l("Woodland Water")), 12000,
                    rif(countitem(BottleOfDivineWater) >= .@glass_count, l("Divine Water")), 21600;
                mes "";
                if (@menuret < 0)
                    break;
                switch (@menuret) {
                    case 0:
                        .@bonus=@menuret;
                        .@water=BottleOfSewerWater;
                    break;
                    case 3600:
                        .@bonus=@menuret;
                        .@water=BottleOfSeaWater;
                    break;
                    case 11760:
                        .@bonus=@menuret;
                        .@water=BottleOfTonoriWater;
                    break;
                    case 12000:
                        .@bonus=@menuret;
                        .@water=BottleOfWoodlandWater;
                    break;
                    case 21600:
                        .@bonus=@menuret;
                        .@water=BottleOfDivineWater;
                    break;
                    default:
                        mesc l("Error, invalid return code, blame Saulc"), 1;
                        mes "==== SCRIPT ABORTED";
                        close;
                }

                // Save data
                delitem ArtichokeHerb, .@glass_count*25;
                delitem Fungus, .@glass_count*25;
                delitem RedApple, .@glass_count*25;
                delitem Beer, .@glass_count*5;
                delitem Milk, .@glass_count*25;
                delitem ShadowHerb, .@glass_count*100;
                delitem .@water, .@glass_count;
                FORTRESS_AMMO=.@glass_count;
                FORTRESS_DATE=gettimetick(2);
                FORTRESS_DONE=gettimetick(2)-.@bonus+.mintime;
                FORTRESS_DONE+=.cuptime*FORTRESS_AMMO;
            break;
            case 3:
                close;
            break;
        }
        goto L_Main;
    } else {
        mesn;
        mesc l("Your request for @@ @@ are being fermented for @@.", FORTRESS_AMMO, getitemlink(CrazyRum), FuzzyTime(FORTRESS_DATE));
        next;
        inventoryplace CrazyRum, FORTRESS_AMMO;
        mesn;
        mes l("Trying to retrieve it now will have @@ % chance to be successful.", rumbarrel_chance()/100);
        mes l("Attempt to retrieve it now?");
        next;
        if (askyesno() == ASK_YES) {
            if (rand(1000,10000) < rumbarrel_chance()) {
                mesc l("Success!"), 3;
                if (REBIRTH > rand2(20))
                    getitem WhiskeyAle, FORTRESS_AMMO*.cupammo;
                else
                    getitem CrazyRum, FORTRESS_AMMO*.cupammo;
            } else {
                mesc l("The %s wasn't ready yet and you lost it...", l("Rum")), 1;
            }
            FORTRESS_DATE=0;
            FORTRESS_AMMO=0;
        }
    }
    close;

OnInit:
    .sex = G_OTHER;
    .distance = 4;

    // Time to make each batch (48 hours)
    .cuptime=(60*60*48);
    // Base time to make any amount of cups (120 hours - five days)
    .mintime=(60*60*120);
    // Amount of cups
    .cupammo=12;
    end;

}