public override void OnResponse(NetState sender, RelayInfo info) { var buttonID = info.ButtonID - 1; var type = buttonID % TypeCount; var index = buttonID / TypeCount; switch (type) { case -1: { return; } case 1: { _page = 0; if (index < 4) { _search.Type = (SpawnSearchType)index; var isNumeric = int.TryParse(_search.SearchPattern, out _); if (index == 1 && !isNumeric || index != 1 && isNumeric) { _search.SearchPattern = ""; } } else if (index == 4) { var entry = info.GetTextEntry(0xFFFF); if (entry?.Text?.Length > 0) { _search.SearchPattern = entry.Text; } } else if (index == 5 && _copy != null && _spawners?.Length > 0) { foreach (var spawner in _spawners) { CopyProperty(_copy, spawner); } } else if (index == 6 && _copy != null && _spawners?.Length > 0) { foreach (var spawner in _spawners) { CopyEntry(_copy, spawner); } } else if (index == 7 && _copy != null) { var newSpawner = new Spawner(); FullCopy(_copy, newSpawner); newSpawner.Map = _mobile.Map; newSpawner.Location = _mobile.Location; newSpawner.Stop(); newSpawner.Start(); newSpawner.Respawn(); } break; } //copy case 2: { if (index < _spawners.Length) { _copy = _spawners[index]; } break; } //paste props case 3: { if (index < _spawners.Length && _copy != null) { CopyProperty(_copy, _spawners[index]); } break; } //paste entry case 4: { if (index < _spawners.Length && _copy != null) { CopyEntry(_copy, _spawners[index]); } break; } //save case 8: { if (index < _spawners.Length) { var spawner = _spawners[index]; var indexEntry = index >= _lineCount ? (index - _lineCount * _page) * EntryCount : index * EntryCount; var name = info.GetTextEntry(indexEntry); if (name?.Text.Length > 0) { spawner.Name = name.Text; } if (int.TryParse(info.GetTextEntry(indexEntry + 1)?.Text, out var walkRange)) { spawner.WalkingRange = walkRange; } if (int.TryParse(info.GetTextEntry(indexEntry + 2)?.Text, out var homeHange)) { spawner.HomeRange = homeHange; } if (TimeSpan.TryParse(info.GetTextEntry(indexEntry + 3)?.Text, out var minDelay)) { spawner.MinDelay = minDelay; } if (TimeSpan.TryParse(info.GetTextEntry(indexEntry + 4)?.Text, out var maxDelay)) { spawner.MaxDelay = maxDelay; } } break; } //go case 5: { if (index < _spawners.Length) { var spawner = _spawners[index]; _mobile.Map = spawner.Map; _mobile.Location = spawner.Location; } Refresh(false); return; } //open entry case 6: case 7: { if (index < _spawners.Length) { var spawner = _spawners[index]; Refresh(); if (type == 7) { _mobile.SendGump(new SpawnerGump(spawner)); } else { _mobile.SendGump(new PropertiesGump(_mobile, spawner)); } return; } break; } //delete case 9: { if (index < _spawners.Length) { _spawners[index].Delete(); } break; } case 10: { _page++; break; } case 11: { if (_page > 0) { _page--; } break; } } Refresh(); }