private void Invincible(string[] args) { var player = this.CurrentSession.GetBindPlayer(); var camp = this.Server.GetController <CampController>(); foreach (var unit in player.Units) { var du = camp.DUnits[unit.Tid]; int maxLeve = camp.DUnitLevels.Count; unit.Level = maxLeve; unit.Grade = du.grade_max; //camp.OnUnitLevelUp(new UnitLevelUpEventArgs() { UnitInfo = camp.ToUnitInfo(unit), OldLevel = oldlevel }); //camp.OnUnitGradeUp(new UnitGradeUpEventArgs() { OldGrade = oldgrade, UnitInfo = camp.ToUnitInfo(unit) }); foreach (var equip in unit.Equips) { DEquip de = camp.DEquips[equip.Tid]; var equipMaxLevel = camp.DequipLevels.Count; equip.Level = equipMaxLevel; DEquipGrade deg = camp.DEquipGrades[de.gradeid]; while (true) { if (deg.next_id == 0) { equip.GradeId = deg.id; break; } } } } _db.SaveChanges(); }
public int Call_EquipGradeUp(UpGradeEquipRequest request) { var player = this.CurrentSession.GetBindPlayer(); var unit = player.Units.First(u => u.Tid == request.unitId); DUnit du = DUnits[unit.Tid]; var equip = unit.Equips.First(e => e.Pos == request.position); DEquip de = DEquips[equip.Tid]; DEquipGrade deg = DEquipGrades[equip.GradeId]; if (deg.next_id == 0) { return((int)GameErrorCode.装备已经最高阶); } var pkgController = this.Server.GetController <PkgController>(); bool itemenough = pkgController.IsItemEnough(player, deg.grade_item_id.Object, deg.grade_item_cnt.Object); if (!itemenough) { return((int)GameErrorCode.道具不足); } string reason = $"兵种装备进阶{unit.Tid}:{equip.Tid}"; pkgController.SubItems(player, deg.grade_item_id.Object, deg.grade_item_cnt.Object, reason); DEquipGrade degNext = DEquipGrades[deg.next_id]; equip.GradeId = degNext.id; var unitInfo = this.ToUnitInfo(unit, du, true); _db.SaveChanges(); UpGradeEquipResponse response = new UpGradeEquipResponse(); response.success = true; response.position = equip.Pos; response.unitId = unit.Tid; response.unitInfo = unitInfo; response.equipInfo = new EquipInfo() { grade = equip.GradeId, equipId = equip.Tid, level = equip.Level }; OnEquipGradeUp(new EquipGradeUpEventArgs() { EquipInfo = response.equipInfo, OldGrade = deg.grade, UnitInfo = unitInfo }); CurrentSession.SendAsync(response); return(0); }
public int Call_EquipLevelUp(LevelupEquipRequest request) { var player = this.CurrentSession.GetBindPlayer(); var unit = player.Units.First(u => u.Tid == request.unitId); DUnit du = DUnits[unit.Tid]; var equip = unit.Equips.First(e => e.Pos == request.position); var playerController = this.Server.GetController <PlayerController>(); string reason = $"兵种装备升级{unit.Tid}:{equip.Tid}"; int oldlevel = equip.Level; DEquip de = DEquips[equip.Tid]; DEquipGrade deg = DEquipGrades[equip.GradeId]; while (true) { if (equip.Level >= player.Level) { break; } if (equip.Level >= deg.max_level) { break; } //扣资源升级 DEquipLevelCost dl; if (!DequipLevels.TryGetValue(equip.Level, out dl)) { break; } int rescont = (int)((du.type == 1 ? dl.soldier_gold : dl.tank_gold) * de.level_k / 10000d); if (!playerController.IsCurrencyEnough(player, CurrencyType.GOLD, rescont)) { break; } playerController.AddCurrency(player, CurrencyType.GOLD, rescont, reason); equip.Level += 1; if (!request.multy) { break; } } var equipInfo = new EquipInfo() { grade = equip.GradeId, equipId = equip.Tid, level = equip.Level }; UnitInfo unitInfo; if (oldlevel != equip.Level) { unitInfo = this.ToUnitInfo(unit, du, true); OnEquipLevelUp(new EquipLevelUpEventArgs() { EquipInfo = equipInfo, UnitInfo = unitInfo, OldLevel = oldlevel }); _db.SaveChanges(); } else { unitInfo = this.ToUnitInfo(unit, du); } LevelupEquipResponse response = new LevelupEquipResponse(); response.success = true; response.equipInfo = equipInfo; response.unitInfo = unitInfo; response.position = equip.Pos; response.unitId = unit.Tid; CurrentSession.SendAsync(response); return(0); }
public UnitInfo ToUnitInfo(Unit u, DUnit du = null, bool calcPower = false) { UnitInfo info = new UnitInfo(); if (du == null) { du = DUnits[u.Tid]; } info.id = u.Id; info.number = u.Number; info.tid = u.Tid; info.exp = u.Exp; info.level = u.Level; info.claz = u.Grade; info.pid = u.PlayerId; if (u.IsResting && u.RestEndTime <= DateTime.Now) { u.IsResting = false; u.Number = du.max_energy; //推送 TimesUpNotify notify = new TimesUpNotify(); notify.id = u.Tid; notify.lv = u.Number; notify.unitid = u.Id; notify.success = true; notify.type = GameConfig.TYPE_UNITREST; this.Server.SendByUserNameAsync(u.PlayerId, notify); } info.prepareEndTime = u.RestEndTime.ToUnixTime(); info.preparing = u.IsResting; info.equips = new List <EquipInfo>(); info.prepareEndTime = u.RestEndTime.ToUnixTime(); if (du != null) { info.name = du.name; info.type = du.type; info.nation = du.nation; info.desc = du.desc; info.star = du.star; info.crit = du.crit; info.crit_hurt = du.crit_hurt; info.hurt_add = du.hurt_add; info.hurt_sub = du.hurt_sub; info.crit_v = du.crit_v; info.hurt_add_v = du.hurt_add_v; info.hurt_sub_v = du.hurt_sub_v; info.armor = du.armor; info.hurt_multiple = du.hurt_multiple; info.cd = du.cd; info.distance = du.distance; info.r = du.r; info.off = du.off; info.rev = du.rev; info.rev_body = du.rev_body; info.speed = du.speed; info.mob = du.mob; info.hp_add = du.hp_add; info.att_add = du.att_add; info.def_add = du.def_add; info.type_detail = du.type_detail; info.levelLimit = 0; info.gain = null; info.count = du.count; info.last_time = du.last_time; info.bullet_count = du.bullet_count; info.rank = 0; info.exist = du.exist; info.energy = du.energy; for (int i = 0; i < du.res_type.Object.Length; i++) { switch (du.res_type.Object[i]) { case CurrencyType.GOLD: info.gold = du.res_cnt.Object[i]; break; case CurrencyType.SUPPLY: info.supply = du.res_cnt.Object[i]; break; case CurrencyType.IRON: info.iron = du.res_cnt.Object[i]; break; } } info.pvp_point = du.pvp_point; info.pvp_dec_score = du.pvp_dec_score; info.max_energy = du.max_energy; info.unitSkills = du.skills.Object; //info.hp_ex = du.hp_add; //info.att_ex = ; //info.def_ex = ; //todo: 计算兵种属性和战力 info.hp = du.prop_val.Object[2]; info.att = du.prop_val.Object[0]; info.defence = du.prop_val.Object[1]; info.hp_growth = du.prop_grow_val.Object[2]; info.att_growth = du.prop_grow_val.Object[0]; info.defence_growth = du.prop_grow_val.Object[1]; //等级加成 info.hp = (int)(info.hp + info.hp_growth * u.Level); info.defence = (int)(info.defence + info.defence_growth * u.Level); info.att = (int)(info.att + info.att_growth * u.Level); //进阶加成 if (u.Grade > 0) { DUnitGradeUp dug = DUnitGrades[du.star][u.Grade]; info.att += (int)((du.prop_val.Object[0] + (100 - 1) * du.prop_grow_val.Object[0]) * dug.atk / 10000d); info.defence += (int)((du.prop_val.Object[1] + (100 - 1) * du.prop_grow_val.Object[1]) * dug.defence / 10000d); info.hp += (int)((du.prop_val.Object[2] + (100 - 1) * du.prop_grow_val.Object[2]) * dug.hp / 10000d); } //装备加成 foreach (var eq in u.Equips) { DEquip de = DEquips[eq.Tid]; DEquipGrade deg = DEquipGrades[eq.GradeId]; var ei = new EquipInfo(); ei.grade = eq.GradeId; ei.equipId = eq.Tid; ei.level = eq.Level; info.equips.Add(ei); int v = de.base_attr_value + de.level_grow * (eq.Level - 1); //升阶增加的属性 =(基础属性 +(100 - 1)*成长属性)*(升阶增加属性万分比) v += (int)((de.base_attr_value + (100 - 1) * de.level_grow) * deg.grade_grow / 10000d); switch (de.base_attr_type) { case 1: { info.att += v; } break; case 2: { info.defence += v; } break; case 3: { info.hp += v; } break; } } //战力计算 if (calcPower) { info.power = CalcPower(info); u.Power = info.power; } else { info.power = u.Power; } } return(info); }