Compare commits
No commits in common. "main" and "1.0.0" have entirely different histories.
29 changed files with 493 additions and 377156 deletions
97
config.json
97
config.json
|
@ -1,26 +1,26 @@
|
|||
{
|
||||
"avatar_config": [
|
||||
{
|
||||
"name": "Acheron",
|
||||
"id": 1308,
|
||||
"name": "Cipher",
|
||||
"id": 1406,
|
||||
"hp": 100,
|
||||
"sp": 0,
|
||||
"sp": 50,
|
||||
"level": 80,
|
||||
"promotion": 6,
|
||||
"rank": 2,
|
||||
"rank": 6,
|
||||
"lightcone": {
|
||||
"id": 23024,
|
||||
"rank": 1,
|
||||
"id": 23043,
|
||||
"rank": 5,
|
||||
"level": 80,
|
||||
"promotion": 6
|
||||
},
|
||||
"relics": [
|
||||
"61171,15,1,4,3:2:2,4:1:2,8:2:3,9:3:1",
|
||||
"61172,15,1,4,1:2:4,5:2:4,8:2:2,9:3:1",
|
||||
"61173,15,5,4,4:2:0,5:3:2,8:3:5,10:1:1",
|
||||
"61174,15,2,4,2:2:2,8:3:5,9:2:2,10:1:1",
|
||||
"63145,15,7,4,3:3:5,4:1:2,5:1:1,8:3:4",
|
||||
"63146,15,4,4,3:2:1,9:4:4,10:1:1,11:1:1"
|
||||
"61261,15,1,4,8:1:1,3:4:4,7:2:2,4:2:2",
|
||||
"61262,15,1,4,10:1:1,1:3:3,9:4:4,8:1:1",
|
||||
"61263,15,5,4,2:3:3,4:2:2,12:2:2,6:2:2",
|
||||
"61264,15,4,4,6:2:2,2:1:1,1:4:4,5:2:2",
|
||||
"63145,15,9,4,9:1:1,3:2:2,7:4:4,5:2:2",
|
||||
"63146,15,4,4,1:2:2,3:3:3,4:2:2,2:2:2"
|
||||
],
|
||||
"use_technique": true
|
||||
},
|
||||
|
@ -31,79 +31,84 @@
|
|||
"sp": 50,
|
||||
"level": 80,
|
||||
"promotion": 6,
|
||||
"rank": 0,
|
||||
"rank": 6,
|
||||
"lightcone": {
|
||||
"id": 23042,
|
||||
"rank": 1,
|
||||
"rank": 5,
|
||||
"level": 80,
|
||||
"promotion": 6
|
||||
},
|
||||
"relics": [
|
||||
"61251,15,1,4,5:1:1,6:3:3,7:3:3,12:1:1",
|
||||
"61252,15,1,4,7:3:3,10:3:3,11:2:2,12:1:1",
|
||||
"61253,15,6,4,5:1:1,6:3:5,7:2:4,12:3:4",
|
||||
"61254,15,4,4,4:2:0,9:2:2,11:2:4,10:3:0",
|
||||
"63205,15,8,4,2:2:3,7:3:1,8:2:1,10:2:4",
|
||||
"63206,15,3,4,3:3:2,7:2:1,9:3:4,11:1:1"
|
||||
"61251,15,1,4,6:1:1,11:2:2,5:2:2,2:4:4",
|
||||
"61252,15,1,4,5:3:3,4:1:1,7:2:2,10:3:3",
|
||||
"61253,15,5,4,3:2:2,11:2:2,10:3:3,5:2:2",
|
||||
"61254,15,4,4,11:3:3,9:3:3,12:1:1,4:2:2",
|
||||
"63205,15,1,4,3:1:1,8:4:4,9:2:2,2:2:2",
|
||||
"63206,15,2,4,6:3:3,8:3:3,11:1:1,3:2:2"
|
||||
],
|
||||
"use_technique": true
|
||||
},
|
||||
{
|
||||
"name": "Cipher",
|
||||
"id": 1406,
|
||||
"name": "Trailblazer",
|
||||
"id": 8008,
|
||||
"hp": 100,
|
||||
"sp": 50,
|
||||
"level": 80,
|
||||
"promotion": 6,
|
||||
"rank": 0,
|
||||
"rank": 6,
|
||||
"lightcone": {
|
||||
"id": 23043,
|
||||
"rank": 1,
|
||||
"id": 23042,
|
||||
"rank": 5,
|
||||
"level": 80,
|
||||
"promotion": 6
|
||||
},
|
||||
"relics": [
|
||||
"61171,15,1,4,7:2:2,5:2:3,8:1:2,9:3:2",
|
||||
"61172,15,1,4,5:2:3,8:2:2,9:2:2,12:2:1",
|
||||
"61173,15,5,4,8:3:3,7:2:2,5:3:0,2:1:1",
|
||||
"61174,15,4,4,3:2:3,8:2:3,9:2:2,10:2:1",
|
||||
"63145,15,9,4,3:2:2,5:2:2,8:2:3,9:2:3",
|
||||
"63146,15,4,4,1:2:3,6:1:2,8:1:0,9:4:2"
|
||||
"61261,15,1,4,12:3:3,11:2:2,8:3:3,2:1:1",
|
||||
"61262,15,1,4,3:3:3,8:2:2,6:2:2,1:2:2",
|
||||
"61263,15,5,4,12:1:1,5:2:2,7:3:3,4:3:3",
|
||||
"61264,15,4,4,6:1:1,9:3:3,2:3:3,1:2:2",
|
||||
"63145,15,6,4,7:4:4,8:1:1,3:2:2,12:2:2",
|
||||
"63146,15,2,4,8:2:2,6:3:3,10:3:3,1:1:1"
|
||||
],
|
||||
"use_technique": false
|
||||
"use_technique": true
|
||||
},
|
||||
{
|
||||
"name": "Tribbie",
|
||||
"id": 1403,
|
||||
"name": "Acheron",
|
||||
"id": 1308,
|
||||
"hp": 100,
|
||||
"sp": 0,
|
||||
"sp": 50,
|
||||
"level": 80,
|
||||
"promotion": 6,
|
||||
"rank": 0,
|
||||
"rank": 6,
|
||||
"lightcone": {
|
||||
"id": 23038,
|
||||
"rank": 1,
|
||||
"id": 23024,
|
||||
"rank": 5,
|
||||
"level": 80,
|
||||
"promotion": 6
|
||||
},
|
||||
"relics": [
|
||||
"61241,15,1,4,8:2:1,9:2:4,11:2:2,12:2:2",
|
||||
"61242,15,1,4,3:1:0,8:3:3,9:2:1,12:2:3",
|
||||
"61243,15,5,4,3:2:4,8:3:2,10:1:0,11:2:3",
|
||||
"61244,15,1,4,5:2:2,8:2:3,9:2:1,12:2:4",
|
||||
"63195,15,1,4,1:2:4,5:1:1,8:4:4,9:1:1",
|
||||
"63196,15,3,4,7:2:1,8:4:7,9:2:1,10:1:1"
|
||||
"61171,15,1,4,9:2:2,12:2:2,8:3:3,6:2:2",
|
||||
"61172,15,1,4,8:4:4,4:3:3,5:1:1,6:1:1",
|
||||
"61173,15,5,4,3:1:1,12:3:3,11:3:3,7:2:2",
|
||||
"61174,15,4,4,5:1:1,11:2:2,4:4:4,6:2:2",
|
||||
"63145,15,7,4,9:2:2,4:1:1,6:2:2,2:4:4",
|
||||
"63146,15,4,4,4:2:2,7:3:3,1:2:2,2:2:2"
|
||||
],
|
||||
"use_technique": true
|
||||
}
|
||||
],
|
||||
"battle_config": {
|
||||
"battle_id": 1,
|
||||
"stage_id": 201012311,
|
||||
"stage_id": 30114122,
|
||||
"cycle_count": 30,
|
||||
"monster_wave": [
|
||||
[
|
||||
4015011
|
||||
4033010,
|
||||
4033030,
|
||||
4032030
|
||||
],
|
||||
[
|
||||
2034010
|
||||
]
|
||||
],
|
||||
"monster_level": 95,
|
||||
|
|
|
@ -9,6 +9,8 @@ const CNPROD_HOST = "prod-gf-cn-dp01.bhsr.com";
|
|||
const CNBETA_HOST = "beta-release01-cn.bhsr.com";
|
||||
const OSPROD_HOST = "prod-official-asia-dp01.starrails.com";
|
||||
const OSBETA_HOST = "beta-release01-asia.starrails.com";
|
||||
const OSCE_HOST = "alb-ftpc0bk5jk0c9b3go4.us-east-1.alb.aliyuncs.com";
|
||||
const CNCE_HOST = "alb-xvofr71l6rrvwgcupw.cn-shanghai.alb.aliyuncs.com";
|
||||
|
||||
pub fn onQueryDispatch(_: *httpz.Request, res: *httpz.Response) !void {
|
||||
std.log.debug("onQueryDispatch", .{});
|
||||
|
@ -43,8 +45,16 @@ pub fn onQueryGateway(req: *httpz.Request, res: *httpz.Response) !void {
|
|||
const dispatch_seed = query.get("dispatch_seed") orelse "";
|
||||
std.log.info("Get DispatchSeed >> {s}", .{dispatch_seed});
|
||||
const host = selectHost(version);
|
||||
const gatewayUrl = constructUrl(host, version, dispatch_seed);
|
||||
var gatewayUrl: []const u8 = undefined;
|
||||
//Check if the client is CE version
|
||||
if (std.mem.startsWith(u8, version, "OSCE") or std.mem.startsWith(u8, version, "CNCE")) {
|
||||
gatewayUrl = constructCEUrl(host, version, dispatch_seed);
|
||||
std.log.info("Constructed CE Gateway URL >> {s}", .{gatewayUrl});
|
||||
} else {
|
||||
gatewayUrl = constructUrl(host, version, dispatch_seed);
|
||||
std.log.info("Constructed Gateway URL >> {s}", .{gatewayUrl});
|
||||
}
|
||||
|
||||
const hotfix = try hotfixInfo.Parser(res.arena, "hotfix.json", version);
|
||||
|
||||
var assetBundleUrl: []const u8 = undefined;
|
||||
|
@ -90,19 +100,46 @@ pub fn onQueryGateway(req: *httpz.Request, res: *httpz.Response) !void {
|
|||
//std.log.info("\x1b[33;1mProtobuf Message >> {}\x1b[0m", .{gateserver_proto});
|
||||
|
||||
assetBundleUrl = hotfix.assetBundleUrl;
|
||||
//Check if the client is CE version
|
||||
if (std.mem.startsWith(u8, version, "OSCE") or std.mem.startsWith(u8, version, "CNCE")) {
|
||||
exResourceUrl = "";
|
||||
} else {
|
||||
exResourceUrl = hotfix.exResourceUrl;
|
||||
}
|
||||
luaUrl = hotfix.luaUrl;
|
||||
iFixUrl = hotfix.iFixUrl;
|
||||
|
||||
if (assetBundleUrl.len == 0 or exResourceUrl.len == 0 or luaUrl.len == 0 or iFixUrl.len == 0) {
|
||||
assetBundleUrl = gateserver_proto.asset_bundle_url.Owned.str;
|
||||
//Check if the client is CE version
|
||||
if (std.mem.startsWith(u8, version, "OSCE") or std.mem.startsWith(u8, version, "CNCE")) {
|
||||
exResourceUrl = "";
|
||||
} else {
|
||||
exResourceUrl = gateserver_proto.ex_resource_url.Owned.str;
|
||||
}
|
||||
luaUrl = gateserver_proto.lua_url.Owned.str;
|
||||
iFixUrl = gateserver_proto.ifix_url.Owned.str;
|
||||
|
||||
try hotfixInfo.putValue(version, assetBundleUrl, exResourceUrl, luaUrl, iFixUrl);
|
||||
} else {
|
||||
// Check if exResourceUrl has changed
|
||||
const latestExResourceUrl = gateserver_proto.ex_resource_url.Owned.str;
|
||||
if (!std.mem.eql(u8, exResourceUrl, latestExResourceUrl)) {
|
||||
std.log.info("exResourceUrl changed from '{s}' to '{s}'", .{ exResourceUrl, latestExResourceUrl });
|
||||
|
||||
assetBundleUrl = gateserver_proto.asset_bundle_url.Owned.str;
|
||||
//Check if the client is CE version
|
||||
if (std.mem.startsWith(u8, version, "OSCE") or std.mem.startsWith(u8, version, "CNCE")) {
|
||||
exResourceUrl = "";
|
||||
} else {
|
||||
exResourceUrl = latestExResourceUrl;
|
||||
}
|
||||
luaUrl = gateserver_proto.lua_url.Owned.str;
|
||||
iFixUrl = gateserver_proto.ifix_url.Owned.str;
|
||||
|
||||
try hotfixInfo.putValue(version, assetBundleUrl, exResourceUrl, luaUrl, iFixUrl);
|
||||
}
|
||||
|
||||
}
|
||||
std.log.info("Get AssetBundleUrl >> {s}", .{assetBundleUrl});
|
||||
std.log.info("Get ExResourceUrl >> {s}", .{exResourceUrl});
|
||||
std.log.info("Get LuaUrl >> {s}", .{luaUrl});
|
||||
|
@ -120,8 +157,17 @@ pub fn onQueryGateway(req: *httpz.Request, res: *httpz.Response) !void {
|
|||
proto.network_diagnostic = true;
|
||||
proto.enable_android_middle_package = true;
|
||||
proto.use_new_networking = true;
|
||||
|
||||
//Check if the client is CE version
|
||||
if (std.mem.startsWith(u8, version, "OSCE") or std.mem.startsWith(u8, version, "CNCE")) {
|
||||
proto.enable_design_data_version_update = false;
|
||||
proto.enable_version_update = false;
|
||||
std.log.info("CE client version {s} detected, skipping design_data download.", .{version});
|
||||
} else {
|
||||
proto.enable_design_data_version_update = true;
|
||||
proto.enable_version_update = true;
|
||||
}
|
||||
|
||||
proto.mtp_switch = true;
|
||||
proto.forbid_recharge = true;
|
||||
proto.close_redeem_code = true;
|
||||
|
@ -149,6 +195,10 @@ pub fn selectHost(version: []const u8) []const u8 {
|
|||
return OSPROD_HOST;
|
||||
} else if (std.mem.startsWith(u8, version, "OSBETA")) {
|
||||
return OSBETA_HOST;
|
||||
} else if (std.mem.startsWith(u8, version, "OSCE")) {
|
||||
return OSCE_HOST;
|
||||
} else if (std.mem.startsWith(u8, version, "CNCE")) {
|
||||
return CNCE_HOST;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
|
@ -157,3 +207,7 @@ pub fn selectHost(version: []const u8) []const u8 {
|
|||
pub fn constructUrl(host: []const u8, version: []const u8, dispatch_seed: []const u8) []const u8 {
|
||||
return std.fmt.allocPrint(std.heap.page_allocator, "https://{s}/query_gateway?version={s}&dispatch_seed={s}&language_type=1&platform_type=2&channel_id=1&sub_channel_id=1&is_need_url=1&account_type=1", .{ host, version, dispatch_seed }) catch "";
|
||||
}
|
||||
|
||||
pub fn constructCEUrl(host: []const u8, version: []const u8, dispatch_seed: []const u8) []const u8 {
|
||||
return std.fmt.allocPrint(std.heap.page_allocator, "http://{s}/query_gateway?version={s}&dispatch_seed={s}&language_type=1&platform_type=2&channel_id=1&sub_channel_id=1&is_need_url=1&account_type=1", .{ host, version, dispatch_seed }) catch "";
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -83,6 +83,7 @@ const HandlerList = [_]struct { CmdID, Action }{
|
|||
.{ CmdID.CmdGetTutorialGuideCsReq, mission.onGetTutorialGuideStatus },
|
||||
.{ CmdID.CmdGetMissionStatusCsReq, mission.onGetMissionStatus },
|
||||
.{ CmdID.CmdGetTutorialCsReq, mission.onGetTutorialStatus },
|
||||
.{ CmdID.CmdFinishTutorialGuideCsReq, mission.onFinishTutorialGuideStatus },
|
||||
.{ CmdID.CmdUnlockTutorialGuideCsReq, mission.onUnlockTutorialGuide },
|
||||
//chat
|
||||
.{ CmdID.CmdGetFriendListInfoCsReq, chat.onGetFriendListInfo },
|
||||
|
@ -106,7 +107,6 @@ const HandlerList = [_]struct { CmdID, Action }{
|
|||
.{ CmdID.CmdSetGroupCustomSaveDataCsReq, scene.onSetGroupCustomSaveData },
|
||||
//events
|
||||
.{ CmdID.CmdGetActivityScheduleConfigCsReq, events.onGetActivity },
|
||||
.{ CmdID.CmdUpdateServerPrefsDataCsReq, events.onUpdateServerPrefsData },
|
||||
//challenge
|
||||
.{ CmdID.CmdGetChallengeCsReq, challenge.onGetChallenge },
|
||||
.{ CmdID.CmdGetChallengeGroupStatisticsCsReq, challenge.onGetChallengeGroupStatistics },
|
||||
|
@ -206,6 +206,7 @@ const DummyCmdList = [_]struct { CmdID, CmdID }{
|
|||
.{ CmdID.CmdTarotBookGetDataCsReq, CmdID.CmdTarotBookGetDataScRsp },
|
||||
.{ CmdID.CmdGetMarkChestCsReq, CmdID.CmdGetMarkChestScRsp },
|
||||
.{ CmdID.CmdMatchThreeGetDataCsReq, CmdID.CmdMatchThreeGetDataScRsp },
|
||||
.{ CmdID.CmdUpdateServerPrefsDataCsReq, CmdID.CmdUpdateServerPrefsDataScRsp },
|
||||
.{ CmdID.CmdUpdateTrackMainMissionIdCsReq, CmdID.CmdUpdateTrackMainMissionIdScRsp },
|
||||
.{ CmdID.CmdGetNpcMessageGroupCsReq, CmdID.CmdGetNpcMessageGroupScRsp },
|
||||
.{ CmdID.CmdGetAllSaveRaidCsReq, CmdID.CmdGetAllSaveRaidScRsp },
|
||||
|
@ -218,6 +219,7 @@ const DummyCmdList = [_]struct { CmdID, CmdID }{
|
|||
.{ CmdID.CmdRelicSmartWearGetPlanCsReq, CmdID.CmdRelicSmartWearGetPlanScRsp },
|
||||
.{ CmdID.CmdRelicSmartWearGetPinRelicCsReq, CmdID.CmdRelicSmartWearGetPinRelicScRsp },
|
||||
.{ CmdID.CmdSetGrowthTargetAvatarCsReq, CmdID.CmdSetGrowthTargetAvatarScRsp },
|
||||
//.{ CmdID.CmdGetStoryTokenActivityDataCsReq, CmdID.CmdGetStoryTokenActivityDataScRsp },
|
||||
};
|
||||
|
||||
const SuppressLogList = [_]CmdID{CmdID.CmdSceneEntityMoveCsReq};
|
||||
|
|
|
@ -4,7 +4,6 @@ const Session = @import("../Session.zig");
|
|||
const Packet = @import("../Packet.zig");
|
||||
const Config = @import("../services/config.zig");
|
||||
const Data = @import("../data.zig");
|
||||
const ChallengeData = @import("../services/challenge.zig");
|
||||
|
||||
const ArrayList = std.ArrayList;
|
||||
const Allocator = std.mem.Allocator;
|
||||
|
@ -239,225 +238,6 @@ pub const BattleManager = struct {
|
|||
return battle;
|
||||
}
|
||||
};
|
||||
pub const ChallegeStageManager = struct {
|
||||
allocator: std.mem.Allocator,
|
||||
pub fn init(allocator: std.mem.Allocator) ChallegeStageManager {
|
||||
return ChallegeStageManager{ .allocator = allocator };
|
||||
}
|
||||
pub fn createChallegeStage(
|
||||
self: *ChallegeStageManager,
|
||||
) !protocol.SceneBattleInfo {
|
||||
const config = try Config.loadGameConfig(self.allocator, "config.json");
|
||||
const stage = try Config.loadStageConfig(self.allocator, "resources/StageConfig.json");
|
||||
var battle = protocol.SceneBattleInfo.init(self.allocator);
|
||||
const BattleBuff = protocol.BattleBuff;
|
||||
for (stage.stage_config.items) |stageConf| {
|
||||
if (stageConf.stage_id == ChallengeData.challenge_stageID) {
|
||||
for (config.avatar_config.items, 0..) |avatarConf, idx| {
|
||||
var avatar = protocol.BattleAvatar.init(self.allocator);
|
||||
avatar.id = avatarConf.id;
|
||||
avatar.hp = avatarConf.hp * 100;
|
||||
avatar.sp_bar = .{ .sp_cur = avatarConf.sp * 100, .sp_max = 10000 };
|
||||
avatar.level = avatarConf.level;
|
||||
avatar.rank = avatarConf.rank;
|
||||
avatar.promotion = avatarConf.promotion;
|
||||
avatar.avatar_type = .AVATAR_FORMAL_TYPE;
|
||||
|
||||
for (avatarConf.relics.items) |relic| {
|
||||
const r = try relicCoder(self.allocator, relic.id, relic.level, relic.main_affix_id, relic.stat1, relic.cnt1, relic.step1, relic.stat2, relic.cnt2, relic.step2, relic.stat3, relic.cnt3, relic.step3, relic.stat4, relic.cnt4, relic.step4);
|
||||
try avatar.relic_list.append(r);
|
||||
}
|
||||
|
||||
const lc = protocol.BattleEquipment{
|
||||
.id = avatarConf.lightcone.id,
|
||||
.rank = avatarConf.lightcone.rank,
|
||||
.level = avatarConf.lightcone.level,
|
||||
.promotion = avatarConf.lightcone.promotion,
|
||||
};
|
||||
try avatar.equipment_list.append(lc);
|
||||
var talentLevel: u32 = 0;
|
||||
const skill_list: []const u32 = if (isInList(avatar.id, &Data.Rem)) &Data.skills else &Data.skills_old;
|
||||
for (skill_list) |elem| {
|
||||
talentLevel = switch (elem) {
|
||||
1 => 6,
|
||||
2...4 => 10,
|
||||
301, 302 => if (isInList(avatar.id, &Data.Rem)) 6 else 1,
|
||||
else => 1,
|
||||
};
|
||||
const talent = protocol.AvatarSkillTree{ .point_id = avatar.id * 1000 + elem, .level = talentLevel };
|
||||
try avatar.skilltree_list.append(talent);
|
||||
}
|
||||
if (avatarConf.use_technique) {
|
||||
var targetIndexList = ArrayList(u32).init(self.allocator);
|
||||
try targetIndexList.append(0);
|
||||
|
||||
var buffedAvatarId = avatar.id;
|
||||
if (avatar.id == 8004) {
|
||||
buffedAvatarId = 8003;
|
||||
} else if (avatar.id == 8006) {
|
||||
buffedAvatarId = 8005;
|
||||
} else if (avatar.id == 8008) {
|
||||
buffedAvatarId = 8007;
|
||||
}
|
||||
|
||||
for (Data.buffs_unlocked) |buffId| {
|
||||
const idPrefix = buffId / 100;
|
||||
if (idPrefix == buffedAvatarId) {
|
||||
var buff = BattleBuff{
|
||||
.id = buffId,
|
||||
.level = 1,
|
||||
.owner_index = @intCast(idx),
|
||||
.wave_flag = 1,
|
||||
.target_index_list = targetIndexList,
|
||||
.dynamic_values = ArrayList(protocol.BattleBuff.DynamicValuesEntry).init(self.allocator),
|
||||
};
|
||||
|
||||
try buff.dynamic_values.append(.{ .key = .{ .Const = "SkillIndex" }, .value = 0 });
|
||||
try battle.buff_list.append(buff);
|
||||
}
|
||||
}
|
||||
|
||||
if (isInList(buffedAvatarId, &Data.IgnoreToughness)) {
|
||||
var buff_tough = BattleBuff{
|
||||
.id = 1000119, //for is_ignore toughness
|
||||
.level = 1,
|
||||
.owner_index = @intCast(idx),
|
||||
.wave_flag = 1,
|
||||
.target_index_list = targetIndexList,
|
||||
.dynamic_values = ArrayList(protocol.BattleBuff.DynamicValuesEntry).init(self.allocator),
|
||||
};
|
||||
try buff_tough.dynamic_values.append(.{ .key = .{ .Const = "SkillIndex" }, .value = 0 });
|
||||
try battle.buff_list.append(buff_tough);
|
||||
}
|
||||
|
||||
if (buffedAvatarId == 1224) {
|
||||
var buff_march = protocol.BattleBuff{
|
||||
.id = 122401, //for hunt march 7th tech
|
||||
.level = 1,
|
||||
.owner_index = @intCast(idx),
|
||||
.wave_flag = 1,
|
||||
.target_index_list = targetIndexList,
|
||||
.dynamic_values = ArrayList(protocol.BattleBuff.DynamicValuesEntry).init(self.allocator),
|
||||
};
|
||||
|
||||
try buff_march.dynamic_values.appendSlice(&[_]protocol.BattleBuff.DynamicValuesEntry{
|
||||
.{ .key = .{ .Const = "#ADF_1" }, .value = 3 },
|
||||
.{ .key = .{ .Const = "#ADF_2" }, .value = 3 },
|
||||
});
|
||||
try battle.buff_list.append(buff_march);
|
||||
}
|
||||
|
||||
if (buffedAvatarId == 1310) {
|
||||
var buff_firefly = BattleBuff{
|
||||
.id = 1000112, //for firefly tech
|
||||
.level = 1,
|
||||
.owner_index = @intCast(idx),
|
||||
.wave_flag = 1,
|
||||
.target_index_list = targetIndexList,
|
||||
.dynamic_values = ArrayList(protocol.BattleBuff.DynamicValuesEntry).init(self.allocator),
|
||||
};
|
||||
try buff_firefly.dynamic_values.append(.{ .key = .{ .Const = "SkillIndex" }, .value = 0 });
|
||||
try battle.buff_list.append(buff_firefly);
|
||||
}
|
||||
|
||||
if (buffedAvatarId == 8007) {
|
||||
var buff_rmc = BattleBuff{
|
||||
.id = 800701, //for rmc tech
|
||||
.level = 1,
|
||||
.owner_index = @intCast(idx),
|
||||
.wave_flag = 1,
|
||||
.target_index_list = targetIndexList,
|
||||
.dynamic_values = ArrayList(protocol.BattleBuff.DynamicValuesEntry).init(self.allocator),
|
||||
};
|
||||
try buff_rmc.dynamic_values.append(.{ .key = .{ .Const = "SkillIndex" }, .value = 0 });
|
||||
try battle.buff_list.append(buff_rmc);
|
||||
}
|
||||
}
|
||||
|
||||
try battle.pve_avatar_list.append(avatar);
|
||||
}
|
||||
|
||||
battle.battle_id = 1;
|
||||
battle.stage_id = stageConf.stage_id;
|
||||
battle.logic_random_seed = @intCast(@mod(std.time.timestamp(), 0xFFFFFFFF));
|
||||
battle.rounds_limit = if (ChallengeData.challenge_mode != 1) 30 else 4;
|
||||
battle.monster_wave_length = @intCast(stageConf.monster_list.items.len);
|
||||
battle.world_level = 6;
|
||||
|
||||
// Monster handler
|
||||
for (stageConf.monster_list.items) |wave| {
|
||||
var monster_wave = protocol.SceneMonsterWave.init(self.allocator);
|
||||
monster_wave.wave_param = protocol.SceneMonsterWaveParam{ .level = stageConf.level };
|
||||
for (wave.items) |mob_id| {
|
||||
try monster_wave.monster_list.append(.{ .monster_id = mob_id });
|
||||
}
|
||||
try battle.monster_wave_list.append(monster_wave);
|
||||
}
|
||||
// stage blessings
|
||||
for (ChallengeData.challenge_blessing) |blessing| {
|
||||
var targetIndexList = ArrayList(u32).init(self.allocator);
|
||||
try targetIndexList.append(0);
|
||||
var buff = protocol.BattleBuff{
|
||||
.id = blessing,
|
||||
.level = 1,
|
||||
.owner_index = 0xffffffff,
|
||||
.wave_flag = 0xffffffff,
|
||||
.target_index_list = targetIndexList,
|
||||
.dynamic_values = ArrayList(protocol.BattleBuff.DynamicValuesEntry).init(self.allocator),
|
||||
};
|
||||
try buff.dynamic_values.append(.{ .key = .{ .Const = "SkillIndex" }, .value = 0 });
|
||||
try battle.buff_list.append(buff);
|
||||
}
|
||||
if (isInList(1407, Data.AllAvatars)) { //support Castorice
|
||||
var targetIndexList = ArrayList(u32).init(self.allocator);
|
||||
try targetIndexList.append(0);
|
||||
var mazebuff_data = BattleBuff{
|
||||
.id = 140703,
|
||||
.level = 1,
|
||||
.owner_index = 1,
|
||||
.wave_flag = @intCast(stageConf.monster_list.items.len),
|
||||
.target_index_list = targetIndexList,
|
||||
.dynamic_values = ArrayList(protocol.BattleBuff.DynamicValuesEntry).init(self.allocator),
|
||||
};
|
||||
try mazebuff_data.dynamic_values.append(.{ .key = .{ .Const = "SkillIndex" }, .value = 0 });
|
||||
try battle.buff_list.append(mazebuff_data);
|
||||
}
|
||||
|
||||
// PF/AS scoring
|
||||
const BattleTargetInfoEntry = protocol.SceneBattleInfo.BattleTargetInfoEntry;
|
||||
battle.battle_target_info = ArrayList(BattleTargetInfoEntry).init(self.allocator);
|
||||
|
||||
// target hardcode
|
||||
var pfTargetHead = protocol.BattleTargetList{ .battle_target_list = ArrayList(protocol.BattleTarget).init(self.allocator) };
|
||||
try pfTargetHead.battle_target_list.append(.{ .id = 10002, .progress = 0, .total_progress = 0 });
|
||||
var pfTargetTail = protocol.BattleTargetList{ .battle_target_list = ArrayList(protocol.BattleTarget).init(self.allocator) };
|
||||
try pfTargetTail.battle_target_list.append(.{ .id = 2001, .progress = 0, .total_progress = 0 });
|
||||
try pfTargetTail.battle_target_list.append(.{ .id = 2002, .progress = 0, .total_progress = 0 });
|
||||
var asTargetHead = protocol.BattleTargetList{ .battle_target_list = ArrayList(protocol.BattleTarget).init(self.allocator) };
|
||||
try asTargetHead.battle_target_list.append(.{ .id = 90005, .progress = 0, .total_progress = 0 });
|
||||
|
||||
switch (battle.stage_id) {
|
||||
// PF
|
||||
30019000...30019100, 30021000...30021100, 30301000...30319000 => {
|
||||
try battle.battle_target_info.append(.{ .key = 1, .value = pfTargetHead });
|
||||
// fill blank target
|
||||
for (2..5) |i| {
|
||||
try battle.battle_target_info.append(.{ .key = @intCast(i) });
|
||||
}
|
||||
try battle.battle_target_info.append(.{ .key = 5, .value = pfTargetTail });
|
||||
},
|
||||
// AS
|
||||
420100...420300 => {
|
||||
try battle.battle_target_info.append(.{ .key = 1, .value = asTargetHead });
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
return battle;
|
||||
}
|
||||
};
|
||||
|
||||
pub fn relicCoder(allocator: Allocator, id: u32, level: u32, main_affix_id: u32, stat1: u32, cnt1: u32, step1: u32, stat2: u32, cnt2: u32, step2: u32, stat3: u32, cnt3: u32, step3: u32, stat4: u32, cnt4: u32, step4: u32) !protocol.BattleRelic {
|
||||
var relic = protocol.BattleRelic{
|
||||
.id = id,
|
||||
|
|
|
@ -21,7 +21,7 @@ pub const LineupManager = struct {
|
|||
var lineup = protocol.LineupInfo.init(self.allocator);
|
||||
lineup.mp = 5;
|
||||
lineup.max_mp = 5;
|
||||
lineup.name = .{ .Const = "CipherSR" };
|
||||
lineup.name = .{ .Const = "CastoriceSR" };
|
||||
|
||||
for (config.avatar_config.items, 0..) |avatarConf, idx| {
|
||||
var avatar = protocol.LineupAvatar.init(self.allocator);
|
||||
|
|
|
@ -127,7 +127,6 @@ pub const ChallengeSceneManager = struct {
|
|||
entry_id: u32,
|
||||
world_id: u32,
|
||||
monster_id: u32,
|
||||
event_id: u32,
|
||||
group_id: u32,
|
||||
maze_group_id: u32,
|
||||
) !protocol.SceneInfo {
|
||||
|
@ -177,7 +176,7 @@ pub const ChallengeSceneManager = struct {
|
|||
|
||||
var monster_info = protocol.SceneNpcMonsterInfo.init(self.allocator);
|
||||
monster_info.monster_id = monster_id;
|
||||
monster_info.event_id = event_id;
|
||||
monster_info.event_id = monsConf.eventId;
|
||||
monster_info.world_level = 6;
|
||||
|
||||
try scene_group.entity_list.append(.{
|
||||
|
|
|
@ -172,6 +172,7 @@ pub fn onGetBigDataAll(session: *Session, packet: *const Packet, allocator: Allo
|
|||
var rsp = protocol.GetBigDataAllRecommendScRsp.init(allocator);
|
||||
rsp.retcode = 0;
|
||||
rsp.IANNEEIJAKH = req.IANNEEIJAKH;
|
||||
std.debug.print("PRINT BIG DATA ALL REQ {}\n", .{req});
|
||||
try session.send(CmdID.CmdGetBigDataAllRecommendScRsp, rsp);
|
||||
}
|
||||
pub fn onGetBigData(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
|
@ -180,5 +181,6 @@ pub fn onGetBigData(session: *Session, packet: *const Packet, allocator: Allocat
|
|||
rsp.retcode = 0;
|
||||
rsp.IANNEEIJAKH = req.IANNEEIJAKH;
|
||||
rsp.EIGPMIBCIKG = req.EIGPMIBCIKG;
|
||||
std.debug.print("PRINT BIG DATA REQ {}\n", .{req});
|
||||
try session.send(CmdID.CmdGetBigDataRecommendScRsp, rsp);
|
||||
}
|
||||
|
|
|
@ -4,9 +4,7 @@ const Session = @import("../Session.zig");
|
|||
const Packet = @import("../Packet.zig");
|
||||
const Config = @import("config.zig");
|
||||
const Data = @import("../data.zig");
|
||||
const ChallengeData = @import("challenge.zig");
|
||||
const BattleManager = @import("../manager/battle_mgr.zig").BattleManager;
|
||||
const ChallegeStageManager = @import("../manager/battle_mgr.zig").ChallegeStageManager;
|
||||
|
||||
const ArrayList = std.ArrayList;
|
||||
const Allocator = std.mem.Allocator;
|
||||
|
@ -59,8 +57,7 @@ pub fn onStartBattleCollege(session: *Session, packet: *const Packet, allocator:
|
|||
pub fn onSceneCastSkill(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
var battle_mgr = BattleManager.init(allocator);
|
||||
const battle = try battle_mgr.createBattle();
|
||||
var challege_mgr = ChallegeStageManager.init(allocator);
|
||||
const challenge = try challege_mgr.createChallegeStage();
|
||||
|
||||
const req = try packet.getProto(protocol.SceneCastSkillCsReq, allocator);
|
||||
var monster_battle_info_list = ArrayList(protocol.HitMonsterBattleInfo).init(allocator);
|
||||
try monster_battle_info_list.appendSlice(&[_]protocol.HitMonsterBattleInfo{
|
||||
|
@ -73,11 +70,7 @@ pub fn onSceneCastSkill(session: *Session, packet: *const Packet, allocator: All
|
|||
.retcode = 0,
|
||||
.cast_entity_id = req.cast_entity_id,
|
||||
.monster_battle_info = monster_battle_info_list,
|
||||
.battle_info = if (req.assist_monster_entity_id_list.items.len > 0 or
|
||||
(req.attacked_by_entity_id >= 1 and req.attacked_by_entity_id <= 99))
|
||||
(if (ChallengeData.on_challenge) challenge else battle)
|
||||
else
|
||||
null,
|
||||
.battle_info = if (req.assist_monster_entity_id_list.items.len > 0 or (req.attacked_by_entity_id >= 1 and req.attacked_by_entity_id <= 99)) battle else null,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ const Packet = @import("../Packet.zig");
|
|||
const Config = @import("config.zig");
|
||||
const Res_config = @import("res_config.zig");
|
||||
const Data = @import("../data.zig");
|
||||
const ChallegeStageManager = @import("../manager/battle_mgr.zig").ChallegeStageManager;
|
||||
const SceneManager = @import("../manager/scene_mgr.zig").SceneManager;
|
||||
const ChallengeSceneManager = @import("../manager/scene_mgr.zig").ChallengeSceneManager;
|
||||
const LineupManager = @import("../manager/lineup_mgr.zig").LineupManager;
|
||||
|
@ -40,13 +39,6 @@ fn contains(list: *const std.ArrayListAligned(u32, null), value: u32) bool {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
pub var challenge_stageID: u32 = 0;
|
||||
pub var challenge_mode: u32 = 0;
|
||||
|
||||
pub var on_challenge: bool = false;
|
||||
|
||||
pub const ChallengeBlessing = ArrayList(u32);
|
||||
pub var challenge_blessing: []const u32 = &.{};
|
||||
|
||||
pub fn onGetChallenge(session: *Session, _: *const Packet, allocator: Allocator) !void {
|
||||
const challenge_config = try Config.loadChallengeConfig(allocator, "resources/ChallengeMazeConfig.json");
|
||||
|
@ -85,18 +77,12 @@ pub fn onLeaveChallenge(session: *Session, _: *const Packet, allocator: Allocato
|
|||
.lineup = lineup,
|
||||
.scene = scene_info,
|
||||
});
|
||||
on_challenge = false;
|
||||
challenge_mode = 0;
|
||||
try session.send(CmdID.CmdLeaveChallengeScRsp, protocol.LeaveChallengeScRsp{
|
||||
.retcode = 0,
|
||||
});
|
||||
}
|
||||
//TODO: IMPLEMENT CHALLENGE BUFF AND FIX MENU
|
||||
pub fn onStartChallenge(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
var challenge_blessing_list = ChallengeBlessing{
|
||||
.allocator = std.heap.page_allocator,
|
||||
.items = &.{},
|
||||
.capacity = 0,
|
||||
};
|
||||
const req = try packet.getProto(protocol.StartChallengeCsReq, allocator);
|
||||
var rsp = protocol.StartChallengeScRsp.init(allocator);
|
||||
const challenge_config = try Config.loadChallengeConfig(allocator, "resources/ChallengeMazeConfig.json");
|
||||
|
@ -104,12 +90,10 @@ pub fn onStartChallenge(session: *Session, packet: *const Packet, allocator: All
|
|||
const maze_config = try Config.loadMazePlaneConfig(allocator, "resources/MazePlane.json");
|
||||
|
||||
var avatarList = std.ArrayList(u32).init(allocator);
|
||||
var lineup = protocol.LineupInfo.init(allocator);
|
||||
lineup.mp = 5;
|
||||
lineup.max_mp = 5;
|
||||
lineup.extra_lineup_type = if (NodeCheck.challenge_node == 0) protocol.ExtraLineupType.LINEUP_CHALLENGE else protocol.ExtraLineupType.LINEUP_CHALLENGE_2;
|
||||
|
||||
if (NodeCheck.challenge_node == 0) {
|
||||
var lineup1 = protocol.LineupInfo.init(allocator);
|
||||
lineup1.mp = 5;
|
||||
lineup1.max_mp = 5;
|
||||
lineup1.extra_lineup_type = protocol.ExtraLineupType.LINEUP_CHALLENGE;
|
||||
for (req.first_lineup.items, 0..) |avt, idx| {
|
||||
var list = protocol.LineupAvatar.init(allocator);
|
||||
try avatarList.append(avt);
|
||||
|
@ -119,23 +103,27 @@ pub fn onStartChallenge(session: *Session, packet: *const Packet, allocator: All
|
|||
list.avatar_type = protocol.AvatarType.AVATAR_FORMAL_TYPE;
|
||||
list.hp = 10000;
|
||||
list.sp_bar = .{ .sp_cur = 10000, .sp_max = 10000 };
|
||||
try lineup.avatar_list.append(list);
|
||||
try lineup1.avatar_list.append(list);
|
||||
}
|
||||
try rsp.lineup_list.append(lineup);
|
||||
} else {
|
||||
try rsp.lineup_list.append(lineup1);
|
||||
|
||||
var avatarList2 = std.ArrayList(u32).init(allocator);
|
||||
var lineup2 = protocol.LineupInfo.init(allocator);
|
||||
lineup2.mp = 5;
|
||||
lineup2.max_mp = 5;
|
||||
lineup2.extra_lineup_type = protocol.ExtraLineupType.LINEUP_CHALLENGE_2;
|
||||
for (req.second_lineup.items, 0..) |avt, idx| {
|
||||
var list = protocol.LineupAvatar.init(allocator);
|
||||
try avatarList.append(avt);
|
||||
try avatarList2.append(avt);
|
||||
list.id = avt;
|
||||
list.slot = @intCast(idx);
|
||||
list.satiety = 0;
|
||||
list.avatar_type = protocol.AvatarType.AVATAR_FORMAL_TYPE;
|
||||
list.hp = 10000;
|
||||
list.sp_bar = .{ .sp_cur = 10000, .sp_max = 10000 };
|
||||
try lineup.avatar_list.append(list);
|
||||
}
|
||||
try rsp.lineup_list.append(lineup);
|
||||
try lineup2.avatar_list.append(list);
|
||||
}
|
||||
try rsp.lineup_list.append(lineup2);
|
||||
|
||||
var cur_challenge_info = protocol.CurChallenge.init(allocator);
|
||||
cur_challenge_info.challenge_id = req.challenge_id;
|
||||
|
@ -148,7 +136,6 @@ pub fn onStartChallenge(session: *Session, packet: *const Packet, allocator: All
|
|||
var entryID: u32 = 0;
|
||||
var worldID: u32 = 0;
|
||||
var monsterID: u32 = 0;
|
||||
var eventID: u32 = 0;
|
||||
var groupID: u32 = 0;
|
||||
var maze_groupID: u32 = 0;
|
||||
if (NodeCheck.challenge_node == 0) {
|
||||
|
@ -159,38 +146,9 @@ pub fn onStartChallenge(session: *Session, packet: *const Packet, allocator: All
|
|||
if (entrance.id == challengeConf.map_entrance_id) {
|
||||
for (maze_config.maze_plane_config.items) |maze| {
|
||||
if (contains(&maze.floor_id_list, entrance.floor_id)) {
|
||||
if (req.challenge_id > 20000 and req.challenge_id < 30000) {
|
||||
var story_buff = protocol.ChallengeStoryBuffList{
|
||||
.buff_list = ArrayList(u32).init(allocator),
|
||||
};
|
||||
try story_buff.buff_list.append(challengeConf.maze_buff_id);
|
||||
try story_buff.buff_list.append(req.stage_info.?.IEICDGGELNE.?.story_info.buff_one);
|
||||
try challenge_blessing_list.appendSlice(story_buff.buff_list.items);
|
||||
cur_challenge_info.stage_info = .{
|
||||
.IEICDGGELNE = .{
|
||||
.cur_story_buffs = story_buff,
|
||||
},
|
||||
};
|
||||
challenge_mode = 1;
|
||||
} else if (req.challenge_id > 30000) {
|
||||
var boss_buff = protocol.ChallengeBossBuffList{
|
||||
.buff_list = ArrayList(u32).init(allocator),
|
||||
.challenge_boss_const = 1,
|
||||
};
|
||||
try boss_buff.buff_list.append(challengeConf.maze_buff_id);
|
||||
try boss_buff.buff_list.append(req.stage_info.?.IEICDGGELNE.?.boss_info.buff_one);
|
||||
try challenge_blessing_list.appendSlice(boss_buff.buff_list.items);
|
||||
cur_challenge_info.stage_info = .{
|
||||
.IEICDGGELNE = .{
|
||||
.cur_boss_buffs = boss_buff,
|
||||
},
|
||||
};
|
||||
challenge_mode = 2;
|
||||
}
|
||||
floorID = entrance.floor_id;
|
||||
worldID = maze.world_id;
|
||||
monsterID = challengeConf.npc_monster_id_list1.items[challengeConf.npc_monster_id_list1.items.len - 1];
|
||||
eventID = challengeConf.event_id_list1.items[challengeConf.event_id_list1.items.len - 1];
|
||||
groupID = challengeConf.maze_group_id1;
|
||||
maze_groupID = challengeConf.maze_group_id1;
|
||||
planeID = maze.challenge_plane_id;
|
||||
|
@ -209,46 +167,13 @@ pub fn onStartChallenge(session: *Session, packet: *const Packet, allocator: All
|
|||
if (entrance.id == challengeConf.map_entrance_id2) {
|
||||
for (maze_config.maze_plane_config.items) |maze| {
|
||||
if (contains(&maze.floor_id_list, entrance.floor_id)) {
|
||||
if (challengeConf.maze_group_id2) |id| {
|
||||
if (req.challenge_id > 20000 and req.challenge_id < 30000) {
|
||||
var story_buff = protocol.ChallengeStoryBuffList{
|
||||
.buff_list = ArrayList(u32).init(allocator),
|
||||
};
|
||||
try story_buff.buff_list.append(challengeConf.maze_buff_id);
|
||||
try story_buff.buff_list.append(req.stage_info.?.IEICDGGELNE.?.story_info.buff_two);
|
||||
try challenge_blessing_list.appendSlice(story_buff.buff_list.items);
|
||||
cur_challenge_info.stage_info = .{
|
||||
.IEICDGGELNE = .{
|
||||
.cur_story_buffs = story_buff,
|
||||
},
|
||||
};
|
||||
challenge_mode = 1;
|
||||
} else if (req.challenge_id > 30000) {
|
||||
var boss_buff = protocol.ChallengeBossBuffList{
|
||||
.buff_list = ArrayList(u32).init(allocator),
|
||||
.challenge_boss_const = 1,
|
||||
};
|
||||
try boss_buff.buff_list.append(challengeConf.maze_buff_id);
|
||||
try boss_buff.buff_list.append(req.stage_info.?.IEICDGGELNE.?.boss_info.buff_two);
|
||||
try challenge_blessing_list.appendSlice(boss_buff.buff_list.items);
|
||||
cur_challenge_info.stage_info = .{
|
||||
.IEICDGGELNE = .{
|
||||
.cur_boss_buffs = boss_buff,
|
||||
},
|
||||
};
|
||||
challenge_mode = 2;
|
||||
}
|
||||
floorID = entrance.floor_id;
|
||||
worldID = maze.world_id;
|
||||
monsterID = challengeConf.npc_monster_id_list2.items[challengeConf.npc_monster_id_list2.items.len - 1];
|
||||
eventID = challengeConf.event_id_list2.items[challengeConf.event_id_list2.items.len - 1];
|
||||
groupID = id;
|
||||
maze_groupID = id;
|
||||
groupID = challengeConf.maze_group_id2;
|
||||
maze_groupID = challengeConf.maze_group_id2;
|
||||
planeID = maze.challenge_plane_id;
|
||||
entryID = challengeConf.map_entrance_id2;
|
||||
} else {
|
||||
std.debug.print("THIS CHALLENGE ID: {} DOES NOT SUPPORT 2ND NODE. PLEASE DO COMMAND /node TO SWITCH BACK TO FIRST NODE\n", .{req.challenge_id});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -258,13 +183,12 @@ pub fn onStartChallenge(session: *Session, packet: *const Packet, allocator: All
|
|||
}
|
||||
var scene_PF_manager = ChallengeSceneManager.init(allocator);
|
||||
const scene_info = try scene_PF_manager.createScene(
|
||||
avatarList,
|
||||
if (NodeCheck.challenge_node == 0) avatarList else avatarList2,
|
||||
planeID,
|
||||
floorID,
|
||||
entryID,
|
||||
worldID,
|
||||
monsterID,
|
||||
eventID,
|
||||
groupID,
|
||||
maze_groupID,
|
||||
);
|
||||
|
@ -272,9 +196,12 @@ pub fn onStartChallenge(session: *Session, packet: *const Packet, allocator: All
|
|||
rsp.scene = scene_info;
|
||||
rsp.cur_challenge = cur_challenge_info;
|
||||
|
||||
on_challenge = true;
|
||||
challenge_stageID = eventID;
|
||||
challenge_blessing = challenge_blessing_list.items[0..challenge_blessing_list.items.len];
|
||||
try session.send(CmdID.CmdStartChallengeScRsp, rsp);
|
||||
|
||||
std.debug.print("SEND PLANE ID {} FLOOR ID {} ENTRY ID {} GROUP ID {} MAZE GROUP ID {}\n", .{ planeID, floorID, entryID, groupID, maze_groupID });
|
||||
try session.send(CmdID.CmdEnterSceneByServerScNotify, protocol.EnterSceneByServerScNotify{
|
||||
.lineup = if (NodeCheck.challenge_node == 0) lineup1 else lineup2,
|
||||
.reason = protocol.EnterSceneReason.ENTER_SCENE_REASON_DIMENSION_MERGE,
|
||||
.scene = scene_info,
|
||||
});
|
||||
}
|
||||
|
|
|
@ -11,11 +11,7 @@ const BattleConfig = struct {
|
|||
monster_level: u32,
|
||||
blessings: ArrayList(u32),
|
||||
};
|
||||
const Stage = struct {
|
||||
level: u32,
|
||||
stage_id: u32,
|
||||
monster_list: ArrayList(ArrayList(u32)),
|
||||
};
|
||||
|
||||
const ExtraMazeBuff = struct {
|
||||
enable: bool,
|
||||
mazebuff: ArrayList(u32),
|
||||
|
@ -58,33 +54,17 @@ const Avatar = struct {
|
|||
relics: ArrayList(Relic),
|
||||
use_technique: bool,
|
||||
};
|
||||
const PlayerIcon = struct {
|
||||
id: u32,
|
||||
};
|
||||
const MainMission = struct {
|
||||
main_mission_id: u32,
|
||||
};
|
||||
const TutorialGuide = struct {
|
||||
guide_group_id: u32,
|
||||
};
|
||||
const Tutorial = struct {
|
||||
tutorial_id: u32,
|
||||
};
|
||||
const Activity = struct {
|
||||
activity_module_list: ArrayList(u32),
|
||||
panel_id: u32,
|
||||
};
|
||||
|
||||
const ChallengeConfig = struct {
|
||||
id: u32,
|
||||
npc_monster_id_list1: ArrayList(u32),
|
||||
npc_monster_id_list2: ArrayList(u32),
|
||||
event_id_list1: ArrayList(u32),
|
||||
event_id_list2: ArrayList(u32),
|
||||
map_entrance_id: u32,
|
||||
map_entrance_id2: u32,
|
||||
maze_group_id1: u32,
|
||||
maze_group_id2: ?u32, // to check if it missing MazeGroupID2 field
|
||||
maze_buff_id: u32,
|
||||
id: u32, //
|
||||
npc_monster_id_list1: ArrayList(u32), //
|
||||
npc_monster_id_list2: ArrayList(u32), //
|
||||
event_id_list1: ArrayList(u32), //
|
||||
event_id_list2: ArrayList(u32), //
|
||||
map_entrance_id: u32, //
|
||||
map_entrance_id2: u32, //
|
||||
maze_group_id1: u32, //
|
||||
maze_group_id2: u32, //
|
||||
};
|
||||
|
||||
const MapEntrance = struct {
|
||||
|
@ -105,24 +85,6 @@ pub const GameConfig = struct {
|
|||
battle_config: BattleConfig,
|
||||
avatar_config: ArrayList(Avatar),
|
||||
};
|
||||
pub const StageConfig = struct {
|
||||
stage_config: ArrayList(Stage),
|
||||
};
|
||||
pub const PlayerIconConfig = struct {
|
||||
player_icon_config: ArrayList(PlayerIcon),
|
||||
};
|
||||
pub const MainMissionConfig = struct {
|
||||
main_mission_config: ArrayList(MainMission),
|
||||
};
|
||||
pub const TutorialGuideConfig = struct {
|
||||
tutorial_guide_config: ArrayList(TutorialGuide),
|
||||
};
|
||||
pub const TutorialConfig = struct {
|
||||
tutorial_config: ArrayList(Tutorial),
|
||||
};
|
||||
pub const ActivityConfig = struct {
|
||||
activity_config: ArrayList(Activity),
|
||||
};
|
||||
pub const ChallengeMazeConfig = struct {
|
||||
challenge_config: ArrayList(ChallengeConfig),
|
||||
};
|
||||
|
@ -159,30 +121,6 @@ pub fn loadGameConfig(allocator: Allocator, filename: []const u8) ErrorSet!GameC
|
|||
return loadConfig(GameConfig, parseConfig, allocator, filename);
|
||||
}
|
||||
|
||||
pub fn loadStageConfig(allocator: Allocator, filename: []const u8) ErrorSet!StageConfig {
|
||||
return loadConfig(StageConfig, parseStageConfig, allocator, filename);
|
||||
}
|
||||
|
||||
pub fn loadPlayerIconConfig(allocator: Allocator, filename: []const u8) ErrorSet!PlayerIconConfig {
|
||||
return loadConfig(PlayerIconConfig, parsePlayerIconConfig, allocator, filename);
|
||||
}
|
||||
|
||||
pub fn loadMainMissionConfig(allocator: Allocator, filename: []const u8) ErrorSet!MainMissionConfig {
|
||||
return loadConfig(MainMissionConfig, parseMainMissionConfig, allocator, filename);
|
||||
}
|
||||
|
||||
pub fn loadTutorialGuideConfig(allocator: Allocator, filename: []const u8) ErrorSet!TutorialGuideConfig {
|
||||
return loadConfig(TutorialGuideConfig, parseTutorialGuideConfig, allocator, filename);
|
||||
}
|
||||
|
||||
pub fn loadTutorialConfig(allocator: Allocator, filename: []const u8) ErrorSet!TutorialConfig {
|
||||
return loadConfig(TutorialConfig, parseTutorialConfig, allocator, filename);
|
||||
}
|
||||
|
||||
pub fn loadActivityConfig(allocator: Allocator, filename: []const u8) ErrorSet!ActivityConfig {
|
||||
return loadConfig(ActivityConfig, parseActivityConfig, allocator, filename);
|
||||
}
|
||||
|
||||
pub fn loadChallengeConfig(allocator: Allocator, filename: []const u8) ErrorSet!ChallengeMazeConfig {
|
||||
return loadConfig(ChallengeMazeConfig, parseChallengeConfig, allocator, filename);
|
||||
}
|
||||
|
@ -206,6 +144,8 @@ pub fn parseConfig(root: std.json.Value, allocator: Allocator) ErrorSet!GameConf
|
|||
.blessings = ArrayList(u32).init(allocator),
|
||||
};
|
||||
|
||||
std.debug.print("loading config stageID = {}\n", .{battle_config.stage_id});
|
||||
|
||||
for (battle_config_json.object.get("monster_wave").?.array.items) |wave| {
|
||||
var wave_list = ArrayList(u32).init(allocator);
|
||||
for (wave.array.items) |monster| {
|
||||
|
@ -252,100 +192,11 @@ pub fn parseConfig(root: std.json.Value, allocator: Allocator) ErrorSet!GameConf
|
|||
.avatar_config = avatar_config,
|
||||
};
|
||||
}
|
||||
pub fn parseStageConfig(root: std.json.Value, allocator: Allocator) ErrorSet!StageConfig {
|
||||
var stage_config = ArrayList(Stage).init(allocator);
|
||||
for (root.object.get("stage_config").?.array.items) |stage_json| {
|
||||
var stage = Stage{
|
||||
.level = @intCast(stage_json.object.get("Level").?.integer),
|
||||
.stage_id = @intCast(stage_json.object.get("StageID").?.integer),
|
||||
.monster_list = ArrayList(ArrayList(u32)).init(allocator),
|
||||
};
|
||||
|
||||
for (stage_json.object.get("MonsterList").?.array.items) |wave| {
|
||||
var wave_list = ArrayList(u32).init(allocator);
|
||||
for (wave.array.items) |monster| {
|
||||
try wave_list.append(@intCast(monster.integer));
|
||||
}
|
||||
try stage.monster_list.append(wave_list);
|
||||
}
|
||||
|
||||
try stage_config.append(stage);
|
||||
}
|
||||
|
||||
return StageConfig{
|
||||
.stage_config = stage_config,
|
||||
};
|
||||
}
|
||||
fn parsePlayerIconConfig(root: std.json.Value, allocator: Allocator) ErrorSet!PlayerIconConfig {
|
||||
var player_icon_config = ArrayList(PlayerIcon).init(allocator);
|
||||
for (root.object.get("player_icon_config").?.array.items) |icon_json| {
|
||||
const icon = PlayerIcon{
|
||||
.id = @intCast(icon_json.object.get("ID").?.integer),
|
||||
};
|
||||
try player_icon_config.append(icon);
|
||||
}
|
||||
return PlayerIconConfig{
|
||||
.player_icon_config = player_icon_config,
|
||||
};
|
||||
}
|
||||
fn parseMainMissionConfig(root: std.json.Value, allocator: Allocator) ErrorSet!MainMissionConfig {
|
||||
var main_mission_config = ArrayList(MainMission).init(allocator);
|
||||
for (root.object.get("main_mission_config").?.array.items) |main_json| {
|
||||
const main_mission = MainMission{
|
||||
.main_mission_id = @intCast(main_json.object.get("MainMissionID").?.integer),
|
||||
};
|
||||
try main_mission_config.append(main_mission);
|
||||
}
|
||||
return MainMissionConfig{
|
||||
.main_mission_config = main_mission_config,
|
||||
};
|
||||
}
|
||||
fn parseTutorialGuideConfig(root: std.json.Value, allocator: Allocator) ErrorSet!TutorialGuideConfig {
|
||||
var tutorial_guide_config = ArrayList(TutorialGuide).init(allocator);
|
||||
for (root.object.get("tutorial_guide_config").?.array.items) |guide_json| {
|
||||
const tutorial_guide = TutorialGuide{
|
||||
.guide_group_id = @intCast(guide_json.object.get("GroupID").?.integer),
|
||||
};
|
||||
try tutorial_guide_config.append(tutorial_guide);
|
||||
}
|
||||
return TutorialGuideConfig{
|
||||
.tutorial_guide_config = tutorial_guide_config,
|
||||
};
|
||||
}
|
||||
fn parseTutorialConfig(root: std.json.Value, allocator: Allocator) ErrorSet!TutorialConfig {
|
||||
var tutorial_config = ArrayList(Tutorial).init(allocator);
|
||||
for (root.object.get("tutorial_config").?.array.items) |tutorial_json| {
|
||||
const tutorial = Tutorial{
|
||||
.tutorial_id = @intCast(tutorial_json.object.get("TutorialID").?.integer),
|
||||
};
|
||||
try tutorial_config.append(tutorial);
|
||||
}
|
||||
return TutorialConfig{
|
||||
.tutorial_config = tutorial_config,
|
||||
};
|
||||
}
|
||||
fn parseActivityConfig(root: std.json.Value, allocator: Allocator) ErrorSet!ActivityConfig {
|
||||
var activity_config = ArrayList(Activity).init(allocator);
|
||||
for (root.object.get("activity_config").?.array.items) |activity_json| {
|
||||
var activity = Activity{
|
||||
.panel_id = @intCast(activity_json.object.get("ActivityID").?.integer),
|
||||
.activity_module_list = ArrayList(u32).init(allocator),
|
||||
};
|
||||
for (activity_json.object.get("ActivityModuleIDList").?.array.items) |id| {
|
||||
try activity.activity_module_list.append(@intCast(id.integer));
|
||||
}
|
||||
try activity_config.append(activity);
|
||||
}
|
||||
return ActivityConfig{
|
||||
.activity_config = activity_config,
|
||||
};
|
||||
}
|
||||
fn parseChallengeConfig(root: std.json.Value, allocator: Allocator) ErrorSet!ChallengeMazeConfig {
|
||||
var challenge_config = ArrayList(ChallengeConfig).init(allocator);
|
||||
for (root.object.get("challenge_config").?.array.items) |challenge_json| {
|
||||
var challenge = ChallengeConfig{
|
||||
.id = @intCast(challenge_json.object.get("ID").?.integer),
|
||||
.maze_buff_id = @intCast(challenge_json.object.get("MazeBuffID").?.integer),
|
||||
.npc_monster_id_list1 = ArrayList(u32).init(allocator),
|
||||
.npc_monster_id_list2 = ArrayList(u32).init(allocator),
|
||||
.event_id_list1 = ArrayList(u32).init(allocator),
|
||||
|
@ -353,10 +204,7 @@ fn parseChallengeConfig(root: std.json.Value, allocator: Allocator) ErrorSet!Cha
|
|||
.map_entrance_id = @intCast(challenge_json.object.get("MapEntranceID").?.integer),
|
||||
.map_entrance_id2 = @intCast(challenge_json.object.get("MapEntranceID2").?.integer),
|
||||
.maze_group_id1 = @intCast(challenge_json.object.get("MazeGroupID1").?.integer),
|
||||
.maze_group_id2 = if (challenge_json.object.get("MazeGroupID2")) |val|
|
||||
@intCast(val.integer)
|
||||
else
|
||||
null,
|
||||
.maze_group_id2 = @intCast(challenge_json.object.get("MazeGroupID2").?.integer),
|
||||
};
|
||||
for (challenge_json.object.get("NpcMonsterIDList1").?.array.items) |npc1| {
|
||||
try challenge.npc_monster_id_list1.append(@intCast(npc1.integer));
|
||||
|
|
|
@ -2,7 +2,7 @@ const std = @import("std");
|
|||
const protocol = @import("protocol");
|
||||
const Session = @import("../Session.zig");
|
||||
const Packet = @import("../Packet.zig");
|
||||
const Config = @import("config.zig");
|
||||
const Data = @import("../data.zig");
|
||||
|
||||
const ArrayList = std.ArrayList;
|
||||
const Allocator = std.mem.Allocator;
|
||||
|
@ -10,28 +10,20 @@ const CmdID = protocol.CmdID;
|
|||
|
||||
pub fn onGetActivity(session: *Session, _: *const Packet, allocator: Allocator) !void {
|
||||
var rsp = protocol.GetActivityScheduleConfigScRsp.init(allocator);
|
||||
const activity_config = try Config.loadActivityConfig(allocator, "resources/ActivityConfig.json");
|
||||
|
||||
for (activity_config.activity_config.items) |activityConf| {
|
||||
if (activityConf.panel_id != 30002) {
|
||||
for (activityConf.activity_module_list.items) |id| {
|
||||
for (Data.EventList) |id| {
|
||||
var activ_list = protocol.ActivityScheduleData.init(allocator);
|
||||
activ_list.begin_time = 1664308800;
|
||||
activ_list.end_time = 4294967295;
|
||||
activ_list.activity_id = id;
|
||||
activ_list.panel_id = activityConf.panel_id;
|
||||
activ_list.begin_time = 0;
|
||||
activ_list.end_time = 1924992000;
|
||||
if (id >= 100000) {
|
||||
activ_list.activity_id = ((id % 100000) * 100) + 1;
|
||||
} else {
|
||||
activ_list.activity_id = id * 100 + 1;
|
||||
}
|
||||
activ_list.panel_id = id;
|
||||
try rsp.schedule_data.append(activ_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
rsp.retcode = 0;
|
||||
|
||||
try session.send(CmdID.CmdGetActivityScheduleConfigScRsp, rsp);
|
||||
}
|
||||
|
||||
pub fn onUpdateServerPrefsData(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
var rsp = protocol.UpdateServerPrefsDataScRsp.init(allocator);
|
||||
const req = try packet.getProto(protocol.UpdateServerPrefsDataCsReq, allocator);
|
||||
rsp.server_prefs_id = req.server_prefs.?.server_prefs_id;
|
||||
rsp.retcode = 0;
|
||||
try session.send(CmdID.CmdUpdateServerPrefsDataScRsp, rsp);
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ pub fn onReplaceLineup(session: *Session, packet: *const Packet, allocator: Allo
|
|||
var lineup = protocol.LineupInfo.init(allocator);
|
||||
lineup.mp = 5;
|
||||
lineup.max_mp = 5;
|
||||
lineup.name = .{ .Const = "CipherSR" };
|
||||
lineup.name = .{ .Const = "CastoriceSR" };
|
||||
for (req.lineup_slot_list.items) |ok| {
|
||||
const avatar = protocol.LineupAvatar{
|
||||
.id = ok.id,
|
||||
|
|
|
@ -12,10 +12,8 @@ pub fn onPlayerGetToken(session: *Session, _: *const Packet, allocator: Allocato
|
|||
|
||||
rsp.retcode = 0;
|
||||
rsp.uid = 1;
|
||||
|
||||
try session.send(CmdID.CmdPlayerGetTokenScRsp, rsp);
|
||||
}
|
||||
|
||||
pub fn onPlayerLogin(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
const req = try packet.getProto(protocol.PlayerLoginCsReq, allocator);
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ pub fn onGetMail(session: *Session, _: *const Packet, allocator: Allocator) !voi
|
|||
mail.Title = .{ .Const = "Readme" };
|
||||
mail.IsRead = false;
|
||||
mail.id = 1;
|
||||
mail.Content = .{ .Const = "CipherSR is a free and open-source sofware\nJoin our discord: https://discord.gg/reversedrooms\nUse https://yunlisr-relic-builder.vercel.app to setup relic :Đ\n" };
|
||||
mail.Content = .{ .Const = "CastoriceSR is a free and open-source sofware\nJoin our discord: https://discord.gg/reversedrooms\nUse https://yunlisr-relic-builder.vercel.app to setup relic :Đ\n" };
|
||||
mail.Time = 1723334400;
|
||||
mail.ExpireTime = 17186330890;
|
||||
mail.MailType = protocol.MailType.MAIL_TYPE_STAR;
|
||||
|
|
42
gameserver/src/services/misc copy.zig
Normal file
42
gameserver/src/services/misc copy.zig
Normal file
|
@ -0,0 +1,42 @@
|
|||
const std = @import("std");
|
||||
const protocol = @import("protocol");
|
||||
const Session = @import("../Session.zig");
|
||||
const Packet = @import("../Packet.zig");
|
||||
|
||||
const Allocator = std.mem.Allocator;
|
||||
const CmdID = protocol.CmdID;
|
||||
|
||||
const B64Decoder = std.base64.standard.Decoder;
|
||||
|
||||
pub fn onPlayerHeartBeat(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
const req = try packet.getProto(protocol.PlayerHeartBeatCsReq, allocator);
|
||||
const lua_code =
|
||||
\\local function setTextComponent(path, newText)
|
||||
\\ local obj = CS.UnityEngine.GameObject.Find(path)
|
||||
\\ if obj then
|
||||
\\ local textComponent = obj:GetComponentInChildren(typeof(CS.RPG.Client.LocalizedText))
|
||||
\\ if textComponent then
|
||||
\\ textComponent.text = newText
|
||||
\\ end
|
||||
\\ end
|
||||
\\end
|
||||
\\
|
||||
\\setTextComponent("UIRoot/AboveDialog/BetaHintDialog(Clone)", "<color=#ffc800>CipherSR is a free and open source software.</color>")
|
||||
\\setTextComponent("VersionText", "<color=#ffc800>Visit discord.gg/reversedrooms for more info!</color>")
|
||||
;
|
||||
const data = protocol.ClientDownloadData{
|
||||
.version = 51,
|
||||
.time = @intCast(std.time.milliTimestamp()),
|
||||
.data = .{ .Owned = .{
|
||||
.allocator = allocator,
|
||||
.str = try allocator.dupe(u8, lua_code),
|
||||
} },
|
||||
};
|
||||
const rsp = protocol.PlayerHeartBeatScRsp{
|
||||
.retcode = 0,
|
||||
.client_time_ms = req.client_time_ms,
|
||||
.server_time_ms = @intCast(std.time.milliTimestamp()),
|
||||
.download_data = data,
|
||||
};
|
||||
try session.send(CmdID.CmdPlayerHeartBeatScRsp, rsp);
|
||||
}
|
|
@ -3,7 +3,6 @@ const protocol = @import("protocol");
|
|||
const Session = @import("../Session.zig");
|
||||
const Packet = @import("../Packet.zig");
|
||||
const Data = @import("../data.zig");
|
||||
const Config = @import("config.zig");
|
||||
|
||||
const ArrayList = std.ArrayList;
|
||||
const Allocator = std.mem.Allocator;
|
||||
|
@ -12,37 +11,45 @@ const CmdID = protocol.CmdID;
|
|||
pub fn onGetMissionStatus(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
const req = try packet.getProto(protocol.GetMissionStatusCsReq, allocator);
|
||||
var rsp = protocol.GetMissionStatusScRsp.init(allocator);
|
||||
const main_mission_config = try Config.loadMainMissionConfig(allocator, "resources/MainMission.json");
|
||||
|
||||
rsp.retcode = 0;
|
||||
for (req.sub_mission_id_list.items) |id| {
|
||||
try rsp.SubMissionStatusList.append(protocol.Mission{ .id = id, .status = protocol.MissionStatus.MISSION_FINISH, .progress = 1 });
|
||||
}
|
||||
for (main_mission_config.main_mission_config.items) |main_missionConf| {
|
||||
try rsp.FinishedMainMissionIdList.append(main_missionConf.main_mission_id);
|
||||
try rsp.CurversionFinishedMainMissionIdList.append(main_missionConf.main_mission_id);
|
||||
}
|
||||
try rsp.FinishedMainMissionIdList.appendSlice(&Data.FinishedMainMissionIdList);
|
||||
try rsp.CurversionFinishedMainMissionIdList.appendSlice(&Data.FinishedMainMissionIdList);
|
||||
|
||||
try session.send(CmdID.CmdGetMissionStatusScRsp, rsp);
|
||||
}
|
||||
|
||||
pub fn onGetTutorialGuideStatus(session: *Session, _: *const Packet, allocator: Allocator) !void {
|
||||
var rsp = protocol.GetTutorialGuideScRsp.init(allocator);
|
||||
const tutorial_guide_config = try Config.loadTutorialGuideConfig(allocator, "resources/TutorialGuideGroup.json");
|
||||
|
||||
rsp.retcode = 0;
|
||||
for (tutorial_guide_config.tutorial_guide_config.items) |guideConf| {
|
||||
try rsp.TutorialGuideList.append(protocol.TutorialGuide{ .id = guideConf.guide_group_id, .Status = protocol.TutorialStatus.TUTORIAL_FINISH });
|
||||
for (Data.TutorialGuideIdList) |id| {
|
||||
try rsp.TutorialGuideList.append(protocol.TutorialGuide{ .id = id, .Status = protocol.TutorialStatus.TUTORIAL_FINISH });
|
||||
}
|
||||
|
||||
try session.send(CmdID.CmdGetTutorialGuideScRsp, rsp);
|
||||
}
|
||||
pub fn onFinishTutorialGuideStatus(session: *Session, _: *const Packet, allocator: Allocator) !void {
|
||||
var rsp = protocol.FinishTutorialGuideScRsp.init(allocator);
|
||||
|
||||
rsp.retcode = 0;
|
||||
for (Data.TutorialGuideIdList) |id| {
|
||||
rsp.TutorialGuide = .{ .id = id, .Status = protocol.TutorialStatus.TUTORIAL_FINISH };
|
||||
}
|
||||
|
||||
try session.send(CmdID.CmdFinishTutorialScRsp, rsp);
|
||||
}
|
||||
|
||||
pub fn onGetTutorialStatus(session: *Session, _: *const Packet, allocator: Allocator) !void {
|
||||
var rsp = protocol.GetTutorialScRsp.init(allocator);
|
||||
const tutorial_guide_config = try Config.loadTutorialConfig(allocator, "resources/TutorialData.json");
|
||||
rsp.retcode = 0;
|
||||
for (tutorial_guide_config.tutorial_config.items) |tutorialConf| {
|
||||
try rsp.TutorialList.append(protocol.Tutorial{ .id = tutorialConf.tutorial_id, .Status = protocol.TutorialStatus.TUTORIAL_FINISH });
|
||||
for (Data.FinishedTutorialIdList) |id| {
|
||||
try rsp.TutorialList.append(protocol.Tutorial{ .id = id, .Status = protocol.TutorialStatus.TUTORIAL_FINISH });
|
||||
}
|
||||
|
||||
try session.send(CmdID.CmdGetTutorialScRsp, rsp);
|
||||
}
|
||||
|
||||
|
@ -50,7 +57,9 @@ pub fn onGetTutorialStatus(session: *Session, _: *const Packet, allocator: Alloc
|
|||
pub fn onUnlockTutorialGuide(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
const req = try packet.getProto(protocol.UnlockTutorialGuideCsReq, allocator);
|
||||
var rsp = protocol.UnlockTutorialGuideScRsp.init(allocator);
|
||||
|
||||
rsp.retcode = 0;
|
||||
std.debug.print("UNLOCK TUTORIAL GUIDE ID: {}\n", .{req.group_id});
|
||||
|
||||
try session.send(CmdID.CmdUnlockTutorialGuideScRsp, rsp);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ const protocol = @import("protocol");
|
|||
const Session = @import("../Session.zig");
|
||||
const Packet = @import("../Packet.zig");
|
||||
const Data = @import("../data.zig");
|
||||
const Config = @import("config.zig");
|
||||
|
||||
const UidGenerator = @import("item.zig").UidGenerator;
|
||||
const ArrayList = std.ArrayList;
|
||||
|
@ -47,11 +46,10 @@ pub fn onGetPlayerBoardData(session: *Session, _: *const Packet, allocator: Allo
|
|||
var rsp = protocol.GetPlayerBoardDataScRsp.init(allocator);
|
||||
var generator = UidGenerator().init();
|
||||
var display_list = protocol.DisplayAvatarVec.init(allocator);
|
||||
const player_icon_config = try Config.loadPlayerIconConfig(allocator, "resources/AvatarPlayerIcon.json");
|
||||
display_list.is_display = true;
|
||||
rsp.retcode = 0;
|
||||
rsp.OLDMJONBJOM = 253000;
|
||||
rsp.signature = .{ .Const = "" };
|
||||
rsp.signature = .{ .Const = "Visit discord.gg/reversedrooms for more info!" };
|
||||
try rsp.assist_avatar_id_list.appendSlice(&SupportAvatar);
|
||||
for (ListAvatar) |id| {
|
||||
var A_list = protocol.DisplayAvatarData.init(allocator);
|
||||
|
@ -60,9 +58,9 @@ pub fn onGetPlayerBoardData(session: *Session, _: *const Packet, allocator: Allo
|
|||
try display_list.display_avatar_list.append(A_list);
|
||||
}
|
||||
rsp.display_avatar_vec = display_list;
|
||||
for (player_icon_config.player_icon_config.items) |head_id| {
|
||||
for (Data.OwnedHeadIcon) |head_id| {
|
||||
const head_icon = protocol.HeadIconData{
|
||||
.id = head_id.id,
|
||||
.id = head_id,
|
||||
};
|
||||
try rsp.unlocked_head_icon_list.append(head_icon);
|
||||
}
|
||||
|
@ -106,6 +104,5 @@ pub fn onSetHeadIcon(session: *Session, packet: *const Packet, allocator: Alloca
|
|||
var rsp = protocol.SetHeadIconScRsp.init(allocator);
|
||||
rsp.retcode = 0;
|
||||
rsp.current_head_icon_id = req.id;
|
||||
std.debug.print("SET HEAD ICON ID: {}\n", .{req.id});
|
||||
try session.send(CmdID.CmdSetHeadIconScRsp, rsp);
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@ pub fn onGetSceneMapInfo(session: *Session, packet: *const Packet, allocator: Al
|
|||
.{ .chest_type = protocol.ChestType.MAP_INFO_CHEST_TYPE_CHALLENGE },
|
||||
.{ .chest_type = protocol.ChestType.MAP_INFO_CHEST_TYPE_PUZZLE },
|
||||
};
|
||||
std.debug.print("SCENE MAP FLOOR ID REQ: {}\n", .{req.floor_id_list});
|
||||
for (req.floor_id_list.items) |floor_id| {
|
||||
var rsp = protocol.GetSceneMapInfoScRsp.init(allocator);
|
||||
rsp.retcode = 0;
|
||||
|
@ -128,7 +129,9 @@ pub fn onGetSceneMapInfo(session: *Session, packet: *const Packet, allocator: Al
|
|||
try session.send(CmdID.CmdGetSceneMapInfoScRsp, rsp);
|
||||
}
|
||||
}
|
||||
pub fn onGetUnlockTeleport(session: *Session, _: *const Packet, allocator: Allocator) !void {
|
||||
pub fn onGetUnlockTeleport(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
const req = try packet.getProto(protocol.GetUnlockTeleportCsReq, allocator);
|
||||
std.debug.print("UNLOCK TELEPORT ENTRY ID REQ: {}\n", .{req.entry_id_list});
|
||||
var rsp = protocol.GetUnlockTeleportScRsp.init(allocator);
|
||||
const res_config = try Res_config.anchorLoader(allocator, "resources/res.json");
|
||||
for (res_config.scene_config.items) |sceneCof| {
|
||||
|
@ -213,17 +216,17 @@ pub fn onDeactivateFarmElement(session: *Session, packet: *const Packet, allocat
|
|||
}
|
||||
pub fn onSetGroupCustomSaveData(session: *Session, packet: *const Packet, allocator: Allocator) !void {
|
||||
const req = try packet.getProto(protocol.SetGroupCustomSaveDataCsReq, allocator);
|
||||
//switch (req.AAMHHECOCOI) {
|
||||
// .Owned => |val| {
|
||||
// std.debug.print("CUSTOM SAVE DATA REQ: {s}\n", .{val.str});
|
||||
// },
|
||||
// .Const => |val| {
|
||||
// std.debug.print("CUSTOM SAVE DATA REQ: {s}\n", .{val});
|
||||
// },
|
||||
// .Empty => {
|
||||
// std.debug.print("CUSTOM SAVE DATA REQ: <empty string>\n", .{});
|
||||
// },
|
||||
//}
|
||||
switch (req.AAMHHECOCOI) {
|
||||
.Owned => |val| {
|
||||
std.debug.print("CUSTOM SAVE DATA REQ: {s}\n", .{val.str});
|
||||
},
|
||||
.Const => |val| {
|
||||
std.debug.print("CUSTOM SAVE DATA REQ: {s}\n", .{val});
|
||||
},
|
||||
.Empty => {
|
||||
std.debug.print("CUSTOM SAVE DATA REQ: <empty string>\n", .{});
|
||||
},
|
||||
}
|
||||
try session.send(CmdID.CmdSetGroupCustomSaveDataScRsp, protocol.SetGroupCustomSaveDataScRsp{
|
||||
.retcode = 0,
|
||||
.group_id = req.group_id,
|
||||
|
|
|
@ -14,13 +14,5 @@
|
|||
"ifix_version": "0",
|
||||
"lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_10025298_1dc728a6c8ee_1128f068b506d4",
|
||||
"lua_version": ""
|
||||
},
|
||||
"OSBETAWin3.2.53": {
|
||||
"asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_10104345_a5535dc0c779_a36b870100988f",
|
||||
"ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_10114007_b191beeb9546_2f88552ee48ab1",
|
||||
"ifix_url": "https://autopatchos.starrails.com/ifix/BetaLive/output_0_40d2ce0253_6d871f8bca6eb4",
|
||||
"ifix_version": "0",
|
||||
"lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_10104505_31a450a7e7a3_0793e9a5426e39",
|
||||
"lua_version": ""
|
||||
}
|
||||
}
|
|
@ -3,7 +3,9 @@
|
|||
.version = "0.0.0",
|
||||
.dependencies = .{
|
||||
.protobuf = .{
|
||||
.url = "https://github.com/Arwalk/zig-protobuf/archive/7c49ed66e029c9c7e6253b3d6d256118745550a4.tar.gz",
|
||||
//.url = "https://github.com/Arwalk/zig-protobuf/archive/7c49ed66e029c9c7e6253b3d6d256118745550a4.tar.gz",
|
||||
|
||||
.url = "git+https://github.com/Arwalk/zig-protobuf?ref=v2.0.0#42ccf142e5d6b7de886b766af7d287021c561dfd",
|
||||
.hash = "122063ee7ff32a3c1aefd91a46a9fc23df0571949c3a02e2f44d39afbad0b53018a3",
|
||||
},
|
||||
},
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,753 +0,0 @@
|
|||
{
|
||||
"player_icon_config": [
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/UI_Message_Contacts_Anonymous.png",
|
||||
"ID": 200001,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200101.png",
|
||||
"ID": 200101,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200102.png",
|
||||
"ID": 200102,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200103.png",
|
||||
"ID": 200103,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200104.png",
|
||||
"ID": 200104,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200105.png",
|
||||
"ID": 200105,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200106.png",
|
||||
"ID": 200106,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200107.png",
|
||||
"ID": 200107,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200108.png",
|
||||
"ID": 200108,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200109.png",
|
||||
"ID": 200109,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200110.png",
|
||||
"ID": 200110,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200111.png",
|
||||
"ID": 200111,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200112.png",
|
||||
"ID": 200112,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200113.png",
|
||||
"ID": 200113,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200114.png",
|
||||
"ID": 200114,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200115.png",
|
||||
"ID": 200115,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200116.png",
|
||||
"ID": 200116,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200117.png",
|
||||
"ID": 200117,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200118.png",
|
||||
"ID": 200118,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200119.png",
|
||||
"ID": 200119,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200120.png",
|
||||
"ID": 200120,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200121.png",
|
||||
"ID": 200121,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200122.png",
|
||||
"ID": 200122,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200123.png",
|
||||
"ID": 200123,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200124.png",
|
||||
"ID": 200124,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200125.png",
|
||||
"ID": 200125,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200126.png",
|
||||
"ID": 200126,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200127.png",
|
||||
"ID": 200127,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200128.png",
|
||||
"ID": 200128,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200129.png",
|
||||
"ID": 200129,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200130.png",
|
||||
"ID": 200130,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200131.png",
|
||||
"ID": 200131,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200132.png",
|
||||
"ID": 200132,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200133.png",
|
||||
"ID": 200133,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200134.png",
|
||||
"ID": 200134,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200135.png",
|
||||
"ID": 200135,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200136.png",
|
||||
"ID": 200136,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200137.png",
|
||||
"ID": 200137,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200138.png",
|
||||
"ID": 200138,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200139.png",
|
||||
"ID": 200139,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/200140.png",
|
||||
"ID": 200140,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202001.png",
|
||||
"ID": 202001,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202002.png",
|
||||
"ID": 202002,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202003.png",
|
||||
"ID": 202003,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202004.png",
|
||||
"ID": 202004,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202005.png",
|
||||
"ID": 202005,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202006.png",
|
||||
"ID": 202006,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202007.png",
|
||||
"ID": 202007,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202008.png",
|
||||
"ID": 202008,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202009.png",
|
||||
"ID": 202009,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202010.png",
|
||||
"ID": 202010,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202011.png",
|
||||
"ID": 202011,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202012.png",
|
||||
"ID": 202012,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202013.png",
|
||||
"ID": 202013,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202014.png",
|
||||
"ID": 202014,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202015.png",
|
||||
"ID": 202015,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202016.png",
|
||||
"ID": 202016,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202017.png",
|
||||
"ID": 202017,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202018.png",
|
||||
"ID": 202018,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202019.png",
|
||||
"ID": 202019,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202020.png",
|
||||
"ID": 202020,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202022.png",
|
||||
"ID": 202022,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202023.png",
|
||||
"ID": 202023,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202024.png",
|
||||
"ID": 202024,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202025.png",
|
||||
"ID": 202025,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202028.png",
|
||||
"ID": 202028,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/AvatarSkin/1100101.png",
|
||||
"ID": 202029,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202031.png",
|
||||
"ID": 202031,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Series/202033.png",
|
||||
"ID": 202033,
|
||||
"IsVisible": true
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1001.png",
|
||||
"ID": 201001,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1001
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1002.png",
|
||||
"ID": 201002,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1002
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1003.png",
|
||||
"ID": 201003,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1003
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1004.png",
|
||||
"ID": 201004,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1004
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1005.png",
|
||||
"ID": 201005,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1005
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1006.png",
|
||||
"ID": 201006,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1006
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1008.png",
|
||||
"ID": 201008,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1008
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1009.png",
|
||||
"ID": 201009,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1009
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1013.png",
|
||||
"ID": 201013,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1013
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1101.png",
|
||||
"ID": 201101,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1101
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1102.png",
|
||||
"ID": 201102,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1102
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1103.png",
|
||||
"ID": 201103,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1103
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1104.png",
|
||||
"ID": 201104,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1104
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1105.png",
|
||||
"ID": 201105,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1105
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1106.png",
|
||||
"ID": 201106,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1106
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1107.png",
|
||||
"ID": 201107,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1107
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1108.png",
|
||||
"ID": 201108,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1108
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1109.png",
|
||||
"ID": 201109,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1109
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1110.png",
|
||||
"ID": 201110,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1110
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1111.png",
|
||||
"ID": 201111,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1111
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1203.png",
|
||||
"ID": 201203,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1203
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1204.png",
|
||||
"ID": 201204,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1204
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1205.png",
|
||||
"ID": 201205,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 1205
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1206.png",
|
||||
"ID": 201206,
|
||||
"AvatarID": 1206
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/8001.png",
|
||||
"ID": 208001,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 8001
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/8002.png",
|
||||
"ID": 208002,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 8002
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/8003.png",
|
||||
"ID": 208003,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 8003
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/8004.png",
|
||||
"ID": 208004,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 8004
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/8005.png",
|
||||
"ID": 208005,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 8005
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/8006.png",
|
||||
"ID": 208006,
|
||||
"IsVisible": true,
|
||||
"AvatarID": 8006
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1201.png",
|
||||
"ID": 201201,
|
||||
"AvatarID": 1201
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1202.png",
|
||||
"ID": 201202,
|
||||
"AvatarID": 1202
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1207.png",
|
||||
"ID": 201207,
|
||||
"AvatarID": 1207
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1208.png",
|
||||
"ID": 201208,
|
||||
"AvatarID": 1208
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1209.png",
|
||||
"ID": 201209,
|
||||
"AvatarID": 1209
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1210.png",
|
||||
"ID": 201210,
|
||||
"AvatarID": 1210
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1211.png",
|
||||
"ID": 201211,
|
||||
"AvatarID": 1211
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1212.png",
|
||||
"ID": 201212,
|
||||
"AvatarID": 1212
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1213.png",
|
||||
"ID": 201213,
|
||||
"AvatarID": 1213
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1214.png",
|
||||
"ID": 201214,
|
||||
"AvatarID": 1214
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1215.png",
|
||||
"ID": 201215,
|
||||
"AvatarID": 1215
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1112.png",
|
||||
"ID": 201112,
|
||||
"AvatarID": 1112
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1301.png",
|
||||
"ID": 201301,
|
||||
"AvatarID": 1301
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1302.png",
|
||||
"ID": 201302,
|
||||
"AvatarID": 1302
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1217.png",
|
||||
"ID": 201217,
|
||||
"AvatarID": 1217
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1303.png",
|
||||
"ID": 201303,
|
||||
"AvatarID": 1303
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1304.png",
|
||||
"ID": 201304,
|
||||
"AvatarID": 1304
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1305.png",
|
||||
"ID": 201305,
|
||||
"AvatarID": 1305
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1307.png",
|
||||
"ID": 201307,
|
||||
"AvatarID": 1307
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1308.png",
|
||||
"ID": 201308,
|
||||
"AvatarID": 1308
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1309.png",
|
||||
"ID": 201309,
|
||||
"AvatarID": 1309
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1312.png",
|
||||
"ID": 201312,
|
||||
"AvatarID": 1312
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1314.png",
|
||||
"ID": 201314,
|
||||
"AvatarID": 1314
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1315.png",
|
||||
"ID": 201315,
|
||||
"AvatarID": 1315
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1310.png",
|
||||
"ID": 201310,
|
||||
"AvatarID": 1310
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1306.png",
|
||||
"ID": 201306,
|
||||
"AvatarID": 1306
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1218.png",
|
||||
"ID": 201218,
|
||||
"AvatarID": 1218
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1224.png",
|
||||
"ID": 201224,
|
||||
"AvatarID": 1224
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1313.png",
|
||||
"ID": 201313,
|
||||
"AvatarID": 1313
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1221.png",
|
||||
"ID": 201221,
|
||||
"AvatarID": 1221
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1220.png",
|
||||
"ID": 201220,
|
||||
"AvatarID": 1220
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1317.png",
|
||||
"ID": 201317,
|
||||
"AvatarID": 1317
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1223.png",
|
||||
"ID": 201223,
|
||||
"AvatarID": 1223
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1222.png",
|
||||
"ID": 201222,
|
||||
"AvatarID": 1222
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1225.png",
|
||||
"ID": 201225,
|
||||
"AvatarID": 1225
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1402.png",
|
||||
"ID": 201402,
|
||||
"AvatarID": 1402
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1401.png",
|
||||
"ID": 201401,
|
||||
"AvatarID": 1401
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1403.png",
|
||||
"ID": 201403,
|
||||
"AvatarID": 1403
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/8007.png",
|
||||
"ID": 208007,
|
||||
"AvatarID": 8007
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1404.png",
|
||||
"ID": 201404,
|
||||
"AvatarID": 1404
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/8008.png",
|
||||
"ID": 208008,
|
||||
"AvatarID": 8008
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1407.png",
|
||||
"ID": 201407,
|
||||
"AvatarID": 1407
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1405.png",
|
||||
"ID": 201405,
|
||||
"AvatarID": 1405
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1409.png",
|
||||
"ID": 201409,
|
||||
"AvatarID": 1409
|
||||
},
|
||||
{
|
||||
"ImagePath": "SpriteOutput/AvatarRoundIcon/Avatar/1406.png",
|
||||
"ID": 201406,
|
||||
"AvatarID": 1406
|
||||
}
|
||||
]
|
||||
}
|
|
@ -41,7 +41,8 @@
|
|||
"Hash": -585545512,
|
||||
"hash64": 7610618346915917303
|
||||
},
|
||||
"MazeGroupID1": 2
|
||||
"MazeGroupID1": 2,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -85,7 +86,8 @@
|
|||
"Hash": 2143337843,
|
||||
"hash64": 17271419042682156335
|
||||
},
|
||||
"MazeGroupID1": 2
|
||||
"MazeGroupID1": 2,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -129,7 +131,8 @@
|
|||
"Hash": 577253902,
|
||||
"hash64": 5150775987177055706
|
||||
},
|
||||
"MazeGroupID1": 2
|
||||
"MazeGroupID1": 2,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -173,7 +176,8 @@
|
|||
"Hash": -1345060399,
|
||||
"hash64": 7564248973955320288
|
||||
},
|
||||
"MazeGroupID1": 2
|
||||
"MazeGroupID1": 2,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -217,7 +221,8 @@
|
|||
"Hash": 1383822956,
|
||||
"hash64": 5242189358921793964
|
||||
},
|
||||
"MazeGroupID1": 2
|
||||
"MazeGroupID1": 2,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -262,7 +267,8 @@
|
|||
"Hash": -182260985,
|
||||
"hash64": 15269943691528539554
|
||||
},
|
||||
"MazeGroupID1": 4
|
||||
"MazeGroupID1": 4,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -308,7 +314,8 @@
|
|||
"Hash": -1748344926,
|
||||
"hash64": 8853592441228331582
|
||||
},
|
||||
"MazeGroupID1": 4
|
||||
"MazeGroupID1": 4,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -354,7 +361,8 @@
|
|||
"Hash": 1336768789,
|
||||
"hash64": 11639544939584837964
|
||||
},
|
||||
"MazeGroupID1": 4
|
||||
"MazeGroupID1": 4,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -399,7 +407,8 @@
|
|||
"Hash": -229315152,
|
||||
"hash64": 13127512314370178244
|
||||
},
|
||||
"MazeGroupID1": 4
|
||||
"MazeGroupID1": 4,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [],
|
||||
|
@ -445,7 +454,8 @@
|
|||
"Hash": 1577274280,
|
||||
"hash64": 3433035089102959956
|
||||
},
|
||||
"MazeGroupID1": 4
|
||||
"MazeGroupID1": 4,
|
||||
"MazeGroupID2": 0
|
||||
},
|
||||
{
|
||||
"NpcMonsterIDList2": [
|
||||
|
|
File diff suppressed because it is too large
Load diff
299010
resources/StageConfig.json
299010
resources/StageConfig.json
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -199568,9 +199568,9 @@
|
|||
"instId": 200001,
|
||||
"eventId": 99999011,
|
||||
"pos": {
|
||||
"x": 580,
|
||||
"y": 8551,
|
||||
"z": 54030
|
||||
"x": -714570,
|
||||
"y": 6270,
|
||||
"z": 67130
|
||||
},
|
||||
"rot": {
|
||||
"x": 0,
|
||||
|
|
Loading…
Reference in a new issue