예제 #1
0
파일: Game.cs 프로젝트: otbr/OTSharp
 /// <summary>
 /// Remove a creature from the map
 /// </summary>
 /// <param name="player"></param>
 public static void RemoveCreature(Creature creature)
 {
     Creatures.Remove(creature);
     creature.StandingTile.RemoveCreature(creature);
     if (creature is Player)
     {
         Channels.RemovePlayerFromAllChannels((Player)creature);
         RuleViolations.CloseRuleViolationReport((Player)creature);
     }
 }
예제 #2
0
        private void parseCloseRuleViolation(NetworkMessage msg)
        {
            string reporter = msg.ReadString();
            Player player   = Game.getPlayer(reporter);

            if (player != null)
            {
                RuleViolations.CloseRuleViolationReport(player);
            }
        }
예제 #3
0
        private void parseProcessRuleViolation(NetworkMessage msg)
        {
            string reporter = msg.ReadString();
            Player player   = Game.getPlayer(reporter);

            if (player != null)
            {
                RuleViolations.PlayerProcessRuleViolation(Player, player);
            }
        }
예제 #4
0
        public AnalyzeContext AnalyzeTryStatements(TryStatementSyntax tryStatementSyntax)
        {
            var tryContext = new AnalyzeContext(Project, Document);

            var tryStatement = new TryStatement();

            tryContext.Node         = tryStatementSyntax;
            tryContext.TryStatement = tryStatement;

            var(@class, declaration) = GetPlaceOfTryStatement(tryStatementSyntax, tryContext);
            tryContext.Class         = @class;
            tryContext.Declaration   = declaration;

            tryStatement.CatchClauses  = AnalyzeCatchClauses(tryStatementSyntax, tryContext);
            tryStatement.FinallyClause = AnalyzeFinallyClause(tryStatementSyntax, tryContext);

            RuleViolations.AddRange(tryContext.TryStatement.CatchClauses.SelectMany(c => c.RuleViolations));
            AnalyzedContexts.Add(tryContext);

            return(tryContext);
        }
예제 #5
0
        public RuleViolations ValidateCompany(CompanyInfo prm)
        {
            var result = new RuleViolations();

            if (string.IsNullOrWhiteSpace(prm.Title))
            {
                result.AddError(nameof(prm.Title), "Please specify company name");
            }
            else
            {
                if (_companyReader
                    .Any(new CompanyFilter
                {
                    Title = prm.Title,
                    ExceptIds = new[] { prm.Id }
                }))
                {
                    result.AddError(nameof(prm.Title), "A company with this name already exists");
                }
            }

            return(result);
        }
예제 #6
0
파일: Game.cs 프로젝트: otbr/OTSharp
        /// <summary>
        /// Triggered when any creature speaks
        /// We're basically using "Creature" since this function will handle NPCs and monsters speaking
        /// </summary>
        /// <param name="creature"></param>
        /// <param name="type"></param>
        /// <param name="message"></param>
        /// <param name="privateTo"></param>
        /// <param name="channelId"></param>
        public static void CreatureSpeak(Creature creature, TalkType type, string message, string privateTo, short channelId = 0)
        {
            Task.Factory.StartNew(() =>
            {
                HashSet <Creature> spectators = new HashSet <Creature>();
                switch (type)
                {
                case TalkType.Say:
                    GetCreatureSpectators(spectators, creature.Position, false,
                                          Map.maxClientViewportX, Map.maxClientViewportX, Map.maxClientViewportY, Map.maxClientViewportY);
                    foreach (Creature c in spectators)
                    {
                        if (c is Player)
                        {
                            Player player = (Player)c;
                            player.Connection.SendCreatureSay(creature, type, message);
                        }

                        c.onCreatureSpeak(creature, type, message);
                    }
                    break;

                case TalkType.Whisper:
                    GetCreatureSpectators(spectators, creature.Position, false,
                                          Map.maxClientViewportX, Map.maxClientViewportX, Map.maxClientViewportY, Map.maxClientViewportY);
                    foreach (Creature c in spectators)
                    {
                        if (c is Player)
                        {
                            Player player = (Player)c;
                            if (Position.AreInRange(player.Position, creature.Position))
                            {
                                player.Connection.SendCreatureSay(creature, type, message);
                            }
                            else
                            {
                                player.Connection.SendCreatureSay(creature, type, "pspsps");
                            }
                        }

                        c.onCreatureSpeak(creature, type, message);
                    }
                    break;

                case TalkType.Yell:
                    // TODO: Yelling exhaustion, 30 seconds
                    GetCreatureSpectators(spectators, creature.Position, false,
                                          18, 18, 14, 14);
                    foreach (Creature c in spectators)
                    {
                        if (c is Player)
                        {
                            Player player = (Player)c;
                            player.Connection.SendCreatureSay(creature, type, message.ToUpper());
                        }
                    }
                    break;

                case TalkType.PrivateChannel:
                case TalkType.PrivateChannelRed:
                case TalkType.RuleViolationAnswer:
                    PlayerTalkTo((Player)creature, type, message, privateTo);
                    break;

                case TalkType.ChannelYellow:
                case TalkType.ChannelRed:
                case TalkType.ChannelRedAnonymous:
                    if (!Channels.PlayerTalkToChannel((Player)creature, (ChannelID)channelId, message, type))
                    {
                        // Re-send in default as we weren't able to talk to the given channel
                        CreatureSpeak(creature, TalkType.Say, message, "");
                    }
                    break;

                case TalkType.Broadcast:
                    PlayerBroadcastMessage((Player)creature, message);
                    break;

                case TalkType.RuleViolationContinue:
                    RuleViolations.PlayerContinueRuleViolationReport((Player)creature, message);
                    break;

                case TalkType.RuleViolationChannel:     // Rule Violation Reporting
                    RuleViolations.PlayerReportRuleViolation((Player)creature, message);
                    break;

                default:
                    break;
                }
            });
        }
예제 #7
0
        /// <summary>
        /// Pretty self explanatory
        /// </summary>
        /// <param name="packetType"></param>
        /// <param name="msg"></param>
        private void parsePacket(byte packetType, NetworkMessage msg)
        {
            switch (packetType)
            {
            case 0x14:     // Logout
                Disconnect();
                Game.RemoveCreature(Player);
                break;

            case 0x1E:     // Keep Alive / Ping Response
                break;

            case 0x64:     // Auto Walk
                break;

            case 0x65:     // Move North
                Game.MoveCreature(Player, Direction.North);
                break;

            case 0x66:     // Move East
                Game.MoveCreature(Player, Direction.East);
                break;

            case 0x67:     // Move South
                Game.MoveCreature(Player, Direction.South);
                break;

            case 0x68:     // Move West
                Game.MoveCreature(Player, Direction.West);
                break;

            case 0x69:     // Stop-AutoWalk
                break;

            case 0x6A:     // Move North East
                Game.MoveCreature(Player, Direction.NorthEast);
                break;

            case 0x6B:     // Move South East
                Game.MoveCreature(Player, Direction.SouthEast);
                break;

            case 0x6C:     // Move South West
                Game.MoveCreature(Player, Direction.SouthWest);
                break;

            case 0x6D:     // Move North West
                Game.MoveCreature(Player, Direction.NorthWest);
                break;

            case 0x6F:     // Turn North
                break;

            case 0x70:     // Turn East
                break;

            case 0x71:     // Turn South
                break;

            case 0x72:     // Turn West
                break;

            case 0x78:     // Move Item
                break;

            case 0x7D:     // Request Trade
                break;

            case 0x7E:     // Look at an item in trade
                break;

            case 0x7F:     // Accept Trade
                break;

            case 0x80:     // Close/Cancel Trade
                break;

            case 0x82:     // Use Item
                break;

            case 0x83:     // Use Item Ex
                break;

            case 0x84:     // Battle Window
                break;

            case 0x85:     // Rotate Item
                break;

            case 0x87:     // Close Container
                break;

            case 0x88:     // "up-arrow" container
                break;

            case 0x89:     // Text Window
                break;

            case 0x8A:     // House Window
                break;

            case 0x8C:     // Look
                break;

            case 0x96:     // Say something
                parseSay(msg);
                break;

            case 0x97:     // Request Channels
                Channels.PlayerRequestChannels(Player);
                break;

            case 0x98:     // Open Channel
                ChannelID channelId = (ChannelID)msg.ReadShort();
                Channels.PlayerOpenChannel(Player, channelId);
                break;

            case 0x99:     // Close Channel
                Channels.RemovePlayerFromChannel(Player, (ChannelID)msg.ReadShort());
                break;

            case 0x9A:     // Open Private Channel
                break;

            case 0x9B:     // Process Rule Violation Report
                parseProcessRuleViolation(msg);
                break;

            case 0x9C:     // GM closes Rule Violation Report
                parseCloseRuleViolation(msg);
                break;

            case 0x9D:     // Player Cancels Report
                RuleViolations.CancelPlayerRuleViolation(Player);
                break;

            case 0xA0:     // Fight Modes
                break;

            case 0xA1:     // Attack
                break;

            case 0xA2:     // Follow
                break;

            case 0xA3:     // Invite Party
                break;

            case 0xA4:     // Join Party
                break;

            case 0xA5:     // Remove Party Invitation
                break;

            case 0xA6:     // Pass Party Leadership
                break;

            case 0xA7:     // Leave Party
                break;

            case 0xAA:     // Create Private Channel
                break;

            case 0xAB:     // Channel Invite
                break;

            case 0xAC:     // Channel Exclude
                break;

            case 0xBE:     // Cancel Move
                break;

            case 0xC9:     // Client Requests to resend tile
                break;

            case 0xCA:     // Client Requests to resend a container (happens when you store more than a container maxsize)
                break;

            case 0xD2:     // Requets Outfits
                break;

            case 0xD3:     // Set Outfit
                break;

            case 0xDC:     // Add VIP
                break;

            case 0xDD:     // Remove VIP
                break;

            case 0xE6:     // Bug Report
                break;

            case 0xE7:     // Violation Window
                break;

            case 0xE8:     // Debug Assertion
                break;

            default:
                Console.WriteLine("{0} sent packet 0x{1} which is unknown.", Player.Name, packetType.ToString("X2"));
                break;
            }

            listenConnection();
        }