summaryrefslogtreecommitdiff
path: root/npc/functions/news.txt
blob: 38120537fad2df47575e8755474114e80d99dcc8 (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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
// TMW-2 script.
// Authors:
//    Jesusalva
// Description:
//    Server news.

function	script	GameNews	{
    .@entry=getarg(0, 0);
    switch(.@entry) {
    case 99:
        mes "";
        mes ".:: "+ l("Prologue") + " ::.";
        next;
        mesc l("[@@https://wiki.moubootaurlegends.org/Storyline|Read the History@@]");
        next;
        break;
    //////////////////////////////////////////////////////////////////
    case 100:
        mes "";
        mes ".:: "+ l("The First Act") + " ::.";
        next;
        mesc b(l("The Monster King Army has occupied several towns!"));
        mesc l("The Monster King has managed to take hold of Nivalis and Hurnscald; Travel to Frostia and Halinarzo has also been made difficult.");
        next;
        mesc l("With Tulimshar being the last major human settlement standing (besides distant locations like Candor), the situation looks more dire than ever.");
        mesc l("Brave players need to group and retake them!");
        mesc l("Stay tuned for announcements regarding raid times to retake the towns.");
        mesc l("This event is unique, and cannot be repeated."), 1;
        next;
        break;
    //////////////////////////////////////////////////////////////////
    case 101:
        mes "";
        mes ".:: "+ l("The Second Act") + " ::.";
        next;
        mesc b(l("The Monster King Army left the cities! What will happen next? Anxiety grows!"));
        mesc l("After being successful is recovering Hurnscald and Nivalis from the Monster Army, they seem to have withdrawn.");
        next;
        mesc l("This certainly is just to reorganize their armies. We must take this chance to improve ourselves, or else, we'll be overrun soon enough.");
        mesc l("Brave adventurers, be ready for the worst!");
        next;
        break;
    //////////////////////////////////////////////////////////////////
    case 102:
        mes "";
        mes ".:: "+ l("The Third Act") + " ::.";
        next;
        mesc b(l("The Monster King Army is making siege at towns randomly!"));
        mesc l("The Monster King is sending their armies to attack towns with a seemingly random pattern.");
        mesc l("However, the Army seems to walk away after some time.");
        next;
        mesc l("The reason why they are not occupying the towns like before is still unknown.");
        mesc l("However, we must defeat the commanders to avoid major damage to them!");
        next;
        break;
    //////////////////////////////////////////////////////////////////
    case 103:
        mes "";
        mes ".:: "+ l("The Fourth Act") + " ::.";
        next;
        mesc b(l("The Strike Back Is Upon Us!"));
        mesc l("The Monster Army appears to be in complete disarray, sieges are much less frequent.");
        next;
        mesc l("The mist over the Impregnable Fortress Peak finally lowered down, and it seems... The peaks are no more!");
        mesc l("The Monster King Lair is not in a impregnable mountain, but in a small island now!!");
        next;
        mesc l("Will adventurers reach it? Will the random attacks at towns cease??");
        mesc l("The world hero %s and the High Council Officers will announce the times to raid the Fortress.", $MOST_HEROIC$);
        mesc l("Pay attention to #world chat, as this event is managed by players. The Monster Army is also trying to regroup, neglecting it is not advised."), 1;
        next;
        break;
    //////////////////////////////////////////////////////////////////
    case 1031:
        mes "";
        mes ".:: "+ l("Interlude") + " ::.";
        next;
        mesc b(l("Andrei Sakar Calls for Heroes!"));
        mesc l("Andrei Sakar, world renowned hero, is assembling a group of adventurers for an important mission!");
        next;
        mesc l("For a long time, towns on the distant continent of Kolev have been supporting humans here.");
        mesc l("They had a critical role in ensuring the human's race survival to The Great Fire.");
        next;
        mesc l("However, for a few months already, nothing else has been heard from that town, and all contact was lost.");
        mesc l("Andrei Sakar is decided to investigate, and has made arrangements with %s.", b(l("Nard")));
        next;
        mesc l("If you are a brave hero or adventurer, Andrei, his lieutenant Elora and the Alliance will be waiting for you on %s!", b(l("Artis")));
        mesc l("You need to reach a certain point in Player Story in order to partake on this event. Non-repeatable."), 1;
        next;
        break;
    //////////////////////////////////////////////////////////////////
    case 104:
        mes "";
        mes ".:: "+ l("The Fifth Act") + " ::.";
        next;
        mesc l("With the brave sacrifice of Andrei Sakar to save our world, our future seems as bleak than ever.");
        mesc l("There is no other solution; A desperate struggle is needed...");
        next;
        mesc l("We must defeat the Monster King on his evil lair!");
        mesc l("Only then we may have peace!!");
        next;
        break;
    //////////////////////////////////////////////////////////////////
    case 105:
        mes "";
        mes ".:: "+ l("The Final Act") + " ::.";
        next;
        // The Final Act has not been finished
        // So this part is a bit weaker than others
        mesc l("The Moubootaur is the final opponent.");
        mesc l("How many lives will be claimed until he is put to rest?");
        next;
        mesc l("According to the prophecy, he'll not stop, until life itself as we know today is removed from existence.");
        next;
        break;
    default:
        break;
    }

    mesc l("We want to thank everyone who did this release possible.");
    mes "";
    mesc l("Shall you have any inquiry, do not hesit to [@@mailto:admin@tmw2.org|send us an email@@]##b.");
    mesc l("You can also read the [@@news|server news@@], or even [@@https://tmw2.org/news|older entries@@].");
    next;
    return;
}

function	script	EventHelp	{
    if ($EVENT$ == "") return;

    if ($EVENT$ == "Kamelot") {
        /////////////////////////////////////////////////////////////////////////
        mesc ".:: " + l("Kamelot Raid") + " ::.", 2;
        mes "";
        mes l("Group together your guild and challenge the evil power,");
        mes l("which creeps over Kamelot! During this event, the ancient");
        mes l("evil will return every day to curse King Arthur the Micksha.");
        mes "";
        mes l("Is your guild strong enough to give Arthur at least good nights sleep?");
        mesc l("Location: Kamelot Castle, west of Hurnscald."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Valentine") {
        mesc ".:: " + l("Valentine Day") + " ::.", 2;
        mes "";
        mes l("It is time to send %s to your beloved ones!", getitemlink(BoxOfChocolates));
        mes l("Touch Soul Menhir and visit the Valentine's Island.");
        mes l("Collect chocolate and love letters from the fluffies");
        mes l("and have Demure to send them to those you admire!");
        mes l("Don't forget to collect and eat any chocolate sent to you, too!");
        mes "";
        mes l("Witness, the power of love!");
        mesc l("Location: Valentine Island, access by Soul Menhir."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Easter") {
        mesc ".:: " + l("Easter") + " ::.", 2;
        mes "";
        mes l("The Enchanted Forest is now open to visitors!");
        mes l("Collect easter eggs, and exchange them with Lilica!");
        mes "";
        mes l("Compete for the first place, and remember to exchange silver");
        mes l("easter eggs for more useful things!");
        mes "";
        mes l("Who will collect the most?!");
        mesc l("Location: Enchanted Forest, access by Soul Menhir."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Patrick") {
        mesc ".:: " + l("St. Patrick Day") + " ::.", 2;
        mes "";
        mes l("A golden pot in woodlands shall reward those who wear green.");
        mes l("Find it, spin it, and be bestowed in golden rewards!");
        mes "";
        mes l("Meanwhile, at 00h, 06h, 12h, 15h, 18h and 21h UTC,");
        mes l("legendary clovers will spawn almost everywhere.");
        mes "";
        mes l("Feeling lucky?");
        mesc l("Location: North Woodlands, south of Nivalis."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Worker") {
        mesc ".:: " + l("Worker Day") + " ::.", 2;
        mes "";
        mes l("The International Worker Day is a traditional celebration,");
        mes l("focused on lower level players, and to cherish those whom work hard everyday.");
        mes "";
        mes l("Visit the special event map, kill low level bosses, collect %s,", getitemlink(Pearl));
        mes l("exchange them, and have fun!");
        mes "";
        mes l("Happy %s!", "@@https://en.wikipedia.org/wiki/International_Workers%27_Day|"+l("international worker day")+"@@");
        mesc l("Location: Worker's Cave, access by Soul Menhir."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Thanksgiving") {
        mesc ".:: " + l("Thanksgiving") + " ::.", 2;
        mes "";
        mes l("It has been a great year, and the TMW2 Team would like to");
        mes l("give everyone gifts for spending so much time with us %%l");
        mes "";
        mes l("Every day you login, you'll be able to spin a card.");
        mes l("the card will determine your gift - the more cards you spin,");
        mes l("the better your chances to get the best cards.");
        mes "";
        mes l("So long, and thanks for all the fish!");
        mesc l("Location: Daily Login."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Christmas") {
        mesc ".:: " + l("Christmas") + " ::.", 2;
        mes "";
        mes l("By far, the most important holiday on Moubootaur Legends.");
        mes l("Visit the Christmas Workshop, and talk to the chief in charge.");
        mes "";
        mes l("Seems like they're having difficulty handling the demand, and");
        mes l("need help to send gifts to everyone! Compete for scoreboards,");
        mes l("but remember: Rewards will also be based on everyone's progress!");
        mes "";
        mes l("Merry Christmas, and a happy new year! \\o/");
        mesc l("Location: Christmas Workshop, Romantic Field, south of Nivalis."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Anniversary") {
        mesc ".:: " + l("Moubootaur Legends Anniversary") + " ::.", 2;
        mes "";
        mes l("Moubootaur Legends just got older! %%N");
        mes l("Base Experience Rate is now %d%%.", $BCONFB_EXPR);
        mes "";
        mes l("Also known as TMW2 Day, it celebrates the server founding,");
        mes l("in March 2nd 2018.");
        mes l("New chars, and reborn chars, will also begin at level 10.");
        mes "";
        mes l("Invite your friends, and become a Moubootaur Legend!");
        mesc l("Location: N/A"), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Regnum") {
        mesc ".:: " + l("Regnum Blessing") + " ::.", 2;
        mes "";
        mes l("The Regnum Blessing causes all monsters in an area");
        mes l("to give %s experience!", l("triple"));
        mes "";
        mes l("Farm there and get the best experience value!");
        mesc l("Location: %s", $REGNUM_BLESSMAP_H$), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Expo") {
        mesc ".:: " + l("World Expo") + " ::.", 2;
        mes "";
        mes l("A few times during the year, an independent team organizes a world exposition of special relics.");
        mes l("However, %s stole the treasures which were being showcased!", $WORLDEXPO_ENEMY$);
        mes l("Collect the treasured crystals from treasure chests!");
        mes "";
        mes l("While %s's reasons to do so remain unclear, a request was made.", $WORLDEXPO_ENEMY$);
        mes l("Aurora will collect the crystals; And adventurers from the whole world shall look for them in the chests and return to Aurora!");
        mes "";
        mes l("This exposition has to be a success!");
        mesc l("Location: Treasure Chests, hidden inside dungeons."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Fishing") {
        mesc ".:: " + l("Catch the Golden Fish!") + " ::.", 2;
        mes "";
        mes l("A few times during the year, the \"golden wave\" migrates from the north pole to the south pole.");
        mes l("As a result, while fishing you may randomly get a golden fish.");
        mes "";
        mes l("These gold fishes multiply horribly and have no natural predator.");
        mes l("If left unchecked for long, they will eventually become the only specie on the sea.");
        mes l("Help controlling their population, and return those you fish to Aurora!");
        mes "";
        mes l("Catch the golden fish swarm!");
        mesc l("Location: Fishing spots in the water."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Mining") {
        mesc ".:: " + l("Miners Union Research Request!") + " ::.", 2;
        mes "";
        mes l("While mining bifs, a strange powder appeared.");
        mes l("The effects and uses - if any - are still unknown.");
        mes "";
        mes l("The Miners Union is trying to research this powder.");
        mes l("A reward is promised to those whom cooperate.");
        mes l("Collaborate by giving this powder to Aurora, before it vanishes!");
        mes "";
        mes l("Mysterious Powder expires after some time!");
        mesc l("Location: All bifs in the world."), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Candor") {
        mesc ".:: " + l("Candor Battle Season") + " ::.", 2;
        mes "";
        mes l("During this season, challenges to Crazyfefe will be free.");
        mes l("Special battle modes will also be available.");
        mes "";
        mes l("Will you accept his challenge?! Raise to the highest top score!");
        mesc l("Location: Candor B1F"), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Celestia") {
        mesc ".:: " + l("Celestia Season") + " ::.", 2;
        mes "";
        mes l("During this season, you can summon the Yeti King for free.");
        mes l("This is the perfect opportunity to help Celestia.");
        mes "";
        mes l("Mount your party and find the Yeti King!");
        mesc l("Location: Tulimshar Sewers / Hurnscald Town Hall"), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Gemini") {
        mesc ".:: " + l("Gemini Season") + " ::.", 2;
        mes "";
        mes l("During this season, Gemini Quest can be done with parties of 6.");
        mes l("Not only that, but you get one free attempt every day!");
        mes "";
        mes l("Form your party and rescue Luvia Gemini from Isbamuth!");
        mesc l("Location: Forsaken Inn, South Woodlands"), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Rebirth") {
        mesc ".:: " + l("Rebirth Season") + " ::.", 2;
        mes "";
        mes l("During this season, monster point gain is increased in %d%%!", 10);
        mes l("Not only that, but reborn characters will spawn at level %d!", 3);
        mes "";
        mes l("Also: You'll be able to rebirth at Tulimshar with Jakod. What are you waiting for?!");
        mesc l("Location: Not applicable"), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Tower") {
        mesc ".:: " + l("Dream Tower Appears") + " ::.", 2;
        mes "";
        mes l("The dream towers have shown up. They have several floors filled with treasure and dangerous monsters.");
        mes l("Every day, they disappear and a new one shows up on its place.");
        mes "";
        mes l("You need a %s for each floor, and defeat the gatekeeper to advance.", getitemlink(EventDreamTicket));
        mes l("Floors cannot be re-visited, and rewards increase at each floor.");
        mes "";
        mes l("These towers must hold unfathomable secrets from %s.", $DREAMTOWER_SAGE$);
        mes l("We must find out what lies at the top, whatever the cost!");
        mesc l("Location: The Mana Plane, Dream Tower"), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Raid") {
        mesc ".:: " + l("Boss Raid") + " ::.", 2;
        mes "";
        mes l("This is terrible - a fiend from a parallel dimension has broken in ours!");
        mes l("We are unsure of the cause, but they must be repelled at any cost!");
        mes l("Meanwhile, the sages of destiny will prepare a way to kick them back to wherever they belong!");
        mes "";
        mes l("Can we keep %s at bay long enough?", $RAIDING_BOSS$);
        mes l("Collect their %s as well, so our wizards can do their magic!", getitemlink(EventNaftalin));
        mesc l("Location: The Mana Plane, Showdown Chamber"), 3;
        /////////////////////////////////////////////////////////////////////////
    } else if ($EVENT$ == "Olympics") {
        mesc ".:: " + l("Magic Olympics") + " ::.", 2;
        mes "";
        mes l("The Magic Olympics are held by the Academy Grand Masters roughly quarterly, and allow the brightest mages to acquire scholarships at the Magic Academy.");
        mes l("Only one vouch can be acquired, and you cannot be vouched to Grand Master position. You need to have touched the Mana Stone to participate.");
        mes "";
        mes l("Talk to Hocus in Porthos (via Menhir) to enroll.");
        mesc l("Location: The Mana Plane, Porthos"), 3;
        /////////////////////////////////////////////////////////////////////////
    } else {
        mesc l("There's no help available for this event.");
        /////////////////////////////////////////////////////////////////////////
    }
    next;
    return;
}








function	script	Journalman	{
    /* Random Fun Fact */
    npctalk3 any(
        l("Halinarzo Church makes a party every Sunday! Only true believers are invited!"),
        l("Beware the Terranite! Only @@ would be brave enough to challenge them!", ($MOST_HEROIC$ == "" ? "Andrei Sakar" : $MOST_HEROIC$)),
        l("Terrible manaquake hits the whole world, causing dramatic changes!"),
        l("Effects from The Great Fire are still felt by the people."),
        l("Green Wars project says that @@ trees were planted by adventurers on the world!", format_number($TREE_PLANTED)),
        l("The Team For A Better PvP says that @@ players were killed in fair matches!", format_number($PLAYERS_KILLED)),
        l("The Alliance says that @@ monsters have been slain since Hurnscald Siege!", format_number($MONSTERS_KILLED)),
        l("All hail @@ and Andrei Sakar, heroes of the world!", $MOST_HEROIC$));
    mesn getarg(0);
    mesq l("Bonjour! I am @@, and I am from the Press! Read the latest news with me!", getarg(0));
    mes "";

    /* Permanent/Weekly Events */
    if ($EVENT$ != "") {
        mesc l("It's @@ (day)!", $EVENT$);
        mesc l("Try talking to Soul Menhir or with any NPC on Tulimshar Center (near Soul Menhir).");
    }

    /* Short-Timed Events */
    if ($@GM_EVENT)
        mesc l("An event is happening at Aeros! Hurry up!");
    else if ($@MK_SCENE)
        mesc l("The Monster King is on the move!");

    /* Seasonal Events */
    switch (season()) {
        case SPRING:
            mesc l("It's spring! Two lovely NPCs at woodlands can be found...");
            break;
        case WINTER:
            mesc l("It's winter! An NPC in Nivalis Town is freezing...");
            break;
        case SUMMER:
            mesc l("It's summer! Ched is having his usual contest, but Luffyx in Hurnscald is up to no good!");
            break;
        case AUTUMN:
            mesc l("It's autumn! There is no special event during autumn, only special drops.");
            break;
        default:
            Exception(l("Invalid season: @@", season()), RB_DEFAULT|RB_SPEECH); break;
    }

    /* Main Storyline */
    mes "";
    switch ($GAME_STORYLINE) {
        case 0:
            mesc l("The Monster King Army is occupying several towns! Brave players need to group and retake them!");
            break;
        case 1:
            mesc l("The Monster King Army left the cities! What will happen next? Anxiety grows!");
            break;
        case 2:
            .@def=100-(($MK_TEMPVAR+rand2(-1,1))*100/MK_SIEGE_TOTALPOWER);
            if ($@MK_AGGRO >= 300)
                .@st$=col(b(l("very mad")), 1);
            else if ($@MK_AGGRO >= 200)
                .@st$=col(b(l("very angry")), 6);
            else if ($@MK_AGGRO >= 100)
                .@st$=col(b(l("furious")), 7);
            if ($@MK_AGGRO >= 50)
                .@st$=col(b(l("angry")), 4);
            else
                .@st$=col(b(l("discontent")), 9);
            mesc l("The Monster King Army is attacking towns at random, but players already reduced their organization to @@ %%!", .@def);
            mesc l("With recent player activity, the Monster king is @@!", .@st$);
            break;
        case 3:
            mesc l("The Monster Army is in complete disarray, sieges are much less frequent.");
            mesc l("The Monster King Lair is not in a impregnable mountain, but in a small island now!!");
            mesc l("Will adventurers reach it? Will the random attacks at towns cease??");
            break;
        case 4:
            mesc l("We must defeat the Monster King on his evil lair!");
            mesc l("Only then we may have peace!!");
            break;
        case 5:
            mesc l("Moubootaur, please spare me...");
            break;
        default:
            Exception(l("I do now know what this means: GS-@@-ICXN-@@", $GAME_STORYLINE, $MK_TEMPVAR), RB_DEFAULT|RB_SPEECH); break;
    }

    /* Fires of Steam */
    if ($FIRESOFSTEAM) {
        mes "";
        if ($FIRESOFSTEAM >= 10)
            mesc l("We'll never forget Andrei Sakar, the most courageous hero this world has ever had.");
        else
            mesc l("Andrei Sakar calls for all the brave in the town of Artis - Kolev!");
    }
    next;

    do {
        mes "";
        menuint
            l("Thanks for your help!"), 1,
            rif($EVENT$ != "", l("Event News")), 0,
            rif($GAME_STORYLINE >= 5, l("The Final Act")), 105,
            rif($GAME_STORYLINE >= 4, l("The Fifth Act")), 104,
            rif($FIRESOFSTEAM, l("Interlude - Fourth Act")), 1031,
            rif($GAME_STORYLINE >= 3, l("The Fourth Act")), 103,
            rif($GAME_STORYLINE >= 2, l("The Third Act")), 102,
            rif($GAME_STORYLINE >= 1, l("The Second Act")), 101,
            rif($GAME_STORYLINE >= 0, l("The First Act")), 100,
            l("Prologue"), 99,
            l("Eh, I have to go."), 1;
        mes "";
        if (@menuret > 1)
            GameNews(@menuret);
        if (@menuret == 0)
            EventHelp();
    } while (@menuret != 1);

    mesn getarg(0);
    mesq l("Good bye!");
    close;
    return;
}