//复活 private bool DaoJuRevive(FightPlayer a, int p, PlayerEx package, GameConfig c) { string target = a.Action.Target; FightPlayer t = m_teamA.FirstOrDefault(x => x.ID == target) as FightPlayer; if (t == null) t = m_teamB.FirstOrDefault(x => x.ID == target) as FightPlayer; if (t == null || t.IsLive) return false; //检查使用限制.. //if (!SupplyLimit(note, c)) return false; if (a.Player.RemoveGoods(p, GoodsSource.DaoJuRevive)) { ActionResult result = new ActionResult(target); //百分比复活生命 int hp = (int)(t.Life.ShengMing * c.Value.GetDoubleOrDefault("A")); int mp = (int)(t.Life.MoFa * c.Value.GetDoubleOrDefault("B")) - t.MP; if (mp < 0) mp = 0; t.AddHPAndMP(hp, mp); if (hp > 0) { result.Value["HP"] = hp; result.Value["ShengMing"] = t.HP; } if (mp > 0) { result.Value["MP"] = mp; result.Value["MoFa"] = t.MP; } result.ActionFlag |= ActionFlag.Supply; a.Action.Result = new List<ActionResult>() { result }; a.Action.FightCount = FightAction.HasAction; m_actions.Add(a.Action); return true; } return false; }
/// <summary> /// 使用道具 /// </summary> /// <param name="a"></param> /// <returns></returns> protected virtual bool DaoJu(FightPlayer a) { if (a == null) return false; //格子.. int p; if (string.IsNullOrEmpty(a.Action.Parameter) || (!Int32.TryParse(a.Action.Parameter, out p))) { return false; } PlayerEx package = a.Player.B0; string goodsid = (package.Value.GetValueOrDefault<IList>("C")[p] as Variant).GetStringOrDefault("E"); if (string.IsNullOrEmpty(goodsid)) return false; GameConfig c = GameConfigAccess.Instance.FindOneById(goodsid); if (c == null) return false; //加血 if (c.SubType == GoodsSub.Supply) { return DaoJuSupply(a, p, package, c); } //复活 else if (c.SubType == GoodsSub.Revive) { return DaoJuRevive(a, p, package, c); } return false; }
/// <summary> /// 换宠 /// </summary> /// <param name="fighter"></param> protected void ChangePet(FightPlayer fighter) { string targetID = fighter.Action.Target; FightPet pet = fighter.Team.FirstOrDefault(x => x.ID == targetID) as FightPet; if (pet == null || pet.Player != fighter.Player) { return; } string newPetID = fighter.Action.Parameter; if (fighter.Player.ChangePet(newPetID, fighter.Player.Mounts)) { //产生新的战斗宠. pet.ChangePet(m_changeLife); } }
protected override bool DaoJu(FightPlayer a) { return false; }
/// <summary> /// 创建玩家队伍 /// </summary> /// <param name="player"></param> /// <returns></returns> public static FightObject[] CreateFightPlayers(List<PlayerBusiness> players) { List<FightObject> team = new List<FightObject>(); for (int i = 0; i < players.Count; i++) { PlayerBusiness player = players[i]; player.SetActionState(ActionState.Fight); player.FightTime = DateTime.UtcNow; FightPlayer f = new FightPlayer(i, player); team.Add(f); if (player.Pet != null) { FightPet pet = new FightPet(i + 5, player); team.Add(pet); } } return team.ToArray(); }
//加血 private bool DaoJuSupply(FightPlayer a, int p, PlayerEx package, GameConfig c) { string target = a.Action.Target; FightPlayer t = m_teamA.FirstOrDefault(x => x.ID == target) as FightPlayer; if (t == null) t = m_teamB.FirstOrDefault(x => x.ID == target) as FightPlayer; if (t == null || t.Over) return false; //检查使用限制.. //if (!SupplyLimit(note, c)) return false; int hp = t.TryHP(c.Value.GetDoubleOrDefault("HP")); int mp = t.TryMP(c.Value.GetDoubleOrDefault("MP")); if (hp == 0 && mp == 0) return false; bool needHP = t.Life.ShengMing > t.HP; bool needMP = t.Life.MoFa > t.MP; if ((needHP && hp > 0) || (needMP && mp > 0)) { if (a.Player.RemoveGoods(p, GoodsSource.DaoJuSupply)) { t.AddHPAndMP(hp, mp); ActionResult result = new ActionResult(target); if (hp > 0) { result.Value["HP"] = hp; result.Value["ShengMing"] = t.HP; } if (mp > 0) { result.Value["MP"] = mp; result.Value["MoFa"] = t.MP; } result.ActionFlag |= ActionFlag.Supply; a.Action.Result = new List<ActionResult>() { result }; a.Action.FightCount = FightAction.HasAction; m_actions.Add(a.Action); return true; } } return false; }
/// <summary> /// 抓捕 /// </summary> /// <param name="fighter"></param> private void ZhuaPu(FightPlayer fighter) { string targetID = fighter.Action.Target; FightBB bb = m_teamB.FirstOrDefault(x => x.ID == targetID) as FightBB; if (bb != null && bb.IsLive) { ActionResult result = new ActionResult(targetID); fighter.Action.Result = new List<ActionResult>() { result }; fighter.Action.FightCount = FightAction.HasAction; m_actions.Add(fighter.Action); string petID = bb.APC.Value.GetStringOrDefault("PetID"); if (string.IsNullOrEmpty(petID)) { //不可捕捉 result.Value["Msg"] = TipManager.GetMessage(ClientReturn.ZhuaPu1); return; } var pet = GameConfigAccess.Instance.FindOneById(petID); if (pet == null) //|| pet.MainType != MainType.Pet { //不可捕捉 result.Value["Msg"] = TipManager.GetMessage(ClientReturn.ZhuaPu1); return; } //增加的捕捉机率 double addP = 0; if (!string.IsNullOrEmpty(fighter.Action.Parameter)) { //扣除一个网.. const string clapnetID = "G_d000011"; if (BurdenManager.Remove(fighter.Player.B0, clapnetID)) { fighter.Player.UseClapnet++; addP = 0.5; } //else //{ // result.Value["Msg"] = "请使用捕兽网"; // return; //} } double lv = fighter.CP + bb.ClapP + addP; Variant mv = MemberAccess.MemberInfo(fighter.Player.MLevel); if (mv != null) { lv *=(1+ mv.GetDoubleOrDefault("ZhuaPuLv")); } if (Sinan.Extensions.NumberRandom.RandomHit(lv)) { //实行抓捕 if (!fighter.Player.AddGoodsNobingOne(petID, GoodsSource.Clap)) { //包袱已满 result.Value["Msg"] = TipManager.GetMessage(ClientReturn.ZhuaPu2); return; } result.Value["PetID"] = petID; //捕捉成功 result.Value["Msg"] = TipManager.GetMessage(ClientReturn.ZhuaPu3); bb.HP = 0; } else { //捕捉失败 result.Value["Msg"] = TipManager.GetMessage(ClientReturn.ZhuaPu4); return; } } }