天天看点

farOs 介绍

nGame

  • nGame 一款文字游戏服务端框架;用于快速构建:自由探索、武侠、修真、模拟,回合制,剧本杀、动态语言小说、等服务器
  • 如果你有期望实现的功能请加Q群

ngame计划

  • 完善框架功能

farOs

  • farOs 作为 nGame框架的驱动,底层使用机器码运行,支持多线程、协程、可快速实现HTTP服务器、聊天服务器,restApi服务器

farOs计划

  • socket、websocket客户端
    • httpClient
  • JS代码加密
  • 将JS编译为本地机器码
  • JS泛型支持
  • JS面向对象特性支持

部署

  • 将farOs.jar、jdk、 run.bat、ngame放在同一级目录下,然后执行run.bat即可.
    正确的目录结构应该是 
        - ngame
        - jdk
        - farOs.jar
        - run.bat
               
  • 在执行run.bat之前,需要设置两个地方
    • 游戏的目录设置
      • 在ngame下找到conf.js 将 appRootPath 对应的值改成游戏目录名字 如ngame
    • 设置farOs启动需要的配置文件路径 修改run.bat中的参数

      java -Dfile.encoding=utf-8 -XX:-UseParallelGC -Xmx512m -Xms512m -Xmn256m -jar farOs.jar game-script/conf.js

      将最后的

      game-script/conf.js

      换成游戏目录中的conf.js地址 再启动run.bat

连接服务器

  • farmud.exe 是临时的测试服务器的客户端工具,使用C#开发,功能简单,没有开源的必要。有能力的大佬可自行开发其他版本的websocket客户端。
  • 由于目前更新非常频繁 ngame配套的运行环境<farOs、jdk、farmud.exe、run.bat、Redis-x64-3.2.100 win免安装版>

    都在群内下载963081167

目录介绍

  • adm
    • 核心文件存放目录
  • adm/daemons
    • 需要常驻内存的程序
  • adm/master/master.js
    • 重要文件,驱动会调用该文件中的一些函数
  • clone
    • 模板类
  • clone/data
    • 游戏素材属性配置目录,建议所有的游戏元素的属性配置存放于此
  • cmds
    • 指令目录
  • d
    • 地图相关存放
  • include
    • 通用函数库
  • inherit
    • 存放可以被继承的类
  • main
    • 该目录只有一个main.js文件,为程序入口
  • demo
    • 演示程序
  • conf.js
    • 配置文件 准确说是驱动需要的配置文件

特性介绍和约定

超级属性、魔法属性、精灵属性

XXX` 大写的都为对象的魔法属性

__xxx__

小写的都为驱动为对象增加的超级属性

_exports_

精灵属性

大佬们一定 要区别清楚这些属性,虽然感觉有点扯蛋。。。

web和rest api支持

  • 目前暂时只支持静态页面 默认的网站目录 www 默认访问路径 http://127.0.0.1:8080
  • restapi 的访问路径 http://127.0.0.1:8080/api 不喜欢后面跟个api的可以用nginx做反向代理
  • 关于对js的支持

    ngame使用farOs驱动,farOs兼容了95%的js语法,除了farOs额外提供的体贴内置函数,大部分JS函数以及JS的特性都支持。

    从应用框架的角度讲farOs等同于nodejs;不同的是,farOs更专注文字游戏领域。

  • 文件
    • 在ngame中一个文件等同于一个类模板,这个概念非常重要。所有的类模板的父类模板都存放在inherit目录下
  • 关键字
    • me

      • 和其他语言不同me在ngame 是

        this

        的作用,是对自己的调用,me 将作为保留关键字
    • 类模板的属性,注意 类模板的属性必须以下划线开头,子类模板才能继承
    inherit/skill.js
       
       let _prop;
       function create() {
       
       }
               
    • 继承
      //继承哪些JS 在所有代码之前要完成继承
           let inherits = ([
               "inherit/data.js",
               "inherit/room.js"
           ]);
       
                 
    • 引入函数库
      //载入那些函数库
          let includes = ([
              "include/common.js",
          ]);
                 

核心函数库介绍

  • include/common.js
    • 通常情况下common.js 包括所有用到的内置函数库
      • os.debug(arg[,args...])
        • 向控制台输出数据,arg可以是任何类型的数据
          os.debug("你好世界","测试");
                     
      • newObj(arg1[,arg2]);
        • 将类模板实例化为游戏对象
          • arg1 模板类文件地址
          • arg2 对象属性配置文件地址
          let obj = newObj("clone/user.js");
          let obj = newObj("clone/user.js","clone/data/npc/xiaoyaozi.js");
          
          //当newObj使用第二个参数,自动装载对象属性时
          //被装载的文件一定要实现以下内容
          let datas = {
             //存储属性
             due:{
             id:"xiaoyaozi",
             name:"逍遥子",
             },
             //临时属性
             temp:{
          
             }
          };
          
          
          let __exports__ = {
          datas:datas,
          }
          
          
          
                     
      • D(arg[,type])
        • 在一个类模板中调用其他类模板的方法或者属性
          • 被调用的类模板如果没有加载到内存,驱动会自动加载一次
        D("adm/daemons/x.js")->killAll();
                   
        • 默认情况下D函数根据类模板的文件名查找,如果需要根据类模板的实例的文件名查找,需要加上参数type,设置为1即可
          D("adm/daemons/x.js#H6f751",1)->killAll();
                     
      • thisObject
        • thisObject 指向自己的指针,如果类模板继承了其他文件,在实例化对象之后,这些被继承的类模板中的

          thisObject 关键字,都指向子类

          function a(){
           }
          
           function b(){
              thisObject.a();
              //为了方便可以先赋值
              let me =  thisObject;
              me.a();
           }
          
                     
      • os.importx("x.js")
        • 导入其他文件的开放属性或者函数,被导入的文件一定要实现__exports__
          //x.js
              
              let datas = {};
          
              let __exports__ = {
              datas:datas,
              }
              
              //其他文件接收
              let {datas} = os.importx("x.js");
                     

js代码加密

farOs 介绍

继续阅读