From 22b191d1a96e30596fa251437e2af6080d56acac Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期三, 13 二月 2019 15:46:15 +0800
Subject: [PATCH] 3335 配置表读取重构。
---
Core/GameEngine/Model/ConfigManager.cs | 201 ----------------------------------------
Core/GameEngine/SnxxzGame.cs | 2
System/WorldMap/LocalMapEventPointInstroduce.cs | 2
Fight/Actor/Skill/AttackHandler.cs | 4
Fight/Actor/Status/Status_Polymorph.cs | 4
Fight/GameActor/GA_NpcFightSgzcZZ.cs | 4
System/WorldMap/LocalMapEventPointToggle.cs | 2
System/Mount/MountStoneTipsWin.cs | 2
Fight/PreFightMission.cs | 2
Core/ResModule/MaterialLoader.cs | 2
Fight/GameActor/GA_NpcFightZZPlayer.cs | 8
Fight/GameActor/GA_NpcFightNorm.cs | 2
Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs | 2
Fight/GameActor/GA_Pet.cs | 6
14 files changed, 21 insertions(+), 222 deletions(-)
diff --git a/Core/GameEngine/Model/ConfigManager.cs b/Core/GameEngine/Model/ConfigManager.cs
index a25fc6a..35bc3a0 100644
--- a/Core/GameEngine/Model/ConfigManager.cs
+++ b/Core/GameEngine/Model/ConfigManager.cs
@@ -30,211 +30,16 @@
public void LoadPriorBundleConfig()
{
- StartSyncTask<PriorBundleConfig>();
}
public void PreLoadConfigs()
{
- StartSyncTask<ApkUpdateUrlConfig>();
- StartSyncTask<PriorBundleConfig>();
- StartSyncTask<PriorLanguageConfig>();
- StartSyncTask<ContactConfig>();
- StartSyncTask<HelpInfoConfig>();
}
List<ConfigTask> configTasks = new List<ConfigTask>();
public IEnumerator Co_LoadConfigs()
{
- StartSyncTask<LoginSeverListConfig>();
- StartSyncTask<IconConfig>();
- AddAsyncTask<ItemConfig>();
- AddAsyncTask<SkillConfig>();
- AddAsyncTask<DirtyNameConfig>();
- AddAsyncTask<TASKINFOConfig>();
- AddAsyncTask<mapnpcConfig>();
- AddAsyncTask<LanguageConfig>();
-
- AddAsyncTask<DienstgradConfig>();
- AddAsyncTask<PlayerPropertyConfig>();
- AddAsyncTask<RealmConfig>();
- AddAsyncTask<ItemCompoundConfig>();
- AddAsyncTask<FuncConfigConfig>();
- AddAsyncTask<GodWeaponConfig>();
- AddAsyncTask<FuncOpenLVConfig>();
- AddAsyncTask<RichTextMsgReplaceConfig>();
- AddAsyncTask<SysInfoConfig>();
- AddAsyncTask<ItemPlusConfig>();
- AddAsyncTask<ItemPlusMaxConfig>();
- AddAsyncTask<PyTaskConfig>();
- AddAsyncTask<MailConfig>();
- AddAsyncTask<RuneTowerConfig>();
- AddAsyncTask<EquipWashConfig>();
- AddAsyncTask<EquipWashSpecConfig>();
- AddAsyncTask<AttrFruitConfig>();
- AddAsyncTask<RuneConfig>();
- AddAsyncTask<MapConfig>();
- AddAsyncTask<PlayerLVConfig>();
- AddAsyncTask<PetEatEquipConfig>();
- AddAsyncTask<PetInfoConfig>();
- AddAsyncTask<RandomNameConfig>();
- AddAsyncTask<PetClassCostConfig>();
- AddAsyncTask<NPCConfig>();
- AddAsyncTask<KickOutReasonConfig>();//妫�鏌ユ柇绾垮師鍥�
- AddAsyncTask<HorseConfig>();
- AddAsyncTask<HorseUpConfig>();
- AddAsyncTask<RankListConfig>();
- AddAsyncTask<OccupationNameConfig>();
- AddAsyncTask<EquipSuitAttrConfig>(); //瑁呭濂楄灞炴��
- AddAsyncTask<EquipSuitCompoundConfig>(); //瑁呭濂楄閿婚�犻渶瑕佹潗鏂�
- AddAsyncTask<DirtyWordConfig>();
- AddAsyncTask<EffectConfig>();
- AddAsyncTask<WingRefineAttrConfig>();
- AddAsyncTask<FamilyTechConfig>();
- AddAsyncTask<FamilyConfig>();
- AddAsyncTask<CreateRoleConfig>();
- AddAsyncTask<DamageNumConfig>();
- AddAsyncTask<DungeonConfig>();
- AddAsyncTask<JobSetupConfig>();
- AddAsyncTask<ModelResConfig>();
- AddAsyncTask<DailyQuestConfig>();
- AddAsyncTask<FaceConfig>();
- AddAsyncTask<DailyLivenessRewardConfig>();
- AddAsyncTask<JobNameConfig>();
- AddAsyncTask<MarketConfig>();
- AddAsyncTask<maptransportConfig>();
- AddAsyncTask<ItemPlusSumAttrConfig>();
- AddAsyncTask<RoleEquipStarsConfig>();
- AddAsyncTask<MonsterNameColorConfig>();
- AddAsyncTask<TreasureConfig>();
- AddAsyncTask<SuccessConfig>();
- AddAsyncTask<TreasureSkillConfig>();
- AddAsyncTask<mapAreaConfig>();
- AddAsyncTask<EquipDeComposeConfig>();
- AddAsyncTask<WindowSearchConfig>();
- AddAsyncTask<SignInConfig>();
- AddAsyncTask<ContinueSignInConfig>();
- AddAsyncTask<DungeonHintConfig>();
- AddAsyncTask<MapEventPointConfig>();
- AddAsyncTask<VIPAwardConfig>();
- AddAsyncTask<VipPrivilegeConfig>();
- AddAsyncTask<DailyQuestOpenTimeConfig>();
- AddAsyncTask<DungeonOpenTimeConfig>();
- AddAsyncTask<AppointItemConfig>();
- AddAsyncTask<EquipGSParamConfig>();
- AddAsyncTask<StoreConfig>();
- AddAsyncTask<WorldBossConfig>();
- AddAsyncTask<BossHomeConfig>();
- AddAsyncTask<PersonalBossConfig>();
- AddAsyncTask<ElderGodAreaConfig>();
- AddAsyncTask<RuneTowerFloorConfig>();
- AddAsyncTask<TreasureRefineConfig>();
- AddAsyncTask<AlchemyConfig>();
- AddAsyncTask<AlchemySpecConfig>();
- AddAsyncTask<QuestionBankConfig>();
- AddAsyncTask<WingRefineExpConfig>();
- AddAsyncTask<UnionLivenConfig>();
- AddAsyncTask<FunctionForecastConfig>();
- AddAsyncTask<GmCmdConfig>();
- AddAsyncTask<GetItemWaysConfig>();
- AddAsyncTask<GuideConfig>();
- AddAsyncTask<ViewRoleFuncConfig>();
- AddAsyncTask<RoleStrongerConfig>();
- AddAsyncTask<RoleResourceConfig>();
- AddAsyncTask<AudioConfig>();
- AddAsyncTask<AreaCameraConfig>();
- AddAsyncTask<NPCDialogueConfig>();
- AddAsyncTask<TaskListConfig>();
- AddAsyncTask<DemonJarConfig>();
- AddAsyncTask<StoryMissionsConfig>();
- AddAsyncTask<DungeonStateTimeConfig>();
- AddAsyncTask<DungeonInspireConfig>();
- AddAsyncTask<RuneComposeConfig>();
- AddAsyncTask<BossInfoConfig>();
- AddAsyncTask<DialogConfig>();
- AddAsyncTask<SceneShadowConfig>();
- AddAsyncTask<ResourcesBackConfig>();
- AddAsyncTask<WeatherConfig>();
- AddAsyncTask<RuleConfig>();
- AddAsyncTask<MonsterRefreshPointConfig>();
- AddAsyncTask<DogzConfig>();
- AddAsyncTask<ChestsConfig>();
- AddAsyncTask<ChestsAwardConfig>();
- AddAsyncTask<NPCDropItemConfig>();
- AddAsyncTask<TeamTargetConfig>();
- AddAsyncTask<OSCBillRankAwardConfig>();
- AddAsyncTask<OSCBillTagAwardConfig>();
- AddAsyncTask<InSevenDaysConfig>();
- AddAsyncTask<OnlineAwardConfig>();
- AddAsyncTask<LVAawrdConfig>();
- AddAsyncTask<DemonRecommondPropertyConfig>();
- AddAsyncTask<InvestConfig>();
- AddAsyncTask<SuitEffectConfig>();
- AddAsyncTask<RefineStoveConfig>();
- AddAsyncTask<VIPKillNPCConfig>();
- AddAsyncTask<LoadingTipConfig>();
- AddAsyncTask<XMZZAchievementConfig>();
- AddAsyncTask<XBGetItemConfig>();
- AddAsyncTask<bossSkillTipsConfig>();
- AddAsyncTask<OSRedAchieveConfig>();
- AddAsyncTask<RedPackConfig>();
- AddAsyncTask<TreasureFindHostConfig>();
- AddAsyncTask<TreasureUpConfig>();
- AddAsyncTask<TreasurePrivilegeConfig>();
- AddAsyncTask<CTGConfig>();
- AddAsyncTask<MapResourcesConfig>();
- AddAsyncTask<FightPowerParamConfig>();
- AddAsyncTask<LoadingFunctionConfig>();
- AddAsyncTask<LoginAdConfig>();
- AddAsyncTask<FreeGoodsConfig>();
- AddAsyncTask<BossRebornConfig>();
- AddAsyncTask<UniquenessArriveConfig>();
- AddAsyncTask<AllPeoplePartyConfig>();
- AddAsyncTask<AllPeoplePartyAwardConfig>();
- AddAsyncTask<NewUniquenessArriveConfig>();
- AddAsyncTask<NewAllPeoplePartyConfig>();
- AddAsyncTask<NewAllPeoplePartyAwardConfig>();
- AddAsyncTask<OrderInfoConfig>();
- AddAsyncTask<TrialExchangeConfig>();
- AddAsyncTask<DogzDungeonConfig>();
- AddAsyncTask<TrialRewardsConfig>();
- AddAsyncTask<DogzEquipPlusConfig>();
- AddAsyncTask<FairyGrabBossConfig>();
- AddAsyncTask<DungeonSpecialStateTimeConfig>();
- AddAsyncTask<DailyQuestSpecialOpenTimeConfig>();
- AddAsyncTask<WHYJRewardConfig>();
- AddAsyncTask<TalentConfig>();
- AddAsyncTask<ChatBubbleBoxConfig>();
- AddAsyncTask<GuardConfig>();
- AddAsyncTask<MarketQueryConfig>();
- AddAsyncTask<TreasureDungeonConfig>();
- AddAsyncTask<LoadingBackGroundConfig>();
- AddAsyncTask<IceLodeStarAwardConfig>();
- AddAsyncTask<TaskPowerConfig>();
- AddAsyncTask<GodWeaponEffectConfig>();
- AddAsyncTask<DungeonHelpBattleConfig>();
- AddAsyncTask<FuncSwitchConfig>();
- AddAsyncTask<AncientRobotNameConfig>();
- AddAsyncTask<CrossServerArenaConfig>();
- AddAsyncTask<GatherSoulConfig>();
- AddAsyncTask<GatherSoulPropertyConfig>();
- AddAsyncTask<GatherSoulComposeConfig>();
- AddAsyncTask<KingTreasureConfig>();
- AddAsyncTask<KingTreasureItemConfig>();
- AddAsyncTask<CrossServerBossConfig>();
- AddAsyncTask<WeekPartyConfig>();
- AddAsyncTask<FashionDressCabinetConfig>();
- AddAsyncTask<FashionDressConfig>();
- AddAsyncTask<WeekPartyPointConfig>();
- AddAsyncTask<SceneReplaceConfig>();
- AddAsyncTask<JadeDynastyTowerConfig>();
- AddAsyncTask<JadeDynastyBossConfig>();
- AddAsyncTask<JadeDynastySuitAttrConfig>();
- AddAsyncTask<JadeDynastyStoneAttrConfig>();
- AddAsyncTask<SkillFrameAnimationConfig>();
- AddAsyncTask<FestivalRedpackTaskConfig>();
- AddAsyncTask<HolidayHomingConfig>();
- AddAsyncTask<HolidayHomingPointConfig>();
while (!AllCompleted())
{
@@ -286,12 +91,6 @@
public void SyncLoadConfigs()
{
- StartSyncTask<NPCConfig>();
- StartSyncTask<ModelResConfig>();
- StartSyncTask<IconConfig>();
- StartSyncTask<SysInfoConfig>();
- StartSyncTask<LanguageConfig>();
- StartSyncTask<RealmConfig>();
}
public bool AllCompleted()
diff --git a/Core/GameEngine/SnxxzGame.cs b/Core/GameEngine/SnxxzGame.cs
index 4dfb757..f0cfae6 100644
--- a/Core/GameEngine/SnxxzGame.cs
+++ b/Core/GameEngine/SnxxzGame.cs
@@ -222,7 +222,7 @@
private IEnumerator Co_MovingCamera(int _type)
{
- var _areaCamera = TableConfig.AreaCameraConfig.Get(_type);
+ var _areaCamera = AreaCameraConfig.Get(_type);
if (_areaCamera == null
|| GA_Hero.s_MapSwitching)
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs b/Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs
index fe9577d..dc807c3 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs
@@ -16,7 +16,7 @@
base.Done(vNetPack);
var package = vNetPack as HC104_tagMCPrepareEnterCrossServer;
- var config = TableConfig.MapResourcesConfig.GetConfig((int)package.DataMapID, 0);
+ var config = MapResourcesConfig.GetConfig((int)package.DataMapID, 0);
LoadingWin.targetMapResId = config.ID;
WindowCenter.Instance.Open<LoadingWin>();
}
diff --git a/Core/ResModule/MaterialLoader.cs b/Core/ResModule/MaterialLoader.cs
index 39c8a5c..f2fd2ab 100644
--- a/Core/ResModule/MaterialLoader.cs
+++ b/Core/ResModule/MaterialLoader.cs
@@ -7,7 +7,7 @@
public static Material LoadClothesMaterial(int id, bool isUI, bool isSuit)
{
- var _modelResConfig = TableConfig.ModelResConfig.Get(id);
+ var _modelResConfig = ModelResConfig.Get(id);
if (_modelResConfig == null)
{
return null;
diff --git a/Fight/Actor/Skill/AttackHandler.cs b/Fight/Actor/Skill/AttackHandler.cs
index e3c8427..be19fee 100644
--- a/Fight/Actor/Skill/AttackHandler.cs
+++ b/Fight/Actor/Skill/AttackHandler.cs
@@ -794,10 +794,10 @@
if (skillInfo.effectValue.TryGetValue(4035, out _effectValue))
{
bool _isValid = true;
- var _mapConfig = TableConfig.MapConfig.Get(PlayerDatas.Instance.baseData.MapID);
+ var _mapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID);
if (_mapConfig.MapFBType != 0)
{
- var _funcConfig = TableConfig.FuncConfigConfig.Get("SkillXPAddByFB");
+ var _funcConfig = FuncConfigConfig.Get("SkillXPAddByFB");
if (!_funcConfig.Numerical1.Contains(PlayerDatas.Instance.baseData.MapID.ToString()))
{
_isValid = false;
diff --git a/Fight/Actor/Status/Status_Polymorph.cs b/Fight/Actor/Status/Status_Polymorph.cs
index e4ae2e4..535945b 100644
--- a/Fight/Actor/Status/Status_Polymorph.cs
+++ b/Fight/Actor/Status/Status_Polymorph.cs
@@ -8,7 +8,7 @@
if (_actor != null)
{
- var _config = TableConfig.SkillConfig.Get(data.SkillID);
+ var _config = SkillConfig.Get(data.SkillID);
int _npcID = 0;
@@ -49,7 +49,7 @@
if (_actor != null)
{
- var _config = TableConfig.SkillConfig.Get(h0605.SkillID);
+ var _config = SkillConfig.Get(h0605.SkillID);
int _npcID = 0;
diff --git a/Fight/GameActor/GA_NpcFightNorm.cs b/Fight/GameActor/GA_NpcFightNorm.cs
index c30ab28..bf76f99 100644
--- a/Fight/GameActor/GA_NpcFightNorm.cs
+++ b/Fight/GameActor/GA_NpcFightNorm.cs
@@ -13,7 +13,7 @@
protected override void OnInit(GameNetPackBasic package)
{
var _h0406 = package as H0406_tagNPCAppear;
- NpcConfig = TableConfig.NPCConfig.Get((int)_h0406.NPCID);
+ NpcConfig = NPCConfig.Get((int)_h0406.NPCID);
if (NpcConfig == null)
{
diff --git a/Fight/GameActor/GA_NpcFightSgzcZZ.cs b/Fight/GameActor/GA_NpcFightSgzcZZ.cs
index 423c5a4..a2c5251 100644
--- a/Fight/GameActor/GA_NpcFightSgzcZZ.cs
+++ b/Fight/GameActor/GA_NpcFightSgzcZZ.cs
@@ -68,7 +68,7 @@
{
var _job = (int)objIdToJson[_key];
// Debug.Log("鏈哄櫒浜鸿亴涓氫负: " + _job);
- JobSetup = TableConfig.JobSetupConfig.Get(_job);
+ JobSetup = JobSetupConfig.Get(_job);
ActorInfo.Job = (byte)_job;
}
else
@@ -100,7 +100,7 @@
if (JobSetup == null)
{
- JobSetup = TableConfig.JobSetupConfig.Get(1);
+ JobSetup = JobSetupConfig.Get(1);
ActorInfo.Job = 1;
}
diff --git a/Fight/GameActor/GA_NpcFightZZPlayer.cs b/Fight/GameActor/GA_NpcFightZZPlayer.cs
index 1966c23..2d196b7 100644
--- a/Fight/GameActor/GA_NpcFightZZPlayer.cs
+++ b/Fight/GameActor/GA_NpcFightZZPlayer.cs
@@ -109,17 +109,17 @@
cacheMapDataId = PlayerDatas.Instance.baseData.MapID * 10 + PlayerDatas.Instance.baseData.dungeonLineId;
}
}
- var _config = TableConfig.DungeonHelpBattleConfig.Get(cacheMapDataId);
+ var _config = DungeonHelpBattleConfig.Get(cacheMapDataId);
ActorInfo.LV = (ushort)_config.RobotLV;
ActorInfo.Job = byte.Parse(_values[1]);
- ActorInfo.PlayerName = TableConfig.NPCConfig.Get((int)m_H0406.NPCID).charName;
+ ActorInfo.PlayerName = NPCConfig.Get((int)m_H0406.NPCID).charName;
ActorInfo.Hp = m_H0406.NPCHP;
ActorInfo.MaxHp = m_H0406.MaxHP;
ActorInfo.familyID = 0;
ActorInfo.familyName = "";
ActorInfo.realm = (uint)_config.RobotRealmLV;
- JobSetup = TableConfig.JobSetupConfig.Get(ActorInfo.Job);
+ JobSetup = JobSetupConfig.Get(ActorInfo.Job);
var _jsonData = LitJson.JsonMapper.ToObject(_config.RobotCloth);
var _jobJson = _jsonData[_values[1]];
@@ -147,7 +147,7 @@
ActorInfo.MaxHp = m_H0406.MaxHP;
ActorInfo.realm = (uint)m_ViewPlayerData.rolePropData.RealmLV;
- JobSetup = TableConfig.JobSetupConfig.Get(ActorInfo.Job);
+ JobSetup = JobSetupConfig.Get(ActorInfo.Job);
RoleParticularModel.ItemData _item = null;
diff --git a/Fight/GameActor/GA_Pet.cs b/Fight/GameActor/GA_Pet.cs
index 6c4dc49..38f4c0e 100644
--- a/Fight/GameActor/GA_Pet.cs
+++ b/Fight/GameActor/GA_Pet.cs
@@ -37,11 +37,11 @@
HideEffect();
string _modelName = NpcConfig.MODE;
- var _config = TableConfig.ModelResConfig.GetPetConfig(_modelName);
+ var _config = ModelResConfig.GetPetConfig(_modelName);
if (_config != null)
{
- var _boneList = TableConfig.ModelResConfig.GetBoneList(_modelName);
- var _effectlist = TableConfig.ModelResConfig.GetEffectList(_modelName);
+ var _boneList = ModelResConfig.GetBoneList(_modelName);
+ var _effectlist = ModelResConfig.GetEffectList(_modelName);
if (_boneList != null && _effectlist != null)
{
diff --git a/Fight/PreFightMission.cs b/Fight/PreFightMission.cs
index fab0235..b000c60 100644
--- a/Fight/PreFightMission.cs
+++ b/Fight/PreFightMission.cs
@@ -721,7 +721,7 @@
cacheMinAttack = PlayerDatas.Instance.extersion.MINATK;
cacheMaxAttack = PlayerDatas.Instance.extersion.MAXATK;
- TableConfig.FuncConfigConfig _funcConfig = TableConfig.FuncConfigConfig.Get("PreFight_Fabao");
+ FuncConfigConfig _funcConfig = FuncConfigConfig.Get("PreFight_Fabao");
int _atk = int.Parse(_funcConfig.Numerical1);
PlayerDatas.Instance.extersion.MINATK = _atk;
PlayerDatas.Instance.extersion.MAXATK = _atk;
diff --git a/System/Mount/MountStoneTipsWin.cs b/System/Mount/MountStoneTipsWin.cs
index 8b07ea2..aa0f760 100644
--- a/System/Mount/MountStoneTipsWin.cs
+++ b/System/Mount/MountStoneTipsWin.cs
@@ -23,7 +23,7 @@
[SerializeField] GameObject m_Text_Power;
[SerializeField] Text m_PowerNum;
private Dictionary<int, int> tag_Item = new Dictionary<int, int>();//鍧愰獞榄傜煶瀛�
- Dictionary<string, ItemConfig> tagCIM = new Dictionary<string, TableConfig.ItemConfig>();
+ Dictionary<string, ItemConfig> tagCIM = new Dictionary<string, ItemConfig>();
private List<int> ListID = new List<int>();
PlayerMountDatas m_HorseModel;
PlayerMountDatas horsemodel
diff --git a/System/WorldMap/LocalMapEventPointInstroduce.cs b/System/WorldMap/LocalMapEventPointInstroduce.cs
index 69abd08..0829949 100644
--- a/System/WorldMap/LocalMapEventPointInstroduce.cs
+++ b/System/WorldMap/LocalMapEventPointInstroduce.cs
@@ -24,7 +24,7 @@
public void Display(int _id, Transform _target)
{
- var config = TableConfig.MapEventPointConfig.Get(_id);
+ var config = MapEventPointConfig.Get(_id);
RecommondMinLv.text = config.LowLV.ToString();
RecommondMaxLv.text = config.Defense.ToString();
RecommondMinLv.color = PlayerDatas.Instance.baseData.LV < config.LowLV ? UIHelper.GetUIColor(TextColType.Red, false) : UIHelper.GetUIColor(TextColType.Green, false);
diff --git a/System/WorldMap/LocalMapEventPointToggle.cs b/System/WorldMap/LocalMapEventPointToggle.cs
index f5e6b63..d434d18 100644
--- a/System/WorldMap/LocalMapEventPointToggle.cs
+++ b/System/WorldMap/LocalMapEventPointToggle.cs
@@ -56,7 +56,7 @@
private void DrawEventInfo()
{
- var config = TableConfig.MapEventPointConfig.Get(this.m_EventId);
+ var config = MapEventPointConfig.Get(this.m_EventId);
var tagChinNpcMod = NPCConfig.Get(config.NPCID);
this.m_Title.text = tagChinNpcMod != null ? tagChinNpcMod.charName : "";
if (config.LowLV == config.HighestLV)
--
Gitblit v1.8.0