# ngame **Repository Path**: WeiFengWa/ngame ## Basic Information - **Project Name**: ngame - **Description**: ngame 一款文字游戏服务器框架,可搭建回合制,自由探索,武侠、修真、模拟、剧本杀等游戏服务器。 ngame底层采用高性能JS框架,支持多线程、协程、JS代码加密。 https://gitee.com/grateful/ngame - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2021-11-07 - **Last Updated**: 2022-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## nGame - nGame 一款文字游戏服务端框架;用于快速构建:自由探索、武侠、修真、模拟,回合制,剧本杀、动态语言小说、等服务器 - 如果你有期望实现的功能请加Q群 ### ngame计划 - 完善框架功能 ## farOs - farOs 作为 nGame框架的驱动,底层使用机器码运行,支持多线程、协程、可快速实现HTTP服务器、聊天服务器,restApi服务器 ### farOs #### 计划 - socket、websocket客户端 - httpClient - JS代码加密 - 将JS编译为本地机器码 - JS泛型支持 - JS面向对象特性支持 #### 基本介绍 - farOs执行时,只能在项目的目录执行 - farOs中的路径情况 - farOs所在路径 farPath - 项目所在路径 processRootPath - farOs执行时控制台路径 far.CwdPath > 控制台路径如果和项目路径不一样,项目的路径就要写绝对的地址,所以一般都在项目目录下执行far指令 --- ## nGame 使用介绍 ### 部署 - 将farOs.jar、jdk、 ngame放在同一级目录下,然后执行ngame下的run.bat即可. ```js 正确的目录结构应该是 - ngame/ run.bat - jdk/ - farOs/ farOs.jar lib/ ``` [comment]: <> (~~在执行run.bat之前,需要设置两个地方~~) [comment]: <> ( - 游戏的目录设置) [comment]: <> ( - 在ngame下找到conf.js 将 appRootPath 对应的值改成游戏目录名字 如ngame) [comment]: <> ( - 设置farOs启动需要的配置文件路径 修改run.bat中的参数) [comment]: <> ( > java -Dfile.encoding=utf-8 -XX:-UseParallelGC -Xmx512m -Xms512m -Xmn256m -jar farOs.jar game-script/conf.js) [comment]: <> ( > ) [comment]: <> ( >将最后的`game-script/conf.js`换成游戏目录中的conf.js地址 再启动run.bat) ### 连接服务器 - farmud.exe 是临时的测试服务器的客户端工具,使用C#开发,功能简单,没有开源的必要。有能力的大佬可自行开发其他版本的websocket客户端。 - 由于目前更新非常频繁 ngame配套的运行环境 都在群内下载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 将作为保留关键字 - 类模板的属性,注意 类模板的属性必须以下划线开头,子类模板才能继承 ```js inherit/skill.js let _prop; function create() { } ``` - 继承 ```js //继承哪些JS 在所有代码之前要完成继承 let inherits = ([ "inherit/data.js", "inherit/room.js" ]); ``` - 引入函数库 ```js //载入那些函数库 let includes = ([ "include/common.js", ]); ``` ### 核心函数库介绍 - include/common.js - 通常情况下common.js 包括所有用到的内置函数库 - os.debug(arg[,args...]) - 向控制台输出数据,arg可以是任何类型的数据 ```js 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]) - 在一个类模板中调用其他类模板的方法或者属性 - 被调用的类模板如果没有加载到内存,驱动会自动加载一次 ```js D("adm/daemons/x.js")->killAll(); ``` - 默认情况下D函数根据类模板的文件名查找,如果需要根据类模板的实例的文件名查找,需要加上参数type,设置为1即可 ```js D("adm/daemons/x.js#H6f751",1)->killAll(); ``` - thisObject - thisObject 指向自己的指针,如果类模板继承了其他文件,在实例化对象之后,这些被继承的类模板中的 thisObject 关键字,都指向子类 ```js function a(){ } function b(){ thisObject.a(); //为了方便可以先赋值 let me = thisObject; me.a(); } ``` - os.importx("x.js") - 导入其他文件的开放属性或者函数,被导入的文件一定要实现__exports__ ```js //x.js let datas = {}; let __exports__ = { datas:datas, } //其他文件接收 let {datas} = os.importx("x.js"); ``` ### 模板类 - 模板类的实例 如 x.js 在硬盘中就是一个模板,当他被加载到内存后就是模板实例 - 模板类的对象 通过 newObj创建的都是模板类对象 这种对象在内存中的文件地址后面 都有 #123 这样的唯一标记 > 所以不同点就是 x.js 被加载到内存 他的地址 仅仅是x.js 如果newObj x.js 他的地址是 x.js#xxxx > > 模板类的实例就目前来讲都是通过ngame框架自动管理 ### js代码加密 ![](https://img2020.cnblogs.com/blog/293583/202110/293583-20211004015705250-44859441.png)