mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 01:15:52 +01:00
feature(widget): simple implementation of widget
Simple implementation of a part of the gadget support, very rough, hard code variables, I am very sorry for that. It can now handle part of the gadget rig. More features and better support await PRs from others. if no one else does, I'll give it a try.
This commit is contained in:
8
proto/AbilityMixinWidgetMpSupport.proto
Normal file
8
proto/AbilityMixinWidgetMpSupport.proto
Normal file
@@ -0,0 +1,8 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message AbilityMixinWidgetMpSupport {
|
||||
uint32 target_entity_id = 1;
|
||||
}
|
||||
29
proto/AllWidgetDataNotify.proto
Normal file
29
proto/AllWidgetDataNotify.proto
Normal file
@@ -0,0 +1,29 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "LunchBoxData.proto";
|
||||
import "AnchorPointData.proto";
|
||||
import "OneoffGatherPointDetectorData.proto";
|
||||
import "ClientCollectorData.proto";
|
||||
import "WidgetCoolDownData.proto";
|
||||
import "WidgetSlotData.proto";
|
||||
|
||||
message AllWidgetDataNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4260;
|
||||
}
|
||||
|
||||
repeated AnchorPointData anchor_point_list = 2;
|
||||
uint32 next_anchor_point_usable_time = 3;
|
||||
LunchBoxData lunch_box_data = 5;
|
||||
repeated OneoffGatherPointDetectorData oneoff_gather_point_detector_data_list = 6;
|
||||
repeated ClientCollectorData client_collector_data_list = 7;
|
||||
repeated WidgetCoolDownData cool_down_group_data_list = 8;
|
||||
repeated WidgetCoolDownData normal_cool_down_data_list = 9;
|
||||
repeated WidgetSlotData slot_list = 11;
|
||||
}
|
||||
12
proto/AnchorPointData.proto
Normal file
12
proto/AnchorPointData.proto
Normal file
@@ -0,0 +1,12 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "Vector.proto";
|
||||
|
||||
message AnchorPointData {
|
||||
uint32 anchor_point_id = 1;
|
||||
Vector pos = 2;
|
||||
Vector rot = 3;
|
||||
uint32 end_time = 4;
|
||||
}
|
||||
18
proto/AnchorPointDataNotify.proto
Normal file
18
proto/AnchorPointDataNotify.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "AnchorPointData.proto";
|
||||
|
||||
message AnchorPointDataNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4253;
|
||||
}
|
||||
|
||||
repeated AnchorPointData anchor_point_list = 1;
|
||||
uint32 next_usable_time = 2;
|
||||
}
|
||||
24
proto/AnchorPointOpReq.proto
Normal file
24
proto/AnchorPointOpReq.proto
Normal file
@@ -0,0 +1,24 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message AnchorPointOpReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4255;
|
||||
}
|
||||
|
||||
enum AnchorPointOpType {
|
||||
ANCHOR_POINT_OP_NONE = 0;
|
||||
ANCHOR_POINT_OP_TELEPORT = 1;
|
||||
ANCHOR_POINT_OP_REMOVE = 2;
|
||||
}
|
||||
|
||||
uint32 anchor_point_op_type = 1;
|
||||
uint32 anchor_point_id = 2;
|
||||
}
|
||||
18
proto/AnchorPointOpRsp.proto
Normal file
18
proto/AnchorPointOpRsp.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message AnchorPointOpRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4274;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
uint32 anchor_point_op_type = 2;
|
||||
uint32 anchor_point_id = 3;
|
||||
}
|
||||
10
proto/ClientCollectorData.proto
Normal file
10
proto/ClientCollectorData.proto
Normal file
@@ -0,0 +1,10 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message ClientCollectorData {
|
||||
uint32 material_id = 1;
|
||||
uint32 max_points = 2;
|
||||
uint32 curr_points = 3;
|
||||
}
|
||||
17
proto/ClientCollectorDataNotify.proto
Normal file
17
proto/ClientCollectorDataNotify.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "ClientCollectorData.proto";
|
||||
|
||||
message ClientCollectorDataNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4280;
|
||||
}
|
||||
|
||||
repeated ClientCollectorData client_collector_data_list = 1;
|
||||
}
|
||||
16
proto/GetWidgetSlotReq.proto
Normal file
16
proto/GetWidgetSlotReq.proto
Normal file
@@ -0,0 +1,16 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message GetWidgetSlotReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4285;
|
||||
}
|
||||
|
||||
}
|
||||
18
proto/GetWidgetSlotRsp.proto
Normal file
18
proto/GetWidgetSlotRsp.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetSlotData.proto";
|
||||
|
||||
message GetWidgetSlotRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4291;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
repeated WidgetSlotData slot_list = 2;
|
||||
}
|
||||
8
proto/LunchBoxData.proto
Normal file
8
proto/LunchBoxData.proto
Normal file
@@ -0,0 +1,8 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message LunchBoxData {
|
||||
map<uint32, uint32> slot_material_map = 1;
|
||||
}
|
||||
9
proto/LunchBoxSlotType.proto
Normal file
9
proto/LunchBoxSlotType.proto
Normal file
@@ -0,0 +1,9 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
enum LunchBoxSlotType {
|
||||
LUNCH_BOX_SLOT_NONE = 0;
|
||||
LUNCH_BOX_SLOT_REVIVE = 1;
|
||||
LUNCH_BOX_SLOT_HEAL = 2;
|
||||
}
|
||||
15
proto/OneoffGatherPointDetectorData.proto
Normal file
15
proto/OneoffGatherPointDetectorData.proto
Normal file
@@ -0,0 +1,15 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "Vector.proto";
|
||||
|
||||
message OneoffGatherPointDetectorData {
|
||||
uint32 material_id = 1;
|
||||
bool is_all_collected = 2;
|
||||
bool is_hint_valid = 3;
|
||||
Vector hint_center_pos = 4;
|
||||
uint32 hint_radius = 5;
|
||||
uint32 group_id = 6;
|
||||
uint32 config_id = 7;
|
||||
}
|
||||
17
proto/OneoffGatherPointDetectorDataNotify.proto
Normal file
17
proto/OneoffGatherPointDetectorDataNotify.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "OneoffGatherPointDetectorData.proto";
|
||||
|
||||
message OneoffGatherPointDetectorDataNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4288;
|
||||
}
|
||||
|
||||
repeated OneoffGatherPointDetectorData oneoff_gather_point_detector_data_list = 1;
|
||||
}
|
||||
26
proto/QuickUseWidgetReq.proto
Normal file
26
proto/QuickUseWidgetReq.proto
Normal file
@@ -0,0 +1,26 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetCreateLocationInfo.proto";
|
||||
import "WidgetCameraInfo.proto";
|
||||
import "WidgetCreatorInfo.proto";
|
||||
import "WidgetThunderBirdFeatherInfo.proto";
|
||||
|
||||
message QuickUseWidgetReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4300;
|
||||
}
|
||||
|
||||
oneof Param {
|
||||
WidgetCreateLocationInfo location_info = 20;
|
||||
WidgetCameraInfo camera_info = 21;
|
||||
WidgetCreatorInfo creator_info = 22;
|
||||
WidgetThunderBirdFeatherInfo thunder_bird_feather_info = 23;
|
||||
}
|
||||
}
|
||||
21
proto/QuickUseWidgetRsp.proto
Normal file
21
proto/QuickUseWidgetRsp.proto
Normal file
@@ -0,0 +1,21 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "OneoffGatherPointDetectorData.proto";
|
||||
import "ClientCollectorData.proto";
|
||||
|
||||
message QuickUseWidgetRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4258;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
uint32 material_id = 2;
|
||||
OneoffGatherPointDetectorData detector_data = 3;
|
||||
ClientCollectorData client_collector_data = 4;
|
||||
}
|
||||
18
proto/SetUpLunchBoxWidgetReq.proto
Normal file
18
proto/SetUpLunchBoxWidgetReq.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "LunchBoxData.proto";
|
||||
|
||||
message SetUpLunchBoxWidgetReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4265;
|
||||
}
|
||||
|
||||
LunchBoxData lunch_box_data = 1;
|
||||
}
|
||||
18
proto/SetUpLunchBoxWidgetRsp.proto
Normal file
18
proto/SetUpLunchBoxWidgetRsp.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "LunchBoxData.proto";
|
||||
|
||||
message SetUpLunchBoxWidgetRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4297;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
LunchBoxData lunch_box_data = 2;
|
||||
}
|
||||
21
proto/SetWidgetSlotReq.proto
Normal file
21
proto/SetWidgetSlotReq.proto
Normal file
@@ -0,0 +1,21 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetSlotOp.proto";
|
||||
import "WidgetSlotTag.proto";
|
||||
|
||||
message SetWidgetSlotReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4269;
|
||||
}
|
||||
|
||||
WidgetSlotOp op = 2;
|
||||
repeated WidgetSlotTag tag_list = 3;
|
||||
uint32 material_id = 4;
|
||||
}
|
||||
21
proto/SetWidgetSlotRsp.proto
Normal file
21
proto/SetWidgetSlotRsp.proto
Normal file
@@ -0,0 +1,21 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetSlotOp.proto";
|
||||
import "WidgetSlotTag.proto";
|
||||
|
||||
message SetWidgetSlotRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4279;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
WidgetSlotOp op = 2;
|
||||
repeated WidgetSlotTag tag_list = 3;
|
||||
uint32 material_id = 4;
|
||||
}
|
||||
20
proto/UseWidgetCreateGadgetReq.proto
Normal file
20
proto/UseWidgetCreateGadgetReq.proto
Normal file
@@ -0,0 +1,20 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "Vector.proto";
|
||||
|
||||
message UseWidgetCreateGadgetReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4276;
|
||||
}
|
||||
|
||||
uint32 material_id = 1;
|
||||
Vector pos = 2;
|
||||
Vector rot = 3;
|
||||
}
|
||||
17
proto/UseWidgetCreateGadgetRsp.proto
Normal file
17
proto/UseWidgetCreateGadgetRsp.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message UseWidgetCreateGadgetRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4270;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
uint32 material_id = 2;
|
||||
}
|
||||
17
proto/UseWidgetRetractGadgetReq.proto
Normal file
17
proto/UseWidgetRetractGadgetReq.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message UseWidgetRetractGadgetReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4273;
|
||||
}
|
||||
|
||||
uint32 entity_id = 1;
|
||||
}
|
||||
18
proto/UseWidgetRetractGadgetRsp.proto
Normal file
18
proto/UseWidgetRetractGadgetRsp.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message UseWidgetRetractGadgetRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4266;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
uint32 entity_id = 2;
|
||||
}
|
||||
17
proto/WidgetActiveChangeNotify.proto
Normal file
17
proto/WidgetActiveChangeNotify.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetSlotData.proto";
|
||||
|
||||
message WidgetActiveChangeNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4264;
|
||||
}
|
||||
|
||||
repeated WidgetSlotData widget_data_list = 1;
|
||||
}
|
||||
8
proto/WidgetCameraInfo.proto
Normal file
8
proto/WidgetCameraInfo.proto
Normal file
@@ -0,0 +1,8 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetCameraInfo {
|
||||
uint32 target_entity_id = 1;
|
||||
}
|
||||
10
proto/WidgetCoolDownData.proto
Normal file
10
proto/WidgetCoolDownData.proto
Normal file
@@ -0,0 +1,10 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetCoolDownData {
|
||||
uint32 id = 1;
|
||||
uint64 cool_down_time = 2;
|
||||
bool is_success = 3;
|
||||
}
|
||||
18
proto/WidgetCoolDownNotify.proto
Normal file
18
proto/WidgetCoolDownNotify.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetCoolDownData.proto";
|
||||
|
||||
message WidgetCoolDownNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4298;
|
||||
}
|
||||
|
||||
repeated WidgetCoolDownData group_cool_down_data_list = 1;
|
||||
repeated WidgetCoolDownData normal_cool_down_data_list = 2;
|
||||
}
|
||||
10
proto/WidgetCreateLocationInfo.proto
Normal file
10
proto/WidgetCreateLocationInfo.proto
Normal file
@@ -0,0 +1,10 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "Vector.proto";
|
||||
|
||||
message WidgetCreateLocationInfo {
|
||||
Vector pos = 1;
|
||||
Vector rot = 2;
|
||||
}
|
||||
12
proto/WidgetCreatorInfo.proto
Normal file
12
proto/WidgetCreatorInfo.proto
Normal file
@@ -0,0 +1,12 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetCreatorOpType.proto";
|
||||
import "WidgetCreateLocationInfo.proto";
|
||||
|
||||
message WidgetCreatorInfo {
|
||||
WidgetCreatorOpType op_type = 1;
|
||||
uint32 entity_id = 2;
|
||||
WidgetCreateLocationInfo location_info = 3;
|
||||
}
|
||||
9
proto/WidgetCreatorOpType.proto
Normal file
9
proto/WidgetCreatorOpType.proto
Normal file
@@ -0,0 +1,9 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
enum WidgetCreatorOpType {
|
||||
WIDGET_CREATOR_TYPE_NONE = 0;
|
||||
WIDGET_CREATOR_TYPE_RETRACT = 1;
|
||||
WIDGET_CREATOR_TYPE_RETRACT_AND_CREATE = 2;
|
||||
}
|
||||
23
proto/WidgetDoBagReq.proto
Normal file
23
proto/WidgetDoBagReq.proto
Normal file
@@ -0,0 +1,23 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetCreateLocationInfo.proto";
|
||||
import "WidgetCreatorInfo.proto";
|
||||
|
||||
message WidgetDoBagReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4290;
|
||||
}
|
||||
|
||||
oneof OpInfo {
|
||||
WidgetCreateLocationInfo location_info = 20;
|
||||
WidgetCreatorInfo widget_creator_info = 21;
|
||||
}
|
||||
uint32 material_id = 1;
|
||||
}
|
||||
17
proto/WidgetDoBagRsp.proto
Normal file
17
proto/WidgetDoBagRsp.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetDoBagRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4271;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
uint32 material_id = 2;
|
||||
}
|
||||
17
proto/WidgetGadgetAllDataNotify.proto
Normal file
17
proto/WidgetGadgetAllDataNotify.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetGadgetData.proto";
|
||||
|
||||
message WidgetGadgetAllDataNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4262;
|
||||
}
|
||||
|
||||
repeated WidgetGadgetData widget_gadget_data = 1;
|
||||
}
|
||||
9
proto/WidgetGadgetData.proto
Normal file
9
proto/WidgetGadgetData.proto
Normal file
@@ -0,0 +1,9 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetGadgetData {
|
||||
uint32 gadget_id = 1;
|
||||
repeated uint32 gadget_entity_id_list = 3;
|
||||
}
|
||||
17
proto/WidgetGadgetDataNotify.proto
Normal file
17
proto/WidgetGadgetDataNotify.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetGadgetData.proto";
|
||||
|
||||
message WidgetGadgetDataNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4256;
|
||||
}
|
||||
|
||||
WidgetGadgetData widget_gadget_data = 1;
|
||||
}
|
||||
16
proto/WidgetGadgetDestroyNotify.proto
Normal file
16
proto/WidgetGadgetDestroyNotify.proto
Normal file
@@ -0,0 +1,16 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetGadgetDestroyNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4268;
|
||||
}
|
||||
|
||||
uint32 entity_id = 1;
|
||||
}
|
||||
19
proto/WidgetReportReq.proto
Normal file
19
proto/WidgetReportReq.proto
Normal file
@@ -0,0 +1,19 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetReportReq {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
NONE = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
IS_ALLOW_CLIENT = 1;
|
||||
CMD_ID = 4294;
|
||||
}
|
||||
|
||||
uint32 material_id = 1;
|
||||
bool is_clear_hint = 2;
|
||||
bool is_client_collect = 3;
|
||||
}
|
||||
17
proto/WidgetReportRsp.proto
Normal file
17
proto/WidgetReportRsp.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetReportRsp {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4259;
|
||||
}
|
||||
|
||||
int32 retcode = 1;
|
||||
uint32 material_id = 2;
|
||||
}
|
||||
19
proto/WidgetSlotChangeNotify.proto
Normal file
19
proto/WidgetSlotChangeNotify.proto
Normal file
@@ -0,0 +1,19 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetSlotOp.proto";
|
||||
import "WidgetSlotData.proto";
|
||||
|
||||
message WidgetSlotChangeNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4289;
|
||||
}
|
||||
|
||||
WidgetSlotOp op = 1;
|
||||
WidgetSlotData slot = 2;
|
||||
}
|
||||
12
proto/WidgetSlotData.proto
Normal file
12
proto/WidgetSlotData.proto
Normal file
@@ -0,0 +1,12 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
import "WidgetSlotTag.proto";
|
||||
|
||||
message WidgetSlotData {
|
||||
WidgetSlotTag tag = 1;
|
||||
uint32 material_id = 2;
|
||||
uint32 cd_over_time = 3;
|
||||
bool is_active = 4;
|
||||
}
|
||||
8
proto/WidgetSlotOp.proto
Normal file
8
proto/WidgetSlotOp.proto
Normal file
@@ -0,0 +1,8 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
enum WidgetSlotOp {
|
||||
ATTACH = 0;
|
||||
DETACH = 1;
|
||||
}
|
||||
8
proto/WidgetSlotTag.proto
Normal file
8
proto/WidgetSlotTag.proto
Normal file
@@ -0,0 +1,8 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
enum WidgetSlotTag {
|
||||
WIDGET_SLOT_QUICK_USE = 0;
|
||||
WIDGET_SLOT_ATTACH_AVATAR = 1;
|
||||
}
|
||||
7
proto/WidgetSlotTagComparer.proto
Normal file
7
proto/WidgetSlotTagComparer.proto
Normal file
@@ -0,0 +1,7 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetSlotTagComparer {
|
||||
}
|
||||
8
proto/WidgetThunderBirdFeatherInfo.proto
Normal file
8
proto/WidgetThunderBirdFeatherInfo.proto
Normal file
@@ -0,0 +1,8 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetThunderBirdFeatherInfo {
|
||||
repeated uint32 entity_id_list = 1;
|
||||
}
|
||||
17
proto/WidgetUseAttachAbilityGroupChangeNotify.proto
Normal file
17
proto/WidgetUseAttachAbilityGroupChangeNotify.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "emu.grasscutter.net.proto";
|
||||
|
||||
|
||||
message WidgetUseAttachAbilityGroupChangeNotify {
|
||||
enum CmdId {
|
||||
option allow_alias = true;
|
||||
NONE = 0;
|
||||
ENET_CHANNEL_ID = 0;
|
||||
ENET_IS_RELIABLE = 1;
|
||||
CMD_ID = 4292;
|
||||
}
|
||||
|
||||
uint32 material_id = 1;
|
||||
bool is_attach = 2;
|
||||
}
|
||||
@@ -82,6 +82,8 @@ public class Player {
|
||||
private Set<Integer> flyCloakList;
|
||||
private Set<Integer> costumeList;
|
||||
|
||||
private Integer widgetId;
|
||||
|
||||
@Transient private long nextGuid = 0;
|
||||
@Transient private int peerId;
|
||||
@Transient private World world;
|
||||
@@ -297,6 +299,14 @@ public class Player {
|
||||
this.updateProfile();
|
||||
}
|
||||
|
||||
public Integer getWidgetId() {
|
||||
return widgetId;
|
||||
}
|
||||
|
||||
public void setWidgetId(Integer widgetId) {
|
||||
this.widgetId = widgetId;
|
||||
}
|
||||
|
||||
public Position getPos() {
|
||||
return pos;
|
||||
}
|
||||
@@ -1141,6 +1151,9 @@ public class Player {
|
||||
session.send(new PacketPlayerStoreNotify(this));
|
||||
session.send(new PacketAvatarDataNotify(this));
|
||||
|
||||
session.send(new PacketAllWidgetDataNotify(this));
|
||||
session.send(new PacketWidgetGadgetAllDataNotify());
|
||||
|
||||
getTodayMoonCard(); // The timer works at 0:0, some users log in after that, use this method to check if they have received a reward today or not. If not, send the reward.
|
||||
|
||||
session.send(new PacketPlayerEnterSceneNotify(this)); // Enter game world
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketGetShopRsp;
|
||||
import emu.grasscutter.server.packet.send.PacketGetWidgetSlotRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.GetWidgetSlotReq)
|
||||
public class HandlerGetWidgetSlotReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
// Unhandled
|
||||
Player player = session.getPlayer();
|
||||
session.send(new PacketGetWidgetSlotRsp(player));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.SetWidgetSlotReqOuterClass;
|
||||
import emu.grasscutter.net.proto.WidgetSlotOpOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketSetWidgetSlotRsp;
|
||||
import emu.grasscutter.server.packet.send.PacketWidgetSlotChangeNotify;
|
||||
|
||||
@Opcodes(PacketOpcodes.SetWidgetSlotReq)
|
||||
public class HandlerSetWidgetSlotReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
SetWidgetSlotReqOuterClass.SetWidgetSlotReq req = SetWidgetSlotReqOuterClass.SetWidgetSlotReq.parseFrom(payload);
|
||||
|
||||
Player player = session.getPlayer();
|
||||
player.setWidgetId(req.getMaterialId());
|
||||
|
||||
// WidgetSlotChangeNotify op & slot key
|
||||
session.send(new PacketWidgetSlotChangeNotify(WidgetSlotOpOuterClass.WidgetSlotOp.DETACH));
|
||||
// WidgetSlotChangeNotify slot
|
||||
session.send(new PacketWidgetSlotChangeNotify(req.getMaterialId()));
|
||||
|
||||
// SetWidgetSlotRsp
|
||||
session.send(new PacketSetWidgetSlotRsp(req.getMaterialId()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.AllWidgetDataNotifyOuterClass.AllWidgetDataNotify;
|
||||
import emu.grasscutter.net.proto.LunchBoxDataOuterClass;
|
||||
import emu.grasscutter.net.proto.WidgetSlotDataOuterClass;
|
||||
import emu.grasscutter.net.proto.WidgetSlotTagOuterClass;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class PacketAllWidgetDataNotify extends BasePacket {
|
||||
|
||||
public PacketAllWidgetDataNotify(Player player) {
|
||||
super(PacketOpcodes.AllWidgetDataNotify);
|
||||
|
||||
// TODO: Implement this
|
||||
|
||||
AllWidgetDataNotify.Builder proto = AllWidgetDataNotify.newBuilder()
|
||||
// If you want to implement this, feel free to do so. :)
|
||||
.setLunchBoxData(
|
||||
LunchBoxDataOuterClass.LunchBoxData.newBuilder().build()
|
||||
)
|
||||
// Maybe it's a little difficult, or it makes you upset :(
|
||||
.addAllOneoffGatherPointDetectorDataList(List.of())
|
||||
// So, goodbye, and hopefully sometime in the future o(* ̄▽ ̄*)ブ
|
||||
.addAllCoolDownGroupDataList(List.of())
|
||||
// I'll see your PR with a title that says (・∀・(・∀・(・∀・*)
|
||||
.addAllAnchorPointList(List.of())
|
||||
// "Complete implementation of widget functionality" b( ̄▽ ̄)d
|
||||
.addAllClientCollectorDataList(List.of())
|
||||
// Good luck, my boy.
|
||||
.addAllNormalCoolDownDataList(List.of());
|
||||
|
||||
if (player.getWidgetId() == null) {
|
||||
proto.addAllSlotList(List.of());
|
||||
} else {
|
||||
proto.addSlotList(
|
||||
WidgetSlotDataOuterClass.WidgetSlotData.newBuilder()
|
||||
.setIsActive(true)
|
||||
.setMaterialId(player.getWidgetId())
|
||||
.build()
|
||||
);
|
||||
|
||||
proto.addSlotList(
|
||||
WidgetSlotDataOuterClass.WidgetSlotData.newBuilder()
|
||||
.setTag(WidgetSlotTagOuterClass.WidgetSlotTag.WIDGET_SLOT_ATTACH_AVATAR)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
AllWidgetDataNotify protoData = proto.build();
|
||||
|
||||
this.setData(protoData);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.GetWidgetSlotRspOuterClass;
|
||||
import emu.grasscutter.net.proto.WidgetSlotDataOuterClass;
|
||||
import emu.grasscutter.net.proto.WidgetSlotTagOuterClass;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketGetWidgetSlotRsp extends BasePacket {
|
||||
|
||||
public PacketGetWidgetSlotRsp(Player player) {
|
||||
super(PacketOpcodes.GetWidgetSlotRsp);
|
||||
|
||||
GetWidgetSlotRspOuterClass.GetWidgetSlotRsp.Builder proto =
|
||||
GetWidgetSlotRspOuterClass.GetWidgetSlotRsp.newBuilder();
|
||||
|
||||
if (player.getWidgetId() == null) {
|
||||
proto.addAllSlotList(List.of());
|
||||
} else {
|
||||
proto.addSlotList(
|
||||
WidgetSlotDataOuterClass.WidgetSlotData.newBuilder()
|
||||
.setIsActive(true)
|
||||
.setMaterialId(player.getWidgetId())
|
||||
.build()
|
||||
);
|
||||
|
||||
proto.addSlotList(
|
||||
WidgetSlotDataOuterClass.WidgetSlotData.newBuilder()
|
||||
.setTag(WidgetSlotTagOuterClass.WidgetSlotTag.WIDGET_SLOT_ATTACH_AVATAR)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
GetWidgetSlotRspOuterClass.GetWidgetSlotRsp protoData = proto.build();
|
||||
|
||||
this.setData(protoData);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.SetWidgetSlotRspOuterClass;
|
||||
|
||||
public class PacketSetWidgetSlotRsp extends BasePacket {
|
||||
|
||||
public PacketSetWidgetSlotRsp(int materialId) {
|
||||
super(PacketOpcodes.SetWidgetSlotRsp);
|
||||
|
||||
SetWidgetSlotRspOuterClass.SetWidgetSlotRsp proto = SetWidgetSlotRspOuterClass.SetWidgetSlotRsp.newBuilder()
|
||||
.setMaterialId(materialId)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.WidgetGadgetAllDataNotifyOuterClass.WidgetGadgetAllDataNotify;
|
||||
|
||||
public class PacketWidgetGadgetAllDataNotify extends BasePacket {
|
||||
|
||||
public PacketWidgetGadgetAllDataNotify() {
|
||||
super(PacketOpcodes.AllWidgetDataNotify);
|
||||
|
||||
WidgetGadgetAllDataNotify proto = WidgetGadgetAllDataNotify.newBuilder().build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.WidgetSlotChangeNotifyOuterClass;
|
||||
import emu.grasscutter.net.proto.WidgetSlotDataOuterClass;
|
||||
import emu.grasscutter.net.proto.WidgetSlotOpOuterClass;
|
||||
|
||||
public class PacketWidgetSlotChangeNotify extends BasePacket {
|
||||
|
||||
public PacketWidgetSlotChangeNotify(WidgetSlotChangeNotifyOuterClass.WidgetSlotChangeNotify proto) {
|
||||
super(PacketOpcodes.WidgetSlotChangeNotify);
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
public PacketWidgetSlotChangeNotify(WidgetSlotOpOuterClass.WidgetSlotOp op) {
|
||||
super(PacketOpcodes.WidgetSlotChangeNotify);
|
||||
|
||||
WidgetSlotChangeNotifyOuterClass.WidgetSlotChangeNotify proto = WidgetSlotChangeNotifyOuterClass.WidgetSlotChangeNotify.newBuilder()
|
||||
.setOp(op)
|
||||
.setSlot(
|
||||
WidgetSlotDataOuterClass.WidgetSlotData.newBuilder()
|
||||
.setIsActive(true)
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
public PacketWidgetSlotChangeNotify(int materialId) {
|
||||
super(PacketOpcodes.WidgetSlotChangeNotify);
|
||||
|
||||
WidgetSlotChangeNotifyOuterClass.WidgetSlotChangeNotify proto = WidgetSlotChangeNotifyOuterClass.WidgetSlotChangeNotify.newBuilder()
|
||||
.setSlot(
|
||||
WidgetSlotDataOuterClass.WidgetSlotData.newBuilder()
|
||||
.setIsActive(true)
|
||||
.setMaterialId(materialId)
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user