public static void UpdateUnitList(this Trigger self) { ListComponent <long> deleteList = ListComponent <long> .Create(); DUnitComponent dUnitComponent = self.Domain.GetComponent <DUnitComponent>(); for (int i = 0; i < self.UnitList.List.Count; i++) { DUnit unit = dUnitComponent.Get(self.UnitList.List[i]); if (unit == null) { deleteList.List.Add(unit.Id); continue; } if (unit.GetComponent <UnitStateComponent>().UnitState == (int)UnitState.Death) { deleteList.List.Add(unit.Id); } } for (int i = 0; i < deleteList.List.Count; i++) { self.UnitList.List.Remove(deleteList.List[i]); } deleteList.List.Clear(); }
public static void InitShellNumberic(DUnit shell) { NumericComponent numeric = shell.AddComponent <NumericComponent>(); UShellConfig config = shell.GetComponent <UShellConfigComponent>().ShellConfig; // 速度 numeric.Set(NumericType.SpeedBase, config.MoveSpeed); }
/// <summary> /// 单位进阶 /// </summary> public int Call_UnitGradeUp(ClazupUnitRequest request) { ClazupUnitResponse response = new ClazupUnitResponse(); response.id = request.id; var player = CurrentSession.GetBindPlayer(); Unit unit = player.Units.First(x => x.Id == request.id); DUnit du = DUnits[unit.Tid]; int maxClaz = du.grade_max; int itemId = du.grade_item_id; if (unit.Grade >= du.grade_max) { return((int)GameErrorCode.兵种已经最高阶); } DUnitGradeUp dug = DUnitGrades[du.star][unit.Grade + 1]; if (unit.Level < dug.min_level) { return((int)GameErrorCode.兵种不满足升阶等级);; } int itemCount = dug.item_cnt; var pkgController = Server.GetController <PkgController>(); var playerController = Server.GetController <PlayerController>(); string reason = $"兵种进阶{du.tid}"; if (playerController.IsCurrencyEnough(player, CurrencyType.GOLD, dug.gold)) { if (pkgController.TrySubItem(player, itemId, itemCount, reason, out var item)) { playerController.AddCurrency(player, CurrencyType.GOLD, -dug.gold, reason); unit.Grade += 1; response.unitInfo = this.ToUnitInfo(unit, du, true); response.gold = playerController.GetCurrencyValue(player, CurrencyType.GOLD); response.itemId = itemId; response.count = item.Count; response.success = true; _db.SaveChanges(); CurrentSession.SendAsync(response); //任务 OnUnitGradeUp(new UnitGradeUpEventArgs() { UnitInfo = response.unitInfo, OldGrade = unit.Grade - 1 }); } } return(0); }
public static void InitTrapNumberic(DUnit trap) { NumericComponent numeric = trap.AddComponent <NumericComponent>(); UTrapConfig config = trap.GetComponent <UTrapConfigComponent>().TrapConfig; // 攻速 numeric.Set(NumericType.AttackSpeedBase, config.AttackSpeed); // 攻击力 numeric.Set(NumericType.HPDamageBase, config.HPDamage); }
public UnitInfo UnlockUnit(Player player, int uid) { var unit = player.Units.FirstOrDefault(u => u.Tid == uid); if (unit != null) { return(null); } DUnit du = DUnits[uid]; //if (true) //{ unit = new Unit() { Id = Guid.NewGuid().ToString("D"), Level = 1, Number = du.max_energy, Tid = uid, Equips = new List <Equip>() }; foreach (int deid in du.equip.Object) { DEquip de = DEquips[deid]; Equip eq = new Equip() { Id = Guid.NewGuid().ToString("D"), Level = 1, GradeId = de.gradeid, PlayerId = player.Id, Pos = de.pos, Tid = deid, UnitId = unit.Id }; unit.Equips.Add(eq); } player.Units.Add(unit); var unitInfo = this.ToUnitInfo(unit); OnUnitUnlock(unitInfo); UnlockUnitResponse response = new UnlockUnitResponse { success = true, unitId = uid, unitInfo = unitInfo }; Server.SendByUserNameAsync(player.Id, response); return(unitInfo); //} //return null; }
public static bool IsOperationer(DUnit unit) { if (unit.GetComponent <OperationerComponent>().OperationerId == unit.Domain.GetComponent <GamerComponent>().myGamer.Id) { return(true); } else { return(false); } }
public override void Save(BinaryWriter writer) { DUnit unit = schemeObject.boardObject.GetComponent <DUnit>(); writer.Write(unit.funct is SForm); unit.funct.Save(writer); writer.Write(schemeObject.Input); if (schemeObject.Input) { writer.Write(GetIDInput()); } }
public void Run(EventType.NumbericChange args) { DUnit tower = args.Parent as DUnit; if (tower != null) { HPRegainComponent hPRegainComponent = tower.GetComponent <HPRegainComponent>(); if (hPRegainComponent != null) { hPRegainComponent.HpRegain = (int)args.New; } } }
public static DUnit Create(Entity domain, long unitid) { DUnit unit = EntityFactory.CreateWithId <DUnit>(domain, unitid); unit.AddComponent <ObjectWait>(); unit.AddComponent <UnitStateComponent, int>((int)UnitState.Born); DUnitComponent unitComponent = domain.GetComponent <DUnitComponent>(); unitComponent.Add(unit); return(unit); }
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); }
protected override async ETVoid Run(Session session, M2C_UnitNumeric message) { DUnit unit = session.Domain.GetComponent <DUnitComponent>().Get(message.Id); if (message.BeInt == true) { NumericAction.SetUnitNumericActionImp(unit, (NumericType)message.NumericType, (int)message.Val); } else { NumericAction.SetUnitNumericActionImp(unit, (NumericType)message.NumericType, message.Val); } await ETTask.CompletedTask; }
public static void InitTowerNumberic(DUnit tower) { NumericComponent numeric = tower.AddComponent <NumericComponent>(); UTowerConfig config = tower.GetComponent <UTowerConfigComponent>().TowerConfig; // 最大血量 numeric.Set(NumericType.MaxHpBase, config.MaxHP); // 血量 numeric.Set(NumericType.HpBase, config.HP); // 攻速 numeric.Set(NumericType.AttackSpeedBase, config.AttackSpeed); // 血量恢复 numeric.Set(NumericType.HPRegainBase, config.HPRegain); // 攻击力 numeric.Set(NumericType.HPDamageBase, config.HPDamage); }
public override void Load(BinaryReader reader) { DUnit unit = schemeObject.boardObject.GetComponent <DUnit>(); if (!reader.ReadBoolean()) { Destroy(unit.funct); unit.funct = unit.gameObject.AddComponent <ZForm>(); } unit.funct.Load(reader); if (reader.ReadBoolean()) { DataClass.objectManager.InputLoader += LoadInputs; DataClass.objectManager.loadIDs.Enqueue(reader.ReadInt32()); } }
public static void SetUnitNumericAction(DUnit unit, NumericType numeric, float val) { if (unit.DomainScene().GetComponent <PVPComponent>().bePVP) { C2M_UnitNumeric msg = new C2M_UnitNumeric(); msg.Id = unit.Id; msg.BeInt = false; msg.NumericType = (int)numeric; msg.Val = val; unit.Domain.GetComponent <SessionComponent>().Session.Send(msg); } else { NumericAction.SetUnitNumericActionImp(unit, numeric, val); } }
public static void InitRoleNumberic(DUnit role) { NumericComponent numeric = role.AddComponent <NumericComponent>(); URoleConfig config = role.GetComponent <URoleConfigComponent>().RoleConfig; // 最大血量 numeric.Set(NumericType.MaxHpBase, config.HP); // 血量 numeric.Set(NumericType.HpBase, config.HP); // 速度 numeric.Set(NumericType.SpeedBase, config.MoveSpeed); // 攻速 numeric.Set(NumericType.AttackSpeedBase, config.AttackSpeed); // 攻击力 numeric.Set(NumericType.HPDamageBase, config.HPDamage); // 警戒范围 numeric.Set(NumericType.AlertRadiusBase, config.AlertRadius); }
public override void Refresh() { unit = parent.boardObject.GetComponent <DUnit>(); for (int i = 0; i < unit.funct.numerator.Length; i++) { num.text += unit.funct.numerator[i] + " "; } for (int i = 0; i < unit.funct.denumerator.Length; i++) { denum.text += unit.funct.denumerator[i] + " "; } if (unit.funct is ZForm) { check.isOn = true; //inputDt.GetComponent<InputField>().text = ((ZForm)unit.funct).DT.ToString(); } }
public static int GetBattleRoleCount(DUnit tower) { NumericComponent numeric = tower.GetComponent <NumericComponent>(); int halfHpAdd = (numeric.GetAsInt(NumericType.Hp) - numeric.GetAsInt(NumericType.HpBase)) / 2; if (halfHpAdd <= 0) { return(0); } int RoleId = tower.GetComponent <UTowerConfigComponent>().TowerConfig.RoleId; URoleConfig RoleConfig = URoleConfigCategory.Instance.Get(RoleId); if (RoleConfig == null) { return(0); } return(halfHpAdd / RoleConfig.HP); }
public static void SummonRoles(DUnit tower, long gamerid, int count, long targetid) { // 自身血量检测 NumericComponent numeric = tower.GetComponent <NumericComponent>(); int hpAdd = (numeric.GetAsInt(NumericType.Hp) - numeric.GetAsInt(NumericType.HpBase)); if (hpAdd <= 0) { return; } // 召唤数量检测 int roleConfigId = tower.GetComponent <UTowerConfigComponent>().TowerConfig.RoleId; int roleHp = URoleConfigCategory.Instance.Get(roleConfigId).HP; if (roleHp * count > hpAdd) { count = hpAdd / roleHp; } // 包装召唤ROLE DUnitInfo roleinfo = new DUnitInfo(); roleinfo.GamerId = gamerid; roleinfo.UnitId = IdGenerater.Instance.GenerateUnitId(0); roleinfo.ConfigId = roleConfigId; roleinfo.Camp = (int)(tower.GetComponent <CampComponent>().Camp); roleinfo.PX = tower.Position.x; roleinfo.PY = tower.Position.y; roleinfo.PZ = tower.Position.z; roleinfo.RX = tower.Rotation.x; roleinfo.RY = tower.Rotation.y; roleinfo.RZ = tower.Rotation.z; roleinfo.RW = tower.Rotation.w; roleinfo.Count = count; roleinfo.TargetId = targetid; roleinfo.OperationerId = gamerid; RoleFactory.Create(tower.Domain, roleinfo); }
public static void SetUnitNumericAction(DUnit unit, NumericType numeric, int val) { if (unit.DomainScene().GetComponent <PVPComponent>().bePVP) { if (OperationerComponentSystem.IsOperationer(unit) == false) { return; } C2M_UnitNumeric msg = new C2M_UnitNumeric(); msg.Id = unit.Id; msg.BeInt = true; msg.NumericType = (int)numeric; msg.Val = val; unit.Domain.GetComponent <SessionComponent>().Session.Send(msg); } else { NumericAction.SetUnitNumericActionImp(unit, numeric, val); } }
private void Start() { unit = parent.boardObject.GetComponent <DUnit>(); enabled = false; }
private void PlayerController_PlayerCreating(object sender, Player e) { int[] uus = new int[] { 21140101 }; for (int i = 0; i < uus.Length; i++) { int uid = uus[i]; Unit unit = new Unit() { Id = Guid.NewGuid().ToString("D"), PlayerId = e.Id, Tid = uid, Number = 81, Level = 1, Equips = new List <Equip>() }; DUnit du = DUnits[uid]; foreach (int deid in du.equip.Object) { DEquip de = DEquips[deid]; Equip eq = new Equip() { Id = Guid.NewGuid().ToString("D"), Level = 1, GradeId = de.gradeid, PlayerId = e.Id, Pos = de.pos, Tid = deid, UnitId = unit.Id }; unit.Equips.Add(eq); } var unitInfo = this.ToUnitInfo(unit, du, true); e.Units.Add(unit); } for (int i = 0; i < 2; i++) { List <string> us = new List <string>(); if (i == 0) { int j = 0; foreach (var unit in e.Units) { us.Add(unit.Id); j++; } for (; j < 5; j++) { us.Add(string.Empty); } } else { for (int j = 0; j < 5; j++) { us.Add(string.Empty); } } Team t = new Team() { Index = i, IsSelected = i == 0, PlayerId = e.Id, Units = us }; e.Teams.Add(t); } for (int i = 0; i < 3; i++) { List <string> us = new List <string>(); for (int j = 0; j < 10; j++) { us.Add(string.Empty); } PVPFormation t = new PVPFormation() { Index = i, IsSelected = i == 0, PlayerId = e.Id, Units = us }; e.Formations.Add(t); } }
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 static void SetUnitNumericActionImp(DUnit unit, NumericType numeric, float val) { NumericComponent numericComponent = unit.GetComponent <NumericComponent>(); numericComponent.Set(numeric, val); }
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); }