summaryrefslogblamecommitdiff
path: root/npc/023-3/logic.txt
blob: f3410d5ea4a41ac4b89a57235fe5d218d9b4c253 (plain) (tree)
1
2
3
4
5



                
                                                                               









                                                        
                    











































                                                        
                    







                                                                 












                                                                                       
 















                                                                       
                                                           
                                                               







                                                                        
         










































































                                                                                                                                                     
 
        












                                                                
                           





                                                             
 
                                                         















                                                                                                                                                                      
 
                                             

                           










                                                        
 























                                                                             
 


                                                          
 






                                                          






                                                              
                  



                      
           



                                


                                                                            















                                                              
                  



                      
           



                                


                                                                            










                               
 

                                                                                    
 
// TMW2 scripts.
// Author:
//    Jesusalva
// Description:
//    023-3 Abandoned Ice Caves Configuration File. Variables: $@LOGIC_0233BOSS

023-3	mapflag	zone	MMO

023-3,63,220,0	script	#Exit0233	NPC_HIDDEN,0,0,{
    end;

OnTouch:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    // Cheater Detected
    if (.@q < 15) { 
        warp "Save", 0, 0;
        percentheal -100, -100;
        return false;
    }

	mesc l("Return to Frostia's Castle?");
	if (askyesno() == ASK_YES) {
		.@mapn$="024-16";
	    warp .@mapn$, 30, 26;
	}
	closeclientdialog;
	close;
}

023-3,48,22,0	script	#Finish0233	NPC_HIDDEN,0,0,{
    end;

OnTouch:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    // Cheater Detected
    if (.@q < 13) { 
        warp "Save", 0, 0;
        percentheal -100, -100;
        return false;
    }

	.@mapn$="001-7";
    warp .@mapn$, 91, 90;
    end;
}

001-7,91,89,0	script	#Init0233	NPC_HIDDEN,0,0,{
    end;

OnTouch:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    // Cheater Detected
    if (.@q < 13) { 
        warp "Save", 0, 0;
        percentheal -100, -100;
        return false;
    }
    if (.@q == 15) {
        dispbottom lg("I'm not a coward! I must press forward!");
        end;
    }
	.@mapn$="023-3";
    warp .@mapn$, 48, 23;
    end;
}

// A simple random treasure chest - to be sure players were introduced to this
// awesome system. Same rules as any treasure box still applies.
023-3,94,212,0	script	#chest_02330	NPC_CHEST,{

    TreasureBox();
    specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing
    close;

OnInit:
    .distance = 2;
    end;
}


// Miniboss fight must be enabled on right npc. No passing before that.
023-3,120,103,0	script	#MiniBossTrap0233	NPC_HIDDEN,0,2,{
    end;

OnTouch:
    .@q=getq(FrostiaQuest_Homunculus);
    if (!.@q) {
        dispbottom l("A powerful magic barrier repels you!");
        getmapxy(.@m$, .@x, .@y, 0);
        slide .@x-2, .@y;
        sit();
    }
    end;
}


// The scout which went ahead of you (+ miniboss mechanics)
023-3,86,88,0	script	Elite Scout#MB0233	NPC_DARKSABER,{
    if ($@LOGIC_0233BOSS) {
        npctalkonce l("FIGHT!");
        end;
    }
    if (getq(FrostiaQuest_Homunculus) >= 1) {
        npctalkonce l("I'm not going any closer to that cursed place!");
        end;
    }
    mesn;
    mesq l("Congratulations in making this far, @@.", strcharinfo(0));
    next;
    select
        l("Thanks, and bye."),
        l("What should I do now?");
    if (@menu == 1)
        close;
    mes "";
    mesn;
    mesq l("So, there is a magical barrier to the right, which is in place exactly to protect us.");
    next;
    mesn;
    mesq l("Past this checkpoint, is the village where the Monster King was born.");
    next;
    mesn;
    mesq l("If you want to pass through it, you'll need to defeat the Guardian which made the seal. You can bring friends for healing and support.");
    next;
    mesn;
    mesq l("Once the fight begins, the barrier at your left will lock. It won't open until the fight is over.");
    next;
    mesn;
    mesq l("Are you ready?");
    mesc l("WARNING: DO NOT PROCEED UNLESS YOU'RE READY."), 1;
    if (askyesno() == ASK_YES && !$@LOGIC_0233BOSS) {
        $@LOGIC_0233BOSS=getcharid(3); // It could be 1.
        $@LOGIC_0233BOXX=monster("023-3", any(85,94,103,113), any(91,96,102,111), "Guardian", Yeti, 1, .name$+"::OnYetiDefeat");
        initnpctimer;
    }
    closeclientdialog;
    end;
// Check if fight is still going on
OnTimer10000:
    if (!attachrid($@LOGIC_0233BOSS)) {
        killmonster("023-3", .name$+"::OnYetiDefeat");
        $@LOGIC_0233BOSS=0;
        end;
    }
    // You gave up, finish it now and not later
    if (getmap() != "023-3") {
        killmonster("023-3", .name$+"::OnYetiDefeat");
        $@LOGIC_0233BOSS=0;
        end;
    }
    // What if the Yeti left the chamber? O.o
    // It's not like there was mob collision to prevent this from happening
    // If that's the case, bring the Yeti to player position and order attack :>
    getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@LOGIC_0233BOXX);
    getmapxy(.@mx$, .@xx, .@yx, 0);
    if (!(is_between(79, 120, .@x) && is_between(75, 125, .@y))) {
        unitwarp($@LOGIC_0233BOXX, .@mx$, .@xx, .@yx);
        unitattack($@LOGIC_0233BOXX, $@LOGIC_0233BOSS);
        unittalk($@LOGIC_0233BOXX, "I did not forgot you, @@! %%e", strcharinfo(0));
        end;
    }
    initnpctimer;
    end;
// Yeti Defeated
OnYetiDefeat:
    stopnpctimer;
    .@rid=$@LOGIC_0233BOSS;
    $@LOGIC_0233BOSS=0;
    // In past, only MVP would count. Now, the requester count.
    if (playerattached())
        detachrid();
    // Player decided to leave the game, annuled
    if (!attachrid(.@rid))
        end;
    // Player decided to leave for a walk, annuled
    if (!isin("023-3", 79, 75, 120, 125))
        end;

    // We don't need compareandsetq because it's now the requester
    message(.@rid, l("You've slayed the Yeti."));
    npctalk l("Good luck in your journey, @@.", rid2name(.@rid));
    setq FrostiaQuest_Homunculus, 1;

    end;
OnInit:
    .distance = 5;
    end;
}


// Cannot flee from Miniboss Fight
023-3,80,84,0	script	#MiniBossTrapB0233	NPC_HIDDEN,5,0,{
    end;

OnTouch:
    .@q=getq(FrostiaQuest_Homunculus);
    .@q2=getq(FrostiaQuest_Homunculus);
    if ($@LOGIC_0233BOSS) {
        dispbottom l("A powerful magic barrier repels you!");
        slide 81, 86;
        sit();
    }
    end;
}

// A not-so-simple treasure chest from Sagratha's Dungeon
023-3,0,0,0	script	#0233ChestCtrl	NPC_HIDDEN,{
    end;

OnDelay:
    initnpctimer;
    end;

OnTimer180000:
    stopnpctimer;
OnInit:
    setarray .@x, 189, 191, 193, 186;
    setarray .@y,  44,  42,  43,  45;
    .@r=rand2(getarraysize(.@x));
    monster "023-3", .@x[.@r], .@y[.@r], "Treasure Chest", any(BronzeChest,BronzeMimic,SilverChest,SilverMimic,GoldenChest,GoldenMimic), 1, "#0233ChestCtrl::OnDelay";
    end;
}

// TODO: Spike traps and etc. at the corritor
// TODO: Rolling Stone Trap

// Delete rolling stones as they hit this wall
/*023-3,47,40,0	script	#0233DelStone	NPC_HIDDEN,1,0,{
OnTouch:
    end;

OnTouchNPC:
    //percentheal -100, -100;
    //unitkill(0);
    unitwarp(0, "023-3", 42, 26);
    end;
}

// TODO: Rolling Stone core
023-3,0,0,0	script	#0233RollStone	NPC_HIDDEN,{
    end;
OnInit:
    $@0233_STONEA=monster("023-3", 47, 23, "Rolling Stone", RollingStone, 1);
    $@0233_STONEB=monster("023-3", 48, 25, "Rolling Stone", RollingStone, 1);
    $@0233_STONEC=monster("023-3", 47, 30, "Rolling Stone", RollingStone, 1);
    $@0233_STONED=monster("023-3", 48, 37, "Rolling Stone", RollingStone, 1);
    initnpctimer;
    end;

OnTimer250:
    unitwalk($@0233_STONEA, 47, 40);
    unitwalk($@0233_STONEC, 47, 40);
    unitwalk($@0233_STONEB, 48, 40);
    unitwalk($@0233_STONED, 48, 40);

    getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEA);
    if (.@y >= 40)
        unitwarp($@0233_STONEA, "023-3", 47, 23);

    getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEB);
    if (.@y >= 40)
        unitwarp($@0233_STONEB, "023-3", 48, 23);

    getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEC);
    if (.@y >= 40)
        unitwarp($@0233_STONEC, "023-3", 47, 23);

    getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONED);
    if (.@y >= 40)
        unitwarp($@0233_STONED, "023-3", 48, 23);

    initnpctimer;
    end;
}
*/

// TODO: NPC walking cannot trigger OnTouch events >.>
023-3,47,23,0	script	#0233RollStoneA	NPC_ROLLINGSTONE,0,0,{
    end;

OnInit:
    npcspeed(220);
    initnpctimer;
    npcwalkto(47, 41);
    end;

OnTimer220:
    if (.y >= 40) {
        movenpc(.name$, 47, 23);
        npcwalkto(47, 41);
    }
	if (getareausers("023-3", 0)) {
		areatimer2("023-3", .x, .y, .x, .y, 10, .name$+"::OnTouch");
	}
    initnpctimer;
    end;

OnTouch:
    percentheal -100, -100;
    end;

OnTouchNPC:
    sc_start SC_COMA, 60000, 0;
    end;
}

023-3,48,25,0	script	#0233RollStoneB	NPC_ROLLINGSTONE,0,0,{
    end;

OnInit:
    npcspeed(220);
    initnpctimer;
    npcwalkto(48, 41);
    end;

OnTimer220:
    if (.y >= 40) {
        movenpc(.name$, 48, 23);
        npcwalkto(48, 41);
    }
	if (getareausers("023-3", 0)) {
		areatimer2("023-3", .x, .y, .x, .y, 10, .name$+"::OnTouch");
	}
    initnpctimer;
    end;

OnTouch:
    percentheal -100, -100;
    end;

OnTouchNPC:
    sc_start SC_COMA, 60000, 0;
    end;
}

023-3,47,30,0	duplicate(#0233RollStoneA)	#0233RollStoneC	NPC_ROLLINGSTONE,0,0
023-3,48,37,0	duplicate(#0233RollStoneB)	#0233RollStoneD	NPC_ROLLINGSTONE,0,0