コード例 #1
0
ファイル: Keywords.cs プロジェクト: zerodowned/UO-Forever
        public static void EventSink_Speech(SpeechEventArgs args)
        {
            Mobile       from    = args.Mobile;
            PlayerMobile speaker = from as PlayerMobile;

            if (speaker == null)
            {
                return;                  // in case they are pseudoseering
            }
            int[] keywords = args.Keywords;

            if (args.Speech.ToLower().IndexOf("i wish to buy my head") > -1)
            {
                var turnedinhead = BaseShieldGuard.PendingStatloss.FirstOrDefault(x => x.HeadOwner == speaker);
                if (turnedinhead != null)
                {
                    if (Banker.Withdraw(speaker, typeof(Gold), 30000))
                    {
                        BaseShieldGuard.PendingStatloss.Remove(turnedinhead);
                        from.SendMessage(61, "You have successfully purchased your head back from the guards.");
                        turnedinhead.TurnedIn.BankBox.DropItem(new Gold(25000));
                        turnedinhead.TurnedIn.SendMessage(61, "You have received 25,000gp for the head of " + from.RawName + ".");
                    }
                    else
                    {
                        from.SendMessage(61, "You do not have enough gold to buy back your head from the guards!");
                    }
                }
                else
                {
                    foreach (Head2 head in Head2.AllHeads)
                    {
                        if (head == null)
                        {
                            continue;
                        }
                        if (head.Player == from)
                        {
                            from.SendMessage("Select a player with whom you wish to negotiate for your head!");
                            from.CloseGump(typeof(HeadOwnerListGump));
                            from.SendGump(new HeadOwnerListGump(from));
                            return;
                        }
                    }
                    from.SendMessage("Nobody in possession of your head was found.");
                }
            }

            for (int i = 0; i < keywords.Length; ++i)
            {
                switch (keywords[i])
                {
                case 0x002A:                         // *i resign from my guild*
                {
                    if (from.Guild != null)
                    {
                        if (SpellHelper.CheckCombat(from) || PublicMoongate.CheckCombat(from))
                        {
                            from.SendMessage("You cannot leave your guild while in combat.");
                        }
                        else
                        {
                            ((Guild)from.Guild).RemoveMember(from);
                        }
                    }

                    break;
                }

                case 0x0032:                         // *i must consider my sins*
                {
                    speaker.CheckKillDecay();
                    from.SendMessage(32, "Murder Counts : {0}", from.Kills);
                    if (speaker.InStat)      //check to see if statend time is still greater than current time
                    {
                        TimeSpan remaining = (speaker.StatEnd - DateTime.UtcNow);
                        from.SendMessage(32, "You are in statloss for: {0}", FormatTimeSpan(remaining));
                    }
                    else
                    {      //always try to clear the stat loss at this time
                        // note that it's checked on a 30 minute timer (in FoodDecay.cs)
                        // so this could save them a little time
                        BaseShieldGuard.StatLossDecay(speaker);
                    }

                    /*if ( from.ShortTermMurders < Mobile.MurderCount )
                     * {
                     *      if ( from.Kills < Mobile.MurderCount ) // not red, no stat loss
                     *      {
                     *              if ( from.ShortTermMurders <= 0 )
                     *                      from.SendLocalizedMessage( 502122, Notoriety.Hues[Notoriety.Innocent] ); // Fear not, thou hast not slain the innocent.
                     *              else
                     *                      from.SendLocalizedMessage( 502124, Notoriety.Hues[Notoriety.Innocent] ); // Fear not, thou hast not slain the innocent in some time...
                     *      }
                     *      else
                     *              from.SendLocalizedMessage( 502123, Notoriety.Hues[Notoriety.Innocent] ); // You are known throughout the land as a murderous brigand.
                     * }
                     * else // stat loss
                     * {
                     *      if ( from.Kills < Mobile.MurderCount ) //not red
                     *              from.SendLocalizedMessage( 502126, Notoriety.Hues[Notoriety.Murderer] ); // If thou should return to the land of the living, the innocent shall wreak havoc upon thy soul.
                     *      else
                     *              from.SendLocalizedMessage( 502123, Notoriety.Hues[Notoriety.Murderer] ); // You are known throughout the land as a murderous brigand.
                     * }
                     * /*
                     * if( !Core.SE )
                     * {
                     *      from.SendMessage( "Short Term Murders : {0}", from.ShortTermMurders );
                     *      from.SendMessage( "Long Term Murders : {0}",  from.Kills );
                     * }
                     * else
                     * {
                     *      from.SendMessage( 0x3B2, "Short Term Murders: {0} Long Term Murders: {1}", from.ShortTermMurders, from.Kills );
                     * }
                     */
                    break;
                }

                case 0x0035:                         // i renounce my young player status*
                {
                    if (from is PlayerMobile && ((PlayerMobile)from).Young && !from.HasGump(typeof(RenounceYoungGump)))
                    {
                        from.SendGump(new RenounceYoungGump());
                    }

                    break;
                }
                }
            }
        }