Explorar el Código

Added Oktoberfest costume.
- Requires client version 20131218 or newer.

aleos89 hace 11 años
padre
commit
b818c78f1d

+ 4 - 0
conf/battle/client.conf

@@ -132,6 +132,10 @@ summer_ignorepalette: no
 // Set this to yes if your cloth palettes pack doesn't have Hanbok palettes (or has less than the other jobs)
 hanbok_ignorepalette: no
 
+// Do not display cloth colors for the Oktoberfest class?
+// Set this to yes if your cloth palettes pack doesn't have Oktoberfest palettes (or has less than the other jobs)
+oktoberfest_ignorepalette: no
+
 // Set this to 1 if your clients have langtype problems and can't display motd properly
 motd_type: 0
 

+ 1 - 0
conf/msg_conf/map_msg.conf

@@ -694,6 +694,7 @@
 693: Shadow Chaser T
 694: Hanbok
 695: Rebellion
+696: Oktoberfest
 
 // @vip
 700: Usage: @vip <time> <character name>

+ 6 - 1
db/const.txt

@@ -44,6 +44,7 @@ Job_Ninja	25
 Job_Xmas	26
 Job_Summer	27
 Job_Hanbok	28
+Job_Oktoberfest	29
 
 Job_Novice_High	4001
 Job_Swordman_High	4002
@@ -326,6 +327,7 @@ Option_Dragon4	0x02000000
 Option_Dragon5	0x04000000
 Option_Hanbok	0x08000000
 Option_Mounting	0x10000000
+Option_Oktoberfest	0x20000000
 
 bc_all	0
 bc_map	1
@@ -1720,7 +1722,10 @@ SC_MTF_RANGEATK 582
 SC_MTF_MATK 583
 SC_MTF_MLEATKED 584
 SC_MTF_CRIDAMAGE 585
-SC_EXTREMITYFIST2	586
+SC_OKTOBERFEST	586
+SC_STRANGELIGHTS	587
+SC_DECORATION_OF_MUSIC	588
+SC_EXTREMITYFIST2	589
 
 //Status Icon
 SI_BLANK	-1

+ 1 - 1
db/re/item_db.txt

@@ -8887,7 +8887,7 @@
 22620,Memorial_Box,Box Of Memories,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}
 22621,Squid_Bbq,Barbecued Squid,2,5000,,250,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_EXIT; /* SetBuff "EFST_JP_EVENT04" 300000 1 */ percentheal 5,5; },{},{}
 22624,Riesen_Bretzel,Riesen Bretzel,0,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 100,0; },{},{}
-22625,Oktoberfest_Bag,Oktoberfest Bag,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ /* sc_start SC_OKTOBERFEST,600000,0; */ },{},{}
+22625,Oktoberfest_Bag,Oktoberfest Bag,2,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_OKTOBERFEST,600000,0; },{},{}
 //
 22648,Angeling_Package,Angel Ring Package,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}
 22649,Deviling_Package,Devil Ring Package,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}

+ 1 - 0
src/common/mmo.h

@@ -616,6 +616,7 @@ enum {
 	JOB_XMAS,
 	JOB_SUMMER,
 	JOB_HANBOK,
+	JOB_OKTOBERFEST,
 	JOB_MAX_BASIC,
 
 	JOB_NOVICE_HIGH = 4001,

+ 1 - 1
src/map/atcommand.c

@@ -968,7 +968,7 @@ ACMD_FUNC(jobchange)
 		}
 	}
 
-    if (job == JOB_KNIGHT2 || job == JOB_CRUSADER2 || job == JOB_WEDDING || job == JOB_XMAS || job == JOB_SUMMER || job == JOB_HANBOK
+    if (job == JOB_KNIGHT2 || job == JOB_CRUSADER2 || job == JOB_WEDDING || job == JOB_XMAS || job == JOB_SUMMER || job == JOB_HANBOK || job == JOB_OKTOBERFEST
         || job == JOB_LORD_KNIGHT2 || job == JOB_PALADIN2 || job == JOB_BABY_KNIGHT2 || job == JOB_BABY_CRUSADER2 || job == JOB_STAR_GLADIATOR2
 		 || (job >= JOB_RUNE_KNIGHT2 && job <= JOB_MECHANIC_T2) || (job >= JOB_BABY_RUNE2 && job <= JOB_BABY_MECHANIC2))
 	{ // Deny direct transformation into dummy jobs

+ 1 - 0
src/map/battle.c

@@ -7046,6 +7046,7 @@ static const struct _battle_data {
 	{ "xmas_ignorepalette",                 &battle_config.xmas_ignorepalette,              0,      0,      1,              },
 	{ "summer_ignorepalette",               &battle_config.summer_ignorepalette,            0,      0,      1,              },
 	{ "hanbok_ignorepalette",               &battle_config.hanbok_ignorepalette,            0,      0,      1,              },
+	{ "oktoberfest_ignorepalette",          &battle_config.oktoberfest_ignorepalette,       0,      0,      1,              },
 	{ "natural_healhp_interval",            &battle_config.natural_healhp_interval,         6000,   NATURAL_HEAL_INTERVAL, INT_MAX, },
 	{ "natural_healsp_interval",            &battle_config.natural_healsp_interval,         8000,   NATURAL_HEAL_INTERVAL, INT_MAX, },
 	{ "natural_heal_skill_interval",        &battle_config.natural_heal_skill_interval,     10000,  NATURAL_HEAL_INTERVAL, INT_MAX, },

+ 1 - 0
src/map/battle.h

@@ -229,6 +229,7 @@ extern struct Battle_Config
 	int xmas_ignorepalette;	// [Valaris]
 	int summer_ignorepalette; // [Zephyrus]
 	int hanbok_ignorepalette;
+	int oktoberfest_ignorepalette;
 	int natural_healhp_interval;
 	int natural_healsp_interval;
 	int natural_heal_skill_interval;

+ 9 - 7
src/map/clif.c

@@ -859,7 +859,7 @@ void clif_clearunit_delayed(struct block_list* bl, clr_type type, unsigned int t
 
 void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, unsigned short *lhand)
 {
-	if(sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK))
+	if(sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK|OPTION_OKTOBERFEST))
 	{
 		*rhand = *lhand = 0;
 		return;
@@ -3094,13 +3094,14 @@ void clif_changelook(struct block_list *bl,int type,int val)
 		break;
 		case LOOK_BASE:
 			vd->class_ = val;
-			if (vd->class_ == JOB_WEDDING || vd->class_ == JOB_XMAS || vd->class_ == JOB_SUMMER || vd->class_ == JOB_HANBOK)
+			if (vd->class_ == JOB_WEDDING || vd->class_ == JOB_XMAS || vd->class_ == JOB_SUMMER || vd->class_ == JOB_HANBOK || vd->class_ == JOB_OKTOBERFEST)
 				vd->weapon = vd->shield = 0;
 			if (vd->cloth_color && (
 				(vd->class_ == JOB_WEDDING && battle_config.wedding_ignorepalette) ||
 				(vd->class_ == JOB_XMAS && battle_config.xmas_ignorepalette) ||
 				(vd->class_ == JOB_SUMMER && battle_config.summer_ignorepalette) ||
-				(vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette)
+				(vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette) ||
+				(vd->class_ == JOB_OKTOBERFEST && battle_config.oktoberfest_ignorepalette)
 			))
 				clif_changelook(bl,LOOK_CLOTHES_COLOR,0);
 		break;
@@ -3124,7 +3125,8 @@ void clif_changelook(struct block_list *bl,int type,int val)
 				(vd->class_ == JOB_WEDDING && battle_config.wedding_ignorepalette) ||
 				(vd->class_ == JOB_XMAS && battle_config.xmas_ignorepalette) ||
 				(vd->class_ == JOB_SUMMER && battle_config.summer_ignorepalette) ||
-				(vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette)
+				(vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette) ||
+				(vd->class_ == JOB_OKTOBERFEST && battle_config.oktoberfest_ignorepalette)
 			))
 				val = 0;
 			vd->cloth_color = val;
@@ -10226,7 +10228,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type,
 		if( pc_cant_act(sd) || sd->sc.option&OPTION_HIDE )
 			return;
 
-		if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK) )
+		if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK|OPTION_OKTOBERFEST) )
 			return;
 
 		if( sd->sc.data[SC_BASILICA] || sd->sc.data[SC__SHADOWFORM] )
@@ -11249,7 +11251,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd)
 		}
 	}
 
-	if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK) )
+	if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK|OPTION_OKTOBERFEST) )
 		return;
 
 	if( sd->sc.data[SC_BASILICA] && (skill_id != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id) )
@@ -11333,7 +11335,7 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
 		}
 	}
 
-	if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK) )
+	if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK|OPTION_OKTOBERFEST) )
 		return;
 
 	if( sd->sc.data[SC_BASILICA] && (skill_id != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id) )

+ 1 - 0
src/map/map.h

@@ -135,6 +135,7 @@ enum {
 	MAPID_XMAS,
 	MAPID_SUMMER,
 	MAPID_HANBOK,
+	MAPID_OKTOBERFEST,
 	MAPID_GANGSI,
 //2-1 Jobs
 	MAPID_SUPER_NOVICE = JOBL_2_1|0x0,

+ 11 - 1
src/map/pc.c

@@ -5281,6 +5281,7 @@ int pc_jobid2mapid(unsigned short b_class)
 		case JOB_XMAS:                  return MAPID_XMAS;
 		case JOB_SUMMER:                return MAPID_SUMMER;
 		case JOB_HANBOK:                return MAPID_HANBOK;
+		case JOB_OKTOBERFEST:           return MAPID_OKTOBERFEST;
 		case JOB_GANGSI:                return MAPID_GANGSI;
 	//2-1 Jobs
 		case JOB_SUPER_NOVICE:          return MAPID_SUPER_NOVICE;
@@ -5424,6 +5425,7 @@ int pc_mapid2jobid(unsigned short class_, int sex)
 		case MAPID_XMAS:                  return JOB_XMAS;
 		case MAPID_SUMMER:                return JOB_SUMMER;
 		case MAPID_HANBOK:                return JOB_HANBOK;
+		case MAPID_OKTOBERFEST:           return JOB_OKTOBERFEST;
 		case MAPID_GANGSI:                return JOB_GANGSI;
 	//2-1 Jobs
 		case MAPID_SUPER_NOVICE:          return JOB_SUPER_NOVICE;
@@ -5591,6 +5593,9 @@ const char* job_name(int class_)
 	case JOB_HANBOK:
 		return msg_txt(NULL,694);
 
+	case JOB_OKTOBERFEST:
+		return msg_txt(NULL,696);
+
 	case JOB_NOVICE_HIGH:
 	case JOB_SWORDMAN_HIGH:
 	case JOB_MAGE_HIGH:
@@ -7960,6 +7965,11 @@ void pc_setoption(struct map_session_data *sd,int type)
 	else if (!(type&OPTION_HANBOK) && p_type&OPTION_HANBOK)
 		new_look = -1;
 
+	if (type&OPTION_OKTOBERFEST && !(p_type&OPTION_OKTOBERFEST))
+		new_look = JOB_OKTOBERFEST;
+	else if (!(type&OPTION_OKTOBERFEST) && p_type&OPTION_OKTOBERFEST)
+		new_look = -1;
+
 	if (sd->disguise || !new_look)
 		return; //Disguises break sprite changes
 
@@ -10240,7 +10250,7 @@ int pc_readdb(void)
 	for (i = 0; i < JOB_MAX; i++) {
 		int idx;
 		if (!pcdb_checkid(i)) continue;
-		if (i == JOB_WEDDING || i == JOB_XMAS || i == JOB_SUMMER || i == JOB_HANBOK)
+		if (i == JOB_WEDDING || i == JOB_XMAS || i == JOB_SUMMER || i == JOB_HANBOK || i == JOB_OKTOBERFEST)
 			continue; //Classes that do not need exp tables.
 		idx = pc_class2idx(i);
 		if (!job_info[idx].max_level[0])

+ 3 - 2
src/map/script.c

@@ -17272,9 +17272,10 @@ BUILDIN_FUNC(setmounting) {
 	TBL_PC* sd;
 	if( (sd = script_rid2sd(st)) == NULL )
 		return 0;
-	if( sd->sc.option&(OPTION_WUGRIDER|OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR) )
+	if( sd->sc.option&(OPTION_WUGRIDER|OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR) ) {
+		clif_msgtable(sd->fd, 0x78b);
 		script_pushint(st,0);//can't mount with one of these
-	else {
+	} else {
 		if( sd->sc.option&OPTION_MOUNTING )
 			pc_setoption(sd, sd->sc.option&~OPTION_MOUNTING);//release mount
 		else

+ 21 - 4
src/map/status.c

@@ -949,8 +949,10 @@ void initChangeTables(void)
 	StatusIconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM;
 	StatusIconChangeTable[SC_MOONSTAR] = SI_MOONSTAR;
 	StatusIconChangeTable[SC_SUPER_STAR] = SI_SUPER_STAR;
+	StatusIconChangeTable[SC_STRANGELIGHTS] = SI_STRANGELIGHTS;
+	StatusIconChangeTable[SC_DECORATION_OF_MUSIC] = SI_DECORATION_OF_MUSIC;
 	StatusIconChangeTable[SC_BURNING] = SI_BURNT;
-	
+
 	StatusIconChangeTable[SC_H_MINE] = SI_H_MINE;
 	StatusIconChangeTable[SC_QD_SHOT_READY] = SI_E_QD_SHOT_READY;
 	StatusIconChangeTable[SC_HEAT_BARREL_AFTER] = SI_HEAT_BARREL_AFTER;
@@ -1043,6 +1045,8 @@ void initChangeTables(void)
 	StatusChangeFlagTable[SC_MDEFSET] |= SCB_MDEF;
 	StatusChangeFlagTable[SC_MOONSTAR] |= SCB_NONE;
 	StatusChangeFlagTable[SC_SUPER_STAR] |= SCB_NONE;
+	StatusChangeFlagTable[SC_STRANGELIGHTS] |= SCB_NONE;
+	StatusChangeFlagTable[SC_DECORATION_OF_MUSIC] |= SCB_NONE;
 
 	StatusChangeFlagTable[SC_MTF_ASPD] = SCB_ASPD|SCB_HIT;
 	StatusChangeFlagTable[SC_MTF_MATK] = SCB_MATK;
@@ -6740,6 +6744,8 @@ void status_set_viewdata(struct block_list *bl, int class_)
 					class_ = JOB_XMAS;
 				else if (sd->sc.option&OPTION_HANBOK)
 					class_ = JOB_HANBOK;
+				else if (sd->sc.option&OPTION_OKTOBERFEST)
+					class_ = JOB_OKTOBERFEST;
 				else if (sd->sc.option&OPTION_RIDING) {
 					switch (class_) { // Adapt class to a Mounted one.
 						case JOB_KNIGHT:
@@ -6846,6 +6852,7 @@ void status_set_viewdata(struct block_list *bl, int class_)
 		|| (vd->class_==JOB_XMAS && battle_config.xmas_ignorepalette)
 		|| (vd->class_==JOB_SUMMER && battle_config.summer_ignorepalette)
 		|| (vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette)
+		|| (vd->class_ == JOB_OKTOBERFEST && battle_config.oktoberfest_ignorepalette)
 	))
 		vd->cloth_color = 0;
 }
@@ -8232,6 +8239,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_XMAS:
 		case SC_SUMMER:
 		case SC_HANBOK:
+		case SC_OKTOBERFEST:
 			if (!vd) return 0;
 			// Store previous values as they could be removed.
 			val1 = vd->class_;
@@ -8241,7 +8249,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			unit_stop_attack(bl);
 			clif_changelook(bl,LOOK_WEAPON,0);
 			clif_changelook(bl,LOOK_SHIELD,0);
-			clif_changelook(bl,LOOK_BASE,type==SC_WEDDING?JOB_WEDDING:type==SC_XMAS?JOB_XMAS:type==SC_SUMMER?JOB_SUMMER:JOB_HANBOK);
+			clif_changelook(bl,LOOK_BASE,type==SC_WEDDING?JOB_WEDDING:type==SC_XMAS?JOB_XMAS:type==SC_SUMMER?JOB_SUMMER:type==SC_HANBOK?JOB_HANBOK:JOB_OKTOBERFEST);
 			clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color);
 			break;
 		case SC_NOCHAT:
@@ -9527,9 +9535,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			case SC_XMAS:
 			case SC_SUMMER:
 			case SC_HANBOK:
+			case SC_OKTOBERFEST:
 				clif_changelook(bl,LOOK_WEAPON,0);
 				clif_changelook(bl,LOOK_SHIELD,0);
-				clif_changelook(bl,LOOK_BASE,type==SC_WEDDING?JOB_WEDDING:type==SC_XMAS?JOB_XMAS:type==SC_SUMMER?JOB_SUMMER:JOB_HANBOK);
+				clif_changelook(bl,LOOK_BASE,type==SC_WEDDING?JOB_WEDDING:type==SC_XMAS?JOB_XMAS:type==SC_SUMMER?JOB_SUMMER:type==SC_HANBOK?JOB_HANBOK:JOB_OKTOBERFEST);
 				clif_changelook(bl,LOOK_CLOTHES_COLOR,val4);
 				break;
 			case SC_KAAHI:
@@ -9797,6 +9806,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_HANBOK:
 			sc->option |= OPTION_HANBOK;
 			break;
+		case SC_OKTOBERFEST:
+			sc->option |= OPTION_OKTOBERFEST;
+			break;
 		case SC_ORCISH:
 			sc->option |= OPTION_ORCISH;
 			break;
@@ -9963,6 +9975,7 @@ int status_change_clear(struct block_list* bl, int type)
 			case SC_XMAS:
 			case SC_SUMMER:
 			case SC_HANBOK:
+			case SC_OKTOBERFEST:
 			case SC_NOCHAT:
 			case SC_FUSION:
 			case SC_EARTHSCROLL:
@@ -10136,11 +10149,12 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 		case SC_XMAS:
 		case SC_SUMMER:
 		case SC_HANBOK:
+		case SC_OKTOBERFEST:
 			if (!vd) break;
 			if (sd) {
 				// Load data from sd->status.* as the stored values could have changed.
 				// Must remove OPTION to prevent class being rechanged.
-				sc->option &= type==SC_WEDDING?~OPTION_WEDDING:type==SC_XMAS?~OPTION_XMAS:type==SC_SUMMER?~OPTION_SUMMER:~OPTION_HANBOK;
+				sc->option &= type==SC_WEDDING?~OPTION_WEDDING:type==SC_XMAS?~OPTION_XMAS:type==SC_SUMMER?~OPTION_SUMMER:type==SC_HANBOK?~OPTION_HANBOK:~OPTION_OKTOBERFEST;
 				clif_changeoption(&sd->bl);
 				status_set_viewdata(bl, sd->status.class_);
 			} else {
@@ -10609,6 +10623,9 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 	case SC_HANBOK:
 		sc->option &= ~OPTION_HANBOK;
 		break;
+	case SC_OKTOBERFEST:
+		sc->option &= ~OPTION_OKTOBERFEST;
+		break;
 	case SC_ORCISH:
 		sc->option &= ~OPTION_ORCISH;
 		break;

+ 8 - 3
src/map/status.h

@@ -685,6 +685,10 @@ typedef enum sc_type {
 	SC_MTF_MLEATKED,
 	SC_MTF_CRIDAMAGE,
 
+	SC_OKTOBERFEST,
+	SC_STRANGELIGHTS,
+	SC_DECORATION_OF_MUSIC,
+
 #ifdef RENEWAL
 	SC_EXTREMITYFIST2,
 #endif
@@ -1567,7 +1571,7 @@ enum sc_opt3 {
 enum e_option {
 	OPTION_NOTHING		= 0x00000000,
 	OPTION_SIGHT		= 0x00000001,
-	OPTION_HIDE		= 0x00000002,
+	OPTION_HIDE			= 0x00000002,
 	OPTION_CLOAK		= 0x00000004,
 	OPTION_FALCON		= 0x00000010,
 	OPTION_RIDING		= 0x00000020,
@@ -1577,11 +1581,11 @@ enum e_option {
 	OPTION_RUWACH		= 0x00002000,
 	OPTION_CHASEWALK	= 0x00004000,
 	OPTION_FLYING		= 0x00008000, //Note that clientside Flying and Xmas are 0x8000 for clients prior to 2007.
-	OPTION_XMAS		= 0x00010000,
+	OPTION_XMAS			= 0x00010000,
 	OPTION_TRANSFORM	= 0x00020000,
 	OPTION_SUMMER		= 0x00040000,
 	OPTION_DRAGON1		= 0x00080000,
-	OPTION_WUG		= 0x00100000,
+	OPTION_WUG			= 0x00100000,
 	OPTION_WUGRIDER		= 0x00200000,
 	OPTION_MADOGEAR		= 0x00400000,
 	OPTION_DRAGON2		= 0x00800000,
@@ -1590,6 +1594,7 @@ enum e_option {
 	OPTION_DRAGON5		= 0x04000000,
 	OPTION_HANBOK		= 0x08000000,
 	OPTION_MOUNTING		= 0x10000000,
+	OPTION_OKTOBERFEST	= 0x20000000,
 
 #ifndef NEW_CARTS
 	OPTION_CART1	= 0x00000008,