Jump to content

Recommended Posts

[Event] Wheel of fortune


Wheel of fortune

Fun event, this particular version is set to accept Zeny as a payment for gambling.

 

Would like to thank a lot @Myriad for Improving my code!

 

Package contains:

data.zip data folder to put into your GRF file or straight into data folder.

wheel_of_fortune.txt the script itself.

WheelOfFortune.psd the Photoshop source file, you can edit the prizes pictures if you like. 

 

This event can be configured to run automatically 

OnClock0800:
OnClock1200:
OnClock1600:
OnClock2000:
OnClock2200:

just change this part of the script,

at what time you want the script to run.

 

Or, a GM can start this event by running this command :

 

@wheel_of_fortune start

 

As a reference,

This is a version of the script using event points as a payment (in case you would like to take a look)

https://pastebin.com/wN6ZjxM0

 


 

Share this post


Link to post
Share on other sites
6 hours ago, Begin said:

Hello Habilis, how to make this as permanent NPC? What lines needed to remove?

just remove cases of disablenpc

Share this post


Link to post
Share on other sites

Could you please update the Event Points version?

Also, ending the event with the command @wheel_of_fortune is not working.

Edited by InFiNiTe

Share this post


Link to post
Share on other sites
9 hours ago, InFiNiTe said:

Could you please update the Event Points version?

Also, ending the event with the command @wheel_of_fortune is not working.

I updated the pastebin. There was an error it was pointing to OnEnd instead of OnStop. Thanks.

Share this post


Link to post
Share on other sites
5 hours ago, evolutionbr said:

Compartible  with Rathena ?

only works with best emulator hercules master race we are best habilis prime transform no noob emulator

Share this post


Link to post
Share on other sites
7 minutes ago, Myriad said:

only works with best emulator hercules master race we are best habilis prime transform no noob emulator

llyUQRI.png?1

5 hours ago, evolutionbr said:

Compartible  with Rathena ?

No, sry, this may not be compatible with rAthena.

As this script was developed and released for Hercules community.

Edited by Habilis

Share this post


Link to post
Share on other sites

Hello Habilis, how to make the requirement a TCG Card (7227) instead of Zeny or Points?

I tried to make it like this:

.Zeny_Cost = 1;

And replaced all the Zeny variable to 7227 but the TCG cards is not decreasing when spinning.

Thanks.

 

Share this post


Link to post
Share on other sites

It is an item so these functions be of help to you

if(countitem(.RequiredItem_id) >= .RequiredItem_qty)

and

delitem(.RequiredItem_id, .RequiredItem_qty);

 

Edited by Habilis

Share this post


Link to post
Share on other sites

I have a problem, when the npc turns off and the player does not come out, the .bmp remains enabled and the npc does not close the dialogue = s

how i can solved that plz?


 

Quote

 

//===== Hercules Script ======================================
//= Wheel of Fortune
//===== By ===================================================
//= Habilis
//= Edited by Myriad
//===== Version ==============================================
//= 1.02 - June 15, 2018
//  - Made the script work with zeny, to be more accesibly to everyone.
//= 1.01 - June 14, 2018
//    - Added @wheel_of_fortune GM command (level 98+).
//    - Merged S_Pay and S_Loop subs into main line of text.
//    - S_Gamble is now S_Spin and it will 'return' instead of
//    calling back to the initial sub.
//= 1.00 - June 13, 2018
//    - Initial script edit for Habilis.
//===== Description ==========================================
//= Wheel of fortune something.
//============================================================

-    script    Wheel_of_Fortune    FAKE_NPC ,{

OnInit:
    disablenpc("Wheel of Fortune#Main");
    .EventName$ = "[Wheel Of Fortune]";
    end;


OnClock0900:
OnClock1600:
OnClock2200:
OnStart:
    .Start = true;
    announce(sprintf("%s : The event will begin in 1 minute, near the center of Prontera.", .EventName$), bc_blue | bc_all);
    initnpctimer();
    end;

OnTimer60000: // 1 min
    enablenpc("Wheel of Fortune#Main");
    announce(sprintf("%s : Come to Prontera and test your luck", .EventName$), bc_yellow | bc_all);
    end;

OnTimer60500: // 1 mins
    announce(sprintf("%s : One minute, do your last spin!", .EventName$), bc_yellow | bc_all);
    end;

OnTimer120000: // 2 mins
OnStop:
    .Start = false;
    stopnpctimer();
    disablenpc("Wheel of Fortune#Main");
    end;

OnCommand:
    if (.@atcmd_numparameters != 1) {
        dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00);
        dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
        end;
    }

    if (.@atcmd_parameters$[0] == "start") {
        if (!.Start)
            donpcevent(sprintf("%s::OnStart", strnpcinfo(NPC_NAME)));
        else {
            dispbottom("The Wheel of Fortune has already started.", 0x00FF00);
            dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
        }
    } else if (.@atcmd_parameters$[0] == "end") {
        if (.Start)
            donpcevent(sprintf("%s::OnEnd", strnpcinfo(NPC_NAME)));
        else {
            dispbottom("The Wheel of Fortune is not active.", 0x00FF00);
            dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
        }
    } else {
        dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00);
        dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    }
    end;
}

prontera,164,169,1    script    Wheel of Fortune#Main    2_SLOT_MACHINE,{
    
OnTalk:

if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) {
        mes("[^0055FFLucky Spin^000000]", .EventName$);
        mes("You are out of Zeny");
        mes("and have no more");
        mes("free spins. Come back");
        mes("next time for more!");
        close();
    }

    .@mes$ = (#freewheelfortunespin > 0) ? sprintf(", but you, my friend, have %d free spin%s!", #freewheelfortunespin, (#freewheelfortunespin == 1) ? "" : "s") : ".";
    addtimer(1, sprintf("%s::OnEnd", strnpcinfo(NPC_NAME)));
    mes("[^0055FFLucky Spin^000000]", .EventName$);
    mes("Do you want to spin the wheel?");
    mes("It costs ^FF000050.000 Zeny^000000 to play", .@mes$);
    next();

    while (true) {
        if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0)
            callsub(S_End);
        switch (select(
            (#freewheelfortunespin > 0) ? sprintf("Yes! Use free spin! (%d left)", #freewheelfortunespin) : "",
            (Zeny >= .Zeny_Cost ) ? sprintf("Yes! Use Zeny. (costs %dz)", .Zeny_Cost) : "",
            "No (Leave)"
        )) {
        // pay with free spin
        case 1:
            if (#freewheelfortunespin > 0) {
                if ((#freewheelfortunespin -= 1) < 0)
                    #freewheelfortunespin = 0;
                callsub(S_Spin);
            } else
                callsub(S_End);
            break;

        // Pay with zeny
        case 2:
            if (Zeny >= .Zeny_Cost) {
                Zeny -= .Zeny_Cost;
                callsub(S_Spin);
            } else {
                cutin("aca_salim02", 2);
                mes("[^0055FFLucky Spin^000000]", .EventName$);
                mes("Awww, you don't have enough to gamble...");
                mes(" ");
                mes("Have you ever heard?");
                mes("'Money isn't all that matters' Got it?");
                mes("Byeeeeeeeeeeeeee ;)");
                callsub(S_End);
            }
            break;

        default:
            callsub(S_End);
        }
    }

// Wheel spin animation
S_Spin:
    .@Sector = rand(.Sector_Range[0], .Sector_Range[1]);
    .@Display = .@Sector * 2 - 1;
    .@Speed = .Spin_Speed;
    
    for (.@i = 0; .@i < .nbTurns; .@i++) {
        .@b = .Cutin_Range[0];
        while (.@b <= .Cutin_Range[1]) {
            cutin(sprintf("%s%d", .Cutin$, .@b), 4);
            sleep2(.@Speed);
            .@b++;
            .@Speed += 1; // not ++, because  you may want to adjust the stopping +1 +2 +3
        }
    }
    
    .@b = .Cutin_Range[0];
    while (.@b < .@Display) {
        cutin(sprintf("%s%d", .Cutin$, .@b), 4);
        sleep2(.@Speed);
        .@b++;
    }

    cutin(sprintf("%s%d", .Cutin$, .@b), 4);

    if (.Prize_ID[.@Sector] == -1) {
        // Free spin
        if (.Sound_Effects)
            soundeffect("wheel_jackpot.wav", 0);
        announce(sprintf("[%s] : Wow, %dx more Free spins!!!", .EventName$, .Prize_Qty[.@Sector]), bc_blue | bc_self);
        #freewheelfortunespin = #freewheelfortunespin == 0 ? .Prize_Qty[.@Sector] : #freewheelfortunespin + .Prize_Qty[.@Sector];
    } else if (.Prize_ID[.@Sector] == 0) {
        // Nothing
        if (.Sound_Effects)
            soundeffect("wheel_lost.wav", 0);
        announce(sprintf("[%s] : Awwww, no luck in your gamble, more luck in love...", .EventName$), bc_blue | bc_self);
    } else {
        // Item
        if (.Sound_Effects)
            soundeffect("wheel_won.wav", 0);
        announce(sprintf("[%s] : %dx %s - enjoy your prize!", .EventName$, .Prize_Qty[.@Sector], getitemname(.Prize_ID[.@Sector])), bc_blue | bc_self);
        getitem(.Prize_ID[.@Sector], .Prize_Qty[.@Sector]);
    }

    sleep2(1000);
    if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) {
        mes("[^0055FFLucky Spin^000000]", .EventName$);
        mes("You are out of Zeny");
        mes("and have no more");
        mes("free spins. Come back");
        mes("next time for more!");
        close();
    }
    return;
    
S_End:
    close2();
OnEnd:
    cutin("", 255);
    end;
    
OnInit:
    .EventName$ = "Wheel Of Fortune";
    bindatcmd("wheel_of_fortune", "Wheel_of_Fortune::OnCommand", 98,false);
    .Spin_Speed = 50; // What is the base spin speed? (ms)
    .nbTurns = 2; // How many times the arrow makes a complete turn, before entering the stopping routine
    .Zeny_Cost = 50000; // How much zeny does it cost for a spin?
    .Sound_Effects = true; // Enable sound effects? (true/false)

    // You must have a total of 10 prizes. DO NOT remove 0 or -1 from the array and do not
    // change their order.
    setarray(.Prize_ID[1], -1, 7539, 14345, 7539,   617,   607, 7539,   604, 0,  12214);
    setarray(.Prize_Qty[1], 2,     3,     1,     1,     3,     3,     1,     3, 0,     1);

    // Don't touch below
    .Cutin$ = "WheelOfFortune_";
    setarray(.Sector_Range, 1, 10); // Sector range
    setarray(.Cutin_Range, 0, 19); // Cutin range
    end;
}

 

 

screenThe Fairies Of Ro001.jpg

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.