summaryrefslogblamecommitdiff
path: root/npc/011-1/oscar.txt
blob: f0be3b4ba48fa1ccb193a971a749e014b10734ae (plain) (tree)



















































































































































































































































































































                                                                                                                                                 

                                                 



                                              
                                                                                             























                                                                         
                                                                                                                                          








































                                                                                      
          


                 
                                                                                                                                                         















                                                                      
                                                                                        


                
                                                                                                                


                
                                                                                                             















                                                                                      
                                                                                                          

























































                                                                                                 
function	script	HalloweenQuestWaterPumpkins	{
    if (Quest_Halloween != 5 || $@HalloweenQuest_PumpkinHunter$ != "")
        goto L_Return;
    $@HalloweenQuest_PumpkinHunter$ = strcharinfo(0);
    donpcevent "Oscar::OnCommandSpg";
    goto L_Return;

L_Return:
    return;
}

011-1,94,38,0	script	Oscar	NPC142,{
    // Check we are at the good time of the year
    if (!(gettime(6) == 11 && (gettime(5) >= 4 && gettime(5) <= 30))) goto L_NoEvent;
    // Check halloween quest has been done or not.
    @halloween_year = (Annual_Quest & BYTE_0_MASK) >> BYTE_0_SHIFT;
    if (@halloween_year < (gettime(7) - 2000)) goto L_AdjustYear;
    goto L_Init;

L_AdjustYear:
    Quest_Halloween = 0;
    @halloween_year = gettime(7) - 2000;
    callsub S_Update_Annual_Quest;
    goto L_Init;

L_NoEvent:
    mes "[Oscar]";
    mes "\"Welcome here!";
    mes "I'm the owner of this farm. I'm growing fruits around here as you can see.\"";
    next;
    mes "\"Some of my fruits are for sale in my shop right here.";
    mes "Don't hesitate to drop by. They are cheap!\"";
    close;

L_Init:
    if (@halloween_year == (gettime(7) - 2000) + 1) goto L_QuestAlreadyDone;
    if (Quest_Halloween == 0) goto L_Introduce;
    if (Quest_Halloween == 1 || Quest_Halloween == 2) goto L_CheckSeeds;
    if (Quest_Halloween == 3) goto L_HelpGrowSeeds;
    if (Quest_Halloween == 4) goto L_HelpFillWaters;
    if (Quest_Halloween == 5 && $@HalloweenQuest_PumpkinHunter$ == "") goto L_HelpWaterPatches;
    if (Quest_Halloween == 5 && $@HalloweenQuest_PumpkinHunter$ == strcharinfo(0)) goto L_HelpCleanPumpkins;
    if (Quest_Halloween == 5 && $@HalloweenQuest_PumpkinHunter$ != "") goto L_WateringBusy;
    if (Quest_Halloween == 6) goto L_GetReward;
    if (Quest_Halloween == 10) goto L_GetSlap;
    goto L_End;

L_Introduce:
    mes "[Oscar]";
    mes "\"Heya!\"";
    next;
    mes "\"I just came back from a long trip... Really tiring, but so interesting.\"";
    menu
        "Oh? Where did you go?", L_Next,
        "Well... I believe.", L_End;

L_Next:
    mes "[Oscar]";
    mes "\"Well, I travelled to the economic center of this continent.";
    mes "It's north-east of here. Quite far I must say.\"";
    next;
    mes "\"But it was worth it really.";
    mes "I went there to see ways to improve my little plantation here.";
    mes "Oh well, sell some of my fruits too, see some of my fellow farmers. Classic business.\"";
    next;
    mes "\"Until a few days ago, they were holding a large party to celebrate Halloween.";
    mes "Very nice really... And in particular, I saw these strange veggies they call pumpkins.\"";
    next;
    mes "\"They taste really good you see, but ahah, they weren't really for eating at that moment!";
    mes "Anyway, I wondered if I could grow some here. Until now I only grow apples and oranges.\"";
    menu
        "That's an interesting idea!", L_Next1,
        "Really, I hate pumpkins.", L_End;

L_Next1:
    mes "[Oscar]";
    mes "\"However, I couldn't get any seeds, but I heard rumors in that city, saying we could find pumpkins in the forests north-east of here.";
    mes "Most likely there are pumpkin seeds laying around them.\"";
    next;
    mes "\"They also mentioned something strange about them, but hey, who cares! Just rumors!\"";
    next;

    if (BaseLevel < 45)
        goto L_TooYoung;

    mes "\"Do you think you can get some for me?\"";
    menu
        "Sure. Leave it to me!", L_Next2,
        "Well, I don't have time for that right now.", L_End;

L_Next2:
    mes "[Oscar]";
    mes "\"Thanks so much " + strcharinfo(0) + "!";
    mes "I can't wait to try them!\"";
    Quest_Halloween = 1;
    goto L_End;

L_TooYoung:
    mes "\"Ahm... That may be a little dangerous for you though. I don't want to send a kid in the deep forest.\"";
    goto L_End;

L_End:
    @halloween_year = 0;
    close;

L_CheckSeeds:
    if (countitem("PumpkinSeeds") < $@halloween_num_seeds)
        goto L_NotEnoughSeeds;
    delitem "PumpkinSeeds", $@halloween_num_seeds;
    Quest_Halloween = 3;
    mes "[Oscar]";
    mes "\"Yes you found them! I can start to make them grow now!";
    mes "Thank you so much " + strcharinfo(0) + "!\"";
    goto L_End;

L_NotEnoughSeeds:
    mes "[Oscar]";
    mes "\"Oh, it looks like you didn't find enough seeds yet...\"";
    goto L_End;

L_HelpGrowSeeds:
    // Wait 20 seconds before triggering the next step.
    if (@halloween_seeds_timer == 0)
        @halloween_seeds_timer = gettimetick(2);
    if ((gettimetick(2) - @halloween_seeds_timer) < 5)
        goto L_WaitGrowSeeds;
    mes "[Oscar]";
    mes "\"Oh, you are back!\"";
    next;
    mes "You notice Oscar looks quite disappointed.";
    next;
    mes "[Oscar]";
    mes "\"You see I could use some more help from you.";
    mes "My supplies of water are quite low because of the long trip I made.";
    mes "And I've been watering the pumpkin patches, but unfortunately I'm already out of water before I can see anything growing.\"";
    next;
    mes "\"If you could help me fill these " + $@halloween_num_water_bottles + " bottles with water, that would be very kind of you!\"";

    @nature_magic = getskilllv(SKILL_MAGIC_NATURE);
    if (@nature_magic > 1)
        goto L_ProposeUseKaflosh;
    @nature_magic = 0;
    menu
        "Yeah sure!", L_Next3,
        "That sounds boring to do. No thanks.", L_End;

L_Next3:
    getinventorylist;
    if (@inventorylist_count == 100 && countitem("EmptyBottle") == 0)
        goto L_InventoryFull;
    @inventorylist_count = 0;
    Quest_Halloween = 4;
    goto L_GetEmptyBottles;

L_ProposeUseKaflosh:
    @nature_magic = 0;
    menu
        "Yeah sure!", L_Next4,
        "Maybe I can help you water them with magic!", L_WaterWithKaflosh,
        "That sounds boring to do. No thanks.", L_End;

L_Next4:
    getinventorylist;
    if (@inventorylist_count == 100 && countitem("EmptyBottle") == 0)
        goto L_InventoryFull;
    Quest_Halloween = 4;
    goto L_GetEmptyBottles;

L_GetEmptyBottles:
    mes "[Oscar]";
    mes "\"Ok, here are the " + $@halloween_num_water_bottles + " empty bottles.\"";
    next;
    mes "\"Oh and while you fill these bottles, why not bring some friends here as well?";
    mes "Let's not be reckless. Maybe these rumors about the pumpkins are true.";
    mes "Oh, unless you consider yourself strong enough to take care of this alone!\"";
    getitem "EmptyBottle", $@halloween_num_water_bottles;
    goto L_End;

L_WaitGrowSeeds:
    mes "[Oscar]";
    mes "\"Thanks again " + strcharinfo(0) + "!";
    mes "I'm planting these seeds right now.\"";
    next;
    mes "\"Stay around if you want to see what it looks like!";
    mes "Amazing I tell you, amazing!\"";
    goto L_End;

L_HelpFillWaters:
    mes "[Oscar]";
    mes "\"Hey, you again!\"";
    next;
    if ($@HalloweenQuest_PumpkinHunter$ != "")
        goto L_WateringBusy;
    mes "\"So do you have the " + $@halloween_num_water_bottles + " bottles filled with fresh water?\"";
    menu
        "Yes! Fresh and clear water.", L_Next5,
        "Oh, not yet. I'm on my way.", L_End;

L_Next5:
    if (countitem("BottleOfWater") < $@halloween_num_water_bottles)
        goto L_NotEnoughWaters;

    // make an additional check here, since the player had a dialog pause in the above menu.
    if ($@HalloweenQuest_PumpkinHunter$ != "")
        goto L_WateringBusy;
    delitem "BottleOfWater", $@halloween_num_water_bottles;

    mes "[Oscar]";
    mes "\"Many thanks! I wonder what I would have done without you!";
    mes "I'll water the patches right away. Watch this!\"";
    Quest_Halloween = 5;
    $@HalloweenQuest_PumpkinHunter$ = strcharinfo(0);
    callsub S_StartPumpkinsSpawn;
    goto L_End;

L_WaterWithKaflosh:
    getinventorylist;
    if (@inventorylist_count == 100 && countitem("BottleOfWater") == 0)
        goto L_InventoryFull;
    mes "[Oscar]";
    mes "\"Oh, I see!";
    next;
    mes "\"So, I'm waiting you show me your skills!";
    mes "Water the pumpkin patches right here with your awesome magic!\"";
    next;
    mes "\"Here is one bottle of water to do it.\"";
    next;
    mes "\"By the way, I told you about the rumors concerning these pumpkins.";
    mes "Why not bring some friends here? Oh, unless you consider yourself strong enough!\"";
    Quest_Halloween = 5;
    getitem "BottleOfWater", 1;
    goto L_End;

L_HelpWaterPatches:
    // We check again here that the player has magic skills
    // This case happens when the player has logged off
    // during the infestation phase.
    @nature_magic = getskilllv(SKILL_MAGIC_NATURE);
    if (!(@nature_magic > 1))
        goto L_HelpFillWaters;
    @nature_magic = 0;
    mes "[Oscar]";
    mes "\"Come on, water the pumpkin patches right here with your awesome magic!";
    mes "For sure you will be more efficient than me!\"";
    goto L_End;

L_WateringBusy:
    mes "[Oscar]";
    mes "\"Sorry. I'm really busy at the moment.";
    mes "May you come back later? Thank you, thank you...";
    mes "Sorry I have to take care of this now!\"";
    goto L_End;

L_HelpCleanPumpkins:
    mes "[Oscar]";
    mes "\"Help me clean all these pumpkins! It's a disaster!\"";
    goto L_End;

L_NotEnoughWaters:
    mes "[Oscar]";
    mes "\"That's not enough bottles to water all these pumpkin patches.";
    mes "Please bring me more.\"";
    goto L_End;

S_Update_Annual_Quest:
    Annual_Quest = (Annual_Quest & ~(BYTE_0_MASK) | (@halloween_year << BYTE_0_SHIFT));
    return;

OnCommandSpg:
    callsub S_StartPumpkinsSpawn;
    end;

S_StartPumpkinsSpawn:
    $@HalloweenQuest_PumpkinsCount = $@halloween_num_pumpkins;
    $@HalloweenQuest_PumpkinsState = 0;
    initnpctimer;
    return;

L_QuestAlreadyDone:
    mes "[Oscar]";
    mes "\"I'm relieved all this mess is sorted out now.";
    mes "That was interesting, but really, fruits are more quiet!\"";
    goto L_End;

OnInit:
    $@halloween_num_seeds = 12;
    $@halloween_num_water_bottles = 15;
    $@halloween_num_pumpkins = $@halloween_num_seeds * 4;
    end;

OnTimer1000:
    goto L_TimerFunction;

OnTimer2000:
    goto L_TimerFunction;

OnTimer3000:
    goto L_TimerFunction;

L_TimerFunction:
    if ($@HalloweenQuest_PumpkinsState != 1)
        end;
    callsub S_CheckPlayer;
    $@HalloweenQuest_PumpkinsTimer = $@HalloweenQuest_PumpkinsTimer + 1;
    if (mobcount("011-1", "Oscar::OnPD")  <= 0 &&
        mobcount("011-1", "Oscar::OnPDP") <= 0 &&
        $@HalloweenQuest_PumpkinsCount <= 0)
        goto L_AllPumpkinsDead;
    // A quick "cheer up"
    if ($@HalloweenQuest_PumpkinsTimer == 300)
        npctalk "Hurry up " + $@HalloweenQuest_PumpkinHunter$ + "! My farm is being ruined!";
    // 7 mins max
    if ($@HalloweenQuest_PumpkinsTimer > 420)
        goto L_PumpkinsRuined;

    if (getnpctimer(0) >= 2900)
        goto L_TrySpawnPumpkin;
    end;

L_TrySpawnPumpkin:
    if ($@HalloweenQuest_PumpkinsCount > 0)
        areamonster "011-1", 97, 40, 101, 44, "", 1063, 1, "Oscar::OnPD";
    setnpctimer 0;
    end;

OnTimer2500:
    if ($@HalloweenQuest_PumpkinsState != 0)
        end;
    areamonster "011-1", 97, 40, 101, 44, "", 1063, 2, "Oscar::OnPD";
    end;

OnTimer6000:
    if ($@HalloweenQuest_PumpkinsState != 0)
        end;
    emotion EMOTE_AFRAID;
    npctalk "Oh no, these pumpkins look strange and infested with bugs! Help me get rid of them " + $@HalloweenQuest_PumpkinHunter$ + "!";
    $@HalloweenQuest_PumpkinsState = 1;
    setnpctimer 0;
    end;

OnPD:
    if (strcharinfo(0) != $@HalloweenQuest_PumpkinHunter$)
        goto L_KillBadHunter;
    $@HalloweenQuest_PumpkinsCount = $@HalloweenQuest_PumpkinsCount - 1;
    if (@discover_poisonous_pumpkin_again == 0)
        message strcharinfo(0), "Oh no! These pumpkins are poisonous as well!";
    @discover_poisonous_pumpkin_again = 1;
    // Small damages
    misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0);
    heal -10, 0;
    sc_start SC_POISON, 1, 3;
    // Spawn mobs or get items
    @halloween_rand = rand(0,100);
    // Seeds reward
    if (@halloween_rand < 10)
        getitem "PumpkinSeeds", 1;
    // Pumpkin helmet reward
    if (@halloween_rand >= 10 && @halloween_rand < 17)
        getitem "PumpkinHelmet", 1;
    // huntsman spider x1
    if (@halloween_rand < (15*BaseLevel)/100)
        areamonster "011-1", 97, 40, 101, 44, "", 1083, 1, "Oscar::OnPDP";
    // Or spider x1
    if (@halloween_rand >= (15*BaseLevel)/100 && @halloween_rand < (75*BaseLevel)/100)
        areamonster "011-1", 97, 40, 101, 44, "", 1012, 1, "Oscar::OnPDP";
    // Or archant x2
    if (@halloween_rand >= (75*BaseLevel)/100)
        areamonster "011-1", 97, 40, 101, 44, "", 1060, 2, "Oscar::OnPDP";

    @halloween_rand = 0;
    end;

OnPDP:
    end;

L_KillBadHunter:
    misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0);
    die();
    end;

L_PumpkinsRuined:
    npctalk "No! " + $@HalloweenQuest_PumpkinHunter$ + " how could you let that happen? All my farm is a mess now! All my trees are infested with bugs!";
    goto L_Fail;

L_AllPumpkinsDead:
    goto L_Success;

S_CheckPlayer:
    if (attachrid(getcharid(3, $@HalloweenQuest_PumpkinHunter$)) == 0)
        goto L_PlayerOff;
    if (ispcdead())
        goto L_PlayerDead;
    if (isin("011-1",20,5,130,110) == 0)
        goto L_PlayerLeft;
    detachrid;
    return;

L_PlayerOff:
    npctalk "What? Where is " + $@HalloweenQuest_PumpkinHunter$ + "? Someone, help me!";
    goto L_Fail;

L_PlayerLeft:
    npctalk "What the!! " + $@HalloweenQuest_PumpkinHunter$ + " left me alone with all this! Someone, help me!";
    goto L_Fail;

L_PlayerDead:
    npctalk "Oh no I can't believe it! " + $@HalloweenQuest_PumpkinHunter$ + " just died! Someone, help me!";
    goto L_Fail;

L_Fail:
    // If the player is logged off, since we check every second that the player
    // is online, we can consider it's an accident, so we will allow to redo the quest
    // Otherwise, it's a "valid" fail.
    if (attachrid(getcharid(3, $@HalloweenQuest_PumpkinHunter$)))
        Quest_Halloween = 10;
    goto L_Clean;

L_Success:
    // Make this check again or the server will crash.
    if (attachrid(getcharid(3, $@HalloweenQuest_PumpkinHunter$)) == 0)
        goto L_PlayerOff;
    Quest_Halloween = 6;
    emotion EMOTE_GRIN;
    npctalk "Hurray, " + $@HalloweenQuest_PumpkinHunter$ + " you did it! Thank you thank you! Come here!";
    goto L_Clean;

L_Clean:
    killmonster "011-1", "Oscar::OnPD";
    killmonster "011-1", "Oscar::OnPDP";
    $@HalloweenQuest_PumpkinHunter$ = "";
    $@HalloweenQuest_PumpkinsCount = 0;
    $@HalloweenQuest_PumpkinsState = 0;
    $@HalloweenQuest_PumpkinsTimer = 0;
    stopnpctimer;
    detachrid;
    end;

L_GetReward:
    mes "[Oscar]";
    mes "\"" + strcharinfo(0) + ", you were wonderful!";
    mes "My farm is safe thanks to you!\"";
    next;
    mes "\"Look, when I went to this city a few days ago, I could find this magnificient fruit.";
    mes "I believe not many exist in the world, but hey, this one is for you!\"";

    getinventorylist;
    if (@inventorylist_count == 100 && countitem("GoldenDeliciousApple") == 0)
        goto L_InventoryFull;
    @inventorylist_count = 0;
    getitem "GoldenDeliciousApple", 1;
    @halloween_year = gettime(7) - 2000 + 1;
    Quest_Halloween = 0;
    callsub S_Update_Annual_Quest;
    goto L_End;

L_GetSlap:
    mes "[Oscar]";
    mes "\"Ah! There you are "+strcharinfo(0)+"!";
    next;
    mes "\"As you can see, my farm is safe now.";
    mes "I can't really say it's thanks to you though!\"";
    next;
    mes "\"Well, I won't be a bad guy.";
    mes "Take this for your trouble and farewell!\"";

    getinventorylist;
    if (@inventorylist_count == 100 && countitem("CandyPumpkin") == 0)
        goto L_InventoryFull;
    @inventorylist_count = 0;
    getitem "CandyPumpkin", 5;
    @halloween_year = gettime(7) - 2000 + 1;
    Quest_Halloween = 0;
    callsub S_Update_Annual_Quest;
    goto L_End;

L_InventoryFull:
    @inventorylist_count = 0;
    next;
    mes "\"Ah, but you cannot carry anything else!";
    mes "Make some room first.\"";
    goto L_End;
}