Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //===== Hercules Script ======================================
- //= Wheel of Fortune
- //===== By ===================================================
- //= Habilis
- //= Edited by Myriad
- //===== Version ==============================================
- //= 1.02 - June 26, 2018
- // - Fixed @wheel_of_fortune end command.
- //= 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");
- disablenpc("Hussein#WOF");
- .EventName$ = "[Wheel Of Fortune]";
- end;
- OnMinute39:
- OnStart:
- .Start = true;
- query_sql("DELETE FROM `acc_reg_num_db` WHERE `key`='#freewheelfortunespin';");
- 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");
- enablenpc("Hussein#WOF");
- announce(sprintf("%s : Come to Prontera and test your luck, everyone got some free spins!", .EventName$), bc_blue | bc_all);
- end;
- OnTimer1800000: // 30 mins
- announce(sprintf("%s : One more minute, do your last spin!", .EventName$), bc_blue | bc_all);
- end;
- OnTimer1860000: // 31 mins
- OnStop:
- .Start = false;
- stopnpctimer();
- disablenpc("Wheel of Fortune#Main");
- disablenpc("Hussein#WOF");
- 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::OnStop", 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,155,176,3 script Wheel of Fortune#Main 2_SLOT_MACHINE,{
- OnTalk:
- if (#freewheelfortunespin == 0)
- #freewheelfortunespin = .Free_Spins;
- if (getd(.Event_Points_Variable$) < .Points_Cost && #freewheelfortunespin < 0) {
- mesf("[^0055FF%s^000000]", .EventName$);
- mes("You are out of Event");
- mes("Points 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") : ".";
- cutin("aca_salim02", 2);
- addtimer(1, sprintf("%s::OnEnd", strnpcinfo(NPC_NAME)));
- mesf("[^0055FF%s^000000]", .EventName$);
- mes("Do you want to spin the wheel?");
- mesf("It costs ^FF0000%d Event points^000000 to play%s", .Points_Cost, .@mes$);
- next();
- while (true) {
- .@val = getd(.Event_Points_Variable$);
- if (.@val < .Points_Cost && #freewheelfortunespin < 0)
- callsub(S_End);
- switch (select(
- (#freewheelfortunespin > 0) ? sprintf("Yes! Use free spin! (%d left)", #freewheelfortunespin) : "",
- (.@val > 0) ? sprintf("Yes! Use Event Points. (%d remaining)", .@val) : "",
- "No (Leave)"
- )) {
- // pay with free spin
- case 1:
- if (#freewheelfortunespin > 0) {
- if ((#freewheelfortunespin -= 1) < 1)
- #freewheelfortunespin = -1;
- callsub(S_Spin);
- } else
- callsub(S_End);
- break;
- // Pay with points
- case 2:
- if ((.@val = getd(.Event_Points_Variable$)) >= .Points_Cost) {
- setd(.Event_Points_Variable$, (.@val -= .Points_Cost));
- dispbottom(sprintf("%s : You now have %d event points.", .ServerName$, .@val));
- callsub(S_Spin);
- } else {
- cutin("aca_salim02", 2);
- mesf("[^0055FF%s^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++;
- }
- }
- .@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 == -1 ? .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 (getd(.Event_Points_Variable$) < .Points_Cost && #freewheelfortunespin < 0) {
- mesf("[^0055FF%s^000000]", .EventName$);
- mes("You are out of Event");
- mes("Points and have no more");
- mes("free spins. Come back");
- mes("next time for more!");
- close();
- }
- return;
- S_End:
- close2();
- OnEnd:
- cutin("", 255);
- end;
- OnInit:
- .ServerName$ = "[Your boring server]";
- .EventName$ = "Wheel Of Fortune";
- bindatcmd("wheel_of_fortune", "Wheel_of_Fortune::OnCommand", 98, 98, false);
- .Event_Points_Variable$ = "#LROEVENTPOINTS"; // The name of your event points variable
- .Spin_Speed = 50; // What is the base spin speed? (ms)
- .nbTurns = 2; // Idk what this is?
- .Points_Cost = 100; // How many 'points' does it cost for a spin?
- .Free_Spins = 1; // How many free spins does a player get?
- .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, 31024, 31026, 31008, 31020, 31017, 31010, 31016, 0, 31009);
- setarray(.Prize_Qty[1], 2, 1, 1, 1, 3, 3, 1, 3, 0, 3);
- // Don't touch below
- .Cutin$ = "WheelOfFortune_";
- setarray(.Sector_Range, 1, 10); // Sector range
- setarray(.Cutin_Range, 0, 19); // Cutin range
- end;
- }
- prontera,159,178,3 script Hussein#WOF 1_M_MERCHANT,{
- .@name$ = "[Hussein]";
- cutin("aca_salim02", 2);
- mes(.@name$);
- mes("I command you to spin");
- mes("the Wheel of Fortune!");
- next();
- getmapxy(.@map$, .@x, .@y, UNITTYPE_NPC, "Wheel of Fortune#Main");
- warp(.@map$, .@x - 1, .@y - 2, 0);
- doevent("Wheel of Fortune#Main::OnTalk");
- end;
- }
Add Comment
Please, Sign In to add comment