Преглед изворни кода

* Implemented 2010 Easter script, disabled by default.
* Players can no longer block whispers from a higher group level. (Hercules 3d0fba0)
* Added two missing quest_db entries for Mora. (credits: TTest)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17401 54d463be-8e91-2dee-dedb-b68131a5f0ec

euphyy пре 12 година
родитељ
комит
2981bac2de
5 измењених фајлова са 639 додато и 13 уклоњено
  1. 6 4
      db/quest_db.txt
  2. 1 1
      db/re/item_db.txt
  3. 620 0
      npc/events/easter_2010.txt
  4. 2 0
      npc/scripts_athena.conf
  5. 10 8
      src/map/clif.c

+ 6 - 4
db/quest_db.txt

@@ -949,6 +949,8 @@
 7206,0,0,0,0,0,0,0,"New Day for Cheshire"
 7207,0,0,0,0,0,0,0,"Cheshire's Box"
 7208,86400,0,0,0,0,0,0,"Wait for Cheshire?"
+7209,0,0,0,0,0,0,0,"Forget the box."
+7210,0,0,0,0,0,0,0,"Daily delivery"
 
 // Misty Forest Labyrinth
 7211,9000,0,0,0,0,0,0,"Misty Forest Labyrinth Exploration"
@@ -1497,10 +1499,10 @@
 9058,0,0,0,0,0,0,0,"O'Riley's Request"
 9059,0,0,0,0,0,0,0,"Happy St. Patrick's Day"
 9117,0,0,0,0,0,0,0,"Lina's Curse"
-9118,0,0,0,0,0,0,0,"Lina's Curse - Deviruchi Hunt"
-9119,0,0,0,0,0,0,0,"Lina's Curse - Wraith Dead Hunt"
-9120,0,0,0,0,0,0,0,"Lina's Curse - Dullahan Hunt"
-9121,0,0,0,0,0,0,0,"Lina's Curse - Nightmare Terror Hunt"
+9118,0,1109,50,0,0,0,0,"Lina's Curse - Deviruchi Hunt"
+9119,0,1291,50,0,0,0,0,"Lina's Curse - Wraith Dead Hunt"
+9120,0,1504,50,0,0,0,0,"Lina's Curse - Dullahan Hunt"
+9121,0,1379,50,0,0,0,0,"Lina's Curse - Nightmare Terror Hunt"
 9122,0,0,0,0,0,0,0,"Lina's Curse"
 9123,0,0,0,0,0,0,0,"Lina's Curse"
 9024,0,0,0,0,0,0,0,"An errand boy from Einbroch"

+ 1 - 1
db/re/item_db.txt

@@ -3543,7 +3543,7 @@
 //5849,Doctor_Hairband,Doctor Hairband,5,20,,0,,0,,0,0xFFFFFFFF,7,2,256,,1,0,60,{},{},{}
 //5850,Golden_Savage_Hat,Golden Savage Hat,5,20,,500,,5,,0,0xFFFFFFFF,7,2,256,,50,1,648,{},{},{}
 5851,Summer_Knight,Summer Knight,5,20,,0,,1,,0,0xFFFFFFFF,7,2,768,,60,0,138,{},{},{}
-//5852,Resurrect_Egg_Shell,Resurrect Egg Shell,5,20,,500,,-7,,0,0xFFFFFFFF,7,2,256,,40,1,537,{ bonus bMdef,-7; },{},{}
+5852,Easter_Egg_Shell,Easter Egg Shell,5,20,,500,,0,,0,0xFFFFFFFF,7,2,256,,40,1,537,{ bonus bDef,-7; bonus bMdef,-7; bonus2 bHPRegenRate,(MaxHp/100),10000; if (getrefine()>=7) bonus bFlee,2; if (getrefine() >= 9) bonus2 bSPRegenRate,(MaxSp/100),10000; },{},{}
 //
 5856,Passion_FB_Hat,Passion FB Hat,5,20,,600,,2,,1,0xFFFFFFFF,7,2,256,,1,1,671,{ bonus bStr,2; bonus bDex,2; },{},{}
 5857,Cool_FB_Hat,Cool FB Hat,5,20,,600,,2,,1,0xFFFFFFFF,7,2,256,,1,1,672,{ bonus bInt,2; bonus bVit,2; },{},{}

+ 620 - 0
npc/events/easter_2010.txt

@@ -0,0 +1,620 @@
+//===== rAthena Script =======================================
+//= Easter Event (2010)
+//===== By: ==================================================
+//= Euphy
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= Lift Lina's curse for an Easter Egg Shell.
+//===== Additional Comments: =================================
+//= 1.0 First version. [Euphy]
+//============================================================
+
+prontera,202,297,3	script	Rina#Easter	727,{
+	disable_items;
+	if (BaseLevel < 40) {
+		mes "[Rina]";
+		mes "Hi~!";
+		mes "You are an adventurer like me.";
+		next;
+		mes "[Rina]";
+		mes "I am put under a curse.";
+		mes "I know you want to help me,";
+		mes "but your experience is not enough.";
+		next;
+		consumeitem 607; //Yggdrasilberry
+		consumeitem 12068; //Luk_Dish03
+		consumeitem 12063; //Dex_Dish03
+		consumeitem 12053; //Vit_Dish03
+		npcskill "AL_INCAGI",1,0,0;
+		npcskill "AL_BLESSING",1,0,0;
+		mes "[Rina]";
+		mes "I am not in the good condition,";
+		mes "so what I can do for you";
+		mes "is just like this.";
+		mes "Then, good bye.";
+		mes "Take care~!";
+		close;
+	}
+	set .@quest1, checkquest(9117);
+	if (.@quest1 == -1) {
+		playbgm "30.mp3"; // One Step Closer
+		mes "[Rina]";
+		mes "Hi~!";
+		mes "You are an adventurer like me.";
+		mes "Well... In fact, I am";
+		mes "put under a strange curse.";
+		next;
+		mes "[Rina]";
+		mes "To release this curse,";
+		mes "somebody needs to do ^800080Oath-taking ceremony^000000";
+		mes "with me,";
+		mes "and then needs to solve";
+		mes "several problems instead of me.";
+		next;
+		if (select("Let's help ^800080Rina^000000.:Just skip it.") == 2) {
+			emotion e_sigh;
+			mes "[Rina]";
+			mes "To help me,";
+			mes "I need a competent adventurer.";
+			mes "If you know those people,";
+			mes "I hope you to introduce them to me later.";
+			close;
+		}
+		emotion e_awsm;
+		mes "[Rina]";
+		mes "Are you really going to help me?";
+		mes "Thank you.";
+		mes "You are so brave.";
+		next;
+		playbgm "01.mp3"; // Title
+		mes "[Rina]";
+		mes "Then I'll start ^800080Oath-taking ceremony^000000.";
+		mes " ";
+		mes "^787878( A mysterious atmosphere hangs in the air. )^000000";
+		next;
+		specialeffect2 EF_COUPLECASTING;
+		next;
+		mes "[Rina]";
+		mes "Blah blah blah...";
+		mes " ";
+		mes "Blah blah blah...";
+		mes " ";
+		mes "^787878( ... This is a strange spell. )^000000";
+		next;
+		specialeffect2 EF_SIGNUM;
+		mes "[Rina]";
+		mes "Haaaaah~";
+		mes "^800080Oath-taking ceremony^000000 is done enough now.";
+		mes "Isn't that so simple?";
+		next;
+		emotion e_dum;
+		mes "[Rina]";
+		mes "Okay, from no on,";
+		mes "you need to go on ^006400a real adventure";
+		mes "to release my curse^000000.";
+		mes "Let me know when you are ready.";
+		setquest 9117;
+		close;
+	} else if (.@quest1 == 0 || .@quest1 == 1) {
+	L_HuntingInfo:
+		mes "[Rina]";
+		mes "What you need to do is";
+		mes "to choose one monster among";
+		mes "^FF0000DEVIRUCHI,^000000 ^FF0000WRAITH DEAD,^000000";
+		mes "^FF0000DULLAHAN,^000000 ^FF0000NIGHTMARE TERROR^000000";
+		mes "and then kill ^0000FF50^000000 monsters";
+		mes "and come back to me.";
+		next;
+		mes "[Rina]";
+		mes "It must be a tough task,";
+		mes "but you are the right person";
+		mes "who did the oath-taking ceremony.";
+		mes "I hope you succeed.";
+		if (.@quest1 < 2) {
+			completequest 9117;
+			setquest 9118;
+			setquest 9119;
+			setquest 9120;
+			setquest 9121;
+		}
+		close2;
+		npcskill "AL_INCAGI",1,0,0;
+		npcskill "AL_BLESSING",1,0,0;
+		end;
+	} else if (.@quest1 == 2) {
+		if (checkquest(9118) < 2 || checkquest(9119) < 2 || checkquest(9120) < 2 || checkquest(9121) < 2) {
+			if (checkquest(9118,HUNTING) == 2 || checkquest(9119,HUNTING) == 2 || checkquest(9120,HUNTING) == 2 || checkquest(9121,HUNTING) == 2) {
+				mes "[Rina]";
+				mes "You did it.";
+				mes "I can feel that my body is recovering.";
+				mes "But it is not enough.";
+				next;
+				mes "[Rina]";
+				mes "^006400You have one more thing to do.^000000";
+				mes "Let me know when you're ready.";
+				close2;
+				completequest 9118;
+				completequest 9119;
+				completequest 9120;
+				completequest 9121;
+				setquest 9122;
+			} else
+				goto L_HuntingInfo;
+			end;
+		}
+	}
+	set .@quest2, checkquest(9122);
+	if (.@quest2 == 0 || .@quest2 == 1) {
+		mes "[Rina]";
+		mes "I will check one thing.";
+		mes "For this task,";
+		mes "You need to feel the music.";
+		next;
+		mes "[Rina]";
+		mes "You cannot complete the task";
+		mes "without the music.";
+		mes "do you have any problem?";
+		next;
+		mes "- Check! -";
+		mes "^787878- BGM option should be turned on -^000000";
+		mes "^787878- in the game option menu. -^000000";
+		mes "^787878- Please check -^000000";
+		mes "^787878- whether you can listen -^000000";
+		mes "^787878- to the music sound. -^000000";
+		next;
+		if(select("[I'm ready to listen to the BGM.]:[I can't listen to the BGM.]") == 2) {
+			mes "[Rina]";
+			mes "I am so shocked that";
+			mes "you cannot feel the music.";
+			mes "What should we do now...";
+			close2;
+			emotion e_sob;
+			end;
+		}
+		mes "[Rina]";
+		mes "Listen carefully";
+		mes "the feelings of it...";
+		mes "I can't hear it,";
+		mes "but you can hear the sound.";
+		next;
+		if (oversea_event2 < 520 || oversea_event3 < 270 || oversea_event6 < 245 || oversea_event9 < 197) {
+			     if (oversea_event2 == 520) playbgm "13.mp3"; // Theme of Geffen
+			else if (oversea_event3 == 270) playbgm "59.mp3"; // Theme of Lutie
+			else if (oversea_event6 == 245) playbgm "70.mp3"; // Theme of Juno
+			else if (oversea_event9 == 197) playbgm "94.mp3"; // Theme of Rachel
+			else {
+				switch(rand(1,4)) {
+					case 1: playbgm "13.mp3"; set oversea_event2,520; break;
+					case 2: playbgm "59.mp3"; set oversea_event3,270; break;
+					case 3: playbgm "70.mp3"; set oversea_event6,245; break;
+					case 4: playbgm "94.mp3"; set oversea_event9,197; break;
+				}
+			}
+		}
+		mes "[Rina]";
+		mes "^006400The music you're hearing now^000000";
+		mes "has something to do with the one specific city.";
+		mes "Think carefully ^006400what kind of city^000000";
+		mes "has similar feeling with this music.";
+		next;
+		mes "[Rina]";
+		mes "And...";
+		mes "Go to ^006400the city";
+		mes "where you can remind by this music^000000.";
+		next;
+		mes "[Rina]";
+		mes "After that,";
+		mes "find ^FF0000the strange mark^000000";
+		mes "around the entrances of the city.";
+		mes "Then you can release the curse on me.";
+		next;
+		mes "[Rina]";
+		mes "It must be tough";
+		mes "but I hope you good luck.";
+		close2;
+		emotion e_sigh;
+		end;
+	} else {
+		set .@quest3, checkquest(9123);
+		if (.@quest3 == 0 || .@quest3 == 1) {
+			emotion e_kis;
+			mes "[Rina]";
+			mes "You're back~!";
+			mes "My curse has been released.";
+			mes "Thank you so much.";
+			next;
+			if (checkweight(5852,1) == 0) {
+				mes "[Rina]";
+				mes "Your bag is too full.";
+				mes "I have a present for you";
+				mes "so make your bag lighter.";
+				mes "I'll wait for you.";
+				close;
+			}
+			completequest 9123;
+			getitem 5852,1; //Easter_Egg_Shell
+			set .@BaseExp, (BaseLevel * (BaseLevel / 4)) * ((BaseLevel / 29) + (BaseLevel / 6)) + (5 * BaseLevel / 2);
+			if (ADVJOB == 0) {
+				     if (BaseLevel < 40) set .@nBaseExp, .@BaseExp;
+				else if (BaseLevel < 50) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel);
+				else if (BaseLevel < 60) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 20));
+				else if (BaseLevel < 70) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 10));
+				else if (BaseLevel < 80) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 5));
+				else if (BaseLevel < 90) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 3));
+				else if (BaseLevel < 99) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 2));
+				else set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 2) * 2);
+
+				set .@nJobExp, (JobLevel * (JobLevel - 3) * (JobLevel / 25 + 1) + (16 - (JobLevel * 2))) * 2;
+			} else {
+				     if (BaseLevel < 30) set .@nBaseExp, .@BaseExp;
+				else if (BaseLevel < 40) set .@nBaseExp, .@BaseExp + (BaseLevel * 10);
+				else if (BaseLevel < 50) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * 2);
+				else if (BaseLevel < 60) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 10));
+				else if (BaseLevel < 70) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 5));
+				else if (BaseLevel < 80) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 3));
+				else if (BaseLevel < 90) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * (BaseLevel / 2));
+				else if (BaseLevel < 98) set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * BaseLevel);
+				else set .@nBaseExp, .@BaseExp + (BaseLevel * BaseLevel * BaseLevel * 2);
+
+				set .@nJobExp, (JobLevel * JobLevel * (JobLevel / 5 + 2) + (20 - JobLevel)) * 3;
+			}
+			getexp .@nBaseExp,.@nJobExp;
+			mes "[Rina]";
+			mes "This is the present for you.";
+			mes "It's not a big one";
+			mes "but please take it";
+			mes "as a token of my gratitude.";
+			next;
+			mes "[Rina]";
+			mes "I'll take a rest for a few days";
+			mes "and then I'll go on an adventure.";
+			mes "See you again.";
+			close2;
+			consumeitem 607; //Yggdrasilberry
+			consumeitem 12068; //Luk_Dish03
+			consumeitem 12063; //Dex_Dish03
+			consumeitem 12053; //Vit_Dish03
+			npcskill "AL_INCAGI",1,0,0;
+			npcskill "AL_BLESSING",1,0,0;
+			end;
+		} else {
+			mes "[Rina]";
+			mes "Thank you for releasing my curse.";
+			mes "I'll take a rest for a few days";
+			mes "and then go on an adventure again.";
+			mes "Have a happy day~!";
+			close2;
+			consumeitem 607; //Yggdrasilberry
+			npcskill "AL_INCAGI",1,0,0;
+			npcskill "AL_BLESSING",1,0,0;
+			end;
+		}
+	}
+}
+
+geffen,207,114,4	script	#Hiddne01Easter	844,{
+	if (oversea_event2 > 519) {
+	OnRelease:
+		specialeffect EF_PATTACK;
+		mes "- I found ^0000FFthe strange mark^000000. -";
+		next;
+		specialeffect2 EF_HOLYHIT;
+		mes "- I can definitely feel that";
+		mes "- ^0000FFRina^000000 has been released";
+		mes "- from the curse.";
+		mes "- ^006400Let's go back to Rina!^000000";
+		if (checkquest(9122) < 2) {
+			completequest 9122;
+			setquest 9123;
+		}
+		close;
+	}
+	end;
+}
+
+xmas,144,52,4	script	#Hiddne02Easter	844,{
+	if (oversea_event3 > 269)
+		doevent "#Hiddne01Easter::OnRelease";
+	end;
+}
+
+yuno,164,46,4	script	#Hiddne03Easter	844,{
+	if (oversea_event6 > 244)
+		doevent "#Hiddne01Easter::OnRelease";
+	end;
+}
+
+rachel,36,132,4	script	#Hiddne04Easter	844,{
+	if (oversea_event9 > 196)
+		doevent "#Hiddne01Easter::OnRelease";
+	end;
+}
+
+prontera,204,297,3	script	Rina's Little Friend	463,{
+	disable_items;
+	if (checkquest(9117) == -1) {
+		emotion e_swt2;
+		mes "[Rina's Little Friend]";
+		mes ".......";
+		mes " ";
+		mes "^787878( No response. )^000000";
+		close;
+	}
+	if (checkquest(9123) == 2) {
+		emotion e_meh;
+		mes "[Rina's Little Friend]";
+		mes "Hi.";
+		mes "I guess you're the trustworthy friend.";
+		mes "Are you here to make a deal with me?";
+		next;
+		switch(select("Yes.:No.:What do you mean?")) {
+		case 1:
+			if (ADVJOB == 0) {
+				if (BaseLevel < 70)
+					set .@nCharge,400000;
+				else if (BaseLevel < 90)
+					set .@nCharge,450000;
+				else
+					set .@nCharge,480000;
+			} else
+				set .@nCharge,500000;
+			if (countitem(574) < 1 || countitem(1001) < 20 || Zeny < .@nCharge) {
+				mes "[Rina's Little Friend]";
+				mes "Hmm.";
+				mes "The material is not enough.";
+				mes "Please check the things you need.";
+				close;
+			}
+			mes "[Rina's Little Friend]";
+			mes "Cool... if you give me the materials";
+			mes "I will start it right now.";
+			mes "Are you ready for it?";
+			next;
+			if(select("Yes, let's start it.:No, stop it.") == 2) {
+				mes "[Rina's Little Friend]";
+				mes "Heh. It's boring.";
+				close;
+			}
+			mes "[Rina's Little Friend]";
+			mes "Okay, I will start it now.";
+			mes " ";
+			mes "^787878( A mysterious atmosphere hangs in the air. )^000000";
+			next;
+			specialeffect EF_ASPERSIO;
+			delitem 574,1; //Egg
+			delitem 1001,20; //Sparkling_Dust
+			set Zeny, Zeny - .@nCharge;
+			set .@nPercentage, rand(1,100);
+			if (.@nPercentage <= 41) {
+				mes "[Rina's Little Friend]";
+				mes "Life is given to the egg.";
+				mes "Aaaaah~ I got to take some rest.";
+				mes "Good bye~!";
+				if (.@nPercentage <= 12)
+					getitem 9003,1; //Poporing_Egg
+				else if (.@nPercentage <= 24)
+					getitem 9005,1; //Picky_Egg
+				else if (.@nPercentage <= 36)
+					getitem 9009,1; //Savage_Bebe_Egg
+				else
+					getitem 9023,1; //Deviruchi_Egg
+				close2;
+				emotion e_yawn;
+				end;
+			} else if (.@nPercentage <= 60) {
+				if (.@nPercentage >= 42 && .@nPercentage <= 45)
+					getitem 5852,1; //Easter_Egg_Shell
+				else
+					getitem 12019,5; //Holy_Egg
+				mes "[Rina's Little Friend]";
+				mes "It seems that you have quite interesting things.";
+				mes "I need to take some rest.";
+				mes "Good bye~!";
+				close2;
+				emotion e_yawn;
+				end;
+			} else if (.@nPercentage <= 85) {
+				if (.@nPercentage >= 61 && .@nPercentage <= 75) {
+					getitem 1001,20; //Sparkling_Dust
+					getitem 607,1; //Yggdrasilberry
+				} else {
+					getitem 574,1; //Egg
+					getitem 608,2; //Seed_Of_Yggdrasil
+				}
+				mes "[Rina's Little Friend]";
+				mes "There was no change.";
+				mes "I didn't mean to do it,";
+				mes "but I'm sorry...";
+				mes "I hope to see you again, my friend.";
+				emotion e_dum;
+				close;
+			} else {
+				getitem 12093,2; //Dex_Dish08
+				mes "[Rina's Little Friend]";
+				mes "Hmm.";
+				mes "It became a dish.";
+				mes "Looks delicious.";
+				mes "Then, good bye~!";
+				close2;
+				emotion e_rice;
+				end;
+			}
+		case 2:
+			mes "[Rina's Little Friend]";
+			mes "You are here just to see my cute looks?";
+			mes "Aren't you peeking at Rina";
+			mes "pretending to see me?";
+			mes "It's funny... haha~";
+			close2;
+			emotion e_gg;
+			end;
+		case 3:
+			playbgm "23.mp3"; // Travel
+			mes "[Rina's Little Friend]";
+			mes "Huh?!";
+			mes "I never told you before?";
+			mes "Then listen carefully.";
+			next;
+			mes "[Rina's Little Friend]";
+			mes "I have a";
+			mes "special ability.";
+			mes "It's to give a special strength";
+			mes "to ^0000FFthe egg^000000.";
+			next;
+			mes "[Rina's Little Friend]";
+			mes "Well, I cannot do that unlimitedly.";
+			mes "There is no magic that is done forever.";
+			mes "So I need some additional cost.";
+			next;
+			mes "[Rina's Little Friend]";
+			mes "And I cannot sure";
+			mes "to what the egg will be changed.";
+			mes "It may be end in failure";
+			mes "and it can be something like Pet Egg.";
+			next;
+			if(select("Ask the cost.:Stop listening because it feels like a trick.") == 2) {
+				mes "[Rina's Little Friend]";
+				mes "Well... I don't really care.";
+				mes "Good bye.";
+				close2;
+				playbgm "08.mp3"; // Theme of Prontera
+				end;
+			}
+			mes "[Rina's Little Friend]";
+			mes "Do you want to make a deal?";
+			mes "You need";
+			mes "^0000FF1 Egg^000000, ^0000FF20 Light Granule^000000 and";
+			if (ADVJOB == 0) {
+				if (BaseLevel < 70)
+					mes "^B8860B400,000 Zeny.";
+				else if (BaseLevel < 90)
+					mes "^B8860B450,000 Zeny^000000.";
+				else
+					mes "^B8860B480,000 Zeny^000000.";
+			} else
+				mes "^B8860B500,000 Zeny^000000.";
+			next;
+			mes "[Rina's Little Friend]";
+			mes "If you are interested";
+			mes "make that zeny and come again.";
+			mes "Haha...";
+			mes "I'll be waiting for you.";
+			close2;
+			playbgm "08.mp3"; // Theme of Prontera
+			emotion e_gg;
+			end;
+		}
+	}
+	emotion e_meh;
+	mes "[Rina's Little Friend]";
+	mes "Ahem!";
+	mes "Why? Are you surprised to see me speaking?";
+	mes "Well, I understand you.";
+	mes "Only the person who did";
+	mes "the oath-taking ceremony can talk with me.";
+	next;
+	mes "[Rina's Little Friend]";
+	mes "If Rina's curse is released,";
+	mes "I can also";
+	mes "suggest you";
+	mes "an interesting thing.";
+	next;
+	mes "[Rina's Little Friend]";
+	mes "I will let you know";
+	mes "the detailed explanation later.";
+	mes "Then see you later, my friend.";
+	close;
+}
+
+prontera,116,82,5	script	Traveler#01Easter	85,{
+	mes "[Traveler]";
+	mes "I'm a traveler";
+	mes "and I often visit ^8B4513Prontera^000000.";
+	mes "Hmm, I think I might";
+	mes "see you around here before.";
+	next;
+	if(select("Listen some more.:Just ignore it.") == 2) {
+		mes "[Traveler]";
+		mes "As I expected,";
+		mes "you are a silent person. Ha ha.";
+		mes "Good bye.";
+		close;
+	}
+	mes "[Traveler]";
+	mes "A few days ago,";
+	mes "I saw a new adventurer";
+	mes "who were standing";
+	mes "near the ^8B4513Cathedral^000000.";
+	next;
+	emotion e_lv;
+	mes "[Traveler]";
+	mes "That adventurer seemed pretty.";
+	mes "But...";
+	mes "I feel some strange energy";
+	mes "so I don't come close to that person.";
+	next;
+	mes "[Traveler]";
+	mes "Look like";
+	mes "you're interested in";
+	mes "that new adventurer?";
+	mes "Or that is just your face look. Ha ha.";
+	next;
+	if(select("I'm interested in it.:I don't care at all.") == 2) {
+		mes "[Traveler]";
+		mes "Ah~ I see~!";
+		mes "Then, Good bye.";
+		close;
+	}
+	mes "[Traveler]";
+	mes "Just as I expected!";
+	mes "You can find";
+	mes "that new adventurer";
+	mes "on the way to the ^8B4513Cathedral^000000";
+	mes "at the direction of 1o'clock in ^8B4513Prontera^000000.";
+	next;
+	mes "[Traveler]";
+	mes "She was carrying";
+	mes "^800080a big egg thing^000000.";
+	mes "That's what I know.";
+	close;
+OnInit:
+	initnpctimer;
+	end;
+OnTimer5000:
+	emotion e_gasp;
+	stopnpctimer;
+	initnpctimer;
+	end;
+}
+
+prontera,163,194,5	script	Traveler#02Easter	92,{
+	mes "[Traveler]";
+	mes "A while ago,";
+	mes "I met a lady";
+	mes "and she said she has been";
+	mes "under a strange curse.";
+	next;
+	mes "[Traveler]";
+	mes "I wanted to help her";
+	mes "but my experience is not enough.";
+	mes "So I couldn't help her.";
+	next;
+	mes "[Traveler]";
+	mes "If you are more than";
+	mes "level ^0000FF40^000000,";
+	mes "go to the ^8B4513Cathedral^000000";
+	mes "at the direction of 1'o clock.";
+	mes "I hope you can help her...";
+	close;
+OnInit:
+	initnpctimer;
+	end;
+OnTimer5000:
+	emotion e_gasp;
+	stopnpctimer;
+	initnpctimer;
+	end;
+}

+ 2 - 0
npc/scripts_athena.conf

@@ -80,6 +80,8 @@ npc: npc/cities/yuno.txt
 //npc: npc/events/dumplingfestival.txt
 // - Official Easter (2008) Event (iRO)
 //npc: npc/events/easter_2008.txt
+// - Official Easter (2010) Event
+//npc: npc/events/easter_2010.txt
 // - Official kRO, idRO Skill Reset Event
 //npc: npc/events/event_skill_reset.txt
 // - Events related to WoE SE Guild Dungeons.

+ 10 - 8
src/map/clif.c

@@ -10092,27 +10092,29 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd)
 	}
 
 	// if player ignores everyone
-	if (dstsd->state.ignoreAll) {
+	if (dstsd->state.ignoreAll && pc_get_group_level(sd) <= pc_get_group_level(dstsd)) {
 		if (dstsd->sc.option & OPTION_INVISIBLE && pc_get_group_level(sd) < pc_get_group_level(dstsd))
-			clif_wis_end(fd, 1); // 1: target character is not loged in
+			clif_wis_end(fd, 1); // 1: target character is not logged in
 		else
 			clif_wis_end(fd, 3); // 3: everyone ignored by target
 		return;
 	}
 
 	// if player is autotrading
-	if( dstsd->state.autotrade == 1 ) {
+	if (dstsd->state.autotrade == 1) {
 		char output[256];
 		sprintf(output, "%s is in autotrade mode and cannot receive whispered messages.", dstsd->status.name);
 		clif_wis_message(fd, wisp_server_name, output, strlen(output) + 1);
 		return;
 	}
 
-	// if player ignores the source character
-	ARR_FIND(0, MAX_IGNORE_LIST, i, dstsd->ignore[i].name[0] == '\0' || strcmp(dstsd->ignore[i].name, sd->status.name) == 0);
-	if(i < MAX_IGNORE_LIST && dstsd->ignore[i].name[0] != '\0') { // source char present in ignore list
-		clif_wis_end(fd, 2); // 2: ignored by target
-		return;
+	if (pc_get_group_level(sd) <= pc_get_group_level(dstsd)) {
+		// if player ignores the source character
+		ARR_FIND(0, MAX_IGNORE_LIST, i, dstsd->ignore[i].name[0] == '\0' || strcmp(dstsd->ignore[i].name, sd->status.name) == 0);
+		if(i < MAX_IGNORE_LIST && dstsd->ignore[i].name[0] != '\0') { // source char present in ignore list
+			clif_wis_end(fd, 2); // 2: ignored by target
+			return;
+		}
 	}
 
 	// notify sender of success