会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 构架探讨
网络游戏任务系统的构想
发表日期:2006-09-03 20:56:05作者: 出处:  

  现在的网络游戏中一般都有很多的任务可以做,玩家经过做任务既可以感受游戏的故事、更快的溶入游戏中,同时还能获得一些比较好的奖品,真正的好玩又实用。任务是网络游戏吸引玩家的重要手段,简单的有送信、取东西等,复杂的就像是一个小的RPG,通过一定的故事情节来一步步吸引玩家做下去。

  那么这些任务是怎样做出来的呢?这里想和大家探讨一下这方面的问题。通过观察和分析,发现一般网络游戏的任务是通过脚本来写的,关于脚本的具体实现等问题,这里不会深入的说明,有兴趣的朋友可以到网上搜索相关内容。我们假设已经有了一套完整的脚本系统,那么怎么在这套系统上做出游戏的任务呢?

  不论简单还是复杂,任务都是由一系列的步骤组成,那么我们可以在玩家身上放两个变量,一个记录任务的ID,一个记录当前任务所在的步骤Step,这两个变量就表明了该玩家正在做什么任务、做到第几步了。
  接下来是任务的定义,请看下面的类:

// 网络游戏的任务类

class CMission
{
    // 脚本触发点类型

    enum
    {
        TT_TALK = 1,    //和NPC对话

        TT_FIGHT = 2,    //和怪物战斗之前

        TT_WIN = 3,    //打死怪物之后

        TT_TIME = 4,    //特定时间

        TT_POINT = 5,    //特定地点

    };

    // 触发点结构

    struct stTouchPoint
    {
        long lTouchType;        // 触发点类型

        long lObjectID;            // 触发对象ID(可以是NPC、怪物、地点等)

        CString strScript;        // 具体脚本

    };

    long lMissionID;            // 任务编号

    list<sttouchpoint> listTouchPoint;    // 触发点列表

};

 

  一个任务由一系列触发事件的脚本组成,比如玩家和一个NPC对话后,NPC告诉他去打死某个怪物,然后回去找他就可以得到奖品,我们只需要控制玩家先触发哪个脚本、然后再触发哪个脚本就可以推动任务进行。

  首先和NPC对话,触发NPC脚本,把玩家的Step变量改为1(初始值为0),表明任务进行到了第一步,然后去打那个指定的怪物,打死后触发怪物的死亡脚本,当发现Step=1的时候,任务被推动,把Step改成2,然后再回去找那个NPC,NPC发现Step=2,就说明玩家已经打死了指定的怪物,这时给玩家奖品,最后把Step设成-1表明任务结束。  根据上面的机构,可以把任务设置成为一个个任务包,一个任务包包含了任务所牵涉的所有NPC、怪物以及它们相应的触发脚本,在服务器启动时会查找当前存在的任务包,并根据每个任务包的具体内容填写对应的触发者脚本链表。

  当一个触发者被触发后,遍历它的脚本链表,和玩家身上存在的任务ID比较,如果发现有相同任务ID的任务,再和玩家身上的任务Step比较,如果相同就说明玩家的任务正好进行到这一步,运行对应的脚本推进任务即可!
  至此,游戏任务的执行原理已经基本上描述出了,希望能对大家有所启发。

金点时空 soft
2002/3/25
E-mail:softboy@sina.com
http://www.gpgame.com

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00276