private static async void Server_OnConnect(object sender, ENetConnectEventArgs connectEventArgs) { int count = 1; //WorldDatabase.GetWorld("START"); //WorldDatabase.GetWorld("ADMIN"); //WorldDatabase.GetWorld("HELLO"); ENetPeer Peer = connectEventArgs.Peer; Console.WriteLine("Peer connected. IP : " + Peer.RemoteEndPoint.Address); foreach (var currentPeer in Peers) { if (currentPeer.State != ENetPeerState.Connected) { continue; } if (currentPeer.RemoteEndPoint.Equals(Peer.RemoteEndPoint)) { count++; } } Peer.Data = new Player(); if (count > 3) { await Peer.OnConsoleMessage("`oToo many accounts are logged in this IP. Please try again later."); } else { await Peer.SendData(1, BitConverter.GetBytes(0), 1); Peers.Add(Peer); } connectEventArgs.Peer.OnReceive += Peer_OnReceive; connectEventArgs.Peer.OnDisconnect += Peer_OnDisconnect; }
public static async Task SendCommands(ENetPeer peer, string cch) { // When adding a command with more than 1 param , example : "/hello world", // Make sure you use 'Contains' instead of 'Substring'! string str = cch.Split('|').Last(); if (str == "/test") { await peer.OnConsoleMessage("Worked!"); } else if (str == "/clearworld") { World world = peer.GetWorld(); int pos = 0; for (int i = 0; i < world.Items.Length; i++) { if (world.Items[i].Foreground == 242) { pos = i; } } if (world.OwnerName != (peer.Data as Player).RawName) { await peer.OnTalkBubble("You need to be the world owner to do this!", (peer.Data as Player).NetID); return; } WorldDatabase.Worlds[WorldDatabase.Worlds.IndexOf(world)] = WorldDatabase.GenerateClearWorld(world.Name, world.Width, world.Height , world.OwnerName, pos); foreach (var a in Peers.Where(x => x.InWorld(peer) && x.State == ENetPeerState.Connected)) { await a.SendLeave(); await a.OnAddNotification("", "World " + world.Name + " has been cleared!", "open_hub.wav"); await a.JoinWorld(world.Name, 0, 0); } } else if (str.Contains("/item ")) { try { string[] arr = str.Split(' '); if (arr.Length != 3) { return; } if (Convert.ToInt32(arr[2]) > 200) { await peer.OnTalkBubble("Maximum is 200 items only!"); } var a = (peer.Data as Player).PlayerInventory.Items.Where(x => x.ItemID == Convert.ToInt32(arr[1])).ToList(); if (a.Count == 0) { InventoryItems items = new InventoryItems { ItemCount = (byte)Convert.ToInt32(arr[2]), ItemID = Convert.ToInt32(arr[1]) }; (peer.Data as Player).PlayerInventory.Items = (peer.Data as Player) .PlayerInventory.Items.Append(items).ToArray(); await peer.OnConsoleMessage(ItemsData[items.ItemID].Name + " with ID " + items.ItemID + " " + "has been added to your inventory."); } else { InventoryItems items = new InventoryItems { ItemCount = (byte)(Convert.ToInt32(arr[2]) + a[0].ItemCount), ItemID = (byte)Convert.ToInt32(arr[1]) }; if (items.ItemCount > 200) { await peer.OnTalkBubble("You can only add " + (200 - (items.ItemCount - Convert.ToInt32(arr[2]))) + " items more!"); return; } int index = Array.IndexOf((peer.Data as Player).PlayerInventory.Items, a[0]); (peer.Data as Player).PlayerInventory.Items[index] = items; await peer.OnConsoleMessage(ItemsData[items.ItemID].Name + " with ID " + items.ItemID + " " + "has been added to your inventory."); } await peer.SendInventory((peer.Data as Player).PlayerInventory); } catch { return; } } else if (str == "/longpunch") { try { (peer.Data as Player).SmState = (peer.Data as Player).SmState == 1 ? 0 : 1; await peer.JoinWorld((peer.Data as Player).World, 0, 0); } catch (Exception e) { Console.WriteLine(e.Message); } } else if (str.Contains("/find ")) { try { string f = str.Substring(6); var arr = ItemsData.Where (x => x.Name.ToLower() .Contains(f.ToLower()) && x.ItemID % 2 == 0).ToList(); if (arr.Count > 100) { await peer.OnConsoleMessage("`4More than 100 items found. " + "Please specify more!"); await peer.OnTalkBubble("More than 100 items found. " + "Please specify more!"); return; } string s = "set_default_color|\nadd_label|small|Found " + arr.Count + " items|left|420|\nadd_spacer|small|\n"; arr.ForEach(x => s += "add_button_with_icon|findbutton" + x.ItemID + "|`9" + x.Name + "|left|" + x.ItemID + "||\n"); s += "\nadd_spacer|small|\nend_dialog|finddialog|Cancel||"; await peer.OnDialogRequest(s); } catch { return; } } else if (str == "/testing") { string s = "set_default_color|\nadd_label|small|testing|left|420|\nadd_text_input|textinput|`oWow : ||10|\nadd_spacer|small|\nadd_text_input|textinput2|`oWow||10|\nend_dialog|f|cancel|ok|"; await peer.OnDialogRequest(s); } else { if (str[0] == '/') { string s = str.ToLower(); if (s == "/fp" || s == "/dance" || s == "/dance2" || s == "/lol" || s == "/cheer") { await peer.OnAction(str); } else { await peer.OnConsoleMessage("Invalid Command!"); } } else { if (str.All(char.IsWhiteSpace)) { return; } await peer.SendChat(str); } } }
public static async Task SendCommands(ENetPeer peer, string cch) { // When adding a command with more than 1 param , example : "/hello world", // Make sure you use 'Contains' instead of 'Substring'! string str = cch.Split('|').Last(); if (str == "/test") { await peer.OnConsoleMessage("Worked!"); } else if (str.Contains("/item ")) { try { string[] arr = str.Split(' '); if (arr.Length != 3) { return; } if (Convert.ToInt32(arr[2]) > 200) { await peer.OnTalkBubble("Maximum is 200 items only!"); } var a = (peer.Data as Player).PlayerInventory.Items.Where(x => x.ItemID == Convert.ToInt32(arr[1])).ToList(); if (a.Count == 0) { InventoryItems items = new InventoryItems { ItemCount = (byte)Convert.ToInt32(arr[2]), ItemID = Convert.ToInt32(arr[1]) }; (peer.Data as Player).PlayerInventory.Items = (peer.Data as Player) .PlayerInventory.Items.Append(items).ToArray(); await peer.OnConsoleMessage(ItemsData[items.ItemID].Name + " with ID " + items.ItemID + " " + "has been added to your inventory."); } else { InventoryItems items = new InventoryItems { ItemCount = (byte)(Convert.ToInt32(arr[2]) + a[0].ItemCount), ItemID = (byte)Convert.ToInt32(arr[1]) }; if (items.ItemCount > 200) { await peer.OnTalkBubble("You can only add " + (200 - (items.ItemCount - Convert.ToInt32(arr[2]))) + " items more!"); return; } int index = Array.IndexOf((peer.Data as Player).PlayerInventory.Items, a[0]); (peer.Data as Player).PlayerInventory.Items[index] = items; await peer.OnConsoleMessage(ItemsData[items.ItemID].Name + " with ID " + items.ItemID + " " + "has been added to your inventory."); } await peer.SendInventory((peer.Data as Player).PlayerInventory); } catch { return; } } else if (str.Contains("/find ")) { try { string f = str.Substring(6); var arr = ItemsData.Where (x => x.Name.ToLower() .Contains(f.ToLower()) && x.ItemID % 2 == 0).ToList(); if (arr.Count > 100) { await peer.OnConsoleMessage("`4More than 100 items found. " + "Please specify more!"); await peer.OnTalkBubble("More than 100 items found. " + "Please specify more!"); return; } string s = "set_default_color|\nadd_label|small|Found " + arr.Count + " items|left|420|\nadd_spacer|small|\n"; arr.ForEach(x => s += "add_button_with_icon|findbutton" + x.ItemID + "|`9" + x.Name + "|left|" + x.ItemID + "||\n"); s += "\nadd_spacer|small|\nend_dialog|finddialog|Cancel||"; await peer.OnDialogRequest(s); } catch { return; } } else if (str == "/testing") { string s = "set_default_color|\nadd_label|small|testing|left|420|\nadd_text_input|textinput|`oWow : ||10|\nadd_spacer|small|\nadd_text_input|textinput2|`oWow||10|\nend_dialog|f|cancel|ok|"; await peer.OnDialogRequest(s); } else { if (str[0] == '/') { string s = str.ToLower(); if (s == "/fp" || s == "/dance" || s == "/dance2" || s == "/lol" || s == "/cheer") { await peer.OnAction(str); } else { await peer.OnConsoleMessage("Invalid Command!"); } } else { if (str.All(char.IsWhiteSpace)) { return; } await peer.SendChat(str); } } }
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); } }