/// <summary> /// 解析单位行为 /// </summary> /// <param name="msg"></param> /// <param name="player"></param> void ParseUnitBehavious(string msg, PlayerData player) { float time; int camp; string ID; string data = msg.Split(' ')[1]; string[] t = data.Split('@'); time = ServerFunction.SendNumber2Float(t[0]); camp = int.Parse(t[1]); ID = t[2]; //检查行为是否超时 if (time + config.MAXTIME_MSG < Time) { return; } else { //是否合法 if (!UnitDic[camp][ID].isError) { BroadcastMsg(msg); } } }
/// <summary> /// 解析单位创造 /// </summary> /// <param name="msg"></param> /// <param name="player"></param> void ParseCreateUnit(string msg, PlayerData player) { Vector3 pos; string rotation; float recoverSpeed; float Time_recover; int MaxDValue; int[] material = new int[3]; int type; int index; string[] data = msg.Split(' ')[1].Split(':'); pos = Vector3.Parse(data[0], ','); rotation = data[1]; recoverSpeed = ServerFunction.SendNumber2Float(data[2]); Time_recover = ServerFunction.SendNumber2Float(data[3]); MaxDValue = int.Parse(data[4]); material[0] = int.Parse(data[5]); material[1] = int.Parse(data[6]); material[2] = int.Parse(data[7]); type = int.Parse(data[8]); //是否能创建 if (!player.isCanCreate(material)) { return; } index = UnitIndex++; UnitInfo t = new UnitInfo(index.ToString(), recoverSpeed, Time_recover, MaxDValue, type, pos, rotation); //添加字典 UnitDic[player.Camp].Add(index.ToString(), t); player.UpdateMaterial(material, -1); //设置委托 t.dele_updateBehavious = UpdateBehavious; //广播 string MSG = string.Format(format_CU, index, data[0], data[1], player.Camp, data[8] ); BroadcastMsg(MSG); }
const string format_DM = "DM {0}:{1}:{2}:{3}"; //阵营:单位ID:当前DValue:受伤的时间 /// <summary> /// 解析伤害信息 /// </summary> /// <param name="msg"></param> /// <param name="player"></param> void ParseDamageInfo(string msg, PlayerData player) { bool isPlayer; string target; int damage; float time; int camp; Vector3 shootPos; string data = msg.Split(' ')[1]; string[] t = data.Split(':'); isPlayer = (t[0] == "0" ? false : true); target = t[1]; damage = int.Parse(t[2]); time = ServerFunction.SendNumber2Float(t[3]); camp = int.Parse(t[4]); shootPos = Vector3.Parse(t[5], ','); //超时 if (time + config.MAXTIME_MSG < Time) { return; } if (isPlayer) { Players[int.Parse(target)].getDamage(damage, shootPos); } else { float DValue = UnitDic[camp][target].getDamage(damage, Time); //构造广播信息 string sendMSG = string.Format(format_DM, camp, target, ServerFunction.Float2SendNumber(DValue), ServerFunction.Float2SendNumber(Time)); //广播 BroadcastMsg(sendMSG); } }