From aadfae81e6a511cd2c062ab0b05f3ee3419f1a7f Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Wed, 23 Dec 2020 20:15:14 +0800 Subject: [PATCH] 选中BUFF塔播放相应的特效 --- Assets/Scripts/Net/NetExtends/Table.cs | 747 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 673 insertions(+), 74 deletions(-) diff --git a/Assets/Scripts/Net/NetExtends/Table.cs b/Assets/Scripts/Net/NetExtends/Table.cs index 9df6259..a6e7a76 100644 --- a/Assets/Scripts/Net/NetExtends/Table.cs +++ b/Assets/Scripts/Net/NetExtends/Table.cs @@ -30,6 +30,7 @@ { string[] allPath = new string[]{ + "boss_skill.json", "boss.json", "geminfo.json", "levelup.json", @@ -39,14 +40,22 @@ "boxsequence.json", "box.json", "resource.json", + "elf_info.json", + "elf_skill.json", + "elf_upgrade.json", + "endless_boss.json", "endless_buff.json", "endless_enemy.json", "endless_port.json", + "donaterule.json", + "scoreshop.json", + "donateshop.json", "gemcost.json", "buffinfo.json", - "skilllevelinfo.json", "arena.json", "fuckword.json", + "notice.json", + "skilllevelinfo.json", "storearea.json", "store.json", "goldInfo.json", @@ -67,6 +76,17 @@ tablename = tablename.Replace(".json", ""); List<tabledata> allData = new List<tabledata>(); switch (tablename) { + + case "boss_skill": + //allData.Clear(); + foreach (JsonData item in data) + { + boss_skill tmp = boss_skill.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + case "boss": //allData.Clear(); @@ -167,6 +187,50 @@ break; + case "elf_info": + //allData.Clear(); + foreach (JsonData item in data) + { + elf_info tmp = elf_info.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + + case "elf_skill": + //allData.Clear(); + foreach (JsonData item in data) + { + elf_skill tmp = elf_skill.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + + case "elf_upgrade": + //allData.Clear(); + foreach (JsonData item in data) + { + elf_upgrade tmp = elf_upgrade.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + + case "endless_boss": + //allData.Clear(); + foreach (JsonData item in data) + { + endless_boss tmp = endless_boss.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + case "endless_buff": //allData.Clear(); foreach (JsonData item in data) @@ -200,6 +264,39 @@ break; + case "donaterule": + //allData.Clear(); + foreach (JsonData item in data) + { + donaterule tmp = donaterule.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + + case "scoreshop": + //allData.Clear(); + foreach (JsonData item in data) + { + scoreshop tmp = scoreshop.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + + case "donateshop": + //allData.Clear(); + foreach (JsonData item in data) + { + donateshop tmp = donateshop.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + case "gemcost": //allData.Clear(); foreach (JsonData item in data) @@ -222,17 +319,6 @@ break; - case "skilllevelinfo": - //allData.Clear(); - foreach (JsonData item in data) - { - skilllevelinfo tmp = skilllevelinfo.CreateFromJson(item); - allData.Add(tmp as tabledata); - } - JsonDataCenter.allData.Add(tablename, allData); - break; - - case "arena": //allData.Clear(); foreach (JsonData item in data) @@ -249,6 +335,28 @@ foreach (JsonData item in data) { fuckword tmp = fuckword.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + + case "notice": + //allData.Clear(); + foreach (JsonData item in data) + { + notice tmp = notice.CreateFromJson(item); + allData.Add(tmp as tabledata); + } + JsonDataCenter.allData.Add(tablename, allData); + break; + + + case "skilllevelinfo": + //allData.Clear(); + foreach (JsonData item in data) + { + skilllevelinfo tmp = skilllevelinfo.CreateFromJson(item); allData.Add(tmp as tabledata); } JsonDataCenter.allData.Add(tablename, allData); @@ -372,6 +480,61 @@ + //! 生成文件 boss_skill(boss技能表).xlsx + public class boss_skill : tabledata { + public int getid(){ + return id; + } + + // id + public int id; + + // 技能名称 + public string name; + + // 技能资源 + public int image; + + // 技能冷却时间 + public int cool_down; + + // 技能目标 + public List<int> target; + + // 技能范围 + public List<int> tunnel; + + // 技能动作 + public int action; + + // 技能类型 + public int skill_class; + + // 技能效果 + public List<float> effect; + + + + public static boss_skill CreateFromJson(JsonData item) + { + boss_skill _boss_skill = new boss_skill(); + + int index = 0; + _boss_skill.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _boss_skill.name = GameUtils.GetString(item[index++].ToString()); + _boss_skill.image = int.Parse(GameUtils.GetString(item[index++].ToString())); + _boss_skill.cool_down = int.Parse(GameUtils.GetString(item[index++].ToString())); + _boss_skill.target = GameUtils.GetIntList(item[index++]); + _boss_skill.tunnel = GameUtils.GetIntList(item[index++]); + _boss_skill.action = int.Parse(GameUtils.GetString(item[index++].ToString())); + _boss_skill.skill_class = int.Parse(GameUtils.GetString(item[index++].ToString())); + _boss_skill.effect = GameUtils.GetFloatList(item[index++]); + + return _boss_skill; + } + + } + //! 生成文件 B_BOSS生成表.xlsx public class boss : tabledata { public int getid(){ @@ -775,6 +938,230 @@ } + //! 生成文件 elf_info(精灵数据表).xlsx + public class elf_info : tabledata { + public int getid(){ + return id; + } + + // id + public int id; + + // 精灵名称 + public string name; + + // 基础攻击力 + public int b_attack; + + // 基础暴击率 + public int b_crit; + + // 基础暴击伤害 + public int b_critdmg; + + // 基础攻速 + public float b_atkf; + + // 普攻技能 + public int n_skill; + + // 大招技能 + public int s_skill; + + // 大招类型 + public string fire_type; + + // 召唤单位 + public int summon; + + + + public static elf_info CreateFromJson(JsonData item) + { + elf_info _elf_info = new elf_info(); + + int index = 0; + _elf_info.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_info.name = GameUtils.GetString(item[index++].ToString()); + _elf_info.b_attack = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_info.b_crit = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_info.b_critdmg = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_info.b_atkf = float.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_info.n_skill = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_info.s_skill = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_info.fire_type = GameUtils.GetString(item[index++].ToString()); + _elf_info.summon = int.Parse(GameUtils.GetString(item[index++].ToString())); + + return _elf_info; + } + + } + + //! 生成文件 elf_skill(精灵技能表).xlsx + public class elf_skill : tabledata { + public int getid(){ + return id; + } + + // id + public int id; + + // 技能名称 + public string name; + + // 伤害千分比 + public int dmg_ratio; + + // 技能附加伤害 + public int ex_dmg; + + // 附加暴击率 + public int ex_crit; + + // 附加效果 + public List<int> ex_func; + + // 技能范围 + public string scope; + + // 技能射程 + public int range; + + // 连击 + public int hit; + + // 持续时间 + public int last; + + // 计算间隔 + public int count; + + // 前摇时间 + public int p_time; + + // 附加buff + public List<int> buff; + + // 动画类型 + public string ani_tpye; + + // 子弹特效 + public string e_bullet; + + // 动画特效 + public string e_line; + + // 命中特效 + public string e_hit; + + // 前摇特效 + public string e_pre_act; + + + + public static elf_skill CreateFromJson(JsonData item) + { + elf_skill _elf_skill = new elf_skill(); + + int index = 0; + _elf_skill.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.name = GameUtils.GetString(item[index++].ToString()); + _elf_skill.dmg_ratio = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.ex_dmg = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.ex_crit = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.ex_func = GameUtils.GetIntList(item[index++]); + _elf_skill.scope = GameUtils.GetString(item[index++].ToString()); + _elf_skill.range = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.hit = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.last = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.count = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.p_time = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_skill.buff = GameUtils.GetIntList(item[index++]); + _elf_skill.ani_tpye = GameUtils.GetString(item[index++].ToString()); + _elf_skill.e_bullet = GameUtils.GetString(item[index++].ToString()); + _elf_skill.e_line = GameUtils.GetString(item[index++].ToString()); + _elf_skill.e_hit = GameUtils.GetString(item[index++].ToString()); + _elf_skill.e_pre_act = GameUtils.GetString(item[index++].ToString()); + + return _elf_skill; + } + + } + + //! 生成文件 elf_upgrade(场内升级表).xlsx + public class elf_upgrade : tabledata { + public int getid(){ + return id; + } + + // id + public int id; + + // 攻击比率 + public int ratio; + + // 等级底框 + public int rank_img; + + // 缩放比例 + public float zoom; + + + + public static elf_upgrade CreateFromJson(JsonData item) + { + elf_upgrade _elf_upgrade = new elf_upgrade(); + + int index = 0; + _elf_upgrade.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_upgrade.ratio = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_upgrade.rank_img = int.Parse(GameUtils.GetString(item[index++].ToString())); + _elf_upgrade.zoom = float.Parse(GameUtils.GetString(item[index++].ToString())); + + return _elf_upgrade; + } + + } + + //! 生成文件 endless_boss(无尽模式boss).xlsx + public class endless_boss : tabledata { + public int getid(){ + return id; + } + + // id + public int id; + + // Boss名称 + public string name; + + // BossAI + public int boss_ai; + + // Boss资源图 + public int image; + + // Boss技能组 + public List<int> skill; + + + + public static endless_boss CreateFromJson(JsonData item) + { + endless_boss _endless_boss = new endless_boss(); + + int index = 0; + _endless_boss.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_boss.name = GameUtils.GetString(item[index++].ToString()); + _endless_boss.boss_ai = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_boss.image = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_boss.skill = GameUtils.GetIntList(item[index++]); + + return _endless_boss; + } + + } + //! 生成文件 endless_buff(无尽模式buff).xlsx public class endless_buff : tabledata { public int getid(){ @@ -791,7 +1178,7 @@ public List<int> target_type; // buff效果 - public List<int> buff_effect; + public List<float> buff_effect; // 生命周期 public int scope; @@ -805,6 +1192,18 @@ // 出现关卡上限 public int upper_level; + // 对应资源 + public int image; + + // 品质 + public int rare; + + // 可获得次数 + public int get_times; + + // 播放获得BUFF特效 + public int get_buff; + public static endless_buff CreateFromJson(JsonData item) @@ -812,15 +1211,19 @@ endless_buff _endless_buff = new endless_buff(); int index = 0; - _endless_buff.id = int.Parse(GameUtils.GetString(item[index++].ToString())); - _endless_buff.name = GameUtils.GetString(item[index++].ToString()); - _endless_buff.target_type = GameUtils.GetIntList(item[index++]); - _endless_buff.buff_effect = GameUtils.GetIntList(item[index++]); - _endless_buff.scope = int.Parse(GameUtils.GetString(item[index++].ToString())); - _endless_buff.brief = GameUtils.GetString(item[index++].ToString()); - _endless_buff.down_level = int.Parse(GameUtils.GetString(item[index++].ToString())); - _endless_buff.upper_level = int.Parse(GameUtils.GetString(item[index++].ToString())); - + _endless_buff.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_buff.name = GameUtils.GetString(item[index++].ToString()); + _endless_buff.target_type = GameUtils.GetIntList(item[index++]); + _endless_buff.buff_effect = GameUtils.GetFloatList(item[index++]); + _endless_buff.scope = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_buff.brief = GameUtils.GetString(item[index++].ToString()); + _endless_buff.down_level = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_buff.upper_level = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_buff.image = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_buff.rare = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_buff.get_times = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_buff.get_buff = int.Parse(GameUtils.GetString(item[index++].ToString())); + return _endless_buff; } @@ -842,7 +1245,7 @@ public int type; // 血量增幅 - public int hp_rate; + public float hp_rate; // 速度增幅 public float speed_rate; @@ -852,6 +1255,12 @@ // 资源id public int resource; + + // 击杀得分 + public int point; + + // 击杀能量 + public int energy; @@ -863,10 +1272,12 @@ _endless_enemy.id = int.Parse(GameUtils.GetString(item[index++].ToString())); _endless_enemy.name = GameUtils.GetString(item[index++].ToString()); _endless_enemy.type = int.Parse(GameUtils.GetString(item[index++].ToString())); - _endless_enemy.hp_rate = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_enemy.hp_rate = float.Parse(GameUtils.GetString(item[index++].ToString())); _endless_enemy.speed_rate = float.Parse(GameUtils.GetString(item[index++].ToString())); _endless_enemy.coin_rate = int.Parse(GameUtils.GetString(item[index++].ToString())); _endless_enemy.resource = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_enemy.point = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_enemy.energy = int.Parse(GameUtils.GetString(item[index++].ToString())); return _endless_enemy; } @@ -884,6 +1295,9 @@ // 关卡等级 public int level; + + // Boss名称 + public string boss_name; // Boss资源id public int resource; @@ -915,11 +1329,20 @@ // 波次间隔 public int cooldown; - // 怪物掉落 + // box:2:1 public reward drop; // 掉落概率 - public int drop_rate; + public List<int> drop_rate; + + // 法阵图片 + public int tunel_bg; + + // 过关得分 + public int bonus; + + // 进化等级 + public int evolution_lv; @@ -930,6 +1353,7 @@ int index = 0; _endless_port.id = int.Parse(GameUtils.GetString(item[index++].ToString())); _endless_port.level = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_port.boss_name = GameUtils.GetString(item[index++].ToString()); _endless_port.resource = int.Parse(GameUtils.GetString(item[index++].ToString())); _endless_port.wave = int.Parse(GameUtils.GetString(item[index++].ToString())); _endless_port.tunel = int.Parse(GameUtils.GetString(item[index++].ToString())); @@ -941,9 +1365,149 @@ _endless_port.b_coin = int.Parse(GameUtils.GetString(item[index++].ToString())); _endless_port.cooldown = int.Parse(GameUtils.GetString(item[index++].ToString())); _endless_port.drop = GameUtils.GetReward(item[index++]); - _endless_port.drop_rate = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_port.drop_rate = GameUtils.GetIntList(item[index++]); + _endless_port.tunel_bg = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_port.bonus = int.Parse(GameUtils.GetString(item[index++].ToString())); + _endless_port.evolution_lv = int.Parse(GameUtils.GetString(item[index++].ToString())); return _endless_port; + } + + } + + //! 生成文件 G_donaterule(公会捐赠卡规则).xlsx + public class donaterule : tabledata { + public int getid(){ + return id; + } + + // 标识符 + public int id; + + // 竞技场等级 + public List<int> ranklevle; + + // 发起请求后可获得的卡牌数 + public List<string> canreward; + + // 可捐赠给他人的卡牌数 + public List<string> candonate; + + + + public static donaterule CreateFromJson(JsonData item) + { + donaterule _donaterule = new donaterule(); + + int index = 0; + _donaterule.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _donaterule.ranklevle = GameUtils.GetIntList(item[index++]); + _donaterule.canreward = GameUtils.GetStringList(item[index++]); + _donaterule.candonate = GameUtils.GetStringList(item[index++]); + + return _donaterule; + } + + } + + //! 生成文件 G_公会积分商店.xlsx + public class scoreshop : tabledata { + public int getid(){ + return id; + } + + // 标识符 + public int id; + + // 道具名称 + public string name; + + // 效果描述 + public string description; + + // 有效时间s + public int time; + + // 效果类型 + public int buff; + + // 效果数值 + public float buffnum; + + // 价格 + public int price; + + // 奖励上限 + public int rewardlimit; + + // 限购次数 + public int purchaselimit; + + // 图片资源编号 + public string img; + + + + public static scoreshop CreateFromJson(JsonData item) + { + scoreshop _scoreshop = new scoreshop(); + + int index = 0; + _scoreshop.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _scoreshop.name = GameUtils.GetString(item[index++].ToString()); + _scoreshop.description = GameUtils.GetString(item[index++].ToString()); + _scoreshop.time = int.Parse(GameUtils.GetString(item[index++].ToString())); + _scoreshop.buff = int.Parse(GameUtils.GetString(item[index++].ToString())); + _scoreshop.buffnum = float.Parse(GameUtils.GetString(item[index++].ToString())); + _scoreshop.price = int.Parse(GameUtils.GetString(item[index++].ToString())); + _scoreshop.rewardlimit = int.Parse(GameUtils.GetString(item[index++].ToString())); + _scoreshop.purchaselimit = int.Parse(GameUtils.GetString(item[index++].ToString())); + _scoreshop.img = GameUtils.GetString(item[index++].ToString()); + + return _scoreshop; + } + + } + + //! 生成文件 G_工会捐赠商店.xlsx + public class donateshop : tabledata { + public int getid(){ + return id; + } + + // 标识符 + public int id; + + // 道具名称 + public string name; + + // 道具奖励数量 + public List<reward> reward; + + // 价格 + public int price; + + // 限购次数 + public int purchaselimit; + + // 商品描述 + public string info; + + + + public static donateshop CreateFromJson(JsonData item) + { + donateshop _donateshop = new donateshop(); + + int index = 0; + _donateshop.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _donateshop.name = GameUtils.GetString(item[index++].ToString()); + _donateshop.reward = GameUtils.GetRewardList(item[index++]); + _donateshop.price = int.Parse(GameUtils.GetString(item[index++].ToString())); + _donateshop.purchaselimit = int.Parse(GameUtils.GetString(item[index++].ToString())); + _donateshop.info = GameUtils.GetString(item[index++].ToString()); + + return _donateshop; } } @@ -1022,53 +1586,6 @@ } - //! 生成文件 J_技能养成表.xlsx - public class skilllevelinfo : tabledata { - public int getid(){ - return id; - } - - // id - public int id; - - // 技能id - public int skill; - - // 技能等级 - public int level; - - // 攻击类型 - public List<int> atcmod; - - // 冷却时间 - public int cooldown; - - // 技能效果 - public List<int> skilleffect; - - // buff队列 - public List<int> buff; - - - - public static skilllevelinfo CreateFromJson(JsonData item) - { - skilllevelinfo _skilllevelinfo = new skilllevelinfo(); - - int index = 0; - _skilllevelinfo.id = int.Parse(GameUtils.GetString(item[index++].ToString())); - _skilllevelinfo.skill = int.Parse(GameUtils.GetString(item[index++].ToString())); - _skilllevelinfo.level = int.Parse(GameUtils.GetString(item[index++].ToString())); - _skilllevelinfo.atcmod = GameUtils.GetIntList(item[index++]); - _skilllevelinfo.cooldown = int.Parse(GameUtils.GetString(item[index++].ToString())); - _skilllevelinfo.skilleffect = GameUtils.GetIntList(item[index++]); - _skilllevelinfo.buff = GameUtils.GetIntList(item[index++]); - - return _skilllevelinfo; - } - - } - //! 生成文件 J_竞技场等级对应分数表.xlsx public class arena : tabledata { public int getid(){ @@ -1127,6 +1644,88 @@ } + //! 生成文件 N_通知消息字符串(notice).xlsx + public class notice : tabledata { + public int getid(){ + return id; + } + + // id + public int id; + + // 键 + public string key; + + // 说明 + public string dec; + + + + public static notice CreateFromJson(JsonData item) + { + notice _notice = new notice(); + + int index = 0; + _notice.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _notice.key = GameUtils.GetString(item[index++].ToString()); + _notice.dec = GameUtils.GetString(item[index++].ToString()); + + return _notice; + } + + } + + //! 生成文件 skilllevelinfo(技能养成表).xlsx + public class skilllevelinfo : tabledata { + public int getid(){ + return id; + } + + // id + public int id; + + // 技能id + public int skill; + + // 技能等级 + public int level; + + // 攻击类型 + public List<int> atcmod; + + // 冷却时间 + public int cooldown; + + // 技能效果 + public List<int> skilleffect; + + // buff队列 + public List<int> buff; + + // 能量消耗 + public int cost; + + + + public static skilllevelinfo CreateFromJson(JsonData item) + { + skilllevelinfo _skilllevelinfo = new skilllevelinfo(); + + int index = 0; + _skilllevelinfo.id = int.Parse(GameUtils.GetString(item[index++].ToString())); + _skilllevelinfo.skill = int.Parse(GameUtils.GetString(item[index++].ToString())); + _skilllevelinfo.level = int.Parse(GameUtils.GetString(item[index++].ToString())); + _skilllevelinfo.atcmod = GameUtils.GetIntList(item[index++]); + _skilllevelinfo.cooldown = int.Parse(GameUtils.GetString(item[index++].ToString())); + _skilllevelinfo.skilleffect = GameUtils.GetIntList(item[index++]); + _skilllevelinfo.buff = GameUtils.GetIntList(item[index++]); + _skilllevelinfo.cost = int.Parse(GameUtils.GetString(item[index++].ToString())); + + return _skilllevelinfo; + } + + } + //! 生成文件 S_商店分区表 .xlsx public class storearea : tabledata { public int getid(){ -- Gitblit v1.9.1