// TMW2 scripts. // Author: // Jesusalva // Description: // Valentine Event Master 001-11,40,25,0 script Demure#Valentine NPC_FEMALE,{ goto L_Main; // Functions function ScoreValentine { .@nb = query_sql("SELECT c.name, i.value FROM `acc_reg_num_db` AS i, `char` AS c WHERE i.key='#VALENTINE_POINTS' AND i.account_id=c.account_id ORDER BY i.value DESC LIMIT 10", .@name$, .@value); mes "##B"+l("Top 10 - Valentine Day")+"##b"; mes("1." +.@name$[0]+" ("+.@value[0]+")"); mes("2." +.@name$[1]+" ("+.@value[1]+")"); mes("3." +.@name$[2]+" ("+.@value[2]+")"); mes("4." +.@name$[3]+" ("+.@value[3]+")"); mes("5." +.@name$[4]+" ("+.@value[4]+")"); mes("6." +.@name$[5]+" ("+.@value[5]+")"); mes("7." +.@name$[6]+" ("+.@value[6]+")"); mes("8." +.@name$[7]+" ("+.@value[7]+")"); mes("9." +.@name$[8]+" ("+.@value[8]+")"); mes("10."+.@name$[9]+" ("+.@value[9]+")"); next; } // $@VALENTINE_GIFTSTACKS // (account id, gifts to receive) // $@VALENTINE_LOVELETTER // (account id, list of names) function SendGift { mesn; mesq l("How many chocolate do you want to send? You currenly have: @@", countitem(BoxOfChocolates)); input @Val_Ammo; if (@Val_Ammo > countitem(BoxOfChocolates)) { mesc l("You don't have that many!"); return; } } function GetGift { .@m = htget($@VALENTINE_GIFTSTACKS, getcharid(3)); if (.@m > 0) { mesq l("Hey, look, you have @@ boxes to collect!", .@m); .@n$ = htget($@VALENTINE_LOVELETTER, getcharid(3), l("Secret Admirer")); mesq l("They were given with @@ by @@.", any(l("love"), l("passion"), l("affection")), .@n$); inventoryplace BoxOfChocolates, .@m; getitem BoxOfChocolates, .@m; htput $@VALENTINE_GIFTSTACKS, getcharid(3), 0; htput $@VALENTINE_LOVELETTER, getcharid(3), ""; } else { mesq l("Sorry, you don't have any chocolate to pick up."); } return; } // Script begin L_Main: // Safety Check if ($EVENT$ != "Valentine") { warp "Save", 0, 0; end; } // Demure Main mesn; mesq l("That annoying guy on the side of the tree is annoying. I want to ban him."); next; mesn; mesq l("Anyway, it is Valentine Day, a good day to trade @@ with your admired one!", getitemlink(BoxOfChocolates)); next; do { mesc l("You currently have @@ points, @@ boxes of chocolate and @@ love letters.", #VALENTINE_POINTS, countitem(BoxOfChocolates), countitem(LoveLetter)); if (#VALENTINE_OPENED-#VALENTINE_RECEIVED > 0) { mesc l("@@ boxes of chocolate were given to you as a gift.", #VALENTINE_OPENED-#VALENTINE_RECEIVED); // Demure can just send Soren's Chocolate to somebody else. // Everyone else cannot send their gift chocolates. Please don't lose the boxes. if (!is_gm()) .@eatfirst=true; } mes ""; select l("Information"), l("Scoreboards"), rif(!.@eatfirst, l("Send Chocolate")), l("Receive Chocolate"), l("Okay, bye"); mes ""; switch (@menu) { case 1: mesn; mes lg("Valentine Day event consist in gathering @@ and sending them to your loved one.", getitemlink(BoxOfChocolates)); next; mesn; mes l("Don't worry if they don't correspond to you. Each box sent will grant you 1 event point."); mes l("The prizes are only for the top 10, but Loratay on Land Of Fire Village can make a dress for you."); next; mes l("You can optionally send a @@ along the chocolate box, so the person knows it was you who sent the chocolate.", gettitemlink(LoveLetter)); mes l("Sending the letter will give you double event points, capped to 10 extra points."); next; mes l("When receiving the chocolate, you must eat it before event ends to get a point for that!"); mes l("These boxes cannot be sold, but they'll be deleted a while after the event ends."); mes l("You also cannot send any boxes before eating any you've received, but Demure is an exception for this rule."); next; mes l("As with all TMW2 Major Events, the top 1 receive a special pet, and the other ranked ones get diverse rewards."); mes l("There might be reward for anyone who doesn't gets a rank, but I never count on that. So, let's start?"); next; break; case 2: ScoreValentine(); break; case 3: SendGift(); next; break; case 4: GetGift(); next; break; } } while (@menu != 5); closedialog; goodbye; close; OnInit: .@npcId = getnpcid(.name$); setunitdata(.@npcId, UDT_HEADTOP, GMCap); setunitdata(.@npcId, UDT_HEADMIDDLE, GMRobe); setunitdata(.@npcId, UDT_HAIRSTYLE, 14); setunitdata(.@npcId, UDT_HAIRCOLOR, 18); .sex = G_FEMALE; .distance = 5; end; }