summaryrefslogblamecommitdiff
path: root/npc/functions/casino.txt
blob: 87b71a4d464c4975e0cc71f1334c32ce884c24de (plain) (tree)





























































































































































































































































                                                                                                                                       
// TMW2 Scripts
// Author:
//    Jesusalva
// Description:
//    Slot Machines, Blackjack, other crap for npc duplication
// Contents:
//    "Slot Machine"
//    "High Lower"

// SLOT MACHINE - You'll get PRIZE if you roll a 777!
// PRIZE must be numeric INT, AegisName won't get parsed.
// Slot Machine#map_prize
// Slot Machine#map
// Slot Machine#_prize
-	script	Slot Machine	NPC_HIDDEN,{
    function symbol {
        switch (getarg(0)) {
        case 1:
            mesn "%%A";
            break;
        case 2:
            mesn "%%B";
            break;
        case 3:
            mesn "%%C";
            break;
        case 4:
            mesn "%%D";
            break;
        case 5:
            mesn "%%E";
            break;
        case 6:
            mesn "%%F";
            break;
        case 7:
            mesn "7";
            break;
        default:
            mesn "%%@";
            break;
        }
    }

L_Menu:
    mesn;
    mesc l("Spin three symbols, and jackpot great rewards!");
    mesc l("Just one coin for spin.");
    next;
    menu
        rif(countitem(.coinid) >= 1, l("Spin!")), L_Spin,
        l("Prizes"), L_Info,
        l("Leave"), -;
    close;

L_Info:
    mes "";
    mesc l("Prizes:");
    mes l("##9 777: @@.", getitemlink(.itemid));
    mesc l("Three equal: @@.", "18 casino coins");
    mesc l("Two equal: 1 casino coin.");
    next;
    goto L_Menu;


L_Spin:
    mesc l("Spinning...");
    next;
    delitem .coinid, 1;
    .@a=rand2(1,7);
    .@b=rand2(1,7);
    .@c=rand2(1,7);
    symbol(.@a);
    symbol(.@b);
    symbol(.@c);
    next;
    mesn;
    if (.@a == .@b && .@a == .@c && .@a == 7) {
        getitem .itemid, 1;
        mesc l("Jackpot! You got a(n) %s!", getitemlink(.itemid)), 3;
    } else if (.@a == .@b && .@a == .@c) {
        getitem .coinid, 18;
        mesc l("Congrats! A pity it was not 777..."), 3;
    } else if (.@a == .@b || .@a == .@c || .@b == .@c) {
        getitem .coinid, 1;
        mesc l("Lucky! You got the coin back!"), 3;
    } else {
        mesc l("It wasn't this time..."), 3;
    }
    next;
    goto L_Menu;

OnInit:
    // "Next-Generation" parsing system
    // To replace default item, name NPC like this:
    // Slot Machine#_1212
    // Where "1212" is the item ID
    .@n$=strnpcinfo(0, "_0");
    explode(.@ni$, .@n$, "_");
    if (getarraysize(.@n$) > 0)
        .itemid=atoi(.@ni$[1]);
    else
        .itemid=0;

    // If item ID was not provided
    if (.itemid < 1) {
        //.itemid=Monocle;
        .itemid=BrownBowlerHat;
    }

    // Coin ID
    //.coinid=CasinoCoins;
    .coinid=CoinBag;

    .sex = G_OTHER;
    .distance = 4;
    end;
}


// HIGH LOWER - Guess if the next card will be HIGHER or LOWER!
// (No arguments)
-	script	High Lower	NPC_HIDDEN,{
    function cardname {
        switch (getarg(0)) {
        case 0:
            return "A"; break;
        case 10:
            return "J"; break;
        case 11:
            return "Q"; break;
        case 12:
            return "K"; break;
        case 13:
            return l("Joker"); break;
        default:
            return getarg(0)+1;
        }
    }

    goto L_Menu;

L_Menu:
    showavatar;
    mesn;
    mesc l("Hey, I am flopped. Do you want to gamble?");
    mesc l("You need a %s. I'll flip one card, and you'll need to decide if next draw will be HIGHER or LOWER.", getitemlink(.coinid));
    mesc l("If a tie happens, I'll give your coin back.");
    next;
    menu
        rif(countitem(.coinid) >= 1, l("Let's play!")), L_Spin,
        l("Information"), L_Info,
        l("Leave"), L_Quit;

L_Info:
    mes "";
    mesc l("Rules:");
    mesc l("A card will be flipped, you'll need to decide if next flip will be HIGHER or LOWER.");
    mesc l("Cards are ranked on this priority: A - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - J - Q - K - Joker");
    next;
    mesc l("Prizes:");
    mesc l("If you're right, you'll get at least %d GP!", .minprize);
    mesc l("If a tie happens, you'll get your coin back.");
    mesc l("If you're wrong, your winning streak is reset.");
    mesc l("Winning Streak is also reset on logout or when you leave the room.");
    next;
    mesc l("Winning Strike Prizes:");
    mesc l("Every seven successive right guesses, you'll get a %s!", getitemlink(Acorn)); // 7.14%
    //mesc l("Every fifteen successive right guesses, you'll get a %s!", getitemlink(SilverGift)); // 3.33%
    //mesc l("Every fifty successive right guesses, you'll get a %s!", getitemlink(GoldenGift)); // 1.00%
    //mesc l("Every 101 successive right guesses, you'll get a %s!", getitemlink(PrismGift)); // 0.50%
    next;
    goto L_Menu;


L_Spin:
    showavatar AVATAR_CARD_COVER;
    mesc l("I'll draw a card now!");
    next;
    delitem .coinid, 1;
    // First card will never be an edge card (Ace or Joker), so you can ALWAYS guess wrong.
    .@card1=rand2(1, 12);
    showavatar 1000+.@card1;
    mesn;
    mesc l("It's a @@!", cardname(.@card1));
    mesc l("Will next draw be HIGHER or LOWER?!");
    next;
    mesc l("Cards are ranked on this priority: A - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - J - Q - K - Joker");
    select
        l("HIGHER!"),
        l("LOWER!");
    mes "";

    // Flip Flop!
    .@card2=rand2(0, 13);
    showavatar 1000+.@card2;
    mesn;
    mesc l("It's a @@!", cardname(.@card2));

    if (.@card1 == .@card2) {
        mesc l("It's a tie!");
        getitem .coinid, 1;
        .@bypass=1;
    } else if (.@card2 < .@card1 && @menu == 2) {
        mesc l("It's lower! That's right!");
        Zeny=Zeny+.minprize;
        @gambler_winstreak+=1;
    } else if (.@card2 > .@card1 && @menu == 1) {
        mesc l("It's higher! That's right!");
        Zeny=Zeny+.minprize;
        @gambler_winstreak+=1;
    } else {
        mesc l("You were wrong!");
        @gambler_winstreak=0;
    }

    // Winning Streak
    if (!.@bypass && @gambler_winstreak) {
        if (@gambler_winstreak % 7 == 0)
            getitem Acorn, 1;
        /*
        if (@gambler_winstreak % 15 == 0)
            getitem SilverGift, 1;
        if (@gambler_winstreak % 50 == 0)
            getitem GoldenGift, 1;
        if (@gambler_winstreak % 101 == 0)
            getitem PrismGift, 1;
        */
        mesc l("Your current win streak is @@!", @gambler_winstreak);
        Zeny+=min(((@gambler_winstreak-1)*.gpbonus), .minprize); // Never 2x
    } else {
        .@bypass=0;
    }
    next;
    goto L_Menu;

L_Quit:
    close;

OnInit:
    // Gambling configuration
    .minprize=180;
    .gpbonus=10;

    // Coin ID
    //.coinid=CasinoCoins;
    .coinid=CoinBag;

    .sex = G_OTHER;
    .distance = 4;
    end;

}