示例#1
0
        private void Look(Packet packet)
        {
            string response = packet.Client.Room.GetName(), names = string.Empty, name = string.Empty;
            packet.Client.Send("".NewLine(), false);
            packet.Client.Send(response.Ansi(Style.cyan).NewLine());
            response = packet.Client.Room.GetDesciption();
            packet.Client.Send(response.Ansi(Style.white).WordWrap(), false);

            int i = 0, count = packet.Client.Room.Exits.Count;
            foreach(Exit exit in packet.Client.Room.Exits) {
                names = names + exit.DoorLabel;
                if (i != count) { names = names + ", "; }
                if (i == count) { names = names + "."; }
                i++;
            }
            if (names != string.Empty) response = "Obvious exits: " + names;
            else response = "No obvious exits.";

            packet.Client.Send(response.Ansi(Style.green).NewLine());

            names = string.Empty;
            if (packet.Client.Room.Players.Count > 1) {
                names = Function.GetOtherNames(packet.Client.Room.Players.ToArray(), packet.Client.Name);
                if (names != string.Empty) packet.Client.Send("You see:" + names.Ansi(true, Style.cyan, Style.boldOn).WordWrap().NewLine());
            }

            names = Function.GetNames(packet.Client.Room.Mobs.ToArray());
            if (names != string.Empty) packet.Client.Send("You see:" + names.Ansi(Style.green).NewLine());
            // add items
        }
示例#2
0
 public bool InvokeCommand(string verb, Packet packet)
 {
     if (List.ContainsKey(verb)) {
         List[verb](packet);
         return true;
     }
     return false;
 }
示例#3
0
 public void InvokeCommand(string verb, Packet packet)
 {
     if (RoomCommands.Keys.Any(key => key.StartsWith(verb, System.StringComparison.CurrentCulture))) {
         RoomCommands.InvokeCommand(verb, packet);
         return;
     }
     if (PlayerCommands.Keys.Any(key => key.StartsWith(verb, System.StringComparison.CurrentCulture))) {
         PlayerCommands.InvokeCommand(verb, packet);
         return;
     }
 }
示例#4
0
        private Packet Parse(string message, Connection player)
        {
            Packet packet = new Packet(string.Empty, string.Empty, player);
            message = message.TrimStart(' ');
            message = message.StripExtraSpaces();

            if (message.FirstChar() == '\'') {
                message = message.Remove(0, 1).Insert(0, "say ").StripExtraSpaces();
                packet.known = true;
            } else {
                bool error = false;
                if (message.FirstWordIsSingleChar()) {
                    char ch = message.FirstChar();
                    switch (ch) {
                        case 'l':
                            message = message.Remove(0, 1).Insert(0, "look");
                            packet.known = true;
                            break;
                        case 'i':
                            message = message.Remove(0, 1).Insert(0, "inventory");
                            packet.known = true;
                            break;
                        case '?':
                            message = message.Remove(0, 1).Insert(0, "help");
                            packet.known = true;
                            break;
                        default:
                            packet.parameter = packet.verb;
                            packet.verb = ch.ToString();
                            error = true;
                            break;
                    }
                }
                if (error) return packet;
            }
            packet.verb = message.FirstWord();
            packet.parameter = message.StripFirstWord();
            if (Commands.IsCommand(packet.verb)) {
                packet.known = true;
            }
            if (!packet.known) {
                string verb = packet.verb;
                packet = Function.ContainsExit(player.Room.Exits.ToArray(), packet);
                if (packet.verb != verb) {
                    packet.known = true;
                }
            }
            return packet;
        }
示例#5
0
 private void Hide(Packet packet)
 {
     DontKnowYet(packet);
 }
示例#6
0
 private void Get(Packet packet)
 {
     DontKnowYet(packet);
 }
示例#7
0
 private void Close(Packet packet)
 {
     DontKnowYet(packet);
 }
示例#8
0
 public void DontKnowYet(Packet packet)
 {
     packet.Client.Send(Resource.DontKnowHow(packet.verb, packet.Client));
 }
示例#9
0
 public void Push(Packet packet)
 {
     queue.Enqueue(packet);
     OnEventReceived(this, packet);
 }
示例#10
0
 private void Talk(Packet packet)
 {
     DontKnowYet(packet);
 }
示例#11
0
 private void Say(Packet packet)
 {
     try {
         if (packet.parameter.IsNullOrWhiteSpace()) {
             packet.Client.Send("Say what?".Ansi(Style.yellow, Style.white).NewLine());
             return;
         }
         if (!packet.parameter.HasLastCharPunctuation()) { packet.parameter += "."; }
         string message = "\"" + packet.parameter + "\"".NewLine().Ansi(Style.white);
         foreach (Connection player in packet.Client.Room.Players) {
             if (player.Name == packet.Client.Name) {
                 player.Send("You say, ".Ansi(Style.white) + message.Ansi(Style.white));
             } else {
                 player.Send(packet.Client.Name + " says, ".Ansi(Style.white) + message.Ansi(Style.white));
             }
         }
     } catch (Exception e) {
         Common.Settings.SystemMessageQueue.Push(e.ToString());
     }
 }
示例#12
0
 private void Quit(Packet packet)
 {
     Common.Settings.Players.Remove(packet.Client.Name, "Player has left.");
     packet.Client.Send("See you again soon!".Ansi(Style.white).NewLine().NewLine());
     packet.Client.Room.Players.Remove(packet.Client.Name);
     SystemEventPacket eventPacket = new SystemEventPacket(EventType.disconnect, packet.Client.Name + " has left.", packet.Client);
     Common.Settings.SystemEventQueue.Push(eventPacket);
     packet.Client.Shutdown();
     packet.Client.Dispose();
 }
示例#13
0
 private void Pick(Packet packet)
 {
     DontKnowYet(packet);
 }
示例#14
0
 private void Open(Packet packet)
 {
     DontKnowYet(packet);
 }
示例#15
0
 private void MoveTo(Packet packet)
 {
     string names = string.Empty;
     int results = Function.GetSameNameCount(packet.Client.Room.Exits.ToArray(), packet.parameter);
     if (results > 1) {
         packet.Client.Send("Too ambiguous.".Ansi(Style.yellow).NewLine());
         return;
     }
     Exit exit = packet.Client.Room.Exits.Find(e => (e.DoorLabel.StartsWith(packet.parameter, StringComparison.OrdinalIgnoreCase)));
     if (exit == null) {
         DontKnowYet(packet);
         return;
     }
     Room nextRoom = exit.Room;
     packet.Client.Room.RemovePlayer(packet.Client, exit.Name);
     nextRoom.AddPlayer(packet.Client);
 }
示例#16
0
 private void Whisper(Packet packet)
 {
     DontKnowYet(packet);
 }
示例#17
0
 private void Statistics(Packet packet)
 {
     packet.Client.Send("I don't know how to ".Ansi(Style.yellow) + packet.verb.Ansi(Style.white) +
         " yet. But I hope to soon.".Ansi(Style.yellow, Style.white).NewLine());
 }
示例#18
0
 private void Yell(Packet packet)
 {
     DontKnowYet(packet);
 }
示例#19
0
 private void Messages_OnPlayerEventReceived(object myObject, Packet packet)
 {
     Packet message = Messages.Pop();
     if (message == null) message = packet;
     Common.Settings.SystemMessageQueue.Push("Room received: " + message);
 }
示例#20
0
 public void DontKnowHow(Packet command)
 {
     RoomCommands.DontKnowYet(command);
 }