public static async Task UpdateDoor(ENetPeer peer, int foreground, int x, int y, string text) { try { PlayerMoving sign = new PlayerMoving { PacketType = 0x3, CharacterState = 0x0, X = x, Y = y, PunchX = x, PunchY = y, NetID = -1, PlantingTree = foreground }; await SendPacketRaw(4, PlayerMovingPack(sign), 56, 0, peer); int hmm = 8; int text_len = text.Length; int lol = 0; int wut = 5; int yeh = hmm + 3 + 1; int idk = 15 + text_len; int is_locked = 0; int bubble_type = 1; int ok = 52 + idk; int kek = ok + 4; int yup = ok - 8 - idk; int magic = 56; int wew = ok + 5 + 4; int wow = magic + 4 + 5; int four = 4; byte[] data = new byte[kek]; byte[] p = new byte[wew]; for (int i = 0; i < kek; i++) { data[i] = 0; } Array.Copy(BitConverter.GetBytes(wut), 0, data, 0, four); Array.Copy(BitConverter.GetBytes(hmm), 0, data, yeh, four); Array.Copy(BitConverter.GetBytes(x), 0, data, yup, 4); Array.Copy(BitConverter.GetBytes(y), 0, data, yup + 4, 4); Array.Copy(BitConverter.GetBytes(idk), 0, data, 4 + yup + 4, four); Array.Copy(BitConverter.GetBytes(foreground), 0, data, magic, 2); Array.Copy(BitConverter.GetBytes(lol), 0, data, four + magic, four); Array.Copy(BitConverter.GetBytes(bubble_type), 0, data, magic + 4 + four, 1); Array.Copy(BitConverter.GetBytes(text_len), 0, data, wow, 2); Array.Copy(Encoding.ASCII.GetBytes(text), 0, data, 2 + wow, text_len); Array.Copy(BitConverter.GetBytes(is_locked), 0, data, ok, four); Array.Copy(BitConverter.GetBytes(four), 0, p, 0, four); Array.Copy(data, 0, p, four, kek); foreach (ENetPeer currentPeer in Peers) { if (currentPeer.State != ENetPeerState.Connected) { continue; } if (peer.InWorld(currentPeer)) { currentPeer.Send(p, 0, ENetPacketFlags.Reliable); } } } catch { Console.WriteLine("error in updatedoor"); } }
public static async Task SendTileUpdate(int x, int y, int tile, int causedBy, ENetPeer peer) { try { if (tile == 18) { (peer.Data as Player).LastPunchX = x; (peer.Data as Player).LastPunchY = y; } else if (tile == 32) { (peer.Data as Player).LastWrenchX = x; (peer.Data as Player).LastWrenchY = y; } PlayerMoving data = new PlayerMoving { PacketType = 0x3, CharacterState = 0x0, X = x, Y = y, PunchX = x, PunchY = y, XSpeed = 0, YSpeed = 0, NetID = causedBy, PlantingTree = tile }; World world = (peer.Data as Player).PWorld; int b = world.Items[x + y * world.Width].Background; if (world == null) { return; } if (x < 0 || y < 0 || x > world.Width || y > world.Height) { return; } await SendNothingHappened(peer, x, y); if ((peer.Data as Player).AdminID < 666) { if (world.Items[x + (y * world.Width)].Foreground == 6 || world.Items[x + (y * world.Width)].Foreground == 8 || world.Items[x + (y * world.Width)].Foreground == 3760) { return; } if (tile == 6 || tile == 8 || tile == 3760) { return; } } if ((peer.Data as Player).RawName != world.OwnerName) { if (world.Items[x + (y * world.Width)].Foreground == 242) { return; } } if (world.Name == "ADMIN" && (peer.Data as Player).AdminID > 0) { if (world.Items[x + (y * world.Width)].Foreground == 758) { await peer.SendRoulette(); } return; } if (tile == 32 && world.Items[x + y * world.Width].Foreground == 6016) { await SendGrowScanDialog(peer); } if (tile != 18 && tile != 32 && !ItemsData[tile].IsBackground && world.Items[x + (y * world.Width)].Foreground != 0) { if (tile != 822) { // allowed to place water on other blocks await SendNothingHappened(peer, x, y); return; } } if (world.Name != "ADMIN") { if (world.OwnerName != "") { int fg = world.Items[x + (y * world.Width)].Foreground; if (world.OwnerName != "") { var p = peer.Data as Player; if (!world.IsPublic) { if (p.RawName != world.OwnerName) { await peer.OnPlayPositioned("audio/punch_locked.wav"); await peer.SendSound("punch_locked.wav"); if (ItemsData[fg].Name.ToLower().Contains("lock")) { await peer.OnConsoleMessage(world.OwnerName + "'s `9World Lock"); } } } else { if (p.RawName != world.OwnerName && ItemsData[fg].Name.ToLower().Contains("lock")) { await peer.OnPlayPositioned("audio/punch_locked.wav"); await peer.SendSound("punch_locked.wav"); await peer.OnConsoleMessage(world.OwnerName + "'s World Lock `o(`$Open to Public`o)"); } } } else if (world.IsPublic) { if (world.Items[x + (y * world.Width)].Foreground == 242) { return; } } else { return; } } } if (tile == 32) { // TODO return; } DataItems def = new DataItems(); try { def = ItemsData[tile]; } catch { def.BreakHits = 4; } if (tile == 544 || tile == 546 || tile == 4520 || tile == 382 || tile == 3116 || tile == 4520 || tile == 1792 || tile == 5666 || tile == 2994 || tile == 4368) { return; } if (tile == 5708 || tile == 5709 || tile == 5780 || tile == 5781 || tile == 5782 || tile == 5783 || tile == 5784 || tile == 5785 || tile == 5710 || tile == 5711 || tile == 5786 || tile == 5787 || tile == 5788 || tile == 5789 || tile == 5790 || tile == 5791 || tile == 6146 || tile == 6147 || tile == 6148 || tile == 6149 || tile == 6150 || tile == 6151 || tile == 6152 || tile == 6153 || tile == 5670 || tile == 5671 || tile == 5798 || tile == 5799 || tile == 5800 || tile == 5801 || tile == 5802 || tile == 5803 || tile == 5668 || tile == 5669 || tile == 5792 || tile == 5793 || tile == 5794 || tile == 5795 || tile == 5796 || tile == 5797 || tile == 544 || tile == 546 || tile == 4520 || tile == 382 || tile == 3116 || tile == 1792 || tile == 5666 || tile == 2994 || tile == 4368) { return; } if (tile == 1902 || tile == 1508 || tile == 428) { return; } if (tile == 1770 || tile == 4720 || tile == 4882 || tile == 6392 || tile == 3212 || tile == 1832 || tile == 4742 || tile == 3496 || tile == 3270 || tile == 4722 || tile == 6864) { return; } if (tile >= 7068) { return; } if (tile == 18) { if (world.Items[x + (y * world.Width)].Background == 6864 && world.Items[x + (y * world.Width)].Foreground == 0) { return; } if (world.Items[x + (y * world.Width)].Background == 0 && world.Items[x + (y * world.Width)].Foreground == 0) { return; } //data.netID = -1; data.PacketType = 0x8; data.PlantingTree = 4; long time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); //if (world->Items[x + (y*world->Width)].foreground == 0) return; int a = world.Items[x + y * world.Width].Foreground; if (time - world.Items[x + (y * world.Width)].BreakTime >= 4000) { world.Items[x + (y * world.Width)].BreakTime = time; world.Items[x + (y * world.Width)].BreakLevel = 6; if (world.Items[x + (y * world.Width)].Foreground == 758) { await peer.SendRoulette(); } } else if (y < world.Height && world.Items[x + (y * world.Width)].BreakLevel + 6 >= ItemsData[a].BreakHits) { data.PacketType = 0x3; data.NetID = -1; data.PlantingTree = 18; data.PunchX = x; data.PunchY = y; world.Items[x + (y * world.Width)].BreakLevel = 0; int brokentile = world.Items[x + (y * world.Width)].Foreground; if (world.Items[x + (y * world.Width)].Foreground != 0) { if (world.Items[x + (y * world.Width)].Foreground == 242) { world.OwnerName = ""; world.IsPublic = false; world.AccessedPlayer = ""; foreach (var p in Peers) { if (p.State != ENetPeerState.Connected) { continue; } await p.OnConsoleMessage("`oWorld `0" + world.Name + " `ohas had it's World Lock's removed!"); } } world.Items[x + y * world.Width].Foreground = 0; } else { world.Items[x + (y * world.Width)].Background = 0; } } else { world.Items[x + (y * world.Width)].BreakTime = time; world.Items[x + (y * world.Width)].BreakLevel += 6; // TODO if (world.Items[x + (y * world.Width)].Foreground == 758) { await peer.SendRoulette(); } } } else { for (int i = 0; i < (peer.Data as Player).PlayerInventory.Items.Length; i++) { if ((peer.Data as Player).PlayerInventory.Items[i].ItemID == tile) { if ((uint)(peer.Data as Player).PlayerInventory.Items[i].ItemCount > 1) { (peer.Data as Player).PlayerInventory.Items[i].ItemCount--; } else { Array.Clear((peer.Data as Player).PlayerInventory.Items, i, 1); } } } if (ItemsData[tile].IsBackground) { world.Items[x + (y * world.Width)].Background = (short)tile; } if (world.Items[x + (y * world.Width)].Foreground != 0) { Console.WriteLine("return 11"); return; } else { int xx = data.PunchX; int yy = data.PunchY; foreach (ENetPeer currentPeer in Peers) { if (currentPeer.State != ENetPeerState.Connected) { continue; } if (peer.InWorld(currentPeer)) { //dont allow to put consumbales if (tile == 1368) { return; } if (tile == 276) { return; } } } world.Items[x + (y * world.Width)].Foreground = (short)tile; if (tile == 242) { world.OwnerName = (peer.Data as Player).RawName; world.OwnerNetID = (peer.Data as Player).NetID; world.IsPublic = false; await peer.OnPlayPositioned("audio/use_lock.wav"); await peer.SendSound("use_lock.wav"); foreach (ENetPeer currentPeer in Peers) { if (currentPeer.State != ENetPeerState.Connected) { continue; } if (peer.InWorld(currentPeer)) { await currentPeer.OnConsoleMessage("`3[`w" + world.Name + " `ohas been World Locked by `2" + (peer.Data as Player).DisplayName + "`3]"); } } } } world.Items[x + (y * world.Width)].BreakLevel = 0; } Random r = new Random(); byte xd = (byte)r.Next(1, 5); foreach (ENetPeer currentPeer in Peers) { byte[] raw = PlayerMovingPack(data); if (currentPeer.State != ENetPeerState.Connected) { continue; } if (peer.InWorld(currentPeer)) { await SendPacketRaw(4, raw, 56, 0, currentPeer); } //cout << "Tile update at: " << data2->punchX << "x" << data2->punchY << endl; } // To save all the worlds DB (memory) await SaveOrAddWorldAsync(world); } catch (Exception e) { Console.WriteLine("error in async Task sendtileupdate"); await peer.OnConsoleMessage(e.Message + " " + e.TargetSite + ",SOURCE : " + e.Source); } }