Bläddra i källkod

Bug Fixes
* Switching arrows no longer stops attacks. (bugreport:9270)
* Looter monsters will now randomly pick items rather than going for the closest one. (bugreport:9268)
* Follow up to 0fed97c. Moved pc_setsit before skill_sit to not break skills that count players who are sitting. (bugreport:8966)
* Follow up to 2d2991a. Cleaned up some compile warnings.
* Updated the inf3 descriptions in the skill_db.

aleos89 10 år sedan
förälder
incheckning
a080117a74
13 ändrade filer med 121 tillägg och 126 borttagningar
  1. 19 17
      db/import-tmpl/skill_db.txt
  2. 17 17
      db/pre-re/skill_db.txt
  3. 17 17
      db/re/skill_db.txt
  4. 6 6
      src/login/account.c
  5. 7 7
      src/login/ipban.c
  6. 0 1
      src/map/clif.c
  7. 1 3
      src/map/mob.c
  8. 1 1
      src/map/npc.c
  9. 1 1
      src/map/pc.h
  10. 2 2
      src/map/script.c
  11. 3 6
      src/map/skill.c
  12. 44 45
      src/map/skill.h
  13. 3 3
      src/map/status.c

+ 19 - 17
db/import-tmpl/skill_db.txt

@@ -38,8 +38,8 @@
 //    0x01000- disable usage on enemies (for non-offensive skills).
 //    0x02000- free
 //    0x04000- chorus skill
-//    0x08000- spell that ignore bg reduction
-//    0x10000- spell that ignore gvg reduction
+//    0x08000- skill that ignore bg reduction
+//    0x10000- skill that ignore gvg reduction
 //    0x20000- makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options)
 // 13 maxcount: max amount of skill instances to place on the ground when
 //    player_land_skill_limit/monster_land_skill_limit is enabled. For skills
@@ -47,21 +47,23 @@
 // 14 attack type (none, weapon, magic, misc)
 // 15 Blowcount (amount of tiles skill knockbacks)
 // 16 inf3 (skill information 3):
-//    0x0001- skill ignores land protector (e.g. arrow shower)
-//    0x0002- spell that doesn't end camouflage
-//    0x0004- usable skills while hiding
-//    0x0008- spell that can be use while in dancing state
-//    0x0010- spell that could hit emperium
-//    0x0020- spell blocked by statis
-//    0x0040- spell blocked by kagehumi
-//    0x0080- spell range affected by AC_VULTURE
-//    0x0100- spell range affected by GS_SNAKEEYE
-//    0x0200- spell range affected by NJ_SHADOWJUMP
-//    0x0400- spell range affected by WL_RADIUS
-//    0x0800- spell range affected by RA_RESEARCHTRAP
-//    0x1000- spell that can't be copied
-//    0x2000- spell that can be using while riding warg
-//    0x4000- spell that can't be used while in mado
+//    0x00001- skill ignores land protector (e.g. arrow shower)
+//    0x00002- skill that doesn't end camouflage
+//    0x00004- usable skills while hiding
+//    0x00008- skill that can be use while in dancing state
+//    0x00010- skill that could hit emperium
+//    0x00020- skill blocked by statis
+//    0x00040- skill blocked by kagehumi
+//    0x00080- skill range affected by AC_VULTURE
+//    0x00100- skill range affected by GS_SNAKEEYE
+//    0x00200- skill range affected by NJ_SHADOWJUMP
+//    0x00400- skill range affected by WL_RADIUS
+//    0x00800- skill range affected by RA_RESEARCHTRAP
+//    0x01000- skill that does not affect user that has NC_HOVERING active
+//    0x02000- skill that can be using while riding warg
+//    0x04000- skill that can't be used while in mado
+//    0x08000- skill that can be used to target while under SC__MANHOLE effect
+//    0x10000- skill that affects hidden targets
 // 17 Name
 // 18 Description
 

+ 17 - 17
db/pre-re/skill_db.txt

@@ -38,8 +38,8 @@
 //    0x01000- disable usage on enemies (for non-offensive skills).
 //    0x02000- available skill for SC_AUTOSHADOWSPELL
 //    0x04000- chorus skill
-//    0x08000- spell that ignore bg reduction
-//    0x10000- spell that ignore gvg reduction
+//    0x08000- skill that ignore bg reduction
+//    0x10000- skill that ignore gvg reduction
 //    0x20000- makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options)
 // 13 maxcount: max amount of skill instances to place on the ground when
 //    player_land_skill_limit/monster_land_skill_limit is enabled. For skills
@@ -48,22 +48,22 @@
 // 15 Blowcount (amount of tiles skill knockbacks)
 // 16 inf3 (skill information 3):
 //    0x00001- skill ignores land protector (e.g. arrow shower)
-//    0x00002- spell that doesn't end camouflage
+//    0x00002- skill that doesn't end camouflage
 //    0x00004- usable skills while hiding
-//    0x00008- spell that can be use while in dancing state
-//    0x00010- spell that could hit emperium
-//    0x00020- spell blocked by statis
-//    0x00040- spell blocked by kagehumi
-//    0x00080- spell range affected by AC_VULTURE
-//    0x00100- spell range affected by GS_SNAKEEYE
-//    0x00200- spell range affected by NJ_SHADOWJUMP
-//    0x00400- spell range affected by WL_RADIUS
-//    0x00800- spell range affected by RA_RESEARCHTRAP
-//    0x01000- Spell that does not affect user that has NC_HOVERING active
-//    0x02000- spell that can be using while riding warg
-//    0x04000- spell that can't be used while in mado
-//    0x08000- spell that can be used to target while under Man Hole effect
-//    0x10000- spell that having an affect to hiding target
+//    0x00008- skill that can be use while in dancing state
+//    0x00010- skill that could hit emperium
+//    0x00020- skill blocked by statis
+//    0x00040- skill blocked by kagehumi
+//    0x00080- skill range affected by AC_VULTURE
+//    0x00100- skill range affected by GS_SNAKEEYE
+//    0x00200- skill range affected by NJ_SHADOWJUMP
+//    0x00400- skill range affected by WL_RADIUS
+//    0x00800- skill range affected by RA_RESEARCHTRAP
+//    0x01000- skill that does not affect user that has NC_HOVERING active
+//    0x02000- skill that can be using while riding warg
+//    0x04000- skill that can't be used while in mado
+//    0x08000- skill that can be used to target while under SC__MANHOLE effect
+//    0x10000- skill that affects hidden targets
 // 17 Name
 // 18 Description
 1,0,0,0,0,0,0,9,0,no,0,0,0,none,0,0x0,		NV_BASIC,Basic Skill

+ 17 - 17
db/re/skill_db.txt

@@ -38,8 +38,8 @@
 //    0x01000- disable usage on enemies (for non-offensive skills).
 //    0x02000- available skill for SC_AUTOSHADOWSPELL
 //    0x04000- chorus skill
-//    0x08000- spell that ignore bg reduction
-//    0x10000- spell that ignore gvg reduction
+//    0x08000- skill that ignore bg reduction
+//    0x10000- skill that ignore gvg reduction
 //    0x20000- makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options)
 // 13 maxcount: max amount of skill instances to place on the ground when
 //    player_land_skill_limit/monster_land_skill_limit is enabled. For skills
@@ -48,22 +48,22 @@
 // 15 Blowcount (amount of tiles skill knockbacks)
 // 16 inf3 (skill information 3):
 //    0x00001- skill ignores land protector (e.g. arrow shower)
-//    0x00002- spell that doesn't end camouflage
+//    0x00002- skill that doesn't end camouflage
 //    0x00004- usable skills while hiding
-//    0x00008- spell that can be use while in dancing state
-//    0x00010- spell that could hit emperium
-//    0x00020- spell blocked by statis
-//    0x00040- spell blocked by kagehumi
-//    0x00080- spell range affected by AC_VULTURE
-//    0x00100- spell range affected by GS_SNAKEEYE
-//    0x00200- spell range affected by NJ_SHADOWJUMP
-//    0x00400- spell range affected by WL_RADIUS
-//    0x00800- spell range affected by RA_RESEARCHTRAP
-//    0x01000- Spell that does not affect user that has NC_HOVERING active
-//    0x02000- spell that can be using while riding warg
-//    0x04000- spell that can't be used while in mado
-//    0x08000- spell that can be used to target while under Man Hole effect
-//    0x10000- spell that having an affect to hiding target
+//    0x00008- skill that can be use while in dancing state
+//    0x00010- skill that could hit emperium
+//    0x00020- skill blocked by statis
+//    0x00040- skill blocked by kagehumi
+//    0x00080- skill range affected by AC_VULTURE
+//    0x00100- skill range affected by GS_SNAKEEYE
+//    0x00200- skill range affected by NJ_SHADOWJUMP
+//    0x00400- skill range affected by WL_RADIUS
+//    0x00800- skill range affected by RA_RESEARCHTRAP
+//    0x01000- skill that does not affect user that has NC_HOVERING active
+//    0x02000- skill that can be using while riding warg
+//    0x04000- skill that can't be used while in mado
+//    0x08000- skill that can be used to target while under SC__MANHOLE effect
+//    0x10000- skill that affects hidden targets
 // 17 Name
 // 18 Description
 1,0,0,0,0,0,0,9,0,no,0,0,0,none,0,0x0,		NV_BASIC,Basic Skill

+ 6 - 6
src/login/account.c

@@ -107,12 +107,12 @@ AccountDB* account_db_sql(void) {
 static bool account_db_sql_init(AccountDB* self) {
 	AccountDB_SQL* db = (AccountDB_SQL*)self;
 	Sql* sql_handle;
-	const char* username;
-	const char* password;
-	const char* hostname;
-	uint16      port;
-	const char* database;
-	const char* codepage;
+	const char* username = "ragnarok";
+	const char* password = "";
+	const char* hostname = "127.0.0.1";
+	uint16      port     = 3306;
+	const char* database = "ragnarok";
+	const char* codepage = "";
 
 	db->accounts = Sql_Malloc();
 	sql_handle = db->accounts;

+ 7 - 7
src/login/ipban.c

@@ -25,7 +25,7 @@
 static char   ipban_db_hostname[32] = "127.0.0.1";
 static uint16 ipban_db_port = 3306;
 static char   ipban_db_username[32] = "ragnarok";
-static char   ipban_db_password[32] = "ragnarok";
+static char   ipban_db_password[32] = "";
 static char   ipban_db_database[32] = "ragnarok";
 static char   ipban_codepage[32] = "";
 static char   ipban_table[32] = "ipbanlist";
@@ -187,12 +187,12 @@ bool ipban_config_read(const char* key, const char* value) {
  * Launched at login-serv start, create db or other long scope variable here.
  */
 void ipban_init(void) {
-	const char* username;
-	const char* password;
-	const char* hostname;
-	uint16      port;
-	const char* database;
-	const char* codepage;
+	const char* username = ipban_db_username;
+	const char* password = ipban_db_password;
+	const char* hostname = ipban_db_hostname;
+	uint16      port     = ipban_db_port;
+	const char* database = ipban_db_database;
+	const char* codepage = ipban_db_codepage;
 
 	ipban_inited = true;
 

+ 0 - 1
src/map/clif.c

@@ -3285,7 +3285,6 @@ void clif_arrowequip(struct map_session_data *sd,int val)
 
 	nullpo_retv(sd);
 
-	pc_stop_attack(sd); // [Valaris]
 #if PACKETVER >= 20121128
 	clif_status_change(&sd->bl, SI_CLIENT_ONLY_EQUIP_ARROW, 1, INVALID_TIMER, 0, 0, 0);
 #endif

+ 1 - 3
src/map/mob.c

@@ -1168,9 +1168,7 @@ static int mob_ai_sub_hard_lootsearch(struct block_list *bl,va_list ap)
 	target = va_arg(ap,struct block_list**);
 
 	dist = distance_bl(&md->bl, bl);
-	if(mob_can_reach(md,bl,dist+1, MSS_LOOT) &&
-		((*target) == NULL || !check_distance_bl(&md->bl, *target, dist)) //New target closer than previous one.
-	) {
+	if (mob_can_reach(md,bl,dist+1, MSS_LOOT) && (*target) == NULL) {
 		(*target) = bl;
 		md->target_id = bl->id;
 		md->min_chase = md->db->range3;

+ 1 - 1
src/map/npc.c

@@ -970,7 +970,7 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y)
 			if (pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]) || pc_isdead(sd))
 				break; // hidden or dead chars cannot use warps
 			if(sd->count_rewarp > 10){
-				ShowWarning("Prevent infinite warping loop for player (%d:%d), please fix script npc:'%s', path:'%s' \n",sd->status.account_id, sd->status.char_id,map[m].npc[i]->exname,map[m].npc[i]->path);
+				ShowWarning("Prevented infinite warp loop for player (%d:%d). Please fix NPC: '%s', path: '%s'\n", sd->status.account_id, sd->status.char_id, map[m].npc[i]->exname, map[m].npc[i]->path);
 				sd->count_rewarp=0;
 				break;
 			}

+ 1 - 1
src/map/pc.h

@@ -717,7 +717,7 @@ struct {
 #endif
 
 #define pc_setdead(sd)        ( (sd)->state.dead_sit = (sd)->vd.dead_sit = 1 )
-#define pc_setsit(sd)         ( (sd)->state.dead_sit = (sd)->vd.dead_sit = 2 )
+#define pc_setsit(sd)         { pc_stop_walking((sd), 1|4); pc_stop_attack((sd)); (sd)->state.dead_sit = (sd)->vd.dead_sit = 2; }
 #define pc_isdead(sd)         ( (sd)->state.dead_sit == 1 )
 #define pc_issit(sd)          ( (sd)->vd.dead_sit == 2 )
 #define pc_isidle(sd)         ( (sd)->chatID || (sd)->state.vending || (sd)->state.buyingstore || DIFF_TICK(last_tick, (sd)->idletime) >= battle_config.idle_no_share )

+ 2 - 2
src/map/script.c

@@ -3100,7 +3100,7 @@ struct script_data* push_copy(struct script_stack* stack, int pos)
 	}
 }
 
-/// Removes the values in indexes [start,end[ from the stack.
+/// Removes the values in indexes [start,end] from the stack.
 /// Adjusts all stack pointers.
 void pop_stack(struct script_state* st, int start, int end)
 {
@@ -18346,8 +18346,8 @@ BUILDIN_FUNC(sit)
 		return SCRIPT_CMD_FAILURE;
 
 	if( !pc_issit(sd) ) {
-		skill_sit(sd, 1);
 		pc_setsit(sd);
+		skill_sit(sd, 1);
 		clif_sitting(&sd->bl);
 	}
 	return SCRIPT_CMD_SUCCESS;

+ 3 - 6
src/map/skill.c

@@ -3777,8 +3777,8 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
 					if( target->type == BL_PC ) {
 						struct map_session_data *tsd = NULL;
 						if( (tsd = ((TBL_PC*)target)) && !pc_issit(tsd) ) {
-							skill_sit(tsd, 1);
 							pc_setsit(tsd);
+							skill_sit(tsd, 1);
 							clif_sitting(&tsd->bl);
 						}
 					}
@@ -16057,12 +16057,9 @@ int skill_sit (struct map_session_data *sd, int type)
 		range = skill_get_splash(TK_SPTIME, lv);
 	}
 
-	if( type ) {
-		// TODO: Include the case of using the Insert key
-		pc_stop_walking(sd, 1|4); // Stop players who may be walking
-		pc_stop_attack(sd); // Stop players who may be attacking
+	if (type)
 		clif_status_load(&sd->bl, SI_SIT, 1);
-	} else
+	else
 		clif_status_load(&sd->bl, SI_SIT, 0);
 
 	if (!flag) return 0;

+ 44 - 45
src/map/skill.h

@@ -27,16 +27,6 @@ struct status_change_entry;
 
 DBMap* skilldb_name2id;
 
-/// Constants to identify the skill's inf value:
-enum e_skill_inf {
-	INF_ATTACK_SKILL  = 0x01,
-	INF_GROUND_SKILL  = 0x02,
-	INF_SELF_SKILL    = 0x04, // Skills casted on self where target is automatically chosen
-	// 0x08 not assigned
-	INF_SUPPORT_SKILL = 0x10,
-	INF_TARGET_TRAP   = 0x20,
-};
-
 /// Constants to identify a skill's nk value (damage properties)
 /// The NK value applies only to non INF_GROUND_SKILL skills
 /// when determining skill castend function to invoke.
@@ -51,49 +41,58 @@ enum e_skill_nk {
 	NK_NO_CARDFIX_DEF = 0x80,
 };
 
+/// Constants to identify the skill's inf value:
+enum e_skill_inf {
+	INF_ATTACK_SKILL  = 0x01,
+	INF_GROUND_SKILL  = 0x02,
+	INF_SELF_SKILL    = 0x04, // Skills casted on self where target is automatically chosen
+	// 0x08 not assigned
+	INF_SUPPORT_SKILL = 0x10,
+	INF_TARGET_TRAP   = 0x20,
+};
+
 /// A skill with 3 would be no damage + splash: area of effect.
 /// Constants to identify a skill's inf2 value.
 enum e_skill_inf2 {
-	INF2_QUEST_SKILL    = 0x00001,
-	INF2_NPC_SKILL      = 0x00002, //NPC skills are those that players can't have in their skill tree.
-	INF2_WEDDING_SKILL  = 0x00004,
-	INF2_SPIRIT_SKILL   = 0x00008,
-	INF2_GUILD_SKILL    = 0x00010,
-	INF2_SONG_DANCE     = 0x00020,
-	INF2_ENSEMBLE_SKILL = 0x00040,
-	INF2_TRAP           = 0x00080,
-	INF2_TARGET_SELF    = 0x00100, //Refers to ground placed skills that will target the caster as well (like Grandcross)
-	INF2_NO_TARGET_SELF = 0x00200,
-	INF2_PARTY_ONLY     = 0x00400,
-	INF2_GUILD_ONLY     = 0x00800,
-	INF2_NO_ENEMY       = 0x01000,
+	INF2_QUEST_SKILL     = 0x00001,
+	INF2_NPC_SKILL       = 0x00002, //NPC skills are those that players can't have in their skill tree.
+	INF2_WEDDING_SKILL   = 0x00004,
+	INF2_SPIRIT_SKILL    = 0x00008,
+	INF2_GUILD_SKILL     = 0x00010,
+	INF2_SONG_DANCE      = 0x00020,
+	INF2_ENSEMBLE_SKILL  = 0x00040,
+	INF2_TRAP            = 0x00080,
+	INF2_TARGET_SELF     = 0x00100, //Refers to ground placed skills that will target the caster as well (like Grandcross)
+	INF2_NO_TARGET_SELF  = 0x00200,
+	INF2_PARTY_ONLY      = 0x00400,
+	INF2_GUILD_ONLY      = 0x00800,
+	INF2_NO_ENEMY        = 0x01000,
 	INF2_AUTOSHADOWSPELL = 0x02000, // Skill that available for SC_AUTOSHADOWSPELL
-	INF2_CHORUS_SKILL	= 0x04000, // Chorus skill
-	INF2_NO_BG_DMG		= 0x08000, // spell that ignore bg reduction
-	INF2_NO_GVG_DMG		= 0x10000, // spell that ignore gvg reduction
-	INF2_NO_NEARNPC     = 0x20000, // disable to cast skill if near with NPC [Cydh]
+	INF2_CHORUS_SKILL	 = 0x04000, // Chorus skill
+	INF2_NO_BG_DMG		 = 0x08000, // Skill that ignore bg reduction
+	INF2_NO_GVG_DMG		 = 0x10000, // Skill that ignore gvg reduction
+	INF2_NO_NEARNPC      = 0x20000, // disable to cast skill if near with NPC [Cydh]
 };
 
 /// Skill info type 3
 enum e_skill_inf3 {
-	INF3_NOLP				= 0x00001,	// Spells that can ignore Land Protector
-	INF3_NOENDCAMOUFLAGE	= 0x00002,	// spell that doesn't end camouflage
-	INF3_USABLE_HIDING		= 0x00004,	// spell that can be use in hiding
-	INF3_USABLE_DANCE		= 0x00008,	// spell that can be use while in dancing state
-	INF3_HIT_EMP			= 0x00010,	// spell that could hit emperium
-	INF3_STATIS_BL			= 0x00020,	// spell blocked by statis
-	INF3_KAGEHUMI_BL		= 0x00040,	// spell blocked by kagehumi
-	INF3_EFF_VULTURE		= 0x00080,	// spell range affected by AC_VULTURE
-	INF3_EFF_SNAKEEYE		= 0x00100,	// spell range affected by GS_SNAKEEYE
-	INF3_EFF_SHADOWJUMP		= 0x00200,	// spell range affected by NJ_SHADOWJUMP
-	INF3_EFF_RADIUS			= 0x00400,	// spell range affected by WL_RADIUS
-	INF3_EFF_RESEARCHTRAP	= 0x00800,	// spell range affected by RA_RESEARCHTRAP
-	INF3_NO_EFF_HOVERING	= 0x01000,	// Spell that does not affect user that has SC_HOVERING active
-	INF3_USABLE_WARG		= 0x02000,	// spell that can be use while riding warg
-	INF3_DIS_MADO			= 0x04000,	// spell that can't be used while in mado
-	INF3_USABLE_MANHOLE		= 0x08000,	// spell that can be used to target while under Man Hole effect
-	INF3_HIT_HIDING			= 0x10000,	// spell that having an affect to hiding target
-	//... add other spell list option here
+	INF3_NOLP             = 0x00001, // Skill that can ignore Land Protector
+	INF3_NOENDCAMOUFLAGE  = 0x00002, // Skill that doesn't end camouflage
+	INF3_USABLE_HIDING    = 0x00004, // Skill that can be use in hiding
+	INF3_USABLE_DANCE     = 0x00008, // Skill that can be use while in dancing state
+	INF3_HIT_EMP          = 0x00010, // Skill that could hit emperium
+	INF3_STATIS_BL        = 0x00020, // Skill blocked by statis
+	INF3_KAGEHUMI_BL      = 0x00040, // Skill blocked by kagehumi
+	INF3_EFF_VULTURE      = 0x00080, // Skill range affected by AC_VULTURE
+	INF3_EFF_SNAKEEYE     = 0x00100, // Skill range affected by GS_SNAKEEYE
+	INF3_EFF_SHADOWJUMP   = 0x00200, // Skill range affected by NJ_SHADOWJUMP
+	INF3_EFF_RADIUS       = 0x00400, // Skill range affected by WL_RADIUS
+	INF3_EFF_RESEARCHTRAP = 0x00800, // Skill range affected by RA_RESEARCHTRAP
+	INF3_NO_EFF_HOVERING  = 0x01000, // Skill that does not affect user that has SC_HOVERING active
+	INF3_USABLE_WARG      = 0x02000, // Skill that can be use while riding warg
+	INF3_DIS_MADO         = 0x04000, // Skill that can't be used while in mado
+	INF3_USABLE_MANHOLE   = 0x08000, // Skill that can be used to target while under SC__MANHOLE effect
+	INF3_HIT_HIDING       = 0x10000, // Skill that affects hidden targets
 };
 
 /// Walk intervals at which chase-skills are attempted to be triggered.

+ 3 - 3
src/map/status.c

@@ -8731,8 +8731,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 
 		case SC_TENSIONRELAX:
 			if (sd) {
-				skill_sit(sd, 1);
 				pc_setsit(sd);
+				skill_sit(sd, 1);
 				clif_sitting(&sd->bl);
 			}
 			val2 = 12; // SP cost
@@ -9459,8 +9459,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_SITDOWN_FORCE:
 		case SC_BANANA_BOMB_SITDOWN:
 			if( sd && !pc_issit(sd) ) {
-				skill_sit(sd, 1);
 				pc_setsit(sd);
+				skill_sit(sd, 1);
 				clif_sitting(bl);
 			}
 			break;
@@ -12044,8 +12044,8 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
 		if( --(sce->val4) >= 0 ) {
 			status_charge(bl,0,sce->val2);	// Reduce 8 every 10 seconds.
 			if( sd && !pc_issit(sd) ) { // Force to sit every 10 seconds.
-				skill_sit(sd, 1);
 				pc_setsit(sd);
+				skill_sit(sd, 1);
 				clif_sitting(bl);
 			}
 			sc_timer_next(10000 + tick, status_change_timer, bl->id, data);