summaryrefslogtreecommitdiff
path: root/npc/016-8/main.txt
blob: e702331dc54d8511a5a71288b25c792f1e460ddb (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
// TMW2 script
// Author:
//   Jesusalva
// Description:
//    Handles pirate attacks

016-8,0,0,0	script	#MarineShipAttack2	NPC_HIDDEN,{
    end;

OnEvent:
    // TODO: Make this an instance?
    warp "016-8", 31, 33;
    dispbottom l("##1The ship is under a pirate's raid! ##BKill both ship captains before they conclude the loot!");
    // How much time you have depend on how many rebirths you have
    .@time = (90 - (REBIRTH*5)) * 1000;
    addtimercount "#MarineShip::OnEvent", .@time+1000;
    addtimer(.@time, "#MarineShipAttack2::OnDefeat");
    sleep2(1000);
    goto OnStart;

OnDefeat:
    warp "000-0-0", 47, 42;
    // TODO: Warp you to a deserted island? (alone or with the crew duplicates?)
    dispbottom l("The ship was fully plundered and you were thrown in the sea.");
    dispbottom l("You now must wait for a passing ship to rescue you and bring you to your original destination.");
    // Maybe warp back to Candor instead?
    addtimer 90000, "#MarineShipAttack2::OnResumeTravel";
    addtimercount "#MarineShip::OnEvent", 120000;
    end;

OnStart:
    // TODO: If "OnDefeat" timer is not set, jump to OnDefeat automatically!
    // Define number of pirates based on player level.
    // Player count is not important here, as this is run for every player.
    .@c=max(1, (BaseLevel/15)-REBIRTH);
    areamonster "016-8", 23, 25, 51, 30, strmobinfo(1, OceanPirate), OceanPirate, .@c, "#MarineShipAttack2::OnPirateDie";
    areamonster "016-8", 23, 40, 51, 57, strmobinfo(1, OceanPirate), OceanPirate, .@c, "#MarineShipAttack2::OnPirateDie";
    // And the stronger pirates (Blanc's Crew)
    .@r=max(1,REBIRTH);
    areamonster "016-8", 23, 40, 47, 57, strmobinfo(1, Thug), Thug, .@r, "#MarineShipAttack2::OnPirateDie";
    areamonster "016-8", 23, 40, 47, 57, strmobinfo(1, Swashbuckler), Swashbuckler, .@r, "#MarineShipAttack2::OnPirateDie";
    areamonster "016-8", 23, 40, 47, 57, strmobinfo(1, Grenadier), Grenadier, .@r, "#MarineShipAttack2::OnPirateDie";
    end;

OnDie:
    // Each OPTIONAL pirate you defeat gives you only 4 seconds!
    addtimercount "#MarineShip::OnEvent", 4000;
    addtimercount "#MarineShipAttack2::OnDefeat", 4000;
    end;

OnPirateDie:
    if (rand2(10000) < REBIRTH)
        getitem PirateBandana, 1;
    // Each pirate you defeat gives you 8 seconds
    addtimercount "#MarineShip::OnEvent", 8000;
    addtimercount "#MarineShipAttack2::OnDefeat", 8000;
    // If all pirates are dead the bosses spawn
    if (!mobcount("016-8", "#MarineShipAttack2::OnPirateDie")) {
        // You get 18 seconds to defeat each boss, the first boss is additional time.
        addtimercount "#MarineShip::OnEvent", 18000;
        addtimercount "#MarineShipAttack2::OnDefeat", 18000;
        mapannounce "016-8", l("The frigate and pirate ship captains appear! DEFEAT BOTH BEFORE THE SHIP IS LOOTED!!"), bc_map;
        // ***
        .@pirate=monster("016-8", 38, 27, "Pirate Captain", Grenadier, 1, "#MarineShipAttack2::OnVictory");
        sc_start SC_INCMHP, 900000, 1000, 10000, SCFLAG_FIXEDTICK|SCFLAG_NOAVOID|SCFLAG_NOICON, .@pirate;
        sc_start SC_ATTHASTE_POTION1, 900000, 40, 10000, SCFLAG_FIXEDTICK|SCFLAG_NOAVOID|SCFLAG_NOICON, .@pirate;
        sc_start SC_INCHIT, 900000, 1000, 10000, SCFLAG_FIXEDTICK|SCFLAG_NOAVOID|SCFLAG_NOICON, .@pirate;
        // ***
        .@pirate=monster("016-8", 24, 54, "Frigate Captain", RedFollower, 1, "#MarineShipAttack2::OnVictory");
        sc_start SC_INCMHP, 900000, 1000, 10000, SCFLAG_FIXEDTICK|SCFLAG_NOAVOID|SCFLAG_NOICON, .@pirate;
        sc_start SC_ATTHASTE_POTION1, 900000, 40, 10000, SCFLAG_FIXEDTICK|SCFLAG_NOAVOID|SCFLAG_NOICON, .@pirate;
        sc_start SC_INCHIT, 900000, 1000, 10000, SCFLAG_FIXEDTICK|SCFLAG_NOAVOID|SCFLAG_NOICON, .@pirate;
        // (Re)Spawn support for them as well!
        .@c=max(1,REBIRTH) + (BaseLevel/32);
        monster "016-8", 40, 28, strmobinfo(1, OceanPirate), OceanPirate, .@c, "#MarineShipAttack2::OnDie";
        monster "016-8", 40, 28, strmobinfo(1, Thug), Thug, .@c, "#MarineShipAttack2::OnDie";
        monster "016-8", 24, 55, strmobinfo(1, OceanPirate), OceanPirate, .@c, "#MarineShipAttack2::OnDie";
        monster "016-8", 24, 55, strmobinfo(1, Swashbuckler), Swashbuckler, .@c, "#MarineShipAttack2::OnDie";
        monster "016-8", 40, 54, strmobinfo(1, Grenadier), Grenadier, .@c, "#MarineShipAttack2::OnDie";
        monster "016-8", 32, 44, strmobinfo(1, OceanPirate), OceanPirate, .@c, "#MarineShipAttack2::OnDie"; // "hiding" one which shows up to protect the bridge
    }
    end;

OnVictory:
    if (rand2(10000) < REBIRTH+((readparam2(bLuk) + readparam2(bVit)) / 2))
        getitem SailorShirt, 1;
    // You need to defeat both captains to win (TODO: Needs testing)
    if (mobcount("016-8", "#MarineShipAttack2::OnVictory")) {
        addtimercount "#MarineShip::OnEvent", 15000;
        addtimercount "#MarineShipAttack2::OnDefeat", 15000;
        end;
    }
    // Give reward and remove reinforcements
    areatimer("016-8", 23, 25, 52, 35, 10, "#MarineShipAttack2::OnReward");
    killmonster("016-8", "#MarineShipAttack2::OnDie");
    end;

OnReward:
    // That would give 10% from missing exp, but I didn't like it.
    //getexp ((NextBaseExp-BaseExp)/10), 0;
    addtimercount "#MarineShip::OnEvent", 3500;
    deltimer("#MarineShipAttack2::OnDefeat");

    // Lv 40 rewards: 800 exp, 80 jxp, 400~600 GP
    getexp BaseLevel*20, BaseLevel*2;
    Zeny += BaseLevel*rand2(10,15);
    // 12% chance to get Crazy Rum
    if (rand2(10000) < 1200+(readparam2(bLuk)*3))
        getitem CrazyRum, 1;
    dispbottom l("Congratulations!");
    if (isin("016-8", 23, 25, 52, 60))
        addtimer(3000, "#MarineShipAttack2::OnResumeTravel");
    end;

OnResumeTravel:
    if (@timer_navio_running)
        warp "016-6", 31, 33;
    end;
}