Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

实现 OnPCCartDelFilter 过滤器事件, 当玩家准备将道具从手推车取回背包时触发 [香草] #545

Merged
merged 4 commits into from
Sep 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
21 changes: 21 additions & 0 deletions doc/pandas_events.txt
Original file line number Diff line number Diff line change
Expand Up @@ -818,6 +818,27 @@
此事件触发时无法确保玩家最终的道具一定就能够成功从背包存入手推车,
因此在撰写脚本的时候不能以此为假设.

--------------------------------------------------------------

*OnPCCartDelFilter:

当玩家准备将道具从手推车取回背包时触发过滤器 [香草]

事件关联:
关联到准备将道具从手推车取回背包的玩家

中断说明:
中断后服务端会无视本次取回道具的请求

携带参数:
@removeitem_nameid 即将取出的道具编号
@removeitem_amount 即将取出的道具数量
@removeitem_idx 即将取出的道具序号 (手推车序号)

注意事项:
此事件触发时无法确保玩家最终的道具一定就能够成功从手推车中取出,
因此在撰写脚本的时候不能以此为假设.


//============================================================
// 熊猫模拟器 - 实时事件
Expand Down
5 changes: 5 additions & 0 deletions src/config/pandas.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1421,6 +1421,11 @@
// 事件类型: Filter / 事件名称: OnPCCartAddFilter
// 常量名称: NPCF_CART_ADD / 变量名称: cart_add_filter_name
#define Pandas_NpcFilter_CART_ADD

// 当玩家准备将道具从手推车取回背包时触发过滤器 [香草]
// 事件类型: Filter / 事件名称: OnPCCartDelFilter
// 常量名称: NPCF_CART_DEL / 变量名称: cart_del_filter_name
#define Pandas_NpcFilter_CART_DEL
// PYHELP - NPCEVENT - INSERT POINT - <Section 1>
#endif // Pandas_Struct_Map_Session_Data_EventHalt

Expand Down
9 changes: 9 additions & 0 deletions src/map/npc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6478,6 +6478,10 @@ bool npc_event_is_filter(enum npce_event eventtype) {
#ifdef Pandas_NpcFilter_CART_ADD
NPCF_CART_ADD, // cart_add_filter_name // OnPCCartAddFilter // 当玩家准备将道具从背包存入手推车时触发过滤器
#endif // Pandas_NpcFilter_CART_ADD

#ifdef Pandas_NpcFilter_CART_DEL
NPCF_CART_DEL, // cart_del_filter_name // OnPCCartDelFilter // 当玩家准备将道具从手推车取回背包时触发过滤器
#endif // Pandas_NpcFilter_CART_DEL
// PYHELP - NPCEVENT - INSERT POINT - <Section 20>
};

Expand Down Expand Up @@ -6708,6 +6712,11 @@ const char *npc_get_script_event_name(int npce_index)
case NPCF_CART_ADD:
return script_config.cart_add_filter_name; // OnPCCartAddFilter // 当玩家准备将道具从背包存入手推车时触发过滤器
#endif // Pandas_NpcFilter_CART_ADD

#ifdef Pandas_NpcFilter_CART_DEL
case NPCF_CART_DEL:
return script_config.cart_del_filter_name; // OnPCCartDelFilter // 当玩家准备将道具从手推车取回背包时触发过滤器
#endif // Pandas_NpcFilter_CART_DEL
// PYHELP - NPCEVENT - INSERT POINT - <Section 3>

/************************************************************************/
Expand Down
4 changes: 4 additions & 0 deletions src/map/npc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2391,6 +2391,10 @@ enum npce_event : uint8 {
#ifdef Pandas_NpcFilter_CART_ADD
NPCF_CART_ADD, // cart_add_filter_name // OnPCCartAddFilter // 当玩家准备将道具从背包存入手推车时触发过滤器
#endif // Pandas_NpcFilter_CART_ADD

#ifdef Pandas_NpcFilter_CART_DEL
NPCF_CART_DEL, // cart_del_filter_name // OnPCCartDelFilter // 当玩家准备将道具从手推车取回背包时触发过滤器
#endif // Pandas_NpcFilter_CART_DEL
// PYHELP - NPCEVENT - INSERT POINT - <Section 2>

/************************************************************************/
Expand Down
10 changes: 10 additions & 0 deletions src/map/pc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6606,6 +6606,16 @@ void pc_getitemfromcart(struct map_session_data *sd,int idx,int amount)
if (item_data->nameid == 0 || amount < 1 || item_data->amount < amount || sd->state.vending || sd->state.prevend)
return;

#ifdef Pandas_NpcFilter_CART_DEL
pc_setreg(sd, add_str("@removeitem_nameid"), item_data->nameid); // 即将取出的道具编号
pc_setreg(sd, add_str("@removeitem_amount"), amount); // 即将取出的道具数量
pc_setreg(sd, add_str("@removeitem_idx"), idx); // 即将取出的道具序号 (手推车序号)
if (npc_script_filter(sd, NPCF_CART_DEL)) {
clif_cart_delitem(sd, idx, 0);
return;
}
#endif // Pandas_NpcFilter_CART_DEL

enum e_additem_result flag = pc_additem(sd, item_data, amount, LOG_TYPE_NONE);

if (flag == ADDITEM_SUCCESS)
Expand Down
4 changes: 4 additions & 0 deletions src/map/script.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,10 @@ struct Script_Config script_config = {
#ifdef Pandas_NpcFilter_CART_ADD
"OnPCCartAddFilter", // NPCF_CART_ADD // cart_add_filter_name // 当玩家准备将道具从背包存入手推车时触发过滤器
#endif // Pandas_NpcFilter_CART_ADD

#ifdef Pandas_NpcFilter_CART_DEL
"OnPCCartDelFilter", // NPCF_CART_DEL // cart_del_filter_name // 当玩家准备将道具从手推车取回背包时触发过滤器
#endif // Pandas_NpcFilter_CART_DEL
// PYHELP - NPCEVENT - INSERT POINT - <Section 5>

/************************************************************************/
Expand Down
4 changes: 4 additions & 0 deletions src/map/script.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,10 @@ struct Script_Config {
#ifdef Pandas_NpcFilter_CART_ADD
const char* cart_add_filter_name; // NPCF_CART_ADD // OnPCCartAddFilter // 当玩家准备将道具从背包存入手推车时触发过滤器
#endif // Pandas_NpcFilter_CART_ADD

#ifdef Pandas_NpcFilter_CART_DEL
const char* cart_del_filter_name; // NPCF_CART_DEL // OnPCCartDelFilter // 当玩家准备将道具从手推车取回背包时触发过滤器
#endif // Pandas_NpcFilter_CART_DEL
// PYHELP - NPCEVENT - INSERT POINT - <Section 4>

/************************************************************************/
Expand Down
4 changes: 4 additions & 0 deletions src/map/script_constants.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,10 @@
#ifdef Pandas_NpcFilter_CART_ADD
export_constant(NPCF_CART_ADD); // cart_add_filter_name // OnPCCartAddFilter // 当玩家准备将道具从背包存入手推车时触发过滤器
#endif // Pandas_NpcFilter_CART_ADD

#ifdef Pandas_NpcFilter_CART_DEL
export_constant(NPCF_CART_DEL); // cart_del_filter_name // OnPCCartDelFilter // 当玩家准备将道具从手推车取回背包时触发过滤器
#endif // Pandas_NpcFilter_CART_DEL
// PYHELP - NPCEVENT - INSERT POINT - <Section 6>

/************************************************************************/
Expand Down