コード例 #1
0
ファイル: PrestigeNpc.cs プロジェクト: Mixi59/Stump
        public static void Initialize()
        {
            if (m_scriptDisabled)
            {
                return;
            }

            var npc = NpcManager.Instance.GetNpcTemplate(NpcId);

            if (npc == null)
            {
                Logger.Error("Npc {0} not found, script is disabled", NpcId);
                m_scriptDisabled = true;
                return;
            }

            npc.NpcSpawned += OnNpcSpawned;

            Message            = NpcManager.Instance.GetNpcMessage(MessageId);
            MessageError       = NpcManager.Instance.GetNpcMessage(MessageLevelErrorId);
            MessagePrestigeMax = NpcManager.Instance.GetNpcMessage(MessagePrestigeMaxId);

            if (Message != null && MessageError != null && MessagePrestigeMax != null)
            {
                return;
            }

            Logger.Error("Messages {0},{1},{2} not found, script is disabled", MessageId, MessageLevelErrorId, MessagePrestigeMaxId);
        }
コード例 #2
0
        public virtual void Reply(short replyId)
        {
            NpcMessage currentMessage = this.CurrentMessage;

            NpcReply[] array = (
                from entry in this.CurrentMessage.Replies
                where entry.ReplyId == (int)replyId
                select entry).ToArray <NpcReply>();
            if (array.Any((NpcReply x) => !x.CanExecute(this.Npc, this.Character)))
            {
                this.Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 34, new object[0]);
            }
            else
            {
                NpcReply[] array2 = array;
                for (int i = 0; i < array2.Length; i++)
                {
                    NpcReply reply = array2[i];
                    this.Reply(reply);
                }
                if (array.Length == 0 || currentMessage == this.CurrentMessage)
                {
                    this.Close();
                }
            }
        }
コード例 #3
0
ファイル: NpcAlignement.cs プロジェクト: Mixi59/Stump
        public static void Initialize()
        {
            if (m_scriptDisabled)
            {
                return;
            }

            var npc = NpcManager.Instance.GetNpcTemplate(NpcId);

            if (npc == null)
            {
                Logger.Error("Npc {0} not found, script is disabled", NpcId);
                m_scriptDisabled = true;
                return;
            }

            npc.NpcSpawned += OnNpcSpawned;

            Message = NpcManager.Instance.GetNpcMessage(MessageId);

            if (Message != null)
            {
                return;
            }

            Logger.Error("Message {0} not found, script is disabled", MessageId);
            m_scriptDisabled = true;
        }
コード例 #4
0
 public virtual void ChangeMessage(NpcMessage message)
 {
     this.CurrentMessage = message;
     System.Collections.Generic.IEnumerable <short> replies = (
         from entry in message.Replies
         where entry.CriteriaExpression == null || entry.CriteriaExpression.Eval(this.Character)
         select(short) entry.ReplyId).Distinct <short>();
     ContextRoleplayHandler.SendNpcDialogQuestionMessage(this.Character.Client, this.CurrentMessage, replies, new string[0]);
 }
コード例 #5
0
        public void ChangeMessage(short id)
        {
            NpcMessage npcMessage = Singleton <NpcManager> .Instance.GetNpcMessage((int)id);

            if (npcMessage != null)
            {
                this.ChangeMessage(npcMessage);
            }
        }
コード例 #6
0
        public virtual void ChangeMessage(NpcMessage message)
        {
            CurrentMessage = message;

            var replies = message.Replies.
                          Where(entry => entry.CanShow(Npc, Character)).
                          Select(entry => (short)entry.ReplyId).Distinct();

            ContextRoleplayHandler.SendNpcDialogQuestionMessage(Character.Client, CurrentMessage, replies);
        }
コード例 #7
0
ファイル: Module_Npc.cs プロジェクト: NoeCalmness/CoreFrame
    /// <summary>
    /// 根据ID获取对应的NPC的信息
    /// </summary>
    /// <param name="npcid"></param>
    /// <returns></returns>
    public NpcMessage GetTargetNpc(NpcTypeID npcid)
    {
        if (!m_allNpcInfo.ContainsKey(npcid))
        {
            if (npcid == NpcTypeID.None)
            {
                return(null);
            }

            NpcMessage.CreateDefault((int)npcid);
            m_allNpcInfo.Add(npcid, NpcMessage.defaultNpc);
            return(NpcMessage.defaultNpc);
        }
        return(m_allNpcInfo.Get(npcid));
    }
コード例 #8
0
ファイル: Module_Npc.cs プロジェクト: NoeCalmness/CoreFrame
    /// <summary>
    /// NPC信息
    /// </summary>
    /// <param name="p"></param>
    void _Packet(ScNpcInfo p)
    {
        if (p != null && p.npcinfos != null && p.npcinfos.Length > 0)
        {
            m_allNpcs.Clear();
            m_allNpcInfo.Clear();

            PNpcInfo[] infos = null;
            p.npcinfos.CopyTo(ref infos);
            List <PNpcInfo> list = new List <PNpcInfo>(infos);
            list.Sort((a, b) => a.npcId.CompareTo(b.npcId));

            PNpcEngagement engagement = null;
            if (p.engagementNpc != null)
            {
                p.engagementNpc.CopyTo(ref engagement);
            }

            for (int i = 0; i < list.Count; i++)
            {
                NpcMessage msg = null;
                if (engagement != null && engagement.npcId == list[i].npcId)
                {
                    msg = new NpcMessage(list[i], engagement);
                }
                else
                {
                    msg = new NpcMessage(list[i]);
                }

                if (msg.isNull || msg.npcInfo == null || msg.npcInfo.type == 2)
                {
                    continue;
                }

                m_allNpcs.Add(msg);
                m_allNpcInfo.Add((NpcTypeID)list[i].npcId, msg);
            }

            DispatchModuleEvent(EventReceiveLoginNpcInfo);
        }
    }
コード例 #9
0
ファイル: Module_Npc.cs プロジェクト: NoeCalmness/CoreFrame
        public static void CreateDefault(int id)
        {
            var npc = PacketObject.Create <PNpcInfo>();

            npc.npcId      = (ushort)id;
            npc.currentLv  = 1;
            npc.currentExp = 0;
            npc.starStLv   = 1;
            npc.starExp    = 0;

            var info = ConfigManager.Get <NpcInfo>(id);

            if (info == null)
            {
                Logger.LogError("config_npcInfo do not have the msg id=={0}", id);
                npc.mode = 39001;
            }
            npc.mode = (ushort)info.cloth;

            defaultNpc = new NpcMessage(npc);
        }
コード例 #10
0
ファイル: Module_Npc.cs プロジェクト: NoeCalmness/CoreFrame
    public Task GetTargetTask(NpcMessage npc, byte taskId = 0)
    {
        if (npc == null || npc.npcInfo == null || npc.npcInfo.tasks == null)
        {
            return(null);
        }

        var tasks = npc.npcInfo.tasks;

        for (int i = 0; i < tasks.Length; i++)
        {
            if (tasks[i].fetterLv == npc.fetterLv)
            {
                //调用任务module接口,返回是否有这个任务
                if (taskId != 0 && tasks[i].taskId != taskId)
                {
                    continue;
                }
                return(moduleTask.GetTask((byte)tasks[i].taskId));
            }
        }
        return(null);
    }
コード例 #11
0
 public static void SendNpcDialogQuestionMessage(IPacketReceiver client, NpcMessage message, IEnumerable <short> replies, params string[] parameters)
 {
     client.Send(new NpcDialogQuestionMessage((short)message.Id, parameters, replies));
 }
コード例 #12
0
 public static void SendNpcDialogQuestionMessage(IPacketReceiver client, NpcMessage message, System.Collections.Generic.IEnumerable <short> replies, params string[] parameters)
 {
     client.Send(new NpcDialogQuestionMessage((ushort)message.Id, parameters, replies.Cast <ushort>()));
 }