diff --git a/conf/battle/player.conf b/conf/battle/player.conf index ea825bd6cc..ec742363da 100644 --- a/conf/battle/player.conf +++ b/conf/battle/player.conf @@ -256,20 +256,25 @@ fame_pharmacy_7: 10 fame_pharmacy_10: 50 // How the server should measure the character's idle time? (Note 3) -// 0x001 - Walk Request -// 0x002 - UseSkillToID Request (Targetted skill use attempt) -// 0x004 - UseSkillToPos Request (AoE skill use attempt) -// 0x008 - UseItem Request (Including equip/unequip) -// 0x010 - Attack Request -// 0x020 - Chat Request (Whisper, Party, Guild, Battlegrounds, etc) -// 0x040 - Sit/Standup Request -// 0x080 - Emotion Request -// 0x100 - DropItem Request -// 0x200 - @/#Command Request +// 0x0001 - Walk Request +// 0x0002 - UseSkillToID Request (Targetted skill use attempt) +// 0x0004 - UseSkillToPos Request (AoE skill use attempt) +// 0x0008 - UseItem Request (Including equip/unequip) +// 0x0010 - Attack Request +// 0x0020 - Chat Request (Whisper, Party, Guild, Battlegrounds, etc) +// 0x0040 - Sit/Standup Request +// 0x0080 - Emotion Request +// 0x0100 - DropItem Request +// 0x0200 - @/#Command Request +// 0x0400 - Closing a NPC window +// 0x0800 - Providing input to a NPC +// 0x1000 - Choosing a NPC menu option +// 0x2000 - Clicking the next button of a NPC +// 0x4000 - Finishing for a NPC progress bar // Please note that at least 1 option has to be enabled. // Be mindful that the more options used, the easier it becomes to cheat features that rely on idletime (e.g. checkidle()). -// Default: walk (0x1) + useskilltoid (0x2) + useskilltopos (0x4) + useitem (0x8) + attack (0x10) = 0x1F -idletime_option: 0x1F +// Default: walk (0x1) + useskilltoid (0x2) + useskilltopos (0x4) + useitem (0x8) + attack (0x10) + any npc interaction(0x400,0x800,0x1000,0x2000,0x4000) = 0x7C1F +idletime_option: 0x7C1F // Adjust the summoner class' special traits. // - Summoners belong to brute race category. They have their own race RC_PLAYER_DORAM (11) to be differentiated from monster race RC_BRUTE (2). diff --git a/src/map/battle.cpp b/src/map/battle.cpp index fcb3f32077..d2abd9564a 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -8923,7 +8923,7 @@ static const struct _battle_data { { "fame_pharmacy_10", &battle_config.fame_pharmacy_10, 50, 0, INT_MAX, }, { "mail_delay", &battle_config.mail_delay, 1000, 1000, INT_MAX, }, { "at_monsterignore", &battle_config.autotrade_monsterignore, 0, 0, 1, }, - { "idletime_option", &battle_config.idletime_option, 0x1F, 0x1, 0xFFF, }, + { "idletime_option", &battle_config.idletime_option, 0x7C1F, 1, 0xFFFF, }, { "spawn_direction", &battle_config.spawn_direction, 0, 0, 1, }, { "arrow_shower_knockback", &battle_config.arrow_shower_knockback, 1, 0, 1, }, { "devotion_rdamage_skill_only", &battle_config.devotion_rdamage_skill_only, 1, 0, 1, }, diff --git a/src/map/clif.cpp b/src/map/clif.cpp index d300099381..3cca47c160 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -11075,6 +11075,11 @@ void clif_parse_progressbar(int fd, struct map_session_data * sd){ sd->progressbar.npc_id = 0; sd->progressbar.timeout = 0; sd->state.workinprogress = WIP_DISABLE_NONE; + + if( battle_config.idletime_option&IDLE_NPC_PROGRESS ){ + sd->idletime = last_tick; + } + npc_scriptcont(sd, npc_id, closing); } @@ -12927,6 +12932,11 @@ void clif_parse_NpcSelectMenu(int fd,struct map_session_data *sd){ } sd->npc_menu = select; + + if( battle_config.idletime_option&IDLE_NPC_MENU ){ + sd->idletime = last_tick; + } + npc_scriptcont(sd,npc_id, false); } @@ -12935,6 +12945,10 @@ void clif_parse_NpcSelectMenu(int fd,struct map_session_data *sd){ /// 00b9 .L void clif_parse_NpcNextClicked(int fd,struct map_session_data *sd) { + if( battle_config.idletime_option&IDLE_NPC_NEXT ){ + sd->idletime = last_tick; + } + npc_scriptcont(sd,RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]), false); } @@ -12947,6 +12961,11 @@ void clif_parse_NpcAmountInput(int fd,struct map_session_data *sd){ int amount = (int)RFIFOL(fd,info->pos[1]); sd->npc_amount = amount; + + if( battle_config.idletime_option&IDLE_NPC_INPUT ){ + sd->idletime = last_tick; + } + npc_scriptcont(sd, npcid, false); } @@ -12967,6 +12986,11 @@ void clif_parse_NpcStringInput(int fd, struct map_session_data* sd){ #endif safestrncpy(sd->npc_str, message, min(message_len,CHATBOX_SIZE)); + + if( battle_config.idletime_option&IDLE_NPC_INPUT ){ + sd->idletime = last_tick; + } + npc_scriptcont(sd, npcid, false); } @@ -12977,6 +13001,11 @@ void clif_parse_NpcCloseClicked(int fd,struct map_session_data *sd) { if (!sd->npc_id) //Avoid parsing anything when the script was done with. [Skotlex] return; + + if( battle_config.idletime_option&IDLE_NPC_CLOSE ){ + sd->idletime = last_tick; + } + npc_scriptcont(sd, RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]), true); } diff --git a/src/map/pc.hpp b/src/map/pc.hpp index 3265038d6b..d51ebdfedf 100644 --- a/src/map/pc.hpp +++ b/src/map/pc.hpp @@ -853,16 +853,21 @@ enum ammo_type { }; enum idletime_option { - IDLE_WALK = 0x001, - IDLE_USESKILLTOID = 0x002, - IDLE_USESKILLTOPOS = 0x004, - IDLE_USEITEM = 0x008, - IDLE_ATTACK = 0x010, - IDLE_CHAT = 0x020, - IDLE_SIT = 0x040, - IDLE_EMOTION = 0x080, - IDLE_DROPITEM = 0x100, - IDLE_ATCOMMAND = 0x200, + IDLE_WALK = 0x0001, + IDLE_USESKILLTOID = 0x0002, + IDLE_USESKILLTOPOS = 0x0004, + IDLE_USEITEM = 0x0008, + IDLE_ATTACK = 0x0010, + IDLE_CHAT = 0x0020, + IDLE_SIT = 0x0040, + IDLE_EMOTION = 0x0080, + IDLE_DROPITEM = 0x0100, + IDLE_ATCOMMAND = 0x0200, + IDLE_NPC_CLOSE = 0x0400, + IDLE_NPC_INPUT = 0x0800, + IDLE_NPC_MENU = 0x1000, + IDLE_NPC_NEXT = 0x2000, + IDLE_NPC_PROGRESS = 0x4000, }; enum adopt_responses {