--[[ 玩家数据变化BI统计 ]] local PlayerChangeStatistics = {} local private = {} local JSON = require("cjson") local EventSystem = require('Event/EventSystem') local ChangeKeyToIndex = { ["RoleInfo"] = "1"; ["BagAddUpdate"] = "2"; ["BagDel"] = "3"; ["MailDel"] = "4"; ["MailAddUpdate"] = "5"; ["UpdateHeroes"] = "6"; ["baseInfo"] = "7"; ["HeroLineUp"] = "8"; ["changedLevelInfos"] = "9"; ["fighterInfo"] = "10"; ["dailyRefresh"] = "11"; ["redDotAllInfo"] = "12"; ["SCInfos"] = "13"; ["energyInfo"] = "14"; ["heroBiography"] = "15"; ["ringTaskNum"] = "16"; ["climbTowerInfos"] = "17"; ["HCInfos"] = "18"; ["drawCardInfo"] = "19"; ["activityInfo"] = "20"; ["guideStep"] = "21"; ["worldbossInfo"] = "22"; ["soloFightInfo"] = "23"; ["teamPVEInfo"] = "24"; ["finishedGuide"] = "25"; ["storeInfos"] = "26"; ["rechargeInfo"] = "27"; ["serverDay"] = "28"; ["horseInfoList"] = "29"; ["resourceLevelInfo"] = "30"; ["guildInfo"] = "31"; ["officialInfo"] = "32"; ["functionRewardInfo"] = "33"; ["operationActivityInfo"] = "34"; ["rebelStrikeInfo"] = "35"; ["treasureInfo"] = "36"; ["personalGPowerInfo"] = "37"; ["personalBossInfo"] = "38"; ["onlineRewardInfo"] = "39"; -- 在线奖励领取情况 ["resonanceInfo"] = "40"; -- 共鸣系统信息 ["playerDungeonInfo"] = "41"; -- 多人难度副本 ["guildPartyInfo"]= "42"; -- 势力聚会个人信息 ["personalAuctionHouse"] = "43"; -- 个人拍卖行信息 ["achievementSystemInfo"] = "44"; -- 成就系统 ["titleInfos"] = "45"; -- 玩家称号信息。 ["allHeroAttrInfos"]= "46"; -- 武将属性全量更新 ["nobilityStage"] = "47"; -- 爵位第一阶段是否完成 ["dailyGift"] = "48"; -- 每日礼包 ["levelGiftInfo"] = "49"; -- 等级礼包信息 ["monthCardInfos"] = "50"; -- 月卡信息 ["fundInfos"] = "51"; -- 活动基金列表 ["guildTargetInfo"]= "52"; -- 势力共建面板信息 ["assistanceData"]= "53"; -- 助战信息 ["firstChargeGiftInfo"] = "54"; -- 首充礼包信息 ["pictorialBookInfo"]= "55"; -- 图鉴信息 ["digTreasureRewardInfo"] = "56"; -- 挖宝奖励此时 ["goldHeroSecretInfos"] = "57"; -- 金将秘闻活动列表 ["goldHeroOpenStory"] = "58"; -- 金将秘闻活动-秘闻激活 ["goldHeroEnergy"] = "59"; -- 金将活动-专属体力 ["activityStores"] = "60"; -- 活动商铺 ["multilevelChargeGiftInfo"] = "61"; -- 累充礼包信息 ["privilegeInfo"] = "62"; -- 官职特权信息 ["capitalBuffInfos"] = "63"; -- 主城BUFF列表 ["redEnvelopChange"] = "64"; -- 红包领取次数。 ["resourceInfos"] = "65"; -- 资源找回信息。 ["appearanceInfos"] = "66"; -- 时装信息 ["rivalBriefInfo"] = "67"; -- 恩怨薄红点信息。 ["addInfoReminds"] = "68"; -- 新增系统提示 ["delInfoRemindIds"] = "69"; -- 删除系统提示 ["frameInfos"] = "70"; -- 玩家头像框信息 ["portraitInfos"] = "71"; -- 玩家头像信息 ["warZoneId"] = "72"; -- 玩家所在区服所属战区id ["goldenInfo"] = "73"; -- 隐藏金将的信息 ["tempfield74"] = "74", ["dailyHonorTaskInfos"] = "75"; -- 战令挑战每日任务列表 ["cycleHonorTaskInfos"] = "76"; -- 战令挑战周期任务列表 ["reservedGiftState"] = "77"; -- 预约豪礼的状态 ["payRewardInfo"] = "78"; -- 充值返利信息 ["dailySigninInfo"] = "79"; -- 日常签到信息 ["RankThumbsUpInfo"] = "80"; -- 排行榜点赞信息。 ["rechargeReturnInfo"] = "81"; -- 充值完成时返回信息 ["itemResInfos"] = "82"; -- 道具来源列表 ["lightEffectInfos"] = "83"; -- (新)光效列表,基于武将 ["GuildWarCrossOpen"] = "84"; -- 势力战跨服 ["drawStrawsInfos"] = "85"; -- 抽签信息 ["foundryActivateInfo"] = "86"; -- 锻铸激活信息 ["fairPlayInfoChange"] = "87"; -- 公平竞技积分信息 ["versionUpdateInfo"]= "88"; -- 版本大更新 ["warZoneBossInfo"] = "89"; -- 战区BOSS信息 ["assHeroChange"] = "90"; -- 非出站非助战武将对应的三军的基础战力变化 ["GoldHeroAnecdotes"] = "91"; -- 金将轶事关卡状态 ["demonGodInfo"] = "92"; -- 魔神降临信息 ["escortBase"] = "93"; -- 势力押镖信息 ["cart"] = "94"; -- 势力押镖个人镖车信息 ["escortRivals"] = "95"; -- 押镖仇人信息 ["fairPlaySoloRewardInfo"] = "96"; -- 1v1公平竞技奖励信息 ["fourNationTowerInfo"] = "97"; -- 四国爬塔信息 ["fightThroneInfo"] = "98"; --大乱斗 ["superGoldHeroEnding"] = "99"; -- 彩金将 体验关 结局触发信息 ["deleteStoreIds"] = "100"; -- 删除的商店信息 ["weekendRewardInfo"] = "101"; -- 周末祈福信息 ["pushInterFaceInfos"] = "102"; -- 打脸图推送列表 ["horseAppearance"] = "103"; -- 坐骑皮肤信息 ["countryPlayerChange"] = "104"; -- 国家玩家 ["commonLineUpInfo"] = "105"; -- 通用布阵数据 ["watchBattleChatInfo"] = "106"; -- 直播数据 ["worshipInfo"] = "107"; -- 膜拜奖励 ["wantedTaskInfo"] = "108"; -- 悬赏任务信息。 ["japanUpdateVersionInfo"] = "109"; -- 日本版本更新信息 ["tempfield110"] = "110", ["tempfield111"] = "111", ["tempfield112"] = "112", ["tempfield113"] = "113", ["tempfield114"] = "114", ["dragonEnterInfo"] = "115"; -- 龙脉进入次数 默认是0 ["fairPlayMyRecordDelId"] = "116"; -- 战斗记录删除id ["recycleFragmentInfo"] = "117"; --纳灵系统 ["stratagemPictorialInfo"]= "118"; -- 计略图鉴信息 ["honorSignetInfo"] = "119"; -- 荣誉印记信息 ["drawHorseSoulInfo"] = "120"; -- 聚魂全量信息 ["fairTournamentTaskInfos"] = "121"; -- 天下会武任务信息 ["heroFundInfo"] = "122"; -- 名将之路信息 ["signUpInfo"] = "123"; -- 晚间活动报名信息 ["gvgHighYieldAndStageInfo"] = "124"; -- gvg阶段和丰产信息 ["redPoints"] = "125"; -- 红点列表 ["GVGRedPointInfo"] = "126"; -- gvg红点信息 ["questionnairAwards"] = "127"; -- 已领取过的问卷调查的奖励列表 ["stormInfo"] = "128"; -- 暴风信息 ["battleRewardInfo"] = "129"; -- 战斗奖励信息 ["guildMineInfo"] = "130"; -- 势力挖矿信息 ["worshipInfo3V3"] = "131"; -- 膜拜奖励 ["godBeastDevelopInfo"] = "132"; -- 神兽养成信息 ["syncFourCountryInfo"] = "133"; -- 四国乱斗信息 ["tempfield134"] = "134", ["tempfield135"] = "135", ["tempfield136"] = "136", ["tempfield137"] = "137", ["tempfield138"] = "138", ["tempfield139"] = "139", ["tempfield140"] = "140", ["tempfield141"] = "141", ["threeTeamsPKInfo"] = "142"; -- 三队演武 ["lightEffectPictorial"] = "143", -- 光效图鉴 } local biMsg = {} function PlayerChangeStatistics.OnReceiveChangeMsg(msgId, playerChange) local index = 1 for fieldName, changeFieldIndex in pairs(ChangeKeyToIndex) do if playerChange[fieldName] and type(playerChange[fieldName]) ~= "table" or IsProtoDataNotNil(playerChange[fieldName]) then biMsg[index] = changeFieldIndex index = index+1 end end local levelId = BattleDataGetter.GetLevelID() local levelName = BattleDataGetter.GetLevelInfoData().ScenePath EventSystem.Dispatch(EventID.BI_ClientEvent, BIManager.EventName.PlayerFieldChange, "msgId", msgId, "levelId", levelId, "levelName", levelName, "changefield", table.concat(biMsg, ",")) table.clearArray(biMsg) end --以下是从数数平台导出的数据分析 --将数数平台导出的数据重新命名PlayerChangeFieldData,并且打开去掉最后一行日期,放到trunk下,执行Tools/Analyse/分析玩家变化的属性信息 local fieldIndexValue = {} local exportData function PlayerChangeStatistics.StartAnalysis() local fieldIndexToName = {} for fieldName, changeFieldIndex in pairs(ChangeKeyToIndex) do fieldIndexToName[tonumber(changeFieldIndex)] = fieldName end exportData = "时间,协议id,场景id,场景名字," local index = 1 for __, fieldName in ipairs(fieldIndexToName) do exportData = exportData .. fieldName .."," fieldIndexValue[index] = 0 index = index+1 end exportData = exportData.."\n" end function PlayerChangeStatistics.AnalysisOneData(eventTime, eventJsonData, eventCount) local eventData = JSON.decode(eventJsonData) local fieldData = string.split(eventData.changefield, ",") exportData = exportData..eventTime..","..eventData.msgId..","..(eventData.levelId or 0)..","..(eventData.levelName or "none").."," for __, fieldIndexStr in ipairs(fieldData) do if not string.isNilOrEmpty(fieldIndexStr) then fieldIndexValue[tonumber(fieldIndexStr)] = eventCount end end exportData = exportData..table.concat(fieldIndexValue, ",").."\n" for __, fieldIndexStr in ipairs(fieldData) do if not string.isNilOrEmpty(fieldIndexStr) then fieldIndexValue[tonumber(fieldIndexStr)] = 0 end end end function PlayerChangeStatistics.EndAnalysis() LuaExt.FileWriteText("PlayerChangeFieldData_After.csv", exportData) end return PlayerChangeStatistics