public static void blockReverse(tUpdate update) { int x2 = update.x / chunkSize; int y2 = update.y / chunkSize; int x3 = update.x % chunkSize; int y3 = update.y % chunkSize; if (!chunks.ContainsKey(x2 + y2 * Width)) return; chunks[x2 + y2 * Width].tileMap[x3 + y3 * chunkSize] = update.lastId; chunks[x2 + y2 * Width].damageMap[x3 + y3 * chunkSize] = update.lastHP; chunks[x2 + y2 * Width].GenSlant(); chunks[x2 + y2 * Width].GenMesh(1); }
void netEvent(NetworkPlayer player,int tick,string name, byte[] data) { MemoryStream stream = new MemoryStream(data); BinaryReader reader = new BinaryReader(stream); System.Type type = System.Type.GetType(name); if (type == null) return; if (!typeof(NetworkEvent).IsAssignableFrom(type)) return; NetworkEvent eventType = Activator.CreateInstance(type,tick) as NetworkEvent; if (eventType.type == NetworkSendType.Everyone) if (player == Network.player) { return; } eventType.player = player; FieldInfo[] info = type.GetFields(); int mask = reader.ReadInt32(); for (int i = 0; i < info.Length; i++) { if ((mask & (1 << i+1)) == 0) continue; if (info[i].FieldType.Name == "Single") { float val = reader.ReadSingle(); info[i].SetValue(eventType, val); } else if (info[i].FieldType.Name == "Char") { char val = reader.ReadChar(); info[i].SetValue(eventType, val); } else if (info[i].FieldType.Name == "Type") { string nm = reader.ReadString(); Type t = Type.GetType(nm); info[i].SetValue(eventType, t); } else if (info[i].FieldType.Name == "Boolean") { bool val = reader.ReadBoolean(); info[i].SetValue(eventType, val); } else if (info[i].FieldType.Name == "Byte") { byte val = reader.ReadByte(); info[i].SetValue(eventType, val); } else if (info[i].FieldType.Name == "String") { string val = reader.ReadString(); info[i].SetValue(eventType, val); } else if (info[i].FieldType.Name == "Int32") { int val = reader.ReadInt32(); info[i].SetValue(eventType, val); } else if (info[i].FieldType.Name == "Vector2") { Vector2 val = new Vector2(reader.ReadSingle(), reader.ReadSingle()); info[i].SetValue(eventType, val); } else if (info[i].FieldType.Name == "Int32[]") { int len = reader.ReadInt32(); int[] val = new int[len]; for (int j = 0; j < val.Length; j++) val[j] = reader.ReadInt32(); info[i].SetValue(eventType, val); } else if (info[i].FieldType.Name == "tUpdate[]") { int len = reader.ReadInt32(); tUpdate[] val = new tUpdate[len]; for (int j = 0; j < val.Length; j++) { byte t = reader.ReadByte(); if (t == 1) val[j] = new terrainDmg(); else if (t == 2) val[j] = new terrainAddBlock(); FieldInfo[] field = val[j].GetType().GetFields(); for (int k = 0; k < field.Length; k++) { if (field[k].FieldType.Name == "Int32") { int v = reader.ReadInt32(); field[k].SetValue(val[j], v); } } } info[i].SetValue(eventType, val); } else if (typeof(OmniObject).IsAssignableFrom(info[i].FieldType)) { int id = reader.ReadInt32(); info[i].SetValue(eventType, OmniWorld.instance.SpawnedObjectsNew[id]); } else if (typeof(OmniItemType).IsAssignableFrom(info[i].FieldType)) { int id = reader.ReadInt32(); info[i].SetValue(eventType, OmniItems.itemTypes[id]); } } bool flag = false; /* if (Network.isClient) { for (int i = 0; i < OmniEvents.toValidate.Count; i++) { if (type == OmniEvents.toValidate[i].GetType()) { OmniEvents.toValidate[i].validate(eventType); flag = true; } } } * */ if(Network.isClient) eventType.fromServer = true; OmniEvents.AddEvent(eventType); }
public BlockEvent(int tick,tUpdate[] updates) : base(tick) { this.updates = updates; this.type = NetworkSendType.ServerCommandAll; }