public void PushLog() { var team1Str = ""; foreach (var c in team1) { team1Str += string.Format("[{0}={1}]", c.Key, c.Value); } var team2Str = ""; foreach (var c in team2) { team2Str += string.Format("[{0}={1}]", c.Key, c.Value); } var wait = string.Empty; foreach (var character in FollowCharacters) { wait += character.GetLog(); } PlayerLog.WriteLog((int)LogType.QueueLog, "FightQueueScene QueueId={1} guid={0} t1={2} t2={3} wait={4}", mSceneGuid, QueueId, team1Str, team2Str, wait); }
//log public void PushLog() { PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager -------------------------"); PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.fullScenes count={0}", QueueSceneManager.fullScenes.Count); foreach (var fullScene in QueueSceneManager.fullScenes) { fullScene.Value.PushLog(); } PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.noFullScenes count={0}", QueueSceneManager.noFullScenes.Count); PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.characters count={0}", QueueSceneManager.characters.Count); PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.newCreateScenes count={0}", QueueSceneManager.newCreateScenes.Count); var count = 0; foreach (var i in QueueSceneManager.QueueFight) { count += i.Value.Count; } PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.QueueFight count={0}", count); PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager -------------------------"); }
public void RemoveFollowCharacter(FightQueueScene _this, QueueCharacter c) { #if DEBUG PlayerLog.WriteLog((int)LogType.QueueMessage, "RemoveFollowCharacter(). c={0}, ids={1}", c.Guid, c.mDatas.Select(d => d.Id).GetDataString()); #endif _this.FollowCharacters.Remove(c); foreach (var data in c.mDatas) { var id = data.Id; QueueSceneManager.characters.Remove(id); int state; if (_this.team1.TryGetValue(id, out state)) { _this.team1.Remove(id); #if DEBUG PlayerLog.WriteLog((int)LogType.QueueMessage, "RemoveFollowCharacter() team1.Remove id={0}", id); #endif } else if (_this.team2.TryGetValue(id, out state)) { _this.team2.Remove(id); #if DEBUG PlayerLog.WriteLog((int)LogType.QueueMessage, "RemoveFollowCharacter() team2.Remove id={0}", id); #endif } else { Logger.Warn("FightMatchingScene LeaveScene cId={0},sceneGuid={1}", id, _this.mSceneGuid); } } }
//清空某个排队ID下的所有正在排队的玩家 public static void ClearQueue(int id) { if (id == -1) { #if DEBUG PlayerLog.WriteLog((int)LogType.QueueMessage, "In ClearQueue(). Characters.Clear()"); #endif Matchings.Clear(); Characters.Clear(); return; } QueueLogic matching; if (!Matchings.TryGetValue(id, out matching)) { return; } foreach (var character in matching.mCharacters) { foreach (var data in character.mDatas) { Pop(data.Id, eLeaveMatchingType.Cannel); } } matching.mCharacters.Clear(); }
public Scene EnterScene(SceneManager _this, ObjPlayer obj, ulong guid) { var scene = GetScene(_this, guid); if (scene == null) { Logger.Error("EnterScene Error sceneGuid={0},objGuid={1}", guid, obj.ObjId); return(null); } scene.EnterScene(obj); if (obj.GetAllianceId() != 0) { CoroutineFactory.NewCoroutine(NotifyChangeScene, obj, scene.TypeId).MoveNext(); } //后台统计 try { string v = string.Format("scene#{0}|{1}|{2}|{3}|{4}|{5}|{6}", obj.ServerId, obj.ObjId, obj.GetLevel(), obj.Attr.GetFightPoint(), //战力 obj.Scene.TypeId, 0, //0:进入 1:离开 DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); // 时间 PlayerLog.Kafka(v); } catch (Exception) { } return(scene); }
void Update() { if (!playerLog) { playerLog = GetComponent <PlayerLog>(); } if (!dead && Input.GetKeyDown(KeyCode.R)) { waitingForInput = true; playersTurn = true; playerLog.NewMessage("Restart the game? (y/n)"); StartCoroutine(WaitForKeyPress()); } if (!waitingForInput) { if (playersTurn || enemiesMoving) { return; } else { StartCoroutine(MoveEnemies()); } } }
public override void OnPlayerEnterOver(ObjPlayer player) { if (mReliveTrigger.ContainsKey(player.ObjId)) { var trigger = mReliveTrigger[player.ObjId]; mReliveTrigger.Remove(player.ObjId); SceneServerControl.Timer.DeleteTrigger(trigger); if (DateTime.Now > trigger.Time) { FixPostion(player); player.Relive(); PlayerLog.WriteLog(player.ObjId, "----HLKBattle------PlayerRelive----------Time Over"); } else { var reliveObj = SceneServerControl.Timer.CreateTrigger(trigger.Time, () => { if (mLeaveTrigger.ContainsKey(player.ObjId)) { return; } FixPostion(player); player.Relive(); mReliveTrigger.Remove(player.ObjId); PlayerLog.WriteLog(player.ObjId, "----HLKBattle------PlayerRelive----------Time Over"); }); mReliveTrigger.Add(player.ObjId, reliveObj); //通知死者,复活倒计时 player.Proxy.NotifyCountdown((ulong)trigger.Time.ToBinary(), (int)eCountdownType.BattleRelive); } } }
// // when a player joins a game, we create a Player object. we start with all the Messages for the whole game so that the player can catch up. // public Player(ConcurrentQueue <CatanMessage> gameLog) { foreach (var message in gameLog) { PlayerLog.Enqueue(message); } }
//重新排序 private void SortAndSave(Ranking _this) { if (_this.Dirty == false) { return; } var result = Sort(_this); CoroutineFactory.NewCoroutine(Save, _this, _this.DBKeyName).MoveNext(); // 后台统计 try { if (result != null) { var saveCount = Math.Min(20, result.Count); for (int i = result.Count - 1; i >= result.Count - saveCount && saveCount > 0; i--) { string v = string.Format("Rank_info#{0}|{1}|{2}|{3}|{4}|{5}|{6}", result[i].Value.ServerId, 0, result[i].Value.Name, _this.RankType, result[i].Value.Value, result[i].Value.Rank, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); // 时间 PlayerLog.Kafka(v); } } } catch (Exception) { } }
public void ShowRank(Ranking _this, ulong rankManager = 20000) { var rCount = GetRankCount(_this); var rlCount = GetRankListCount(_this); var logid = rankManager + (ulong)_this.RankId * 100 + (ulong)_this.RankType; if (rlCount > _this.MaxRankMemberCount) { PlayerLog.WriteLog(logid, "---------------r={0},t={1},c={2},lc={3}--------------", _this.RankId, _this.RankType, rCount, rlCount); } else { PlayerLog.WriteLog(logid, "---------------r={0},t={1},c={2},lc={3}--------------", _this.RankId, _this.RankType, rCount, rlCount); } for (var i = 0; i < rlCount; i++) { var one = GetRankOneByIndex(_this, i); if (one == null) { continue; } PlayerLog.WriteLog(logid, "i={0},n={1},r={2},v={3}", one.Guid, one.Name, one.Rank, one.Value); } }
public IEnumerator Get(Coroutine coroutine, Ranking _this, int serverId, string DBkeyName) { PlayerLog.WriteLog((int)LogType.GetRanking, "--------------------rankGet--------------------{0}", GetDbName(_this, serverId, _this.DBKeyName)); var tasks = RankServer.Instance.DB.Get <DBRank_List>(coroutine, DataCategory.Rank, GetDbName(_this, serverId, _this.DBKeyName)); yield return(tasks); if (tasks.Data == null) { _this.mDBData[serverId] = new DBRank_List(); yield break; } _this.mDBData[serverId] = tasks.Data; foreach (var dbRankOne in tasks.Data.mData) { _this.DBRankCache[dbRankOne.Guid] = dbRankOne; //if (StaticData.IsRobot(dbRankOne.Guid)) //{ // dbRankOne.Name =Table.GetJJCRoot((int)dbRankOne.Guid).Name; //} //rank_old_value[dbRankOne.Id] = dbRankOne.Value; //之后排序的话这里就不用加了 //RankUUIDIndex[dbRankOne.Rank] = dbRankOne.Guid; _this.RankUUIDList.Add(dbRankOne.Guid); if (_this.RankType == 3) { dbRankOne.Value = 1000000 / dbRankOne.Rank; } } _this.Dirty = true; Sort(_this); }
//升级技能 public void LevelUpSkill(SkillData _this, int nId, int nLevel = 0) { PlayerLog.WriteLog(_this.mCharacter.mGuid, "----------LevelUpSkill----------skillId={0}:Lv{1}", nId, nLevel); var skills = _this.mDbData.Skills; int nOldLevel; if (!skills.TryGetValue(nId, out nOldLevel)) { Logger.Warn("LevelUpSkill={0} not find !", nId); return; } if (nLevel == 0) { nLevel = nOldLevel + 1; } _this.mFlag = true; _this.MarkDirty(); skills[nId] = nLevel; if (_this.mDbData.EquipSkills.Contains(nId)) { _this.mCharacter.SkillChange(2, nId, nLevel); } _this.mCharacter.RefreshSkillTitle(); Logger.Info("LevelUpSkill={0} is Success! Level={1}", nId, nLevel); }
void Start() { common = RPC.NetworkingCommon.Instance; networkingInfo = GameController.Instance.networkingInfo; if (networkingInfo.port == -1) { networkingInfo.port = RPC.NetworkingInfo.defaultPort; } if (networkingInfo.address == "") { networkingInfo.address = RPC.NetworkingInfo.defaultAddress; } playerLog = GetComponent <PlayerLog>(); common.RegisterOnConsole(playerLog.AddEvent); if (networkingInfo.isServer) { server = new RPC.Server(networkingInfo); server.RegisterOnClient(ClientAvailable); } client = new RPC.Client(networkingInfo); client.RegisterClientShutdown(ShutdownClient); }
void Awake() { if (instance == null) { instance = this; } else if (instance != this) { Destroy(gameObject); } playerLog = GetComponent <PlayerLog>(); DontDestroyOnLoad(playerLog); if (level == 1) { playerLog.NewMessage("Welcome to Dungeon Adventure!"); } DontDestroyOnLoad(gameObject); boardScript = GetComponent <BoardManager>(); PlayerObject = GameObject.FindWithTag("Player"); enemies = new List <EnemyController>(); foundPotions = new Dictionary <int, int>(); InitGame(); }
public void SendClientQueueSuccess(PlayerConnect _this, QueueType type, ulong characterId) { var data = new QueueSuccessData(); data.Type = (int)type; switch (type) { case QueueType.Login: { LoginServerControlDefaultImpl.NotifyGateClientState(LoginServer.Instance.ServerControl, _this.ClientId, 0, GateClientState.Login); data.LastServerId = _this.Player.DbData.LastServerId; _this.Player.DbData.LoginDay++; _this.Player.DbData.LoginTotal++; } break; case QueueType.EnterGame: data.CharacterId = characterId; break; } PlayerLog.WriteLog((int)LogType.SendClientQueueSuccess, "SendClientQueueSuccess type = {0}, name = {1}", type, _this.Name); LoginServer.Instance.ServerControl.NotifyQueueSuccess(_this.ClientId, data); }
public void StartActivity(AllianceWar _this) { var am = ServerAllianceManager.GetAllianceByServer(_this.ServerId); if (am == null) { Logger.Error("StartActivity not find GetAllianceByServer!server={0},", _this.ServerId); return; } DBServerAllianceData data; if (!am.mDBData.TryGetValue(_this.ServerId, out data)) { Logger.Error("In BidOver() can't find data!"); return; } PlayerLog.WriteLog((ulong)LogType.AllianceWar, "StartActivity(), ServerId = {0}", _this.ServerId); _this.SetStatus((int)eAllianceWarState.WaitStart); var now = DateTime.Now; _this.StartHour = now.Hour; _this.StartMin = now.Minute; _this.AllianceIds.Clear(); _this.AlliancePlayers.Clear(); _this.EnterPlayerCount.Clear(); _this.AllianceIds.Add(data.Occupant); _this.AllianceIds.AddRange(data.Challengers); foreach (var id in _this.AllianceIds) { _this.AlliancePlayers.Add(id, new List <ulong>()); _this.EnterPlayerCount.Add(id, 0); } }
/// <summary> /// 买满了,等待揭晓结果 /// </summary> /// <returns></returns> private void WaitResult(GroupShopOne _this) { GroupShop.Dirty = true; _this.State = (int)eGroupShopItemState.WaitResult; //流拍逻辑 if (_this.NowCount < _this.tbGroupShop.LimitMinCount) { CoroutineFactory.NewCoroutine(PassIn, _this).MoveNext(); return; } var t = DateTime.Now.AddMinutes(GroupShopOne.OverTimeMinutes); _this.OverTime = t; if (_this.overTrigger != null) { TeamServerControl.tm.DeleteTrigger(_this.overTrigger); } _this.overTrigger = TeamServerControl.tm.CreateTrigger(t, () => GiveItem(_this)); var characterId = _this.BuyCharacterList.Range(); var count = _this.CharactersCount[characterId]; _this.mDbData.LuckyId = characterId; _this.mDbData.LuckyCount = count; CoroutineFactory.NewCoroutine(GetLogicSimpleDataCoroutine, _this).MoveNext(); var item = _this.mDbData.ItemData; PlayerLog.WriteLog((ulong)LogType.GroupShopOldDatasKeySame, "WaitResult, luckyId = {0}, luckyCount = {1}, item id = {2}, count = {3}", characterId, count, item.ItemId, item.Count); }
public void MatchOver(FightQueue _this) { //检查一次排队是否有问题 var guids = new List <ulong>(); var isHave = new Dictionary <ulong, int>(); foreach (var character in _this.tempTeam1) { foreach (var data in character.mDatas) { isHave.modifyValue(data.Id, 1); guids.Add(data.Id); } } foreach (var character in _this.tempTeam2) { foreach (var data in character.mDatas) { isHave.modifyValue(data.Id, 1); guids.Add(data.Id); } } PlayerLog.WriteLog((int)LogType.QueueLog, "MatchOver characterids={0}", guids.GetDataString()); if (isHave.Count != _this.tbQueue.CountLimit * 2) { PlayerLog.WriteLog((int)LogType.QueueLog, "MatchOver CheckId Count={0}", isHave.Count); foreach (var i in isHave) { PlayerLog.WriteLog((int)LogType.QueueLog, "cId={0},cValue={1}", i.Key, i.Value); QueueManager.Pop(i.Key, eLeaveMatchingType.TeamChange); } } //执行完毕的结果 foreach (var character in _this.tempTeam1) { _this.PushSuccessTime((int)DateTime.Now.GetDiffSeconds(character.StartTime)); _this.mCharacters.Remove(character); #if DEBUG PlayerLog.WriteLog((int)LogType.QueueMessage, "MatchOver mCharacters.Remove c={0}, ids={1}", character.Guid, character.mDatas.Select(d => d.Id).GetDataString()); #endif } foreach (var character in _this.tempTeam2) { _this.PushSuccessTime((int)DateTime.Now.GetDiffSeconds(character.StartTime)); _this.mCharacters.Remove(character); #if DEBUG PlayerLog.WriteLog((int)LogType.QueueMessage, "MatchOver mCharacters.Remove c={0}, ids={1}", character.Guid, character.mDatas.Select(d => d.Id).GetDataString()); #endif } var result = new QueueResult(_this); result.PushCharacter(_this.tempTeam1); result.PushCharacter(_this.tempTeam2); result.StartTrigger(); //results.Add(result); _this.tempTeam1 = new List <QueueCharacter>(); _this.tempTeam2 = new List <QueueCharacter>(); }
public override void OnPlayerLeave(ObjPlayer player) { base.OnPlayerLeave(player); PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------OnPlayerLeave----------"); if (mBattleState == BattleState.None) { if (mQuitPlayers.Contains(player.ObjId)) { mQuitPlayers.Remove(player.ObjId); CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext(); } else { var leave = SceneServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(60.0f), () => { CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext(); mLeaveTrigger.Remove(player.ObjId); }); mLeaveTrigger.Add(player.ObjId, leave); } } else { ResetPlayer(player); } }
public void LevelScene(SceneManager _this, ObjCharacter obj) { if (obj == null) { return; } var scene = obj.Scene; if (scene == null) { Logger.Info("GetSceneObj null..............."); return; } //后台统计 try { string v = string.Format("scene#{0}|{1}|{2}|{3}|{4}|{5}|{6}", obj.ServerId, obj.ObjId, obj.GetLevel(), obj.Attr.GetFightPoint(), //战力 obj.Scene.TypeId, 1, //0:进入 1:离开 DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); // 时间 PlayerLog.Kafka(v); } catch (Exception) { } scene.LeaveScene(obj); }
public void PlayerEnterSuccess(AllianceWar _this, ulong characterId, int allianceId) { PlayerLog.WriteLog((ulong)LogType.AllianceWar, "In PlayerEnterSuccess(), characterId = {0}, allianceId = {1}", characterId, allianceId); --_this.EnterPlayerCount[allianceId]; _this.AlliancePlayers[allianceId].Add(characterId); }
//洗天赋 public void RefreshTalent(Talent _this, CharacterController character) { var templist = new List <int>(); foreach (var i in _this.Talents) { if (Table.GetTalent(i.Key).ModifySkill == -1) { templist.Add(i.Key); } } foreach (var id in templist) { DeleteTalent(_this, id); } //foreach (var i in Talents) //{ // ChangeDistributablePoint(i.Key, i.Value); // //TalentCount += i.Value; //} //Talents.Clear(); _this.mFlag = true; _this.MarkDirty(); PlayerLog.WriteLog(_this.mCharacter.mGuid, "----------RefreshTalent----------TalentCount={0}", _this.TalentCount); //Logger.Info("RefreshTalent is Success! TalentCount={0}", TalentCount); _this.mCharacter.TalentChange(3, -1, -1); }
private IEnumerator NotifyResultToTeamServer(Coroutine co, int winAlliance) { var result = new AllianceWarResult(); result.ServerId = ServerId; result.Winner = winAlliance; var teamAgent = SceneServer.Instance.TeamAgent; for (var i = 0; i < 5; i++) { var msg = teamAgent.NotifyAllianceWarResult(0, result); yield return(msg.SendAndWaitUntilDone(co)); if (msg.State != MessageState.Reply) { PlayerLog.WriteLog((ulong)LogType.AllianceWarError, "NotifyAllianceWarResult not reply!"); } else if (msg.ErrorCode != (int)ErrorCodes.OK) { PlayerLog.WriteLog((ulong)LogType.AllianceWarError, "NotifyAllianceWarResult err = {0}!", msg.ErrorCode); } else { yield break; } } PlayerLog.WriteLog((ulong)LogType.AllianceWarError, "Fatal error!!!! NotifyAllianceWarResult Failed!!!"); }
public IEnumerator CreateCharacter(Coroutine coroutine, ChatService _this, CreateCharacterInMessage msg) { var characterId = msg.CharacterId; PlayerLog.WriteLog(characterId, "----------PrepareDataForCreateCharacter----------{0}", characterId); var result = AsyncReturnValue <ChatCharacterController> .Create(); var co = CoroutineFactory.NewSubroutine(CharacterManager.Instance.CreateCharacterController, coroutine, characterId, result, new object[] { msg.Request.Type }); if (co.MoveNext()) { yield return(co); } var retValue = result.Value; result.Dispose(); if (retValue == null) { msg.Reply((int)ErrorCodes.Error_PrepareEnterGameFailed); yield break; } var co1 = CoroutineFactory.NewSubroutine(CharacterManager.Instance.RemoveCharacter, coroutine, characterId); if (co1.MoveNext()) { yield return(co1); } msg.Reply(); }
void Start() { penguindata = GetComponent <PenguinData>(); eventLog = GetComponent <PlayerLog>(); EarthquakePickup.GetComponent <Earthquake>().enabled = false; LeafRaftPickup.GetComponent <LeafRaft>().enabled = false; }
public void Save() { Vector3 pos = GameObject.FindWithTag("Player").transform.position; // guarda posición actual de player var player = GameObject.FindWithTag("Player"); int id = player.GetComponent <Player>().teamId; //TeamManager tm = GameObject.FindWithTag("GameController").GetComponent<TeamManager>(); bool[] trainersDefeated = new bool[numOfTrainers]; // will iterate ofer TeamManager's trainers array and check their defeated value, save it to an array Debug.Log("TM's Trainers count = " + tmanager.Trainers.Count); for (int i = 0; i < tmanager.Trainers.Count; i++) { Debug.Log("Cycle: " + i + " defeated:" + tmanager.Trainers[i]); trainersDefeated[i] = tmanager.Trainers[i].defeated; } PlayerLog plog = new PlayerLog(pos.x, pos.y, pos.z, id, trainersDefeated); IFormatter formatter = new BinaryFormatter(); Debug.Log("Now Saving..."); Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, plog); stream.Close(); // se guardan los datos en un archivo }
//通知进入场景 public void NotifyEnterScene(CharacterSceneInfo info, int changeType, SceneParam sp) { PlayerLog.WriteLog(888, "NotifyEnterScene characterId={0},SceneId={1},newScene={2}", info.CharacterId, info.SceneInfo.SceneId, info.SceneInfo.SceneGuid); mLogger.Info("Enter Game {0} - NotifyEnterScene - 1 - {1}", info.CharacterId, TimeManager.Timer.ElapsedMilliseconds); mLogger.Info("NotifyEnterScene {0}, {1}.", info.CharacterId, info.SceneInfo.Server.RemoteEndPoint); var content = new __RPC_Scene_SSEnterScene_ARG_uint64_characterId_uint64_guid_uint64_applyGuid_int32_changeType_SceneParam_sceneParam__ (); content.CharacterId = info.CharacterId; content.Guid = info.SceneInfo.SceneGuid; content.ChangeType = changeType; content.SceneParam = sp; var message = new ServiceDesc(); message.FuncId = 3055; message.ServiceType = (int)ServiceType.Scene; message.PacketId = mBroker.GetUniquePacketId(); message.Data = ProtocolExtension.Serialize(content); message.Type = (int)MessageType.SS; message.CharacterId = info.CharacterId; info.SceneInfo.Server.SendMessage(message); }
public IEnumerator SaveOne <T>(Coroutine coroutine, Ranking _this, DataCategory cat, string key, T v) where T : IExtensible { PlayerLog.WriteLog((int)LogType.SaveRanking, "--------------------RankSave--------------------{0}", key); var ret = RankServer.Instance.DB.Set(coroutine, cat, key, v); yield return(ret); }
//移除玩家的排队信息 public void Remove(ulong guid, eLeaveMatchingType type) { var result = QueueManager.Characters.Remove(guid); PlayerLog.WriteLog((int)LogType.QueueMessage, "Remove().Matching remove id={0},type={1},result={2}", guid, type, result); TeamServer.Instance.ServerControl.TeamServerMessage(guid, (int)type, string.Empty); }
public bool InitByDb(CharacterController _this, ulong characterId, DBCharacterLogin dbData) { PlayerLog.WriteLog(characterId, "----------Login--------------------InitByDb--------------------{0}", dbData.SaveCount); _this.mDbData = dbData; _this.FirstLanding = false; return(true); }
void Start() { if (instance == null) { instance = this; DontDestroyOnLoad(this); } else { Destroy(gameObject); } }
void Start () { common = RPC.NetworkingCommon.Instance; networkingInfo = GameController.Instance.networkingInfo; if(networkingInfo.port == -1) networkingInfo.port = RPC.NetworkingInfo.defaultPort; if(networkingInfo.address == "") networkingInfo.address = RPC.NetworkingInfo.defaultAddress; playerLog = GetComponent<PlayerLog>(); common.RegisterOnConsole(playerLog.AddEvent); if(networkingInfo.isServer) { server = new RPC.Server(networkingInfo); server.RegisterOnClient(ClientAvailable); } client = new RPC.Client(networkingInfo); client.RegisterClientShutdown(ShutdownClient); }
/// <summary> /// 添加物品,包袱是否已经满各模块自己检查 /// </summary> /// <param name="goods">道具</param> /// <param name="source">来源</param> /// <param name="remark"></param> /// <param name="count"> /// 商城购卖时,记录消费晶币,骨币,战绩数量 /// 也可以存其它类型 /// </param> /// <returns></returns> public Dictionary<string, int> AddGoods(Dictionary<string, Variant> goods, GoodsSource source, string remark = null, int count = 0) { Dictionary<string, int> v = BurdenManager.BurdenBatchInsert(m_b0, goods); if (v == null || v.Count == 0) { return v; } UpdateBurden(); foreach (var item in v) { PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.AddGoods); log.itemcnt = item.Value; log.itemtype = item.Key; log.reserve_1 = (int)source; log.remark = remark; log.reserve_2 = count; this.WriteLog(log); UpdateTaskGoods(item.Key); } var scene = this.Scene; if (scene != null && this.Online && source != GoodsSource.GMGet) { foreach (string gid in v.Keys) { //珍稀物品发送通知: string position = RareGoodsManager.Instance.GetMsgTo(gid); if (!string.IsNullOrEmpty(position)) { string msg = RareGoodsManager.Instance.GetMsg(scene.Name, this.Name, gid, source); if (msg != null) { PlayersProxy.CallAll(ClientCommand.SendActivtyR, new object[] { position, msg }); } } } } return v; }
/// <summary> /// 添加玩家经验 /// </summary> /// <param name="experience">经验值</param> /// <param name="eType"></param> /// <param name="des"></param> /// <returns></returns> public int AddExperience(int experience, FinanceType eType, string remark = null) { if (experience <= 0) { return 0; } int upLev = 0; int curExp = Interlocked.Add(ref m_exp, experience); if (curExp >= m_maxExp) { upLev = UpLevel(); if (upLev > 0) { UserNote note = new UserNote(this, TaskCommand.PlayerActivation, new object[] { upLev, this.Level }); Notifier.Instance.Publish(note); //成就执行 this.FinishNote(FinishCommand.RoleUpLev, upLev); //通知场景上的玩家 Variant v = new Variant(2); v["ID"] = this.ID; v["Level"] = this.m_level; this.CallAll(ClientCommand.UpdateActorR, v); //获取技能 NewSkill(upLev); } } else { Variant v = new Variant(2); v["JingYan"] = new MVPair(this.m_maxExp, this.m_exp); UpdataActorR(v); } PlayerAccess.Instance.Save(this); PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.RoleExp); log.level = m_level; log.modifyexp = experience; log.totalexp = curExp; log.reserve_1 = (int)eType; log.remark = remark; this.WriteLog(log); return upLev; }
/// <summary> /// 宠物取得经验 /// </summary> /// <param name="pet"></param> /// <param name="experience"></param> /// <param name="isCall"></param> /// <param name="eType">宠物经验来源</param> /// <returns></returns> public bool AddPetExp(Pet pet, int experience, bool isCall, int eType) { if (pet == null) { return false; } Variant exp = pet.Value.GetVariantOrDefault("Experience"); if (exp.GetIntOrDefault("V") == int.MaxValue) { return false; } int newExp = exp.SetOrInc("V", experience); if (newExp < 0) { newExp = int.MaxValue; exp["V"] = newExp; } int petLev = pet.Value.GetIntOrDefault("PetsLevel"); if (petLev >= maxLevel) { pet.Save(); } else { int max = exp.GetIntOrDefault("M"); if (newExp >= max) { petLev = UpPetLev(pet, newExp, max, petLev); newExp = exp.GetIntOrDefault("V"); } else { pet.SaveLife(); } } if (isCall) { Call(PetsCommand.UpdatePetR, true, pet); } //宠物取得经验 PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.PetExp); log.level = petLev; log.modifyexp = experience; log.totalexp = newExp; log.reserve_1 = eType; log.remark = pet.ID; log.touid = PID; this.WriteLog(log); return true; }
/// <summary> /// 坐骑得到经验 /// </summary> /// <param name="exp">得到经验</param> /// <param name="gs">经验来源</param> /// <returns></returns> public bool AddMounts(int exp,GoodsSource gs) { if (m_mounts == null) return false; GameConfig gc = GameConfigAccess.Instance.FindOneById(m_mounts.MountsID); if (gc == null) { return false; } Variant v = gc.Value; if (v == null) { return false; } Variant ex = v.GetVariantOrDefault("Exp"); int max = 1; foreach (var item in ex) { int m = Convert.ToInt32(item.Key); if (m > max) { max = m; } } if (m_mounts.Level >= max) { //已经升到最高级 return false; } m_mounts.Experience += exp; int level = m_mounts.Level; bool isup = false; while (true) { if (m_mounts.Level >= max) break; int maxExp = ex.GetIntOrDefault(m_mounts.Level.ToString()); if (m_mounts.Experience < maxExp) break; m_mounts.Experience -= maxExp; m_mounts.Level++; m_mounts.Update = DateTime.UtcNow; isup = true; } if (m_mounts.Save()) { //表示升级更新出战宠属性 if (m_mounts.Status == 1 && isup) { PetAccess.PetReset(m_pet, Skill, false, m_mounts); } MountsUpdate(m_mounts, new List<string>() { "Experience", "Level" }); } //坐骑取得经验 日志 PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.MountsExp); //升到的等级 log.level = m_mounts.Level; log.modifyexp = exp;//得到坐骑经验 log.reserve_1 = (int)gs; //升之前的等级 log.reserve_2 = level; log.remark = m_mounts.ID; log.touid = PID; this.WriteLog(log); return true; }
/// <summary> /// 重新进入 /// </summary> /// <param name="member"></param> internal void ReInto(PlayerBusiness member) { if (m_team != null && m_team.TryAddMember(member)) { var members = m_team.AllPlayerDetail; member.Call(TeamCommand.IntoTeamR, true, new object[] { m_team, members }); member.CallAllExcludeOne(member, TeamCommand.NewMemberR, m_team.TeamID, new PlayerDetail(member)); var apcs = m_currentApcs.FindAll(k => k.State <= 1); member.Call(InstanceCommand.NewInstanceR, new object[] { true, apcs, string.Empty }); // 记录副本进入日志 PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.EctypeIn); log.itemtype = m_gc.SubType; //副本类型 log.itemid = m_gc.ID; //副本ID log.remark = m_gc.Name; //副本名称 member.WriteLog(log); } }
public bool TryInto(PlayerBusiness player) { PlayerTeam team = player.Team; //设置玩家列表. string msg; if (!FillPlayers(team, player, out msg)) { player.Call(InstanceCommand.NewInstanceR, new object[] { false, msg, string.Empty }); return false; } player.TeamInstance = this; // 检查副本进入限制 if (m_intoLimit != null) { PlayerBusiness member; if ((!m_intoLimit.IntoCheck(m_members, out msg, out member)) || (!m_intoLimit.IntoDeduct(m_members, out msg, out member))) { player.TeamInstance = null; this.CallAll(InstanceCommand.NewInstanceR, new object[] { false, msg, member == null ? string.Empty : member.Name }); m_members = Empty; return false; } } m_team = team; TeamInstanceProxy.TryAddInstance(this); //设置进入次数 for (int i = 0; i < m_members.Length; i++) { PlayerBusiness member = m_members[i]; if (member == null) continue; member.TeamInstance = this; member.WriteDaily(PlayerBusiness.DailyMap, m_gc.ID); //进入秘境通知.. member.AddAcivity(ActivityType.FuBenCount, 1); // 记录副本进入日志 PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.EctypeIn); log.itemtype = m_difficulty; log.itemid = m_gc.ID; log.remark = m_gc.Name; member.WriteLog(log); } oldx = player.X; oldy = player.Y; m_oldScene = player.Scene; m_currentScene = m_oldScene; Astate = ActionState.Standing; return true; }
/// <summary> /// 玩家退出 /// </summary> /// <param name="player"></param> /// <returns>剩余玩家数</returns> public int Exit(PlayerBusiness player, bool online = false) { int count = 0; for (int i = 0; i < m_members.Length; i++) { PlayerBusiness member = m_members[i]; if (member != null) { if (member != player) { count++; } } } if (count == 0) { TeamInstanceProxy.TryRemove(m_id); m_members = Empty; } // 记录副本退出日志 PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.EctypeOut); log.itemtype = m_difficulty; log.itemid = m_gc.ID; log.remark = m_gc.Name; player.WriteLog(log); if (online) { //转回主场景.. if (m_currentScene.ExitScene(player)) { player.TeamInstance = null; UserNote note = new UserNote(player, ClientCommand.IntoSceneSuccess, new object[] { oldx, oldy }); m_oldScene.Execute(note); } } return count; }
/// <summary> /// 失去经验 /// </summary> /// <param name="b">百分比</param> public void LostExperience(double b, FinanceType eType, string remark = null) { if (b > 0 && b <= 1.0) { int experience = (int)(m_exp * b); if (experience > 0) { m_exp -= experience; Variant v = new Variant(2); v["JingYan"] = new MVPair(this.m_maxExp, this.m_exp); UpdataActorR(v); PlayerAccess.Instance.Save(this); PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.RoleExp); log.level = m_level; log.modifyexp = -experience; log.totalexp = m_exp; log.reserve_1 = (int)eType; log.remark = remark; this.WriteLog(log); } } }
/// <summary> /// 添加日志 /// </summary> /// <param name="t">操作类型</param> /// <param name="itemtype"></param> /// <param name="itemcnt"></param> /// <param name="source">来源</param> /// <param name="remark">备注</param> /// <param name="reserve_2"></param> public void AddLog(Actiontype t, string itemtype, int itemcnt, GoodsSource source, string remark, int reserve_2) { PlayerLog log = new PlayerLog(ServerLogger.zoneid, t); log.itemtype = itemtype; log.itemcnt = itemcnt; log.reserve_1 = (int)source; log.remark = remark; log.reserve_2 = reserve_2; this.WriteLog(log); }
/// <summary> /// 取出邮件物品 /// </summary> /// <param name="note"></param> public static void GetEmailGoods(UserNote note) { string soleid = note.PlayerID + "GetEmailGoods"; if (!m_dic.TryAdd(soleid, soleid)) return; try { string emailid = note.GetString(0); Email model = EmailAccess.Instance.FindOneById(emailid); if (model == null) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoEmail)); return; } //是否操作邮件 if (model.Ver != 10) { if (model.Status > 1) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.GetEmailGoods1)); // 物品已经提取,不能重复领取 return; } } Variant v = model.Value; if (note.PlayerID != v.GetStringOrDefault("ReceiveID")) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoReceiveID)); return; } if (v.GetIntOrDefault("IsHave") != 1) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.GetEmailGoods2)); return; } PlayerEx b0 = note.Player.B0; Variant bv = b0.Value; IList c = bv.GetValue<IList>("C"); IList goodslist = v.GetValue<IList>("GoodsList"); if (goodslist != null) { int count = BurdenManager.BurdenSpace(c); if (goodslist.Count > count) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.BurdenFull)); return; } } model.Status = 2; if (model.Save()) { int score = v.GetIntOrDefault("Score"); if (score > 0) { note.Player.AddScore(score, FinanceType.ExtractGoods); } if (goodslist != null) { Dictionary<string, Variant> dic = new Dictionary<string, Variant>(); foreach (Variant item in goodslist) { string gid = item.GetStringOrDefault("SoleID"); if (gid != item.GetStringOrDefault("GoodsID")) { Goods g = GoodsAccess.Instance.FindOneById(item.GetStringOrDefault("SoleID")); if (g == null) continue; g.PlayerID = note.PlayerID; if (!g.Save()) continue; Variant gv = g.Value; Variant m = BurdenManager.GetBurdenSpace(c); if (m == null) continue; m["E"] = g.ID; m["G"] = g.GoodsID; m["A"] = 1;//只能一件物品 m["S"] = gv.GetIntOrDefault("Sort"); m["H"] = 0; m["D"] = 0; m["T"] = null; //任务更新 note.Player.UpdateTaskGoods(g.GoodsID); //邮件日志 PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.AddGoods); log.itemcnt = 1; log.itemtype = g.GoodsID; log.reserve_1 = (int)GoodsSource.ExtractGoods; log.remark = emailid; note.Player.WriteLog(log); } else { GameConfig gc = GameConfigAccess.Instance.FindOneById(gid); if (gc == null) continue; int num = item.GetIntOrDefault("Number"); int h = item.GetIntOrDefault("H"); h = h > 0 ? 1 : 0; Variant tmp; if (dic.TryGetValue(gid, out tmp)) { tmp.SetOrInc("Number" + h, num); } else { tmp = new Variant(); tmp.SetOrInc("Number" + h, num); dic.Add(gid, tmp); } } } //判断邮件状态 if (model.Ver == 10) { BurdenManager.BurdenBatchInsert(note.Player.B0, dic); model.Ver = 5; model.Save(); } else { note.Player.AddGoods(dic, GoodsSource.ExtractGoods, emailid); } } note.Call(EmailCommand.ExtractGoodsR, true, emailid); if (goodslist != null && goodslist.Count > 0) { note.Player.UpdateBurden(); } } } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <summary> /// 确定交易 /// </summary> /// <param name="note"></param> public static void EnterDeal(UserNote note) { Variant deal0 = note.Player.Value.GetVariantOrDefault("Deal"); if (deal0 == null) { note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.IsDeal)); return; } PlayerBusiness pb = PlayersProxy.FindPlayerByID(deal0.GetStringOrDefault("PlayerID")); if (pb == null || (!pb.Online)) { note.Player.Value.Remove("Deal"); note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.NoLine)); return; } //对家 Variant deal1 = pb.Value.GetVariantOrDefault("Deal"); if (deal1 == null) { note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.IsDeal)); return; } if (deal1.GetIntOrDefault("Status") != 3) { deal0["Status"] = 3; pb.Call(DealCommand.EnterDealR, true, note.PlayerID); note.Call(DealCommand.EnterDealR, true, note.PlayerID); return; } Variant v0 = deal0.GetVariantOrDefault("Goods"); Variant v1 = deal1.GetVariantOrDefault("Goods"); PlayerEx burden0 = note.Player.B0; IList c0 = burden0.Value.GetValue<IList>("C"); PlayerEx burden1 = pb.B0; IList c1 = burden1.Value.GetValue<IList>("C"); //交易双方的道具信息 IList goods0 = v0.GetValue<IList>("Goods"); IList goods1 = v1.GetValue<IList>("Goods"); if (!IsCheck(goods0, c0, note.Player)) { return; } if (!IsCheck(goods1, c1, pb)) { return; } //判断包袱是否已经满 if (BurdenManager.BurdenDealFull(burden0, goods1)) { pb.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.BurdenFull)); return; } //判断包袱是否已经满 if (BurdenManager.BurdenDealFull(burden1, goods0)) { note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.BurdenFull)); return; } //int Coin = v0.GetIntOrDefault("Coin") - v1.GetIntOrDefault("Coin"); int Score = v0.GetIntOrDefault("Score") - v1.GetIntOrDefault("Score"); if (!note.Player.AddScore(-Score, FinanceType.EnterDeal)) { note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.NoScore)); return; } pb.AddScore(Score, FinanceType.EnterDeal); //移除成功后 if (!BurdenManager.Remove(burden0, goods0)) { note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.NumberError)); return; } //移除成功后 if (!BurdenManager.Remove(burden1, goods1)) { note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.NumberError)); return; } BurdenManager.BurdenInsert(burden0, goods1); BurdenManager.BurdenInsert(burden1, goods0); foreach (Variant v in goods1) { //新加道具 note.Player.UpdateTaskGoods(v.GetStringOrDefault("G")); //移除的道具 pb.UpdateTaskGoods(v.GetStringOrDefault("G")); //面对交易日志 PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.AddGoods); log.itemcnt = v.GetIntOrDefault("Count"); log.itemtype = v.GetStringOrDefault("G"); log.touid = note.PID;// log.toopenid = pb.UserID; log.reserve_1 = (int)(FinanceType.EnterDeal); log.remark = pb.PID.ToString();//交易者 note.Player.WriteLog(log); } foreach (Variant v in goods0) { //新加道具 note.Player.UpdateTaskGoods(v.GetStringOrDefault("G")); //移除的道具 pb.UpdateTaskGoods(v.GetStringOrDefault("G")); //面对交易日志 PlayerLog log1 = new PlayerLog(ServerLogger.zoneid, Actiontype.AddGoods); log1.itemcnt = v.GetIntOrDefault("Count"); log1.itemtype = v.GetStringOrDefault("G"); log1.touid = pb.PID; log1.toopenid = note.Player.UserID; log1.reserve_1 = (int)(FinanceType.EnterDeal); log1.remark = note.PID.ToString(); pb.WriteLog(log1); } if (note.Player.Value.ContainsKey("Deal")) { note.Player.Value.Remove("Deal"); } if (pb.Value.ContainsKey("Deal")) { pb.Value.Remove("Deal"); } //Variant list0 = new Variant(); //list0.Add("B0",burden0); //note.Call(BurdenCommand.BurdenListR, list0); note.Player.UpdateBurden(); note.Call(DealCommand.EnterDealR, true, note.PlayerID); //通知更新另一位的包袱 //Variant list1 = new Variant(); //list1.Add("B0",burden1); //OnLineBusiness.Call(BurdenCommand.BurdenListR, list1); pb.UpdateBurden(); pb.Call(DealCommand.EnterDealR, true, note.PlayerID); }