├── README.md ├── base ├── buffer.js ├── compressor.js ├── config.js ├── db.js ├── http.js ├── index_multi.js ├── log.js └── util.js ├── build ├── Makefile ├── Release │ ├── .deps │ │ └── Release │ │ │ ├── hello.node.d │ │ │ └── obj.target │ │ │ ├── hello.node.d │ │ │ └── hello │ │ │ └── hello.o.d │ ├── hello.node │ ├── linker.lock │ └── obj.target │ │ └── hello.node ├── binding.Makefile ├── config.gypi └── hello.target.mk ├── game ├── app.js ├── billing_client.js ├── config.ini ├── data │ ├── achievement.json │ ├── activity.json │ ├── battle_field.json │ ├── beauty.json │ ├── beauty_pool.json │ ├── card.json │ ├── card_exp.json │ ├── card_fragment.json │ ├── card_pool.json │ ├── const.json │ ├── drop.json │ ├── exchange.json │ ├── explore.json │ ├── explore_event.json │ ├── gate.json │ ├── gift.json │ ├── initialization.json │ ├── item.json │ ├── key_words.txt │ ├── login_reward.json │ ├── play_first_name.json │ ├── play_last_name.json │ ├── purchase_shop.json │ ├── rank_reward.json │ ├── rank_time_reward.json │ ├── recharge_reward.json │ ├── recruit.json │ ├── robot.json │ ├── role_exp.json │ ├── sacrifice.json │ ├── server_config.json │ ├── share.json │ ├── shop.json │ ├── sign_reward.json │ ├── town.json │ ├── town_reward.json │ └── town_title.json ├── dynamic.ini ├── game_server.js ├── master_data │ └── town_reward.json ├── master_logic │ ├── common_func.js │ ├── help_log_data_logic.js │ ├── help_tick_logic.js │ ├── json_config_file.js │ ├── log_data.js │ └── town_reward_data.js ├── master_server.js ├── msg_logic │ ├── achievement_data.js │ ├── activity_data.js │ ├── arena_data.js │ ├── battle_field_data.js │ ├── card_data.js │ ├── card_exp_data.js │ ├── card_frag_data.js │ ├── code_data.js │ ├── common_func.js │ ├── constant_data.js │ ├── data_struct.js │ ├── define_code.js │ ├── drop_data.js │ ├── explore_data.js │ ├── explore_event_data.js │ ├── formation_data.js │ ├── friend_data.js │ ├── gate_data.js │ ├── gift_data.js │ ├── help_activity_logic.js │ ├── help_arena_logic.js │ ├── help_billing_logic.js │ ├── help_card_logic.js │ ├── help_chat_logic.js │ ├── help_child_logic.js │ ├── help_client_error_logic.js │ ├── help_drop_logic.js │ ├── help_explore_logic.js │ ├── help_formation_logic.js │ ├── help_friend_logic.js │ ├── help_gate_logic.js │ ├── help_gift_logic.js │ ├── help_gm_billing_logic.js │ ├── help_item_logic.js │ ├── help_log_data_logic.js │ ├── help_login_logic.js │ ├── help_mail_logic.js │ ├── help_money_logic.js │ ├── help_purchase_shop_logic.js │ ├── help_recruit_logic.js │ ├── help_role_data_logic.js │ ├── help_share_logic.js │ ├── help_shop_logic.js │ ├── help_town_logic.js │ ├── initialization_data.js │ ├── item_data.js │ ├── json_config_file.js │ ├── key_words_data.js │ ├── log_data.js │ ├── login_reward_data.js │ ├── mail_data.js │ ├── make_db.js │ ├── msg_type.js │ ├── play_name.js │ ├── pool_data.js │ ├── purchase_shop_data.js │ ├── recharge_reward_data.js │ ├── recruit_data.js │ ├── robot_data.js │ ├── role_exp_data.js │ ├── server_config_data.js │ ├── share_data.js │ ├── shop_data.js │ ├── sign_reward_data.js │ ├── t_reward_data.js │ ├── test.js │ ├── town_data.js │ └── town_title_data.js └── server.log ├── server.log ├── start_server.sh └── stop_server.sh /README.md: -------------------------------------------------------------------------------- 1 | # zspeed(zebra speed) 2 | 极速斑马,我所在工作室的名称。就以这个名字,来命名该项目的名字吧。 3 | 4 | # 这个项目是什么? 5 | 该项目是手机网络游戏《开心连三国》服务器全套代码,开发语言使用nodejs,数据库使用mongodb。通讯使用socket长连接,架构逻辑简洁清晰,适用于中小团队开发的手机网络游戏。同时在线人数支持5000左右!开源本项目的目的,希望的是大家多多交流,共同进步! 6 | 7 | # 为什么使用nodejs作为游戏服务器的开发语言? 8 | 1:node.js自身特点与游戏服务器的特性惊人的吻合。io与可伸缩性的优势。io密集型的应用采用node.js是最合适的, 可达到最好的可伸缩性,语言优势。 9 | 2:使用javascript开发可以实现快速迭代,如果客户端使用html,更可实现代码共用。 10 | 3:采用异步式I/O于事件驱动的架构设计,并发请求速度更快。 11 | 4:单线程拟补了多线程打来的开销和读写困难 12 | 5:大部分情况下,用户不用去考虑内存释放,越界操作等c++存在的问题,不会因为一点错误服务器就崩溃。 13 | 6:开发速度加快。 14 | 15 | # 项目架构介绍 16 | 1:开启两个进程,主进程负责检测子进程。子进程负责游戏逻辑的处理。 17 | 2:项目启动入口 game/app.js文件。可以使用start_server.sh文件开始。 18 | 3:项目包含几个重要的模块:通讯模块(base/index_multi.js,base/buffer.js)、日志模块(base/log.js)、db模块(base/db.js)、逻辑处理模块(game/game_server.js)。 19 | 20 | # 运行环境 21 | Linux CentOS 6.4 64位,需要安装node和下载mongodb驱动。 22 | 23 | -------------------------------------------------------------------------------- /base/buffer.js: -------------------------------------------------------------------------------- 1 | var util = require(process.binding('natives').util ? 'util': 'sys'); 2 | 3 | /* 4 | * 构造方法 5 | * @param bufferLength 缓存区长度,默认512 byte 6 | */ 7 | var ExBuffer = function (bufferLength) { 8 | var self = this; 9 | process.EventEmitter.call(this);//继承事件类 10 | var _headLen = 2; //包头的长度2或者4 11 | var _endian = 'B'; 12 | var _buffer = new Buffer(bufferLength || 512);//Buffer大于8kb 会使用slowBuffer,效率低 13 | var _readOffset = 0; //读取缓存区时的起始位置 14 | var _putOffset = 0; //存放数据起始位置 15 | var _dlen = 0; //报头中整形表示的字符串长度 16 | 17 | /* 18 | * 指定包长是uint32型(默认是ushort型) 19 | */ 20 | this.uint32Head = function(){ 21 | _headLen = 4; 22 | return this; 23 | }; 24 | 25 | /* 26 | * 指定包长是ushort型(默认是ushort型) 27 | */ 28 | this.ushortHead = function(){ 29 | _headLen = 2; 30 | return this; 31 | }; 32 | 33 | /* 34 | * 指定字节序 为Little Endian (默认:Big Endian) 35 | */ 36 | this.littleEndian = function(){ 37 | _endian = 'L'; 38 | return this; 39 | }; 40 | 41 | /* 42 | * 指定字节序 为Big Endian (默认:Big Endian) 43 | */ 44 | this.bigEndian = function(){ 45 | _endian = 'B'; 46 | return this; 47 | }; 48 | 49 | /* 50 | * 送入一端Buffer 51 | */ 52 | this.put = function(buffer,offset,len){ 53 | if(offset == undefined)offset = 0; 54 | if(len == undefined)len = buffer.length - offset; 55 | //buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd]) 56 | 57 | //当前缓冲区已经不能满足本次数数据了 58 | if(len + getLen() > _buffer.length){ 59 | var ex = Math.ceil((len + getLen())/(1024));//每次扩展1kb的倍数 60 | var tmp = new Buffer(ex * 1024); 61 | var exlen = tmp.length - _buffer.length; 62 | _buffer.copy(tmp); 63 | //fix bug : superzheng 64 | if (_putOffset < _readOffset) { 65 | if (_putOffset <= exlen) { 66 | tmp.copy(tmp, _buffer.length, 0, _putOffset); 67 | _putOffset += _buffer.length; 68 | } else { 69 | //fix bug : superzheng 70 | tmp.copy(tmp, _buffer.length, 0, exlen); 71 | tmp.copy(tmp, 0, exlen, _putOffset); 72 | _putOffset -= exlen; 73 | } 74 | } 75 | _buffer = tmp; 76 | } 77 | if(getLen() == 0){ 78 | //数据读完,从新copy新数据到buffer,清空原先的buffer数据、 79 | _putOffset = _readOffset = 0; 80 | } 81 | //判断是否会冲破_buffer尾部 82 | if((_putOffset + len) > _buffer.length){ 83 | //分两次存 一部分存在数据后面 一部分存在数据前面 84 | var len1 = _buffer.length - _putOffset; 85 | if (len1 > 0) { 86 | buffer.copy(_buffer,_putOffset,offset,offset + len1); 87 | offset += len1; 88 | } 89 | 90 | var len2 = len - len1; 91 | buffer.copy(_buffer,0,offset,offset + len2); 92 | _putOffset = len2; 93 | }else{ 94 | buffer.copy(_buffer,_putOffset,offset,offset + len); 95 | _putOffset += len; 96 | } 97 | proc(); 98 | }; 99 | 100 | function proc() { 101 | var count = 0; 102 | while(true){ 103 | //console.log(_buffer); 104 | count++; 105 | if(count>1000)break;//1000次还没读完? 106 | if(_dlen == 0){ 107 | if(getLen() < _headLen){ 108 | break;//连包头都读不了 109 | } 110 | if(_buffer.length - _readOffset >= _headLen){ 111 | //读取包头,即传过来的字符串的长度 112 | _dlen = _buffer['readUInt' + (8*_headLen) + ''+ _endian +'E'](_readOffset); 113 | _readOffset += _headLen; 114 | }else {// 115 | var hbuf = new Buffer(_headLen); 116 | var rlen = 0; 117 | for(var i = 0;i<(_buffer.length - _readOffset);i++){ 118 | hbuf[i] = _buffer[_readOffset++]; 119 | rlen++; 120 | } 121 | _readOffset = 0; 122 | for(var i = 0;i<(_headLen - rlen);i++){ 123 | hbuf[rlen+i] = _buffer[_readOffset++]; 124 | } 125 | _dlen = hbuf['readUInt' + (8*_headLen) + ''+ _endian +'E'](0); 126 | } 127 | } 128 | //实际数据的长度>=包头标示的长度,表示数据全部接收完毕 129 | if(getLen() >= _dlen){ 130 | var dbuff = new Buffer(_dlen); 131 | if(_readOffset + _dlen > _buffer.length){ 132 | var len1 = _buffer.length - _readOffset; 133 | if (len1 > 0) { 134 | _buffer.copy(dbuff,0,_readOffset,_readOffset + len1); 135 | } 136 | 137 | _readOffset = 0; 138 | var len2 = _dlen - len1; 139 | _buffer.copy(dbuff,len1,_readOffset,_readOffset += len2); 140 | }else { 141 | _buffer.copy(dbuff,0,_readOffset,_readOffset += _dlen); 142 | } 143 | try { 144 | _dlen = 0; 145 | self.emit("data", dbuff); 146 | if (_readOffset === _putOffset) { 147 | break; 148 | } 149 | } catch(e) { 150 | self.emit("error", e); 151 | } 152 | } 153 | else { 154 | break; 155 | } 156 | } 157 | } 158 | 159 | //获取现在的数据长度 160 | function getLen() { 161 | if(_putOffset>= _readOffset){ // ------******------- 162 | return _putOffset - _readOffset; 163 | } 164 | return _buffer.length - _readOffset + _putOffset; //***-------********* 165 | } 166 | }; 167 | 168 | util.inherits(ExBuffer, process.EventEmitter);//继承事件类 169 | module.exports = exports = ExBuffer; 170 | 171 | 172 | 173 | -------------------------------------------------------------------------------- /base/compressor.js: -------------------------------------------------------------------------------- 1 | var zip = require("zlib"); 2 | 3 | var g = {}; 4 | 5 | function mycrypto(type) 6 | { 7 | this._crypto = g[type] ? g[type] : g["gzip"]; 8 | } 9 | 10 | mycrypto.prototype.encode = function(buffer,cb) 11 | { 12 | this._crypto.encode(buffer,cb); 13 | }; 14 | 15 | mycrypto.prototype.decode = function(buffer,cb) 16 | { 17 | this._crypto.decode(buffer,cb); 18 | }; 19 | 20 | exports.crypto = function(type) 21 | { 22 | var c = new mycrypto(type); 23 | 24 | return c; 25 | }; 26 | 27 | 28 | g.gzip = { 29 | encode : function(buffer,cb) 30 | { 31 | zip.gzip(buffer,cb); //数据压缩 32 | }, 33 | decode : function(buffer,cb) 34 | { 35 | zip.gunzip(buffer,cb);//解压缩 36 | } 37 | }; 38 | 39 | g.deflate = { 40 | encode : function(buffer,cb) 41 | { 42 | zip.deflate(buffer,cb); //数据压缩 43 | }, 44 | decode : function(buffer,cb) 45 | { 46 | zip.inflate(buffer,cb);//解压缩 47 | } 48 | }; 49 | 50 | 51 | g.deflateRaw = { 52 | encode : function(buffer,cb) 53 | { 54 | zip.deflateRaw(buffer,cb); //数据压缩 55 | }, 56 | decode : function(buffer,cb) 57 | { 58 | zip.inflateRaw(buffer,cb);//解压缩 59 | } 60 | }; 61 | 62 | g.dummy = { 63 | encode : function(buffer,cb) 64 | { 65 | process.nextTick(function(){ 66 | cb(void 0 ,buffer); 67 | }); 68 | }, 69 | decode : function (buffer,cb){ 70 | process.nextTick(function(){ 71 | cb(void 0 ,buffer); 72 | }); 73 | } 74 | }; -------------------------------------------------------------------------------- /base/config.js: -------------------------------------------------------------------------------- 1 | var fs = require("fs"); 2 | 3 | var file_path="./config.ini"; 4 | 5 | exports.init = function() 6 | { 7 | if(!fs.existsSync(file_path)) 8 | { 9 | console.log("need config.ini file"); 10 | return; 11 | } 12 | 13 | var str = fs.readFileSync(file_path,"utf8"); 14 | 15 | if(str) 16 | { 17 | var newstr = str.replace(/\s+/g,"").replace(/((\{|,)(\w+)(:))/g,"$2\"$3\"$4"); 18 | 19 | var conf = JSON.parse(newstr); 20 | 21 | exports.conf = conf; 22 | } 23 | else 24 | { 25 | console.log("read failed : " + file_path); 26 | } 27 | }; 28 | 29 | exports.initasync = function(file,cb) 30 | { 31 | fs.readFile(file,"utf8",function(err,str){ 32 | if(err) 33 | { 34 | cb(err); 35 | } 36 | else if(str) 37 | { 38 | try 39 | { 40 | var conf = JSON.parse(str); 41 | cb(void 0,conf); 42 | 43 | } 44 | catch(e) 45 | { 46 | cb(e); 47 | } 48 | 49 | } 50 | else 51 | { 52 | cb("str is empty:"+file); 53 | } 54 | }); 55 | }; 56 | 57 | -------------------------------------------------------------------------------- /base/http.js: -------------------------------------------------------------------------------- 1 | var http = require("http"); 2 | 3 | var express = require("express"); 4 | //var routes = require('../server/routes'); 5 | var path = require('path'); 6 | 7 | exports.initserver = function(h_conf) 8 | { 9 | var app = express(); 10 | app.listen(h_conf.port); 11 | 12 | app.use(express.bodyParser()); 13 | app.set('views', '../views'); 14 | app.set('view engine', 'ejs'); 15 | app.use(express.methodOverride()); 16 | app.use(app.router); 17 | app.use(express.static('../public')); 18 | //console.log("__dirname:"+__dirname); 19 | 20 | 21 | global.log("listen "+h_conf.port+" http ok"); 22 | //谁在前先执行谁 23 | //app.get('/', msg_logic.index); 24 | app.all('*', function(req, res, next) { 25 | res.header("Access-Control-Allow-Origin", "*"); 26 | res.header("Access-Control-Allow-Headers", "X-Requested-With"); 27 | res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); 28 | res.header("X-Powered-By",' 3.2.1'); 29 | res.header("Content-Type", "application/json;charset=utf-8"); 30 | //res.setEncoding('utf8'); 31 | global.log(req.ip); 32 | for(var key in req.query) 33 | { 34 | global.log("key:"+key); 35 | global.log("req[key]:"+req.query[key]); 36 | } 37 | next(); 38 | 39 | }); 40 | // Routes(要按顺序写) 41 | routes(app); 42 | }; 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /base/util.js: -------------------------------------------------------------------------------- 1 | module.exports.extend = function(target) 2 | { 3 | if(!target) 4 | { 5 | return; 6 | } 7 | 8 | Array.prototype.slice.call(arguments,1).forEach(function(source){ 9 | for(var key in source) 10 | { 11 | if(source[key] !== undefined) 12 | { 13 | target[key] = source[key]; 14 | } 15 | } 16 | }); 17 | }; 18 | 19 | var crypto = require("crypto"); 20 | 21 | exports.sign = function(val,secret) 22 | { 23 | return val + " " + crypto.crateHmac("sha256",secret) 24 | .update(val) 25 | .digest("base64") 26 | .replace(/=+$/,''); 27 | }; 28 | 29 | exports.unsign = function(val,secret) 30 | { 31 | var str = val.slice(0,val.lastIndexOf(".")); 32 | return exports.sign(str,secret) == val ? str : false; 33 | }; 34 | exports.uid = function(len) 35 | { 36 | return crypto.randomBytes(Math.ceil(len*3/4)).toString("base64").slice(0,len); 37 | }; -------------------------------------------------------------------------------- /build/Release/.deps/Release/hello.node.d: -------------------------------------------------------------------------------- 1 | cmd_Release/hello.node := rm -rf "Release/hello.node" && cp -af "Release/obj.target/hello.node" "Release/hello.node" 2 | -------------------------------------------------------------------------------- /build/Release/.deps/Release/obj.target/hello.node.d: -------------------------------------------------------------------------------- 1 | cmd_Release/obj.target/hello.node := flock ./Release/linker.lock g++ -shared -pthread -rdynamic -m64 -Wl,-soname=hello.node -o Release/obj.target/hello.node -Wl,--start-group Release/obj.target/hello/hello.o -Wl,--end-group 2 | -------------------------------------------------------------------------------- /build/Release/.deps/Release/obj.target/hello/hello.o.d: -------------------------------------------------------------------------------- 1 | cmd_Release/obj.target/hello/hello.o := g++ '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/root/.node-gyp/0.10.22/src -I/root/.node-gyp/0.10.22/deps/uv/include -I/root/.node-gyp/0.10.22/deps/v8/include -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-tree-sink -fno-rtti -fno-exceptions -MMD -MF ./Release/.deps/Release/obj.target/hello/hello.o.d.raw -c -o Release/obj.target/hello/hello.o ../hello.cc 2 | Release/obj.target/hello/hello.o: ../hello.cc \ 3 | /root/.node-gyp/0.10.22/src/node.h \ 4 | /root/.node-gyp/0.10.22/deps/uv/include/uv.h \ 5 | /root/.node-gyp/0.10.22/deps/uv/include/uv-private/uv-unix.h \ 6 | /root/.node-gyp/0.10.22/deps/uv/include/uv-private/ngx-queue.h \ 7 | /root/.node-gyp/0.10.22/deps/uv/include/uv-private/uv-linux.h \ 8 | /root/.node-gyp/0.10.22/deps/v8/include/v8.h \ 9 | /root/.node-gyp/0.10.22/deps/v8/include/v8stdint.h \ 10 | /root/.node-gyp/0.10.22/src/node_object_wrap.h \ 11 | /root/.node-gyp/0.10.22/src/node.h 12 | ../hello.cc: 13 | /root/.node-gyp/0.10.22/src/node.h: 14 | /root/.node-gyp/0.10.22/deps/uv/include/uv.h: 15 | /root/.node-gyp/0.10.22/deps/uv/include/uv-private/uv-unix.h: 16 | /root/.node-gyp/0.10.22/deps/uv/include/uv-private/ngx-queue.h: 17 | /root/.node-gyp/0.10.22/deps/uv/include/uv-private/uv-linux.h: 18 | /root/.node-gyp/0.10.22/deps/v8/include/v8.h: 19 | /root/.node-gyp/0.10.22/deps/v8/include/v8stdint.h: 20 | /root/.node-gyp/0.10.22/src/node_object_wrap.h: 21 | /root/.node-gyp/0.10.22/src/node.h: 22 | -------------------------------------------------------------------------------- /build/Release/hello.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xyfcode/zspeed/be4894be371c1b4edc2e78825624d2f4f24a91a7/build/Release/hello.node -------------------------------------------------------------------------------- /build/Release/linker.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xyfcode/zspeed/be4894be371c1b4edc2e78825624d2f4f24a91a7/build/Release/linker.lock -------------------------------------------------------------------------------- /build/Release/obj.target/hello.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xyfcode/zspeed/be4894be371c1b4edc2e78825624d2f4f24a91a7/build/Release/obj.target/hello.node -------------------------------------------------------------------------------- /build/binding.Makefile: -------------------------------------------------------------------------------- 1 | # This file is generated by gyp; do not edit. 2 | 3 | export builddir_name ?= ./build/. 4 | .PHONY: all 5 | all: 6 | $(MAKE) hello 7 | -------------------------------------------------------------------------------- /build/config.gypi: -------------------------------------------------------------------------------- 1 | # Do not edit. File was generated by node-gyp's "configure" step 2 | { 3 | "target_defaults": { 4 | "cflags": [], 5 | "default_configuration": "Release", 6 | "defines": [], 7 | "include_dirs": [], 8 | "libraries": [] 9 | }, 10 | "variables": { 11 | "clang": 0, 12 | "gcc_version": 44, 13 | "host_arch": "x64", 14 | "node_install_npm": "true", 15 | "node_prefix": "/", 16 | "node_shared_cares": "false", 17 | "node_shared_http_parser": "false", 18 | "node_shared_libuv": "false", 19 | "node_shared_openssl": "false", 20 | "node_shared_v8": "false", 21 | "node_shared_zlib": "false", 22 | "node_tag": "", 23 | "node_unsafe_optimizations": 0, 24 | "node_use_dtrace": "false", 25 | "node_use_etw": "false", 26 | "node_use_openssl": "true", 27 | "node_use_perfctr": "false", 28 | "node_use_systemtap": "false", 29 | "python": "/data/opt/bin/python", 30 | "target_arch": "x64", 31 | "v8_enable_gdbjit": 0, 32 | "v8_no_strict_aliasing": 1, 33 | "v8_use_snapshot": "false", 34 | "nodedir": "/root/.node-gyp/0.10.22", 35 | "copy_dev_lib": "true", 36 | "standalone_static_library": 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /build/hello.target.mk: -------------------------------------------------------------------------------- 1 | # This file is generated by gyp; do not edit. 2 | 3 | TOOLSET := target 4 | TARGET := hello 5 | DEFS_Debug := \ 6 | '-D_LARGEFILE_SOURCE' \ 7 | '-D_FILE_OFFSET_BITS=64' \ 8 | '-DBUILDING_NODE_EXTENSION' \ 9 | '-DDEBUG' \ 10 | '-D_DEBUG' 11 | 12 | # Flags passed to all source files. 13 | CFLAGS_Debug := \ 14 | -fPIC \ 15 | -Wall \ 16 | -Wextra \ 17 | -Wno-unused-parameter \ 18 | -pthread \ 19 | -m64 \ 20 | -g \ 21 | -O0 22 | 23 | # Flags passed to only C files. 24 | CFLAGS_C_Debug := 25 | 26 | # Flags passed to only C++ files. 27 | CFLAGS_CC_Debug := \ 28 | -fno-rtti \ 29 | -fno-exceptions 30 | 31 | INCS_Debug := \ 32 | -I/root/.node-gyp/0.10.22/src \ 33 | -I/root/.node-gyp/0.10.22/deps/uv/include \ 34 | -I/root/.node-gyp/0.10.22/deps/v8/include 35 | 36 | DEFS_Release := \ 37 | '-D_LARGEFILE_SOURCE' \ 38 | '-D_FILE_OFFSET_BITS=64' \ 39 | '-DBUILDING_NODE_EXTENSION' 40 | 41 | # Flags passed to all source files. 42 | CFLAGS_Release := \ 43 | -fPIC \ 44 | -Wall \ 45 | -Wextra \ 46 | -Wno-unused-parameter \ 47 | -pthread \ 48 | -m64 \ 49 | -O2 \ 50 | -fno-strict-aliasing \ 51 | -fno-tree-vrp \ 52 | -fno-tree-sink 53 | 54 | # Flags passed to only C files. 55 | CFLAGS_C_Release := 56 | 57 | # Flags passed to only C++ files. 58 | CFLAGS_CC_Release := \ 59 | -fno-rtti \ 60 | -fno-exceptions 61 | 62 | INCS_Release := \ 63 | -I/root/.node-gyp/0.10.22/src \ 64 | -I/root/.node-gyp/0.10.22/deps/uv/include \ 65 | -I/root/.node-gyp/0.10.22/deps/v8/include 66 | 67 | OBJS := \ 68 | $(obj).target/$(TARGET)/hello.o 69 | 70 | # Add to the list of files we specially track dependencies for. 71 | all_deps += $(OBJS) 72 | 73 | # CFLAGS et al overrides must be target-local. 74 | # See "Target-specific Variable Values" in the GNU Make manual. 75 | $(OBJS): TOOLSET := $(TOOLSET) 76 | $(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) 77 | $(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) 78 | 79 | # Suffix rules, putting all outputs into $(obj). 80 | 81 | $(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD 82 | @$(call do_cmd,cxx,1) 83 | 84 | # Try building from generated source, too. 85 | 86 | $(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD 87 | @$(call do_cmd,cxx,1) 88 | 89 | $(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD 90 | @$(call do_cmd,cxx,1) 91 | 92 | # End of this set of suffix rules 93 | ### Rules for final target. 94 | LDFLAGS_Debug := \ 95 | -pthread \ 96 | -rdynamic \ 97 | -m64 98 | 99 | LDFLAGS_Release := \ 100 | -pthread \ 101 | -rdynamic \ 102 | -m64 103 | 104 | LIBS := 105 | 106 | $(obj).target/hello.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) 107 | $(obj).target/hello.node: LIBS := $(LIBS) 108 | $(obj).target/hello.node: TOOLSET := $(TOOLSET) 109 | $(obj).target/hello.node: $(OBJS) FORCE_DO_CMD 110 | $(call do_cmd,solink_module) 111 | 112 | all_deps += $(obj).target/hello.node 113 | # Add target alias 114 | .PHONY: hello 115 | hello: $(builddir)/hello.node 116 | 117 | # Copy this to the executable output path. 118 | $(builddir)/hello.node: TOOLSET := $(TOOLSET) 119 | $(builddir)/hello.node: $(obj).target/hello.node FORCE_DO_CMD 120 | $(call do_cmd,copy) 121 | 122 | all_deps += $(builddir)/hello.node 123 | # Short alias for building this executable. 124 | .PHONY: hello.node 125 | hello.node: $(obj).target/hello.node $(builddir)/hello.node 126 | 127 | # Add executable to "all" target. 128 | .PHONY: all 129 | all: $(builddir)/hello.node 130 | 131 | -------------------------------------------------------------------------------- /game/app.js: -------------------------------------------------------------------------------- 1 | var server = require("../base/index_multi"); 2 | 3 | var billing_client = require("./billing_client"); 4 | var game_server = require("./game_server"); 5 | var master_server = require("./master_server"); 6 | 7 | var obj = { 8 | "billing_client" : { 9 | "is_server" : 0, 10 | "handler" : billing_client.handler, 11 | "retry" : 1 12 | }, 13 | "game_server" :{ 14 | "is_server" : 1, 15 | "handler" : game_server.handler, 16 | "zip":1, 17 | "retry" : 1 18 | } 19 | }; 20 | var app = server.start_server(obj, 21 | function(s){ 22 | billing_client.server(s); 23 | game_server.server(s); 24 | }, 25 | function(worker) 26 | { 27 | master_server.server(worker); 28 | } 29 | ); -------------------------------------------------------------------------------- /game/billing_client.js: -------------------------------------------------------------------------------- 1 | var billing_logic = require("./msg_logic/help_billing_logic"); 2 | var gm_billing_logic = require("./msg_logic/help_gm_billing_logic"); 3 | var purchase_shop_logic = require("./msg_logic/help_purchase_shop_logic"); 4 | var gift_logic = require("./msg_logic/help_gift_logic"); 5 | 6 | var handler = { 7 | "___connect___" : new on_socket_connect(), 8 | "___close___" : new on_close() , 9 | "6" : new on_billing_update_server_result(), //billing 返回的服务器状态结果 10 | "26" : new on_gs_user_login(), 11 | "28" : new on_kick_user(), //玩家账号在另一个设备登录,踢出该设备用户 12 | "29" : new on_billing_account_rebind(), //快速登录账号绑定billing返回结果 13 | "30" : new on_gs_verify_cd_key(), 14 | "31" : new on_billing_reconnect_result(), //billing 返回用户断线重连结果 15 | "purchase_verify" : new on_billing_purchase_verify_result(),//用户支付(billing返回的验证结果) 16 | "100" : new on_user_notice(), //用户公告 (GM) 17 | "103" : new on_gm_edit_role_data(), //编辑用户数据 (GM) 18 | "104" : new on_gm_send_role_mail() //发送用户邮件 (GM) 19 | }; 20 | 21 | exports.handler = handler; 22 | 23 | var global_server = null; 24 | var g_billing_timer,billing_socket = null; 25 | 26 | exports.get_billing_socket = function() 27 | { 28 | return billing_socket; 29 | }; 30 | 31 | exports.server = function(server) 32 | { 33 | global_server = server; 34 | }; 35 | 36 | 37 | function on_socket_connect() 38 | { 39 | this.handle = function(s) 40 | { 41 | global.log("connect billing server ok !"); 42 | 43 | billing_socket = s; 44 | 45 | s.setTimeout( 65 * 1000); 46 | s.addListener('timeout',function(){ 47 | var msg = {op:"heartbeat","server":101001}; 48 | s.send(msg); 49 | }); 50 | 51 | if(!g_billing_timer) 52 | { 53 | g_billing_timer = setInterval(function(){ 54 | billing_logic.on_tick_server_status(s.send); 55 | },8*60*1000); 56 | } 57 | billing_logic.on_update_server_status(s.send); 58 | } 59 | } 60 | 61 | function on_close() 62 | { 63 | this.handle = function(s) 64 | { 65 | global.log("on_close ,ip:"+s.c_ip+",port:"+ s.c_port); 66 | clearInterval(g_billing_timer); 67 | } 68 | } 69 | 70 | function on_gs_user_login() 71 | { 72 | this.handle = function(data,send,s) 73 | { 74 | billing_logic.on_gs_user_login(data,send,s); 75 | } 76 | } 77 | 78 | function on_billing_update_server_result() 79 | { 80 | this.handle = function(data,send,s) 81 | { 82 | billing_logic.on_billing_update_server_result(data,send,s); 83 | } 84 | } 85 | 86 | function on_kick_user() 87 | { 88 | this.handle = function(data,send,s) 89 | { 90 | billing_logic.on_kick_user(data,send,s); 91 | } 92 | } 93 | 94 | function on_billing_account_rebind() 95 | { 96 | this.handle = function(data,send,s) 97 | { 98 | billing_logic.on_billing_account_rebind(data,send,s); 99 | } 100 | } 101 | 102 | function on_billing_reconnect_result() 103 | { 104 | this.handle = function(data,send,s) 105 | { 106 | billing_logic.on_billing_reconnect_result(data,send,s); 107 | } 108 | } 109 | 110 | 111 | function on_user_notice() 112 | { 113 | this.handle = function(data,send,s) 114 | { 115 | gm_billing_logic.on_user_notice(data,send,s); 116 | } 117 | } 118 | 119 | function on_gm_edit_role_data() 120 | { 121 | this.handle = function(data,send,s) 122 | { 123 | gm_billing_logic.on_gm_edit_role_data(data,send,s); 124 | } 125 | } 126 | 127 | function on_gm_send_role_mail() 128 | { 129 | this.handle = function(data,send,s) 130 | { 131 | gm_billing_logic.on_gm_send_role_mail(data,send,s); 132 | } 133 | } 134 | 135 | function on_billing_purchase_verify_result() 136 | { 137 | this.handle = function(data,send,s) 138 | { 139 | purchase_shop_logic.on_billing_purchase_verify_result(data,send,s); 140 | } 141 | } 142 | 143 | function on_gs_verify_cd_key() 144 | { 145 | this.handle = function(data,send,s) 146 | { 147 | gift_logic.help_get_gift_result(data,send,s); 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /game/config.ini: -------------------------------------------------------------------------------- 1 | { 2 | game_server : 3 | { 4 | serverport : 10210 5 | }, 6 | billing_client: 7 | { 8 | serverip : "127.0.0.1", 9 | serverport : 20210 10 | }, 11 | dbuser:"root", 12 | dbpwd:"wy_dbyt", 13 | dbname:"gs_10210", 14 | dbip:"127.0.0.1", 15 | dbport:27017, 16 | "dynamic":1, 17 | test:1, 18 | other: 19 | { 20 | version: 21 | { 22 | ver:1.0, 23 | url:"www.7joys.cn" 24 | }, 25 | country_id:1, 26 | district_id:1, 27 | server_id:1 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /game/data/battle_field.json: -------------------------------------------------------------------------------- 1 | { 2 | "BATTLE_FIELD":{ 3 | "1":{ 4 | "BattleId":"b1", 5 | "Type":"1", 6 | "Name":"单刀赴宴", 7 | "Gate":"b101,b102,b103", 8 | "LvLimited":"8,15,25", 9 | "CountLimited":"1,1,1" 10 | }, 11 | "2":{ 12 | "BattleId":"b2", 13 | "Type":"1", 14 | "Name":"北魏战场", 15 | "Gate":"b201,b202,b203", 16 | "LvLimited":"8,15,25", 17 | "CountLimited":"1,1,1" 18 | }, 19 | "3":{ 20 | "BattleId":"b3", 21 | "Type":"1", 22 | "Name":"西蜀战场", 23 | "Gate":"b301,b302,b303", 24 | "LvLimited":"8,15,25", 25 | "CountLimited":"1,1,1" 26 | }, 27 | "4":{ 28 | "BattleId":"b4", 29 | "Type":"1", 30 | "Name":"东吴战场", 31 | "Gate":"b401,b402,b403", 32 | "LvLimited":"8,15,25", 33 | "CountLimited":"1,1,1" 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /game/data/beauty.json: -------------------------------------------------------------------------------- 1 | { 2 | "BEAUTY":{ 3 | "1":{ 4 | "BeautyId":"mn200", 5 | "Star":"2", 6 | "GiftCoin":"" 7 | }, 8 | "2":{ 9 | "BeautyId":"mn201", 10 | "Star":"2", 11 | "GiftCoin":"2469" 12 | }, 13 | "3":{ 14 | "BeautyId":"mn202", 15 | "Star":"2", 16 | "GiftCoin":"1769" 17 | }, 18 | "4":{ 19 | "BeautyId":"mn203", 20 | "Star":"2", 21 | "GiftCoin":"2011" 22 | }, 23 | "5":{ 24 | "BeautyId":"mn204", 25 | "Star":"2", 26 | "GiftCoin":"2163" 27 | }, 28 | "6":{ 29 | "BeautyId":"mn205", 30 | "Star":"2", 31 | "GiftCoin":"1990" 32 | }, 33 | "7":{ 34 | "BeautyId":"mn206", 35 | "Star":"2", 36 | "GiftCoin":"2344" 37 | }, 38 | "8":{ 39 | "BeautyId":"mn207", 40 | "Star":"2", 41 | "GiftCoin":"2351" 42 | }, 43 | "9":{ 44 | "BeautyId":"mn208", 45 | "Star":"2", 46 | "GiftCoin":"2277" 47 | }, 48 | "10":{ 49 | "BeautyId":"mn209", 50 | "Star":"2", 51 | "GiftCoin":"1991" 52 | }, 53 | "11":{ 54 | "BeautyId":"mn210", 55 | "Star":"2", 56 | "GiftCoin":"2332" 57 | }, 58 | "12":{ 59 | "BeautyId":"mn301", 60 | "Star":"3", 61 | "GiftCoin":"8538" 62 | }, 63 | "13":{ 64 | "BeautyId":"mn302", 65 | "Star":"3", 66 | "GiftCoin":"8330" 67 | }, 68 | "14":{ 69 | "BeautyId":"mn303", 70 | "Star":"3", 71 | "GiftCoin":"8038" 72 | }, 73 | "15":{ 74 | "BeautyId":"mn304", 75 | "Star":"3", 76 | "GiftCoin":"10452" 77 | }, 78 | "16":{ 79 | "BeautyId":"mn305", 80 | "Star":"3", 81 | "GiftCoin":"9506" 82 | }, 83 | "17":{ 84 | "BeautyId":"mn306", 85 | "Star":"3", 86 | "GiftCoin":"7624" 87 | }, 88 | "18":{ 89 | "BeautyId":"mn307", 90 | "Star":"3", 91 | "GiftCoin":"9436" 92 | }, 93 | "19":{ 94 | "BeautyId":"mn308", 95 | "Star":"3", 96 | "GiftCoin":"9006" 97 | }, 98 | "20":{ 99 | "BeautyId":"mn309", 100 | "Star":"3", 101 | "GiftCoin":"9994" 102 | }, 103 | "21":{ 104 | "BeautyId":"mn310", 105 | "Star":"3", 106 | "GiftCoin":"10718" 107 | }, 108 | "22":{ 109 | "BeautyId":"mn401", 110 | "Star":"4", 111 | "GiftCoin":"22494" 112 | }, 113 | "23":{ 114 | "BeautyId":"mn402", 115 | "Star":"4", 116 | "GiftCoin":"21354" 117 | }, 118 | "24":{ 119 | "BeautyId":"mn403", 120 | "Star":"4", 121 | "GiftCoin":"27357" 122 | }, 123 | "25":{ 124 | "BeautyId":"mn404", 125 | "Star":"4", 126 | "GiftCoin":"28359" 127 | }, 128 | "26":{ 129 | "BeautyId":"mn405", 130 | "Star":"4", 131 | "GiftCoin":"25827" 132 | }, 133 | "27":{ 134 | "BeautyId":"mn406", 135 | "Star":"4", 136 | "GiftCoin":"24144" 137 | }, 138 | "28":{ 139 | "BeautyId":"mn407", 140 | "Star":"4", 141 | "GiftCoin":"20763" 142 | }, 143 | "29":{ 144 | "BeautyId":"mn408", 145 | "Star":"4", 146 | "GiftCoin":"21771" 147 | }, 148 | "30":{ 149 | "BeautyId":"mn409", 150 | "Star":"4", 151 | "GiftCoin":"26898" 152 | }, 153 | "31":{ 154 | "BeautyId":"mn410", 155 | "Star":"4", 156 | "GiftCoin":"26679" 157 | }, 158 | "32":{ 159 | "BeautyId":"mn501", 160 | "Star":"5", 161 | "GiftCoin":"45596" 162 | }, 163 | "33":{ 164 | "BeautyId":"mn502", 165 | "Star":"5", 166 | "GiftCoin":"46512" 167 | }, 168 | "34":{ 169 | "BeautyId":"mn503", 170 | "Star":"5", 171 | "GiftCoin":"49280" 172 | }, 173 | "35":{ 174 | "BeautyId":"mn504", 175 | "Star":"5", 176 | "GiftCoin":"60416" 177 | }, 178 | "36":{ 179 | "BeautyId":"mn505", 180 | "Star":"5", 181 | "GiftCoin":"50020" 182 | }, 183 | "37":{ 184 | "BeautyId":"mn506", 185 | "Star":"5", 186 | "GiftCoin":"41756" 187 | }, 188 | "38":{ 189 | "BeautyId":"mn507", 190 | "Star":"5", 191 | "GiftCoin":"56208" 192 | }, 193 | "39":{ 194 | "BeautyId":"mn508", 195 | "Star":"5", 196 | "GiftCoin":"43404" 197 | } 198 | } 199 | } 200 | -------------------------------------------------------------------------------- /game/data/beauty_pool.json: -------------------------------------------------------------------------------- 1 | { 2 | "BEAUTY_POOL":{ 3 | "1":{ 4 | "Star":"2", 5 | "BeautyId":"mn201" 6 | }, 7 | "2":{ 8 | "Star":"2", 9 | "BeautyId":"mn202" 10 | }, 11 | "3":{ 12 | "Star":"2", 13 | "BeautyId":"mn203" 14 | }, 15 | "4":{ 16 | "Star":"2", 17 | "BeautyId":"mn204" 18 | }, 19 | "5":{ 20 | "Star":"2", 21 | "BeautyId":"mn205" 22 | }, 23 | "6":{ 24 | "Star":"2", 25 | "BeautyId":"mn206" 26 | }, 27 | "7":{ 28 | "Star":"2", 29 | "BeautyId":"mn207" 30 | }, 31 | "8":{ 32 | "Star":"2", 33 | "BeautyId":"mn208" 34 | }, 35 | "9":{ 36 | "Star":"2", 37 | "BeautyId":"mn209" 38 | }, 39 | "10":{ 40 | "Star":"2", 41 | "BeautyId":"mn210" 42 | }, 43 | "11":{ 44 | "Star":"3", 45 | "BeautyId":"mn301" 46 | }, 47 | "12":{ 48 | "Star":"3", 49 | "BeautyId":"mn302" 50 | }, 51 | "13":{ 52 | "Star":"3", 53 | "BeautyId":"mn303" 54 | }, 55 | "14":{ 56 | "Star":"3", 57 | "BeautyId":"mn304" 58 | }, 59 | "15":{ 60 | "Star":"3", 61 | "BeautyId":"mn305" 62 | }, 63 | "16":{ 64 | "Star":"3", 65 | "BeautyId":"mn306" 66 | }, 67 | "17":{ 68 | "Star":"3", 69 | "BeautyId":"mn307" 70 | }, 71 | "18":{ 72 | "Star":"3", 73 | "BeautyId":"mn308" 74 | }, 75 | "19":{ 76 | "Star":"3", 77 | "BeautyId":"mn309" 78 | }, 79 | "20":{ 80 | "Star":"3", 81 | "BeautyId":"mn310" 82 | }, 83 | "21":{ 84 | "Star":"4", 85 | "BeautyId":"mn401" 86 | }, 87 | "22":{ 88 | "Star":"4", 89 | "BeautyId":"mn402" 90 | }, 91 | "23":{ 92 | "Star":"4", 93 | "BeautyId":"mn403" 94 | }, 95 | "24":{ 96 | "Star":"4", 97 | "BeautyId":"mn404" 98 | }, 99 | "25":{ 100 | "Star":"4", 101 | "BeautyId":"mn405" 102 | }, 103 | "26":{ 104 | "Star":"4", 105 | "BeautyId":"mn406" 106 | }, 107 | "27":{ 108 | "Star":"4", 109 | "BeautyId":"mn407" 110 | }, 111 | "28":{ 112 | "Star":"4", 113 | "BeautyId":"mn408" 114 | }, 115 | "29":{ 116 | "Star":"4", 117 | "BeautyId":"mn409" 118 | }, 119 | "30":{ 120 | "Star":"4", 121 | "BeautyId":"mn410" 122 | }, 123 | "31":{ 124 | "Star":"5", 125 | "BeautyId":"mn501" 126 | }, 127 | "32":{ 128 | "Star":"5", 129 | "BeautyId":"mn502" 130 | }, 131 | "33":{ 132 | "Star":"5", 133 | "BeautyId":"mn503" 134 | }, 135 | "34":{ 136 | "Star":"5", 137 | "BeautyId":"mn504" 138 | }, 139 | "35":{ 140 | "Star":"5", 141 | "BeautyId":"mn505" 142 | }, 143 | "36":{ 144 | "Star":"5", 145 | "BeautyId":"mn506" 146 | }, 147 | "37":{ 148 | "Star":"5", 149 | "BeautyId":"mn507" 150 | }, 151 | "38":{ 152 | "Star":"5", 153 | "BeautyId":"mn508" 154 | } 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /game/data/card_pool.json: -------------------------------------------------------------------------------- 1 | { 2 | "CARD_POOL":{ 3 | "1":{ 4 | "Star":"4", 5 | "CardId":"4101" 6 | }, 7 | "2":{ 8 | "Star":"4", 9 | "CardId":"4102" 10 | }, 11 | "3":{ 12 | "Star":"4", 13 | "CardId":"4103" 14 | }, 15 | "4":{ 16 | "Star":"4", 17 | "CardId":"4105" 18 | }, 19 | "5":{ 20 | "Star":"4", 21 | "CardId":"4106" 22 | }, 23 | "6":{ 24 | "Star":"4", 25 | "CardId":"4107" 26 | }, 27 | "7":{ 28 | "Star":"4", 29 | "CardId":"4108" 30 | }, 31 | "8":{ 32 | "Star":"4", 33 | "CardId":"4201" 34 | }, 35 | "9":{ 36 | "Star":"4", 37 | "CardId":"4202" 38 | }, 39 | "10":{ 40 | "Star":"4", 41 | "CardId":"4203" 42 | }, 43 | "11":{ 44 | "Star":"4", 45 | "CardId":"4205" 46 | }, 47 | "12":{ 48 | "Star":"4", 49 | "CardId":"4206" 50 | }, 51 | "13":{ 52 | "Star":"4", 53 | "CardId":"4207" 54 | }, 55 | "14":{ 56 | "Star":"4", 57 | "CardId":"4301" 58 | }, 59 | "15":{ 60 | "Star":"4", 61 | "CardId":"4302" 62 | }, 63 | "16":{ 64 | "Star":"4", 65 | "CardId":"4303" 66 | }, 67 | "17":{ 68 | "Star":"4", 69 | "CardId":"4305" 70 | }, 71 | "18":{ 72 | "Star":"4", 73 | "CardId":"4306" 74 | }, 75 | "19":{ 76 | "Star":"4", 77 | "CardId":"4307" 78 | }, 79 | "20":{ 80 | "Star":"4", 81 | "CardId":"4402" 82 | }, 83 | "21":{ 84 | "Star":"4", 85 | "CardId":"4403" 86 | }, 87 | "22":{ 88 | "Star":"4", 89 | "CardId":"4404" 90 | }, 91 | "23":{ 92 | "Star":"4", 93 | "CardId":"4405" 94 | }, 95 | "24":{ 96 | "Star":"4", 97 | "CardId":"4406" 98 | }, 99 | "25":{ 100 | "Star":"4", 101 | "CardId":"4407" 102 | }, 103 | "26":{ 104 | "Star":"4", 105 | "CardId":"4501" 106 | }, 107 | "27":{ 108 | "Star":"4", 109 | "CardId":"4502" 110 | }, 111 | "28":{ 112 | "Star":"4", 113 | "CardId":"4503" 114 | }, 115 | "29":{ 116 | "Star":"4", 117 | "CardId":"4504" 118 | }, 119 | "30":{ 120 | "Star":"4", 121 | "CardId":"4505" 122 | }, 123 | "31":{ 124 | "Star":"4", 125 | "CardId":"4506" 126 | }, 127 | "32":{ 128 | "Star":"4", 129 | "CardId":"4507" 130 | }, 131 | "33":{ 132 | "Star":"5", 133 | "CardId":"5313" 134 | }, 135 | "34":{ 136 | "Star":"5", 137 | "CardId":"5103" 138 | }, 139 | "35":{ 140 | "Star":"5", 141 | "CardId":"5105" 142 | }, 143 | "36":{ 144 | "Star":"5", 145 | "CardId":"5107" 146 | }, 147 | "37":{ 148 | "Star":"5", 149 | "CardId":"5201" 150 | }, 151 | "38":{ 152 | "Star":"5", 153 | "CardId":"5202" 154 | }, 155 | "39":{ 156 | "Star":"5", 157 | "CardId":"5204" 158 | }, 159 | "40":{ 160 | "Star":"5", 161 | "CardId":"5206" 162 | }, 163 | "41":{ 164 | "Star":"5", 165 | "CardId":"5301" 166 | }, 167 | "42":{ 168 | "Star":"5", 169 | "CardId":"5302" 170 | }, 171 | "43":{ 172 | "Star":"5", 173 | "CardId":"5303" 174 | }, 175 | "44":{ 176 | "Star":"5", 177 | "CardId":"5307" 178 | }, 179 | "45":{ 180 | "Star":"5", 181 | "CardId":"5308" 182 | }, 183 | "46":{ 184 | "Star":"5", 185 | "CardId":"5309" 186 | }, 187 | "47":{ 188 | "Star":"5", 189 | "CardId":"5310" 190 | }, 191 | "48":{ 192 | "Star":"5", 193 | "CardId":"5311" 194 | }, 195 | "49":{ 196 | "Star":"5", 197 | "CardId":"5312" 198 | }, 199 | "50":{ 200 | "Star":"5", 201 | "CardId":"5404" 202 | }, 203 | "51":{ 204 | "Star":"5", 205 | "CardId":"5501" 206 | }, 207 | "52":{ 208 | "Star":"5", 209 | "CardId":"5509" 210 | } 211 | } 212 | } 213 | -------------------------------------------------------------------------------- /game/data/const.json: -------------------------------------------------------------------------------- 1 | { 2 | "CONST":{ 3 | "1":{ 4 | "StaminaAdd":"2", 5 | "FriendInitLimit":"15,16,17,18,19,20,21,22,23", 6 | "EveryFirendUseTimes":"3", 7 | "CardBagLimit":"80", 8 | "BagExpandLimit":"5", 9 | "BagExpandCost":"50", 10 | "FightReliveCost":"100", 11 | "UpGradePower":"25", 12 | "Point_Tick":"6", 13 | "StaminaMax":"50", 14 | "FightFriendNum":"15", 15 | "FriendScore":"10", 16 | "UserScore":"0", 17 | "ExploreCost":"25,25,50,50,100,100,300,300,400,400", 18 | "ExploreInitLimit":"30", 19 | "ExploreTick":"48", 20 | "RecruitDiscount":"0.8", 21 | "CdRewardTime":"30", 22 | "UpWarriorCostMoneyRatio":"1", 23 | "ChatFreeTimes":"5", 24 | "ChatCost":"10", 25 | "ChickAdd":"25", 26 | "ExchangeHour":"2", 27 | "ExchangeCost":"40", 28 | "CardEvolveCost":"2000", 29 | "RebornLevel":"5,10,20,30,40,60,80", 30 | "ExploreLv":"1", 31 | "RebornCost":"1000,4584,9687,15910,23063,31032,34724", 32 | "MTGold":"8000", 33 | "MTCost":"0,0,0,20,20,40,40,80,80,120,120,120,120,120,120", 34 | "MTVipTimes":"4,5,6,7,8,10,11,12,13", 35 | "MTCritLow":"0.3", 36 | "MTCritHigh":"0.1", 37 | "PandaItemId":"t113", 38 | "PigItemId":"t112", 39 | "PandaCardId":"3", 40 | "PigCardId":"2", 41 | "DumplingItemId":"m1", 42 | "ResetSweepCost":"10,20,30,50,100,200,300,500", 43 | "Vip":"0,60,300,1000,2000,5000,10000,20000,50000", 44 | "ReviveTimes":"0,1,2,3,4,5,6,7,8", 45 | "ReviveCost":"100,100,150,150,200,200,300,400,500" 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /game/data/explore_event.json: -------------------------------------------------------------------------------- 1 | { 2 | "EXPLORE_EVENT":{ 3 | "1":{ 4 | "EventId":"9", 5 | "EventType":"1", 6 | "Gold":"100", 7 | "Exp":"0", 8 | "ItemId":"", 9 | "CardId":"", 10 | "CardFragId":"", 11 | "CostType":"", 12 | "CostNum":"", 13 | "ProbabilityOne":"50", 14 | "ProbabilityTwo":"50", 15 | "ProbabilityThree":"0", 16 | "ProbabilityFour":"0", 17 | "ProbabilityFive":"0", 18 | "Score":"0", 19 | "Weight":"" 20 | }, 21 | "2":{ 22 | "EventId":"10", 23 | "EventType":"3", 24 | "Gold":"", 25 | "Exp":"", 26 | "ItemId":"t110", 27 | "CardId":"", 28 | "CardFragId":"", 29 | "CostType":"", 30 | "CostNum":"", 31 | "ProbabilityOne":"100", 32 | "ProbabilityTwo":"0", 33 | "ProbabilityThree":"0", 34 | "ProbabilityFour":"0", 35 | "ProbabilityFive":"0", 36 | "Score":"0", 37 | "Weight":"9000" 38 | }, 39 | "3":{ 40 | "EventId":"11", 41 | "EventType":"2", 42 | "Gold":"", 43 | "Exp":"", 44 | "ItemId":"", 45 | "CardId":"1101", 46 | "CardFragId":"", 47 | "CostType":"", 48 | "CostNum":"", 49 | "ProbabilityOne":"100", 50 | "ProbabilityTwo":"0", 51 | "ProbabilityThree":"0", 52 | "ProbabilityFour":"0", 53 | "ProbabilityFive":"0", 54 | "Score":"0", 55 | "Weight":"0" 56 | }, 57 | "4":{ 58 | "EventId":"12", 59 | "EventType":"2", 60 | "Gold":"", 61 | "Exp":"", 62 | "ItemId":"", 63 | "CardId":"1201", 64 | "CardFragId":"", 65 | "CostType":"", 66 | "CostNum":"", 67 | "ProbabilityOne":"100", 68 | "ProbabilityTwo":"0", 69 | "ProbabilityThree":"0", 70 | "ProbabilityFour":"0", 71 | "ProbabilityFive":"0", 72 | "Score":"0", 73 | "Weight":"0" 74 | }, 75 | "5":{ 76 | "EventId":"13", 77 | "EventType":"2", 78 | "Gold":"", 79 | "Exp":"", 80 | "ItemId":"", 81 | "CardId":"1301", 82 | "CardFragId":"", 83 | "CostType":"", 84 | "CostNum":"", 85 | "ProbabilityOne":"100", 86 | "ProbabilityTwo":"0", 87 | "ProbabilityThree":"0", 88 | "ProbabilityFour":"0", 89 | "ProbabilityFive":"0", 90 | "Score":"0", 91 | "Weight":"0" 92 | }, 93 | "6":{ 94 | "EventId":"14", 95 | "EventType":"2", 96 | "Gold":"", 97 | "Exp":"", 98 | "ItemId":"", 99 | "CardId":"1401", 100 | "CardFragId":"", 101 | "CostType":"", 102 | "CostNum":"", 103 | "ProbabilityOne":"100", 104 | "ProbabilityTwo":"0", 105 | "ProbabilityThree":"0", 106 | "ProbabilityFour":"0", 107 | "ProbabilityFive":"0", 108 | "Score":"0", 109 | "Weight":"0" 110 | }, 111 | "7":{ 112 | "EventId":"15", 113 | "EventType":"2", 114 | "Gold":"", 115 | "Exp":"", 116 | "ItemId":"", 117 | "CardId":"1501", 118 | "CardFragId":"", 119 | "CostType":"", 120 | "CostNum":"", 121 | "ProbabilityOne":"100", 122 | "ProbabilityTwo":"0", 123 | "ProbabilityThree":"0", 124 | "ProbabilityFour":"0", 125 | "ProbabilityFive":"0", 126 | "Score":"0", 127 | "Weight":"0" 128 | }, 129 | "8":{ 130 | "EventId":"16", 131 | "EventType":"2", 132 | "Gold":"", 133 | "Exp":"", 134 | "ItemId":"", 135 | "CardId":"2", 136 | "CardFragId":"", 137 | "CostType":"", 138 | "CostNum":"", 139 | "ProbabilityOne":"100", 140 | "ProbabilityTwo":"0", 141 | "ProbabilityThree":"0", 142 | "ProbabilityFour":"0", 143 | "ProbabilityFive":"0", 144 | "Score":"0", 145 | "Weight":"1000" 146 | } 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /game/data/gift.json: -------------------------------------------------------------------------------- 1 | { 2 | "GIFT":{ 3 | "1":{ 4 | "Id":"1", 5 | "Des":"PP助手首测礼包", 6 | "Pft":"1", 7 | "Drop":"107" 8 | }, 9 | "2":{ 10 | "Id":"2", 11 | "Des":"QQ首测礼包", 12 | "Pft":"2", 13 | "Drop":"108" 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /game/data/initialization.json: -------------------------------------------------------------------------------- 1 | { 2 | "INITIALIZATION":{ 3 | "1":{ 4 | "Level":"1", 5 | "Gold":"0", 6 | "Rmb":"280", 7 | "Exploit":"0", 8 | "Score":"0", 9 | "Card1":"3304", 10 | "Card2":"3101", 11 | "Card3":"3505", 12 | "Beauty":"mn200" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /game/data/login_reward.json: -------------------------------------------------------------------------------- 1 | { 2 | "LOGIN_REWARD":{ 3 | "1":{ 4 | "Id":"1", 5 | "Type1":"5", 6 | "Xid1":"", 7 | "Num1":"100000", 8 | "Type2":"1", 9 | "Xid2":"3203", 10 | "Num2":"1", 11 | "Type3":"3", 12 | "Xid3":"t111", 13 | "Num3":"2" 14 | }, 15 | "2":{ 16 | "Id":"2", 17 | "Type1":"4", 18 | "Xid1":"", 19 | "Num1":"50", 20 | "Type2":"1", 21 | "Xid2":"4105", 22 | "Num2":"1", 23 | "Type3":"", 24 | "Xid3":"", 25 | "Num3":"" 26 | }, 27 | "3":{ 28 | "Id":"3", 29 | "Type1":"4", 30 | "Xid1":"", 31 | "Num1":"60", 32 | "Type2":"1", 33 | "Xid2":"2", 34 | "Num2":"2", 35 | "Type3":"", 36 | "Xid3":"", 37 | "Num3":"" 38 | }, 39 | "4":{ 40 | "Id":"4", 41 | "Type1":"4", 42 | "Xid1":"", 43 | "Num1":"70", 44 | "Type2":"1", 45 | "Xid2":"2", 46 | "Num2":"2", 47 | "Type3":"", 48 | "Xid3":"", 49 | "Num3":"" 50 | }, 51 | "5":{ 52 | "Id":"5", 53 | "Type1":"4", 54 | "Xid1":"", 55 | "Num1":"80", 56 | "Type2":"1", 57 | "Xid2":"2", 58 | "Num2":"2", 59 | "Type3":"", 60 | "Xid3":"", 61 | "Num3":"" 62 | }, 63 | "6":{ 64 | "Id":"6", 65 | "Type1":"4", 66 | "Xid1":"", 67 | "Num1":"90", 68 | "Type2":"1", 69 | "Xid2":"2", 70 | "Num2":"2", 71 | "Type3":"", 72 | "Xid3":"", 73 | "Num3":"" 74 | }, 75 | "7":{ 76 | "Id":"7", 77 | "Type1":"4", 78 | "Xid1":"", 79 | "Num1":"100", 80 | "Type2":"1", 81 | "Xid2":"5201", 82 | "Num2":"1", 83 | "Type3":"", 84 | "Xid3":"", 85 | "Num3":"" 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /game/data/purchase_shop.json: -------------------------------------------------------------------------------- 1 | { 2 | "PURCHASE_SHOP":{ 3 | "1":{ 4 | "GoodsId":"Goods_01", 5 | "PftType":"2", 6 | "Price":"4.99", 7 | "GoodsRmb":"", 8 | "FirstReward":"", 9 | "CommonReward":"", 10 | "IsCD":"1", 11 | "CDReward":"120" 12 | }, 13 | "2":{ 14 | "GoodsId":"Goods_02", 15 | "PftType":"2", 16 | "Price":"0.99", 17 | "GoodsRmb":"45", 18 | "FirstReward":"45", 19 | "CommonReward":"2", 20 | "IsCD":"0", 21 | "CDReward":"0" 22 | }, 23 | "3":{ 24 | "GoodsId":"Goods_03", 25 | "PftType":"2", 26 | "Price":"4.99", 27 | "GoodsRmb":"225", 28 | "FirstReward":"225", 29 | "CommonReward":"10", 30 | "IsCD":"0", 31 | "CDReward":"0" 32 | }, 33 | "4":{ 34 | "GoodsId":"Goods_04", 35 | "PftType":"2", 36 | "Price":"14.99", 37 | "GoodsRmb":"675", 38 | "FirstReward":"675", 39 | "CommonReward":"50", 40 | "IsCD":"0", 41 | "CDReward":"0" 42 | }, 43 | "5":{ 44 | "GoodsId":"Goods_05", 45 | "PftType":"2", 46 | "Price":"29.99", 47 | "GoodsRmb":"1350", 48 | "FirstReward":"1350", 49 | "CommonReward":"200", 50 | "IsCD":"0", 51 | "CDReward":"0" 52 | }, 53 | "6":{ 54 | "GoodsId":"Goods_06", 55 | "PftType":"2", 56 | "Price":"49.99", 57 | "GoodsRmb":"2250", 58 | "FirstReward":"2250", 59 | "CommonReward":"500", 60 | "IsCD":"0", 61 | "CDReward":"0" 62 | }, 63 | "7":{ 64 | "GoodsId":"Goods_07", 65 | "PftType":"2", 66 | "Price":"99.99", 67 | "GoodsRmb":"4500", 68 | "FirstReward":"4500", 69 | "CommonReward":"1300", 70 | "IsCD":"0", 71 | "CDReward":"0" 72 | }, 73 | "8":{ 74 | "GoodsId":"Goods_08", 75 | "PftType":"11", 76 | "Price":"4.99", 77 | "GoodsRmb":"", 78 | "FirstReward":"", 79 | "CommonReward":"", 80 | "IsCD":"1", 81 | "CDReward":"120" 82 | }, 83 | "9":{ 84 | "GoodsId":"Goods_09", 85 | "PftType":"11", 86 | "Price":"0.99", 87 | "GoodsRmb":"45", 88 | "FirstReward":"45", 89 | "CommonReward":"2", 90 | "IsCD":"0", 91 | "CDReward":"0" 92 | }, 93 | "10":{ 94 | "GoodsId":"Goods_10", 95 | "PftType":"11", 96 | "Price":"4.99", 97 | "GoodsRmb":"225", 98 | "FirstReward":"225", 99 | "CommonReward":"10", 100 | "IsCD":"0", 101 | "CDReward":"0" 102 | }, 103 | "11":{ 104 | "GoodsId":"Goods_11", 105 | "PftType":"11", 106 | "Price":"14.99", 107 | "GoodsRmb":"675", 108 | "FirstReward":"675", 109 | "CommonReward":"50", 110 | "IsCD":"0", 111 | "CDReward":"0" 112 | }, 113 | "12":{ 114 | "GoodsId":"Goods_12", 115 | "PftType":"11", 116 | "Price":"29.99", 117 | "GoodsRmb":"1350", 118 | "FirstReward":"1350", 119 | "CommonReward":"200", 120 | "IsCD":"0", 121 | "CDReward":"0" 122 | }, 123 | "13":{ 124 | "GoodsId":"Goods_13", 125 | "PftType":"11", 126 | "Price":"49.99", 127 | "GoodsRmb":"2250", 128 | "FirstReward":"2250", 129 | "CommonReward":"500", 130 | "IsCD":"0", 131 | "CDReward":"0" 132 | }, 133 | "14":{ 134 | "GoodsId":"Goods_14", 135 | "PftType":"11", 136 | "Price":"99.99", 137 | "GoodsRmb":"4500", 138 | "FirstReward":"4500", 139 | "CommonReward":"1300", 140 | "IsCD":"0", 141 | "CDReward":"0" 142 | } 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /game/data/rank_reward.json: -------------------------------------------------------------------------------- 1 | { 2 | "RANK_REWARD":{ 3 | "1":{ 4 | "Id":"1", 5 | "DamageRecord":"10000", 6 | "Reward1":"4,,10", 7 | "Reward2":"", 8 | "Reward3":"" 9 | }, 10 | "2":{ 11 | "Id":"2", 12 | "DamageRecord":"20000", 13 | "Reward1":"4,,10", 14 | "Reward2":"", 15 | "Reward3":"" 16 | }, 17 | "3":{ 18 | "Id":"3", 19 | "DamageRecord":"30000", 20 | "Reward1":"4,,10", 21 | "Reward2":"", 22 | "Reward3":"" 23 | }, 24 | "4":{ 25 | "Id":"4", 26 | "DamageRecord":"40000", 27 | "Reward1":"4,,10", 28 | "Reward2":"", 29 | "Reward3":"" 30 | }, 31 | "5":{ 32 | "Id":"5", 33 | "DamageRecord":"50000", 34 | "Reward1":"4,,20", 35 | "Reward2":"", 36 | "Reward3":"" 37 | }, 38 | "6":{ 39 | "Id":"6", 40 | "DamageRecord":"60000", 41 | "Reward1":"4,,20", 42 | "Reward2":"", 43 | "Reward3":"" 44 | }, 45 | "7":{ 46 | "Id":"7", 47 | "DamageRecord":"70000", 48 | "Reward1":"4,,20", 49 | "Reward2":"", 50 | "Reward3":"" 51 | }, 52 | "8":{ 53 | "Id":"8", 54 | "DamageRecord":"80000", 55 | "Reward1":"4,,20", 56 | "Reward2":"", 57 | "Reward3":"" 58 | }, 59 | "9":{ 60 | "Id":"9", 61 | "DamageRecord":"90000", 62 | "Reward1":"4,,20", 63 | "Reward2":"", 64 | "Reward3":"" 65 | }, 66 | "10":{ 67 | "Id":"10", 68 | "DamageRecord":"100000", 69 | "Reward1":"4,,20", 70 | "Reward2":"", 71 | "Reward3":"" 72 | }, 73 | "11":{ 74 | "Id":"11", 75 | "DamageRecord":"150000", 76 | "Reward1":"4,,50", 77 | "Reward2":"", 78 | "Reward3":"" 79 | }, 80 | "12":{ 81 | "Id":"12", 82 | "DamageRecord":"200000", 83 | "Reward1":"4,,50", 84 | "Reward2":"", 85 | "Reward3":"" 86 | }, 87 | "13":{ 88 | "Id":"13", 89 | "DamageRecord":"250000", 90 | "Reward1":"4,,50", 91 | "Reward2":"", 92 | "Reward3":"" 93 | }, 94 | "14":{ 95 | "Id":"14", 96 | "DamageRecord":"300000", 97 | "Reward1":"4,,50", 98 | "Reward2":"", 99 | "Reward3":"" 100 | }, 101 | "15":{ 102 | "Id":"15", 103 | "DamageRecord":"350000", 104 | "Reward1":"4,,50", 105 | "Reward2":"", 106 | "Reward3":"" 107 | }, 108 | "16":{ 109 | "Id":"16", 110 | "DamageRecord":"400000", 111 | "Reward1":"4,,50", 112 | "Reward2":"", 113 | "Reward3":"" 114 | }, 115 | "17":{ 116 | "Id":"17", 117 | "DamageRecord":"450000", 118 | "Reward1":"4,,50", 119 | "Reward2":"", 120 | "Reward3":"" 121 | }, 122 | "18":{ 123 | "Id":"18", 124 | "DamageRecord":"500000", 125 | "Reward1":"4,,50", 126 | "Reward2":"", 127 | "Reward3":"" 128 | }, 129 | "19":{ 130 | "Id":"19", 131 | "DamageRecord":"600000", 132 | "Reward1":"4,,100", 133 | "Reward2":"", 134 | "Reward3":"" 135 | }, 136 | "20":{ 137 | "Id":"20", 138 | "DamageRecord":"700000", 139 | "Reward1":"4,,100", 140 | "Reward2":"", 141 | "Reward3":"" 142 | }, 143 | "21":{ 144 | "Id":"21", 145 | "DamageRecord":"800000", 146 | "Reward1":"4,,100", 147 | "Reward2":"", 148 | "Reward3":"" 149 | }, 150 | "22":{ 151 | "Id":"22", 152 | "DamageRecord":"900000", 153 | "Reward1":"4,,100", 154 | "Reward2":"", 155 | "Reward3":"" 156 | }, 157 | "23":{ 158 | "Id":"23", 159 | "DamageRecord":"1000000", 160 | "Reward1":"4,,100", 161 | "Reward2":"", 162 | "Reward3":"" 163 | } 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /game/data/rank_time_reward.json: -------------------------------------------------------------------------------- 1 | { 2 | "RANK_TIME_REWARD":{ 3 | "1":{ 4 | "Id":"1", 5 | "RandLowLimit":"1", 6 | "RandHighLimit":"1", 7 | "Reward":"4,,300" 8 | }, 9 | "2":{ 10 | "Id":"2", 11 | "RandLowLimit":"2", 12 | "RandHighLimit":"2", 13 | "Reward":"4,,250" 14 | }, 15 | "3":{ 16 | "Id":"3", 17 | "RandLowLimit":"3", 18 | "RandHighLimit":"3", 19 | "Reward":"4,,200" 20 | }, 21 | "4":{ 22 | "Id":"4", 23 | "RandLowLimit":"4", 24 | "RandHighLimit":"4", 25 | "Reward":"4,,150" 26 | }, 27 | "5":{ 28 | "Id":"5", 29 | "RandLowLimit":"5", 30 | "RandHighLimit":"10", 31 | "Reward":"4,,100" 32 | }, 33 | "6":{ 34 | "Id":"6", 35 | "RandLowLimit":"11", 36 | "RandHighLimit":"50", 37 | "Reward":"4,,75" 38 | }, 39 | "7":{ 40 | "Id":"7", 41 | "RandLowLimit":"51", 42 | "RandHighLimit":"100", 43 | "Reward":"4,,50" 44 | }, 45 | "8":{ 46 | "Id":"8", 47 | "RandLowLimit":"101", 48 | "RandHighLimit":"200", 49 | "Reward":"4,,40" 50 | }, 51 | "9":{ 52 | "Id":"9", 53 | "RandLowLimit":"201", 54 | "RandHighLimit":"1000", 55 | "Reward":"4,,30" 56 | }, 57 | "10":{ 58 | "Id":"10", 59 | "RandLowLimit":"1001", 60 | "RandHighLimit":"9999", 61 | "Reward":"4,,20" 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /game/data/recharge_reward.json: -------------------------------------------------------------------------------- 1 | { 2 | "RECHARGE_REWARD":{ 3 | "1":{ 4 | "Id":"1", 5 | "ItemType":"1", 6 | "ItemId":"5502", 7 | "ItemNum":"1" 8 | }, 9 | "2":{ 10 | "Id":"2", 11 | "ItemType":"3", 12 | "ItemId":"t1", 13 | "ItemNum":"10" 14 | }, 15 | "3":{ 16 | "Id":"3", 17 | "ItemType":"3", 18 | "ItemId":"k1", 19 | "ItemNum":"10" 20 | }, 21 | "4":{ 22 | "Id":"4", 23 | "ItemType":"5", 24 | "ItemId":"", 25 | "ItemNum":"50000" 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /game/data/recruit.json: -------------------------------------------------------------------------------- 1 | { 2 | "RECRUIT":{ 3 | "1":{ 4 | "RecruitId":"1", 5 | "CostType":"4", 6 | "CostNum":"280", 7 | "FreeTimes":"0", 8 | "FirstFreeMinute":"1440", 9 | "FreeMinute":"2880", 10 | "FirstColl":"1,4108,1,10000", 11 | "LowColl":"1,3101,1,333|1,3102,1,333|1,3103,1,333|1,3104,1,333|1,3201,1,333|1,3202,1,334|1,3203,1,334|1,3204,1,334|1,3105,1,334|1,3302,1,334|1,3303,1,334|1,3304,1,334|1,3505,1,334|1,3402,1,334|1,3403,1,334|1,3404,1,334|1,3501,1,334|1,3502,1,334|1,3503,1,334|1,3504,1,334|1,4101,1,95|1,4102,1,95|1,4103,1,95|1,4105,1,95|1,4106,1,95|1,4201,1,95|1,4202,1,95|1,4203,1,95|1,4205,1,95|1,4206,1,95|1,4207,1,95|1,4301,1,95|1,4302,1,95|1,4303,1,95|1,4305,1,95|1,4306,1,95|1,4307,1,95|1,4402,1,95|1,4403,1,95|1,4404,1,95|1,4405,1,95|1,4406,1,95|1,4407,1,95|1,4501,1,95|1,4502,1,95|1,4503,1,95|1,4504,1,95|1,4505,1,95|1,4506,1,95|1,4507,1,95", 12 | "MidColl":"1,5313,1,384|1,5103,1,384|1,5105,1,384|1,5107,1,384|1,5202,1,384|1,5204,1,384|1,5206,1,384|1,5301,1,384|1,5302,1,384|1,5303,1,385|1,5305,1,385|1,5307,1,385|1,5308,1,385|1,5309,1,385|1,5310,1,385|1,5311,1,385|1,5312,1,385|1,5404,1,385|1,5501,1,385|1,5509,1,385", 13 | "MidAdd":"20", 14 | "MidAddLimit":"5", 15 | "HigColl":"1,5102,1,666|1,5104,1,666|1,5201,1,669|1,5203,1,666|1,5205,1,666|1,5304,1,666|1,5305,1,666|1,5404,1,666|1,5406,1,666|1,5503,1,1111|1,5505,1,1111|1,5506,1,1111|1,5510,1,670", 16 | "HigAdd":"20", 17 | "HigAddLimit":"45" 18 | }, 19 | "2":{ 20 | "RecruitId":"2", 21 | "CostType":"5", 22 | "CostNum":"5000", 23 | "FreeTimes":"5", 24 | "FirstFreeMinute":"0", 25 | "FreeMinute":"10", 26 | "FirstColl":"3,s1e11,1,666|3,s1e21,1,666|3,s1e31,1,666|3,s1e41,1,666|3,s1e51,1,666|3,s1e61,1,666|3,s1e71,1,666|3,s1e81,1,666|3,s1e91,1,670|3,s1e101,1,670|3,s1e111,1,670|3,s1e121,1,670|3,s2e12,1,166|3,s2e22,1,166|3,s2e32,1,166|3,s2e42,1,166|3,s2e52,1,166|3,s2e62,1,166|3,s2e72,1,166|3,s2e82,1,166|3,s2e92,1,166|3,s2e102,1,166|3,s2e112,1,166|3,s2e122,1,166", 27 | "LowColl":"3,s1e11,1,666|3,s1e21,1,666|3,s1e31,1,666|3,s1e41,1,666|3,s1e51,1,666|3,s1e61,1,666|3,s1e71,1,666|3,s1e81,1,666|3,s1e91,1,670|3,s1e101,1,670|3,s1e111,1,670|3,s1e121,1,670|3,s2e12,1,166|3,s2e22,1,166|3,s2e32,1,166|3,s2e42,1,166|3,s2e52,1,166|3,s2e62,1,166|3,s2e72,1,166|3,s2e82,1,166|3,s2e92,1,166|3,s2e102,1,166|3,s2e112,1,166|3,s2e122,1,166", 28 | "MidColl":"3,s3e13,1,160|3,s4e14,1,23|3,s3e23,1,160|3,s4e24,1,23|3,s3e33,1,160|3,s4e34,1,23|3,s3e43,1,160|3,s4e44,1,23|3,s3e53,1,160|3,s4e54,1,23|3,s3e63,1,160|3,s4e64,1,23|3,s3e73,1,160|3,s4e74,1,23|3,s3e83,1,160|3,s4e84,1,23|3,s3e93,1,160|3,s4e94,1,23|3,s3e103,1,160|3,s4e104,1,23|3,s3e113,1,160|3,s4e114,1,23|3,s3e123,1,160|3,s4e124,1,23|3,s3p63,3,538|3,s4p64,3,115|3,s3p73,3,538|3,s4p74,3,115|3,s3p13,3,538|3,s4p14,3,115|3,s3p23,3,538|3,s4p24,3,115|3,s3p33,3,534|3,s4p34,3,115|3,s3p43,3,534|3,s4p44,3,115|3,s3p53,3,534|3,s4p54,3,115|3,s3p83,3,534|3,s4p84,3,115|3,s3p93,3,534|3,s4p94,3,115|3,s3p103,3,534|3,s4p104,3,115|3,s3p113,3,534|3,s4p114,3,115|3,s3p123,3,534|3,s4p124,3,115", 29 | "MidAdd":"100", 30 | "MidAddLimit":"9", 31 | "HigColl":"3,s5e15,1,75|3,s5e25,1,75|3,s5e35,1,75|3,s5e45,1,75|3,s5e55,1,75|3,s5e65,1,75|3,s5e75,1,75|3,s5e85,1,75|3,s5e95,1,75|3,s5e105,1,75|3,s5e115,1,75|3,s5e125,1,75|3,s5p65,3,758|3,s5p75,3,758|3,s5p15,3,758|3,s5p25,3,758|3,s5p35,3,758|3,s5p45,3,758|3,s5p55,3,758|3,s5p85,3,758|3,s5p95,3,758|3,s5p105,3,758|3,s5p115,3,760|3,s5p125,3,760", 32 | "HigAdd":"20", 33 | "HigAddLimit":"45" 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /game/data/robot.json: -------------------------------------------------------------------------------- 1 | { 2 | "ROBOT":{ 3 | "1":{ 4 | "Id":"1", 5 | "Name":"无中生有", 6 | "Level":"1", 7 | "CardOne":"3102", 8 | "CardTwo":"3101", 9 | "CardThree":"3103" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /game/data/sacrifice.json: -------------------------------------------------------------------------------- 1 | { 2 | "SACRIFICE":{ 3 | "1":{ 4 | "Id":"sa_1", 5 | "NextId":"sa_2", 6 | "Times":"2", 7 | "Gold":"1000", 8 | "DropId":"1" 9 | }, 10 | "2":{ 11 | "Id":"sa_2", 12 | "NextId":"sa_3", 13 | "Times":"3", 14 | "Gold":"1000", 15 | "DropId":"2" 16 | }, 17 | "3":{ 18 | "Id":"sa_3", 19 | "NextId":"sa_4", 20 | "Times":"4", 21 | "Gold":"1000", 22 | "DropId":"3" 23 | }, 24 | "4":{ 25 | "Id":"sa_4", 26 | "NextId":"sa_5", 27 | "Times":"5", 28 | "Gold":"1000", 29 | "DropId":"4" 30 | }, 31 | "5":{ 32 | "Id":"sa_5", 33 | "NextId":"sa_5", 34 | "Times":"5", 35 | "Gold":"1000", 36 | "DropId":"4" 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /game/data/server_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "SERVERCONFIG": 3 | { 4 | "1": 5 | { 6 | "ID":2, 7 | "NAME" : "苹果测试", 8 | "IP" : "111.111.11.1", 9 | "PORT" : 10212, 10 | "IS_OPEN" :1, 11 | "IS_NEW" : 0, 12 | "IS_TEST" :1, 13 | "MAX_ONLINE":3000, 14 | "MAX_REGISTER":120000, 15 | "PFT" :2, 16 | "DISTRICT_ID" :1 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /game/data/share.json: -------------------------------------------------------------------------------- 1 | { 2 | "SHARE":{ 3 | "1":{ 4 | "Id":"guide", 5 | "Rmb":"100" 6 | }, 7 | "2":{ 8 | "Id":"gate0306", 9 | "Rmb":"50" 10 | }, 11 | "3":{ 12 | "Id":"gate0406", 13 | "Rmb":"50" 14 | }, 15 | "4":{ 16 | "Id":"gate0506", 17 | "Rmb":"50" 18 | }, 19 | "5":{ 20 | "Id":"gate0606", 21 | "Rmb":"50" 22 | }, 23 | "6":{ 24 | "Id":"gate0706", 25 | "Rmb":"50" 26 | }, 27 | "7":{ 28 | "Id":"gate0806", 29 | "Rmb":"50" 30 | }, 31 | "8":{ 32 | "Id":"gate0906", 33 | "Rmb":"50" 34 | }, 35 | "9":{ 36 | "Id":"gate1006", 37 | "Rmb":"50" 38 | }, 39 | "10":{ 40 | "Id":"gate1106", 41 | "Rmb":"50" 42 | }, 43 | "11":{ 44 | "Id":"gate1206", 45 | "Rmb":"50" 46 | }, 47 | "12":{ 48 | "Id":"gate1306", 49 | "Rmb":"50" 50 | }, 51 | "13":{ 52 | "Id":"gate1406", 53 | "Rmb":"50" 54 | }, 55 | "14":{ 56 | "Id":"gate1506", 57 | "Rmb":"50" 58 | }, 59 | "15":{ 60 | "Id":"gate1606", 61 | "Rmb":"50" 62 | }, 63 | "16":{ 64 | "Id":"gate1706", 65 | "Rmb":"50" 66 | }, 67 | "17":{ 68 | "Id":"gate1806", 69 | "Rmb":"50" 70 | }, 71 | "18":{ 72 | "Id":"gate1906", 73 | "Rmb":"50" 74 | }, 75 | "19":{ 76 | "Id":"gate2006", 77 | "Rmb":"50" 78 | }, 79 | "20":{ 80 | "Id":"gate2106", 81 | "Rmb":"50" 82 | }, 83 | "21":{ 84 | "Id":"gate2206", 85 | "Rmb":"50" 86 | }, 87 | "22":{ 88 | "Id":"gate2306", 89 | "Rmb":"50" 90 | }, 91 | "23":{ 92 | "Id":"gate2406", 93 | "Rmb":"50" 94 | }, 95 | "24":{ 96 | "Id":"gate2506", 97 | "Rmb":"50" 98 | }, 99 | "25":{ 100 | "Id":"gate2606", 101 | "Rmb":"50" 102 | }, 103 | "26":{ 104 | "Id":"gate2706", 105 | "Rmb":"50" 106 | }, 107 | "27":{ 108 | "Id":"gate2806", 109 | "Rmb":"50" 110 | }, 111 | "28":{ 112 | "Id":"gate2906", 113 | "Rmb":"50" 114 | }, 115 | "29":{ 116 | "Id":"gate3006", 117 | "Rmb":"50" 118 | }, 119 | "30":{ 120 | "Id":"gate3106", 121 | "Rmb":"50" 122 | }, 123 | "31":{ 124 | "Id":"gate3206", 125 | "Rmb":"50" 126 | }, 127 | "32":{ 128 | "Id":"gate3306", 129 | "Rmb":"50" 130 | }, 131 | "33":{ 132 | "Id":"gate3406", 133 | "Rmb":"50" 134 | }, 135 | "34":{ 136 | "Id":"gate3506", 137 | "Rmb":"50" 138 | }, 139 | "35":{ 140 | "Id":"gate3606", 141 | "Rmb":"50" 142 | }, 143 | "36":{ 144 | "Id":"gate3706", 145 | "Rmb":"50" 146 | } 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /game/data/shop.json: -------------------------------------------------------------------------------- 1 | { 2 | "SHOP":{ 3 | "1":{ 4 | "Id":"dumpling", 5 | "Type":"3", 6 | "Vip":"", 7 | "ItemId":"m1", 8 | "Num":"1", 9 | "Cost":"10,10,15,20,40,60,80,100,120,140,160,180,200,200", 10 | "TimesLimited":"2,4,5,6,7,8,9,10,11,12,14" 11 | }, 12 | "2":{ 13 | "Id":"vip0", 14 | "Type":"3", 15 | "Vip":"0", 16 | "ItemId":"vip0", 17 | "Num":"1", 18 | "Cost":"10", 19 | "TimesLimited":"1" 20 | }, 21 | "3":{ 22 | "Id":"vip1", 23 | "Type":"3", 24 | "Vip":"1", 25 | "ItemId":"vip1", 26 | "Num":"1", 27 | "Cost":"10", 28 | "TimesLimited":"1" 29 | }, 30 | "4":{ 31 | "Id":"vip2", 32 | "Type":"3", 33 | "Vip":"2", 34 | "ItemId":"vip2", 35 | "Num":"1", 36 | "Cost":"20", 37 | "TimesLimited":"1" 38 | }, 39 | "5":{ 40 | "Id":"vip3", 41 | "Type":"3", 42 | "Vip":"3", 43 | "ItemId":"vip3", 44 | "Num":"1", 45 | "Cost":"30", 46 | "TimesLimited":"1" 47 | }, 48 | "6":{ 49 | "Id":"vip4", 50 | "Type":"3", 51 | "Vip":"4", 52 | "ItemId":"vip4", 53 | "Num":"1", 54 | "Cost":"40", 55 | "TimesLimited":"1" 56 | }, 57 | "7":{ 58 | "Id":"vip5", 59 | "Type":"3", 60 | "Vip":"5", 61 | "ItemId":"vip5", 62 | "Num":"1", 63 | "Cost":"50", 64 | "TimesLimited":"1" 65 | }, 66 | "8":{ 67 | "Id":"vip6", 68 | "Type":"3", 69 | "Vip":"6", 70 | "ItemId":"vip6", 71 | "Num":"1", 72 | "Cost":"60", 73 | "TimesLimited":"1" 74 | }, 75 | "9":{ 76 | "Id":"vip7", 77 | "Type":"3", 78 | "Vip":"7", 79 | "ItemId":"vip7", 80 | "Num":"1", 81 | "Cost":"70", 82 | "TimesLimited":"1" 83 | }, 84 | "10":{ 85 | "Id":"vip8", 86 | "Type":"3", 87 | "Vip":"8", 88 | "ItemId":"vip8", 89 | "Num":"1", 90 | "Cost":"80", 91 | "TimesLimited":"1" 92 | }, 93 | "11":{ 94 | "Id":"chestGold", 95 | "Type":"3", 96 | "Vip":"", 97 | "ItemId":"t1", 98 | "Num":"1", 99 | "Cost":"25,25,28,30,33,35,38,40,43,45,48,50", 100 | "TimesLimited":"2,3,4,5,6,7,8,9,10,11,12" 101 | }, 102 | "12":{ 103 | "Id":"chestSilver", 104 | "Type":"3", 105 | "Vip":"", 106 | "ItemId":"t2", 107 | "Num":"1", 108 | "Cost":"15,15,15,15,17,17,18,18,20,20,21,21,23,23,24,24,26,26,27,27,29,29,30,30", 109 | "TimesLimited":"4,6,8,10,12,14,16,18,20,22,24" 110 | }, 111 | "13":{ 112 | "Id":"chestIron", 113 | "Type":"3", 114 | "Vip":"", 115 | "ItemId":"t3", 116 | "Num":"1", 117 | "Cost":"10,10,10,10,10,10,11,11,11,12,12,12,13,13,13,14,14,14,15,15,15,16,16,16,17,17,17,18,18,18,19,19,19,20,20,20", 118 | "TimesLimited":"6,9,12,15,18,21,24,27,30,33,36" 119 | }, 120 | "14":{ 121 | "Id":"s5", 122 | "Type":"3", 123 | "Vip":"", 124 | "ItemId":"k1", 125 | "Num":"1", 126 | "Cost":"25", 127 | "TimesLimited":"99" 128 | }, 129 | "15":{ 130 | "Id":"s6", 131 | "Type":"3", 132 | "Vip":"", 133 | "ItemId":"k2", 134 | "Num":"1", 135 | "Cost":"10", 136 | "TimesLimited":"99" 137 | }, 138 | "16":{ 139 | "Id":"s7", 140 | "Type":"3", 141 | "Vip":"", 142 | "ItemId":"k3", 143 | "Num":"1", 144 | "Cost":"5", 145 | "TimesLimited":"99" 146 | }, 147 | "17":{ 148 | "Id":"s8", 149 | "Type":"1", 150 | "Vip":"", 151 | "ItemId":"3", 152 | "Num":"1", 153 | "Cost":"20", 154 | "TimesLimited":"13" 155 | } 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /game/data/town_reward.json: -------------------------------------------------------------------------------- 1 | { 2 | "TOWN_REWARD":{ 3 | "1":{ 4 | "Id":"1", 5 | "TotalReward":"10000", 6 | "RewardOne":"0.1", 7 | "RewardTwo":"0.2", 8 | "RewardThree":"0.25", 9 | "RewardFour":"0.45", 10 | "LuckyBase":"0.3", 11 | "LuckFloat":"0.2", 12 | "TownCycle":"360", 13 | "RewardTime":"30", 14 | "RewardFirst":"1000", 15 | "RewardSecond":"5000", 16 | "RewardThird":"3000", 17 | "RewardTaiShou":"80", 18 | "RewardForShoubei":"50" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /game/dynamic.ini: -------------------------------------------------------------------------------- 1 | {"stop":0} 2 | -------------------------------------------------------------------------------- /game/master_data/town_reward.json: -------------------------------------------------------------------------------- 1 | { 2 | "TOWN_REWARD":{ 3 | "1":{ 4 | "Id":"1", 5 | "TotalReward":"10000", 6 | "RewardOne":"0.1", 7 | "RewardTwo":"0.2", 8 | "RewardThree":"0.25", 9 | "RewardFour":"0.45", 10 | "LuckyBase":"0.3", 11 | "LuckFloat":"0.2", 12 | "TownCycle":"360", 13 | "RewardTime":"30" 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /game/master_logic/help_log_data_logic.js: -------------------------------------------------------------------------------- 1 | var log_data=require("./log_data.js"); 2 | 3 | function help_create_log_data(gid,account,grid,level,name,event,content,type) 4 | { 5 | var fd; 6 | if(gid==undefined) 7 | { 8 | gid=0; 9 | } 10 | if(account==undefined) 11 | { 12 | account=0; 13 | } 14 | if(grid==undefined) 15 | { 16 | grid=0; 17 | } 18 | if(level==undefined) 19 | { 20 | level=0; 21 | } 22 | if(name==undefined) 23 | { 24 | name=0; 25 | } 26 | if(event==undefined || content==undefined || type==undefined ) 27 | { 28 | return fd; 29 | } 30 | 31 | fd=new log_data.LogData(); 32 | fd.gid=gid; 33 | fd.account=account; 34 | fd.grid=grid; 35 | fd.level=level; 36 | fd.name=name; 37 | fd.event=event; 38 | fd.content=content; 39 | fd.type=type; 40 | 41 | fd.date=""; 42 | 43 | return fd; 44 | 45 | }; 46 | exports.help_create_log_data=help_create_log_data; 47 | 48 | function log(logData) 49 | { 50 | var now=new Date(); 51 | var year=now.getFullYear(); 52 | var month=Number(now.getMonth())+1; 53 | var date=now.getDate(); 54 | var hour=now.getHours(); 55 | var minute=now.getMinutes(); 56 | var second=now.getSeconds(); 57 | 58 | var d=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; 59 | var log_file_name; 60 | logData.date=d; 61 | 62 | switch (logData.type) 63 | { 64 | case log_data.logType.LOG_CONFIG : 65 | log_file_name=log_data.log_file_name.log_file_config; 66 | break; 67 | case log_data.logType.LOG_BEHAVIOR : 68 | log_file_name=log_data.log_file_name.log_file_behavior; 69 | break; 70 | case log_data.logType.LOG_MONEY : 71 | log_file_name=log_data.log_file_name.log_file_money; 72 | break; 73 | case log_data.logType.LOG_MAIL : 74 | log_file_name=log_data.log_file_name.log_file_mail; 75 | break; 76 | case log_data.logType.LOG_REGISTER : 77 | log_file_name=log_data.log_file_name.log_file_login; 78 | break; 79 | case log_data.logType.LOG_LOGIN : 80 | log_file_name=log_data.log_file_name.log_file_login; 81 | break; 82 | case log_data.logType.LOG_CLIENT_ERROR : 83 | log_file_name=log_data.log_file_name.log_file_error; 84 | break; 85 | } 86 | 87 | global.log2(log_file_name,logData); 88 | }; 89 | exports.log=log; -------------------------------------------------------------------------------- /game/master_logic/help_tick_logic.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains WebStorm. 3 | * User: Administrator 4 | * Date: 13-6-3 5 | * Time: 下午9:36 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | var town_reward_data=require("./town_reward_data"); 9 | 10 | 11 | var common_func=require("./common_func"); 12 | 13 | var child_worker = null; 14 | 15 | var init=function(worker) 16 | { 17 | child_worker=worker; 18 | //启动定时器 19 | helpSetGlobalTick(); 20 | //测试 可删去 21 | //helpGetTownReward(17); 22 | }; 23 | exports.init=init; 24 | 25 | function helpSetGlobalTick() 26 | { 27 | global.log("helpSetGlobalTick"); 28 | 29 | setInterval(function(){ 30 | var now=new Date(); 31 | 32 | if(now.getHours()==5&&now.getMinutes()==30&&now.getSeconds()==0) 33 | { 34 | var msg={ 35 | "op":"town_tick", 36 | "town_reward":helpGetTownReward(now.getHours()) 37 | }; 38 | 39 | child_worker.send(msg); 40 | } 41 | else if(now.getHours()==11&&now.getMinutes()==30&&now.getSeconds()==0) 42 | { 43 | 44 | var msg={ 45 | "op":"town_tick", 46 | "town_reward":helpGetTownReward(now.getHours()) 47 | }; 48 | child_worker.send(msg); 49 | } 50 | else if(now.getHours()==17&&now.getMinutes()==30&&now.getSeconds()==0) 51 | { 52 | 53 | var msg={ 54 | "op":"town_tick", 55 | "town_reward":helpGetTownReward(now.getHours()) 56 | }; 57 | child_worker.send(msg); 58 | } 59 | else if(now.getHours()==23&&now.getMinutes()==30&&now.getSeconds()==0) 60 | { 61 | 62 | var msg={ 63 | "op":"town_tick", 64 | "town_reward":helpGetTownReward(now.getHours()) 65 | }; 66 | child_worker.send(msg); 67 | } 68 | else if(now.getHours()==0&&now.getMinutes()==0&&now.getSeconds()==0) 69 | { 70 | var msg={ 71 | "op":"tick", 72 | "param":now.getHours() 73 | }; 74 | //child_worker.send(msg); 75 | } 76 | else if(now.getHours()==22&&now.getMinutes()==0&&now.getSeconds()==0) 77 | { 78 | var msg={ 79 | "op":"tick", 80 | "param":now.getHours() 81 | }; 82 | //child_worker.send(msg); 83 | } 84 | 85 | },1000); 86 | 87 | setInterval(function(){ 88 | var msg={ 89 | "op":"tick_user_offline" 90 | }; 91 | child_worker.send(msg); 92 | },16*60*1000); 93 | 94 | setInterval(function(){ 95 | var msg={ 96 | "op":"save_system_data" 97 | }; 98 | child_worker.send(msg); 99 | },10*60*1000); 100 | 101 | setInterval(function(){ 102 | var msg={ 103 | "op":"get_system_info" 104 | }; 105 | child_worker.send(msg); 106 | },27*60*1000); 107 | 108 | } 109 | 110 | 111 | function helpGetTownReward(hour) 112 | { 113 | global.log("helpGetTownReward"); 114 | 115 | var _town_reward_data=town_reward_data.town_reward_data_list[1]; 116 | if(_town_reward_data==undefined) 117 | { 118 | global.log("_town_reward_data==undefined"); 119 | return; 120 | } 121 | 122 | 123 | 124 | 125 | var town_ids=["t01","t02","t03","t04","t05","t06","t07","t08","t09","t10","t11","t12" 126 | ,"t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26" 127 | ,"t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38"]; 128 | 129 | var total_reward=0; 130 | switch (hour) 131 | { 132 | case 5: 133 | total_reward=_town_reward_data.total_reward*_town_reward_data.reward_two; 134 | break; 135 | case 11: 136 | total_reward=_town_reward_data.total_reward*_town_reward_data.reward_three; 137 | break; 138 | case 17: 139 | total_reward=_town_reward_data.total_reward*_town_reward_data.reward_four; 140 | break; 141 | case 23: 142 | total_reward=_town_reward_data.total_reward*_town_reward_data.reward_one; 143 | break; 144 | } 145 | var lucky_num=common_func.help_make_one_random(1,38); 146 | global.log("total_reward:"+total_reward); 147 | global.log("lucky_num:"+lucky_num); 148 | 149 | var lucky_reward_base=_town_reward_data.lucky_base+_town_reward_data.lucky_float*common_func.help_make_one_random(1,10)/10; 150 | var lucky_reward=Math.floor(total_reward*lucky_reward_base); 151 | global.log("lucky_reward:"+lucky_reward); 152 | 153 | var lucky_nums=common_func.help_make_random(37,1,100); 154 | global.log("lucky_nums:"+lucky_nums); 155 | 156 | lucky_nums=common_func.compare_sort_asc(lucky_nums); 157 | var total_base=0; 158 | for(var i=0;i=1;i--) 169 | { 170 | if(i==lucky_num) 171 | { 172 | reward_obj[town_ids[lucky_num-1]]=lucky_reward; 173 | continue; 174 | } 175 | 176 | var reward=Math.floor(left_reward*lucky_nums[i-1]/total_base); 177 | reward_obj[town_ids[i-1]]=reward; 178 | 179 | } 180 | 181 | global.log("reward_obj:"+JSON.stringify(reward_obj)); 182 | 183 | return reward_obj; 184 | } 185 | 186 | 187 | 188 | -------------------------------------------------------------------------------- /game/master_logic/json_config_file.js: -------------------------------------------------------------------------------- 1 | var fs=require("fs"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | var file_path="./master_data/"; 6 | exports.file_path=file_path; 7 | 8 | var json_config_file_list={}; 9 | exports.json_config_file_list=json_config_file_list; 10 | 11 | function init() 12 | { 13 | load_data_file(); 14 | } 15 | exports.init=init; 16 | 17 | function load_data_file() 18 | { 19 | global.log("load_data_file"); 20 | var path="./master_data/"; 21 | 22 | var nodes=fs.readdirSync(path); 23 | global.log("nodes:"+nodes.toString()) ; 24 | if(nodes) 25 | { 26 | for(var i=0;i=1) 61 | { 62 | var reward_data=new RewardData(); 63 | reward_data.id=data["ACHIEVEMENT"][i].RewardId1; 64 | reward_data.num=Number(data["ACHIEVEMENT"][i].RewardNum1); 65 | reward_data.type=Number(data["ACHIEVEMENT"][i].RewardType1); 66 | achievement_data.reward_arr.push(reward_data); 67 | } 68 | 69 | if(Number(data["ACHIEVEMENT"][i].RewardNum2)>=1) 70 | { 71 | var reward_data=new RewardData(); 72 | reward_data.id=data["ACHIEVEMENT"][i].RewardId2; 73 | reward_data.num=Number(data["ACHIEVEMENT"][i].RewardNum2); 74 | reward_data.type=Number(data["ACHIEVEMENT"][i].RewardType2); 75 | achievement_data.reward_arr.push(reward_data); 76 | } 77 | 78 | achievement_data_list[achievement_data.id]=achievement_data; 79 | } 80 | 81 | var log_content={"count":count,"achievement_data_list":achievement_data_list}; 82 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_achievement_data",log_content,log_data.logType.LOG_CONFIG); 83 | log_data_logic.log(logData); 84 | 85 | } 86 | -------------------------------------------------------------------------------- /game/msg_logic/activity_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | //参拜 6 | var SacrificeData=function() 7 | { 8 | this.id=0; 9 | this.next_id=0; 10 | this.times=0; 11 | this.gold=0; 12 | this.drop_id=0; 13 | }; 14 | 15 | var sacrifice_data_list={}; 16 | exports.sacrifice_data_list=sacrifice_data_list; 17 | 18 | //兑换 19 | var ExchangeData=function() 20 | { 21 | this.id=0; 22 | this.item_type=0; 23 | this.item_id=0; 24 | this.num=0; 25 | this.cost=0; 26 | }; 27 | 28 | var exchange_data_list={}; 29 | exports.exchange_data_list=exchange_data_list; 30 | 31 | 32 | var ExchangeWData=function() 33 | { 34 | this.id=0; 35 | this.weight=0; 36 | }; 37 | var exchange_data_arr=[]; 38 | exports.exchange_data_arr=exchange_data_arr; 39 | 40 | function init() 41 | { 42 | load_sacrifice_data(); 43 | load_exchange_data(); 44 | } 45 | exports.init=init; 46 | 47 | function load_sacrifice_data() 48 | { 49 | global.log("load_sacrifice_data"); 50 | var file="sacrifice.json"; 51 | var data=json_config_file.json_config_file_list[file]; 52 | 53 | var ks=Object.keys(data["SACRIFICE"]); 54 | var count=ks.length; 55 | //实现完全拷贝 56 | for(var i=1 ; i<=count ; i++) 57 | { 58 | var sacrifice_data=new SacrificeData(); 59 | 60 | sacrifice_data.id= data["SACRIFICE"][i].Id; 61 | sacrifice_data.next_id=data["SACRIFICE"][i].NextId; 62 | sacrifice_data.times=Number(data["SACRIFICE"][i].Times); 63 | sacrifice_data.gold=Number(data["SACRIFICE"][i].Gold); 64 | sacrifice_data.drop_id=data["SACRIFICE"][i].DropId; 65 | 66 | sacrifice_data_list[sacrifice_data.id] = sacrifice_data; 67 | } 68 | 69 | var log_content={"count":count,"sacrifice_data_list":sacrifice_data_list}; 70 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_sacrifice_data",log_content,log_data.logType.LOG_CONFIG); 71 | log_data_logic.log(logData); 72 | 73 | } 74 | 75 | function load_exchange_data() 76 | { 77 | global.log("load_exchange_data"); 78 | var file="exchange.json"; 79 | var data=json_config_file.json_config_file_list[file]; 80 | 81 | var ks=Object.keys(data["EXCHANGE"]); 82 | var count=ks.length; 83 | 84 | var weight=0; 85 | //实现完全拷贝 86 | for(var i=1 ; i<=count ; i++) 87 | { 88 | var exchange_data=new ExchangeData(); 89 | var exchange_w_data=new ExchangeWData(); 90 | 91 | exchange_data.id= data["EXCHANGE"][i].Id; 92 | exchange_data.item_type=Number(data["EXCHANGE"][i].ItemType); 93 | exchange_data.item_id=data["EXCHANGE"][i].ItemId; 94 | exchange_data.num=Number(data["EXCHANGE"][i].Num); 95 | exchange_data.cost=Number(data["EXCHANGE"][i].Cost); 96 | weight+=Number(data["EXCHANGE"][i].Weight); 97 | 98 | exchange_data_list[exchange_data.id] = exchange_data; 99 | 100 | exchange_w_data.id=exchange_data.id; 101 | exchange_w_data.weight=weight; 102 | exchange_data_arr.push(exchange_w_data); 103 | } 104 | 105 | if(weight!=10000) 106 | { 107 | global.err("weight!=10000"); 108 | return; 109 | } 110 | 111 | var log_content={"count":count,"exchange_data_list":exchange_data_list}; 112 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_exchange_data",log_content,log_data.logType.LOG_CONFIG); 113 | log_data_logic.log(logData); 114 | 115 | } -------------------------------------------------------------------------------- /game/msg_logic/arena_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | var RewardData=function() 6 | { 7 | this.id=0; 8 | this.num=0; 9 | this.type=0; 10 | }; 11 | 12 | //普通奖励结构 13 | var RankRewardData=function() 14 | { 15 | this.id=0; 16 | this.damage_record=0; 17 | this.reward_array=[]; //value:RewardData 18 | }; 19 | 20 | //排行榜普通奖励 21 | var rank_reward_data_list={}; 22 | exports.rank_reward_data_list=rank_reward_data_list; 23 | 24 | //定时奖励结构 25 | var RankTimeRewardData=function() 26 | { 27 | this.id=0; 28 | this.rand_low_limit=0; 29 | this.rand_high_limit=0; 30 | this.reward=new RewardData(); 31 | }; 32 | 33 | //排行榜定时奖励 34 | var rank_time_reward_data_list={}; 35 | exports.rank_time_reward_data_list=rank_time_reward_data_list; 36 | 37 | 38 | function init() 39 | { 40 | load_rank_reward_data(); 41 | load_rank_time_reward_data(); 42 | } 43 | exports.init=init; 44 | 45 | 46 | function load_rank_reward_data() 47 | { 48 | global.log("load_rank_reward_data"); 49 | var file="rank_reward.json"; 50 | var data=json_config_file.json_config_file_list[file]; 51 | 52 | var ks=Object.keys(data["RANK_REWARD"]); 53 | var count=ks.length; 54 | for(var i=1 ; i<=count ; i++) 55 | { 56 | var rank_reward_data=new RankRewardData(); 57 | 58 | rank_reward_data.id=data["RANK_REWARD"][i].Id; 59 | rank_reward_data.damage_record=Number(data["RANK_REWARD"][i].DamageRecord); 60 | 61 | if(data["RANK_REWARD"][i].Reward1) 62 | { 63 | var rewards=(data["RANK_REWARD"][i].Reward1).split(','); 64 | var reward_data=new RewardData(); 65 | reward_data.type=Number(rewards[0]); 66 | reward_data.id=rewards[1]; 67 | reward_data.num=Number(rewards[2]); 68 | 69 | rank_reward_data.reward_array.push(reward_data); 70 | } 71 | 72 | if(data["RANK_REWARD"][i].Reward2) 73 | { 74 | var rewards=(data["RANK_REWARD"][i].Reward2).split(','); 75 | var reward_data=new RewardData(); 76 | reward_data.type=Number(rewards[0]); 77 | reward_data.id=rewards[1]; 78 | reward_data.num=Number(rewards[2]); 79 | 80 | rank_reward_data.reward_array.push(reward_data); 81 | } 82 | 83 | if(data["RANK_REWARD"][i].Reward3) 84 | { 85 | var rewards=(data["RANK_REWARD"][i].Reward3).split(','); 86 | var reward_data=new RewardData(); 87 | reward_data.type=Number(rewards[0]); 88 | reward_data.id=rewards[1]; 89 | reward_data.num=Number(rewards[2]); 90 | 91 | rank_reward_data.reward_array.push(reward_data); 92 | } 93 | 94 | rank_reward_data_list[rank_reward_data.id]=rank_reward_data; 95 | } 96 | 97 | var log_content={"count":count,"rank_reward_data_list":rank_reward_data_list}; 98 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_rank_reward_data",log_content,log_data.logType.LOG_CONFIG); 99 | log_data_logic.log(logData); 100 | 101 | } 102 | 103 | function load_rank_time_reward_data() 104 | { 105 | global.log("load_rank_time_reward_data"); 106 | var file="rank_time_reward.json"; 107 | var data=json_config_file.json_config_file_list[file]; 108 | 109 | var ks=Object.keys(data["RANK_TIME_REWARD"]); 110 | var count=ks.length; 111 | for(var i=1 ; i<=count ; i++) 112 | { 113 | var rank_time_reward_data=new RankTimeRewardData(); 114 | 115 | rank_time_reward_data.id=data["RANK_TIME_REWARD"][i].Id; 116 | rank_time_reward_data.rand_low_limit=Number(data["RANK_TIME_REWARD"][i].RandLowLimit); 117 | rank_time_reward_data.rand_high_limit=Number(data["RANK_TIME_REWARD"][i].RandHighLimit); 118 | if(data["RANK_TIME_REWARD"][i].Reward) 119 | { 120 | var reward_arr=(data["RANK_TIME_REWARD"][i].Reward).split(","); 121 | rank_time_reward_data.reward.type=Number(reward_arr[0]); 122 | rank_time_reward_data.reward.id=reward_arr[1]; 123 | rank_time_reward_data.reward.num=Number(reward_arr[2]); 124 | } 125 | 126 | rank_time_reward_data_list[rank_time_reward_data.id]=rank_time_reward_data; 127 | } 128 | 129 | var log_content={"count":count,"rank_time_reward_data_list":rank_time_reward_data_list}; 130 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_rank_time_reward_data",log_content,log_data.logType.LOG_CONFIG); 131 | log_data_logic.log(logData); 132 | 133 | } 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | -------------------------------------------------------------------------------- /game/msg_logic/battle_field_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var BattleData=function() 7 | { 8 | this.battle_id=0; 9 | this.type=0; 10 | this.gate=[]; 11 | this.lv_limit=[]; 12 | this.count_limit=[]; 13 | }; 14 | 15 | var battle_field_data_list={}; 16 | exports.battle_field_data_list=battle_field_data_list; 17 | 18 | function init() 19 | { 20 | load_battle_field_data(); 21 | } 22 | exports.init=init; 23 | 24 | function load_battle_field_data() 25 | { 26 | global.log("load_battle_field_data"); 27 | var file="battle_field.json"; 28 | var data=json_config_file.json_config_file_list[file]; 29 | 30 | var ks=Object.keys(data["BATTLE_FIELD"]); 31 | var count=ks.length; 32 | for(var i=1 ; i<=count ; i++) 33 | { 34 | var battle_data=new BattleData(); 35 | 36 | battle_data.battle_id=data["BATTLE_FIELD"][i].BattleId; 37 | battle_data.type=Number(data["BATTLE_FIELD"][i].Type); 38 | battle_data.gate=(data["BATTLE_FIELD"][i].Gate).split(","); 39 | battle_data.lv_limit=(data["BATTLE_FIELD"][i].LvLimited).split(","); 40 | battle_data.count_limit=(data["BATTLE_FIELD"][i].CountLimited).split(","); 41 | 42 | battle_field_data_list[battle_data.battle_id]=battle_data; 43 | } 44 | 45 | var log_content={"count":count,"battle_field_data_list":battle_field_data_list}; 46 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_battle_field_data",log_content,log_data.logType.LOG_CONFIG); 47 | log_data_logic.log(logData); 48 | 49 | } 50 | -------------------------------------------------------------------------------- /game/msg_logic/card_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var CardData=function() 7 | { 8 | this.card_id=0; 9 | this.race=0; 10 | this.star=0; 11 | this.level=0; 12 | this.level_limit=0; 13 | this.reborn_limit=0; 14 | this.leader_skill=0; 15 | this.equip_list=[]; 16 | this.exp=0; 17 | this.exp_param=0; 18 | this.money=0; 19 | this.money_add=0; 20 | this.card_score=0; 21 | }; 22 | 23 | 24 | var card_data_list={}; 25 | exports.card_data_list=card_data_list; 26 | 27 | 28 | var BeautyData=function() 29 | { 30 | this.beauty_id=0; 31 | this.star=0; 32 | this.gift_gold=0; 33 | }; 34 | 35 | 36 | var beauty_data_list={}; 37 | exports.beauty_data_list=beauty_data_list; 38 | 39 | 40 | function init() 41 | { 42 | load_card_data(); 43 | load_beauty_data(); 44 | } 45 | exports.init=init; 46 | 47 | function load_card_data() 48 | { 49 | global.log("load_card_data"); 50 | var file="card.json"; 51 | var data=json_config_file.json_config_file_list[file]; 52 | 53 | var ks=Object.keys(data["CARD"]); 54 | var count=ks.length; 55 | 56 | for(var i=1 ; i<=count ; i++) 57 | { 58 | var card_data=new CardData(); 59 | 60 | card_data.card_id=data["CARD"][i].CardId; 61 | card_data.race=Number(data["CARD"][i].Race); 62 | card_data.star=Number(data["CARD"][i].Star); 63 | card_data.level=Number(data["CARD"][i].Level); 64 | card_data.level_limit=Number(data["CARD"][i].LevelLimit); 65 | card_data.reborn_limit=Number(data["CARD"][i].RebornLimit); 66 | card_data.leader_skill=data["CARD"][i].LeaderSkill; 67 | if(data["CARD"][i].EquipListReborn) 68 | { 69 | card_data.equip_list=(data["CARD"][i].EquipListReborn).split(','); 70 | } 71 | 72 | card_data.money=Number(data["CARD"][i].Coin); 73 | card_data.money_add=Number(data["CARD"][i].CoinGrowth); 74 | 75 | card_data.exp=Number(data["CARD"][i].Exp); 76 | card_data.exp_param=Number(data["CARD"][i].ExpParameters); 77 | card_data.card_score=Number(data["CARD"][i].WarriorScore); 78 | 79 | card_data_list[card_data.card_id]=card_data; 80 | } 81 | 82 | var log_content={"count":count,"card_data_list":card_data_list}; 83 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_card_data",log_content,log_data.logType.LOG_CONFIG); 84 | log_data_logic.log(logData); 85 | 86 | } 87 | 88 | 89 | function load_beauty_data() 90 | { 91 | global.log("load_beauty_data"); 92 | var file="beauty.json"; 93 | var data=json_config_file.json_config_file_list[file]; 94 | 95 | var ks=Object.keys(data["BEAUTY"]); 96 | var count=ks.length; 97 | 98 | for(var i=1 ; i<=count ; i++) 99 | { 100 | var beauty_data=new BeautyData(); 101 | 102 | beauty_data.beauty_id=data["BEAUTY"][i].BeautyId; 103 | beauty_data.star=Number(data["BEAUTY"][i].Star); 104 | beauty_data.gift_gold=Number(data["BEAUTY"][i].GiftCoin); 105 | 106 | 107 | beauty_data_list[beauty_data.beauty_id]=beauty_data; 108 | } 109 | 110 | var log_content={"count":count,"beauty_data_list":beauty_data_list}; 111 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_beauty_data",log_content,log_data.logType.LOG_CONFIG); 112 | log_data_logic.log(logData); 113 | 114 | } -------------------------------------------------------------------------------- /game/msg_logic/card_exp_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var CardExpData=function() 7 | { 8 | this.level=0; 9 | this.exp_limit=0; 10 | }; 11 | 12 | var card_exp_data_list={}; 13 | exports.card_exp_data_list=card_exp_data_list; 14 | 15 | function init() 16 | { 17 | load_card_exp_data(); 18 | } 19 | exports.init=init; 20 | 21 | function load_card_exp_data() 22 | { 23 | global.log("load_card_exp_data"); 24 | var file="card_exp.json"; 25 | var data=json_config_file.json_config_file_list[file]; 26 | 27 | var ks=Object.keys(data["CARD_EXP"]); 28 | var count=ks.length; 29 | 30 | for(var i=1 ; i<=count ; i++) 31 | { 32 | var card_exp_data=new CardExpData(); 33 | 34 | card_exp_data.level=data["CARD_EXP"][i].Level; 35 | card_exp_data.exp_limit=Number(data["CARD_EXP"][i].ExpLimit); 36 | 37 | card_exp_data_list[card_exp_data.level]=card_exp_data; 38 | } 39 | 40 | var log_content={"count":count,"card_exp_data_list":card_exp_data_list}; 41 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_card_exp_data",log_content,log_data.logType.LOG_CONFIG); 42 | log_data_logic.log(logData); 43 | 44 | } 45 | -------------------------------------------------------------------------------- /game/msg_logic/card_frag_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var CardFragData=function() 7 | { 8 | this.card_id=0; 9 | this.num=0; 10 | this.price=0; 11 | }; 12 | 13 | var card_frag_data_list={}; 14 | exports.card_frag_data_list=card_frag_data_list; 15 | 16 | 17 | function init() 18 | { 19 | load_card_frag_data(); 20 | } 21 | exports.init=init; 22 | 23 | function load_card_frag_data() 24 | { 25 | global.log("load_card_frag_data"); 26 | var file="card_fragment.json"; 27 | var data=json_config_file.json_config_file_list[file]; 28 | 29 | var ks=Object.keys(data["CARD_FRAGMENT"]); 30 | var count=ks.length; 31 | 32 | for(var i=1 ; i<=count ; i++) 33 | { 34 | var card_frag_data=new CardFragData(); 35 | 36 | card_frag_data.card_id=data["CARD_FRAGMENT"][i].CardId; 37 | card_frag_data.num=Number(data["CARD_FRAGMENT"][i].Num); 38 | card_frag_data.price=Number(data["CARD_FRAGMENT"][i].Price); 39 | 40 | card_frag_data_list[card_frag_data.card_id]=card_frag_data; 41 | } 42 | 43 | var log_content={"count":count,"card_frag_data_list":card_frag_data_list}; 44 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_card_frag_data",log_content,log_data.logType.LOG_CONFIG); 45 | log_data_logic.log(logData); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /game/msg_logic/code_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | var make_db=require("./make_db"); 5 | var fs=require("fs"); 6 | 7 | var PPCodeData=function() 8 | { 9 | this.code=0; 10 | this.used=0; 11 | this.pft=0; 12 | }; 13 | var g_server=null; 14 | 15 | function init(s) 16 | { 17 | g_server=s; 18 | insert_pp_code_data(); 19 | } 20 | exports.init=init; 21 | 22 | //pp兑换码 23 | function insert_pp_code_data() 24 | { 25 | global.log("insert_pp_code_data"); 26 | var ret=g_server.db.find("t_code_list",{},{},function(arr){ 27 | if(arr.length==0){ 28 | var ppCodes=fs.readFileSync("./data/pp_code.txt",'utf8'); 29 | var code_arr=ppCodes.split("|"); 30 | 31 | for(var i=0;i val_two[key]) 107 | { 108 | return -1; 109 | } 110 | else 111 | { 112 | return 0; 113 | } 114 | }; 115 | 116 | var load_formation_data_list=function() 117 | { 118 | global.log("load_formation_data_list"); 119 | g_server.db.find("t_formation_list",{},function(arr){ 120 | if(arr.length!=0) 121 | { 122 | for(var i in arr) 123 | { 124 | var grid=arr[i].grid; 125 | formation_list[grid]=arr[i]; 126 | 127 | var _rank_data=new HurtRankData(); 128 | _rank_data.gid=arr[i].gid; 129 | _rank_data.grid=grid; 130 | _rank_data.hurt=arr[i].top_hurt; 131 | top_hurt_rank.push(_rank_data); 132 | } 133 | top_hurt_rank.sort(compare); 134 | } 135 | }); 136 | }; 137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /game/msg_logic/friend_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | var define_code=require("./define_code"); 5 | var const_value=define_code.const_value; 6 | var g_server=null; 7 | 8 | //好友信息 9 | var FriendData=function() 10 | { 11 | this.gid=0; 12 | this.grid=0; 13 | this.friends=[]; //好友列表 value:FriendBaseData 14 | this.asks=[];//申请列表 value:grid 15 | }; 16 | exports.FriendData=FriendData; 17 | 18 | //好友信息 19 | var FriendBaseData=function() 20 | { 21 | this.grid=0; 22 | this.f_time=0; //战斗好友受邀时间 23 | this.times=0;//好友今日受邀次数 24 | }; 25 | exports.FriendBaseData=FriendBaseData; 26 | 27 | function init(s) 28 | { 29 | g_server=s; 30 | load_friend_data_list(); 31 | } 32 | exports.init=init; 33 | 34 | 35 | //全局变量存放用户需要更新入库的好友的用户grid 36 | var friend_update_db_list=[]; //grid 37 | exports.friend_update_db_list=friend_update_db_list; 38 | 39 | 40 | //全局变量存放好友数据 41 | var friend_data_list={}; //key:grid,value: FriendData,只保存真实用户数据 42 | exports.friend_data_list=friend_data_list; 43 | 44 | //全局变量存放玩家战前邀请好友列表 45 | var FightFriendData=function() 46 | { 47 | this.grid=0; //用户grid 48 | this.date=0; //更新时间 49 | this.friends=[];//战前邀请好友列表 50 | this.strangers=[];//战前邀请陌生人列表 51 | }; 52 | exports.FightFriendData=FightFriendData; 53 | 54 | //全局变量存放用户战斗数据 55 | var fight_friend_data_list={}; //key:用户grid,value: FightFriendData 56 | exports.fight_friend_data_list=fight_friend_data_list; 57 | 58 | 59 | var load_friend_data_list=function() 60 | { 61 | global.log("load_friend_data_list"); 62 | g_server.db.find("t_friend_list",{},function(arr){ 63 | if(arr.length) 64 | { 65 | for(var i in arr) 66 | { 67 | friend_data_list[arr[i].grid]=arr[i]; 68 | } 69 | } 70 | }) 71 | }; 72 | 73 | 74 | -------------------------------------------------------------------------------- /game/msg_logic/gate_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var GateData=function() 7 | { 8 | this.gate_id=0; 9 | this.power_cost=0; 10 | this.lv_limit=0; 11 | this.sweep_max=0; 12 | this.reset_max=0; 13 | this.first_exp=0; 14 | this.first_coin=0; 15 | this.first_drop=[]; 16 | this.common_exp=0; 17 | this.common_coin=0; 18 | this.common_drop=[]; 19 | }; 20 | 21 | var gate_data_list={}; 22 | exports.gate_data_list=gate_data_list; 23 | 24 | var g_server=null; 25 | 26 | function init(s) 27 | { 28 | g_server=s; 29 | load_gate_data(); 30 | } 31 | exports.init=init; 32 | 33 | function load_gate_data() 34 | { 35 | global.log("load_gate_data"); 36 | var file="gate.json"; 37 | var data=json_config_file.json_config_file_list[file]; 38 | 39 | var ks=Object.keys(data["GATE"]); 40 | var count=ks.length; 41 | for(var i=1 ; i<=count ; i++) 42 | { 43 | var gate_data=new GateData(); 44 | 45 | gate_data.gate_id=data["GATE"][i].GateId; 46 | gate_data.power_cost=Number(data["GATE"][i].PowerCost); 47 | gate_data.lv_limit=Number(data["GATE"][i].LvLimited); 48 | gate_data.sweep_max=Number(data["GATE"][i].DaySweepTimes); 49 | gate_data.reset_max=Number(data["GATE"][i].MaxResetSweep); 50 | gate_data.first_exp=Number(data["GATE"][i].FirstExp); 51 | gate_data.first_coin=Number(data["GATE"][i].FirstCoin); 52 | gate_data.common_exp=Number(data["GATE"][i].CommonExp); 53 | gate_data.common_coin=Number(data["GATE"][i].CommonCoin); 54 | 55 | 56 | if(data["GATE"][i].FirstDrop) 57 | { 58 | gate_data.first_drop=(data["GATE"][i].FirstDrop).split(','); 59 | } 60 | 61 | if(data["GATE"][i].CommonDrop) 62 | { 63 | gate_data.common_drop=(data["GATE"][i].CommonDrop).split(','); 64 | } 65 | 66 | gate_data_list[gate_data.gate_id]=gate_data; 67 | } 68 | 69 | var log_content={"count":count,"gate_data_list":gate_data_list}; 70 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_gate_data",log_content,log_data.logType.LOG_CONFIG); 71 | log_data_logic.log(logData); 72 | 73 | } 74 | -------------------------------------------------------------------------------- /game/msg_logic/gift_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var GiftData=function() 7 | { 8 | this.id=0; 9 | this.pft=0; 10 | this.des=0; 11 | this.drop=0; 12 | }; 13 | 14 | var gift_data_list={}; 15 | exports.gift_data_list=gift_data_list; 16 | 17 | var g_server=null; 18 | 19 | function init(s) 20 | { 21 | g_server=s; 22 | load_gift_data(); 23 | } 24 | exports.init=init; 25 | 26 | function load_gift_data() 27 | { 28 | global.log("load_gift_data"); 29 | var file="gift.json"; 30 | var data=json_config_file.json_config_file_list[file]; 31 | 32 | var ks=Object.keys(data["GIFT"]); 33 | var count=ks.length; 34 | 35 | for(var i=1 ; i<=count ; i++) 36 | { 37 | var gift_data=new GiftData(); 38 | 39 | gift_data.id=data["GIFT"][i].Id; 40 | gift_data.des=data["GIFT"][i].Des; 41 | gift_data.pft=Number(data["GIFT"][i].Pft); 42 | gift_data.drop=Number(data["GIFT"][i].Drop); 43 | 44 | 45 | gift_data_list[gift_data.id]=gift_data; 46 | } 47 | 48 | var log_content={"count":count,"gift_data_list":gift_data_list}; 49 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_gift_data",log_content,log_data.logType.LOG_CONFIG); 50 | log_data_logic.log(logData); 51 | 52 | } 53 | -------------------------------------------------------------------------------- /game/msg_logic/help_chat_logic.js: -------------------------------------------------------------------------------- 1 | var formation_data=require("./formation_data"); 2 | var comm_fun=require("./common_func"); 3 | var money_logic=require("./help_money_logic"); 4 | var key_words = require("./key_words_data"); 5 | 6 | var log_data=require("./log_data"); 7 | var log_data_logic=require("./help_log_data_logic"); 8 | var ds = require("./data_struct"); 9 | var define_code=require("./define_code"); 10 | 11 | var msg_id=define_code.msg_id; 12 | var msg_code=define_code.msg_code; 13 | var const_value=define_code.const_value; 14 | 15 | //用户发送聊天消息 16 | function on_user_chat_data(data,send,s) 17 | { 18 | global.log("on_user_chat_data"); 19 | 20 | var gid = s.gid; 21 | if(gid == undefined) 22 | { 23 | global.log("gid == undefined"); 24 | return; 25 | } 26 | 27 | var user = ds.user_list[gid]; 28 | if(user == undefined) 29 | { 30 | global.log("user == undefined"); 31 | return; 32 | } 33 | 34 | var role = ds.get_cur_role(user); 35 | if(role == undefined) 36 | { 37 | global.log("role == undefined"); 38 | return; 39 | } 40 | 41 | var message=data.message; 42 | if(message == undefined) 43 | { 44 | global.log("message == undefined"); 45 | return; 46 | } 47 | 48 | message=message.replace(key_words.reg,"*"); 49 | 50 | if(comm_fun.get_str_length(message)>45) 51 | { 52 | var msg = { 53 | "op" : msg_id.NM_USER_CHAT_DATA, 54 | "ret" : msg_code.INVALID_CODE_EXIST 55 | }; 56 | send(msg); 57 | return; 58 | } 59 | 60 | if(key_words.reg.test(message)) 61 | { 62 | var msg = { 63 | "op" : msg_id.NM_USER_CHAT_DATA, 64 | "ret" : msg_code.INVALID_CODE_EXIST 65 | }; 66 | send(msg); 67 | return; 68 | } 69 | 70 | var role_formation_data=formation_data.formation_list[role.grid]; 71 | if(role_formation_data==undefined) 72 | { 73 | global.log("role_formation_data == undefined,role_id:"+role.grid); 74 | return; 75 | } 76 | 77 | if(comm_fun.help_judge_today(role.chat_date)) 78 | { 79 | if(role.chat_time>=const_value.CHAT_FREE_TIMES) 80 | { 81 | var pay_ok=money_logic.help_pay_rmb(role,const_value.CHAT_COST); 82 | if(!pay_ok) 83 | { 84 | var msg = { 85 | "op" : msg_id.NM_USER_CHAT_DATA, 86 | "ret" : msg_code.RMB_NOT_ENOUGH 87 | }; 88 | send(msg); 89 | return; 90 | } 91 | } 92 | } 93 | else 94 | { 95 | //不是今天 96 | role.chat_date=(new Date()).getTime(); 97 | role.chat_time=0; 98 | } 99 | 100 | role.chat_time++; 101 | 102 | var msg = { 103 | "op" : msg_id.NM_USER_CHAT_DATA, 104 | "ret" : msg_code.SUCC 105 | }; 106 | send(msg); 107 | 108 | var msg_obj=new Object(); 109 | msg_obj.uid=role.grid; 110 | msg_obj.name=role.name; 111 | msg_obj.time=Math.floor((new Date()).getTime()/1000); 112 | msg_obj.level=role.level; 113 | msg_obj.vip=role.vip; 114 | msg_obj.learder_xid=role_formation_data.card_ls[0].card_id; 115 | msg_obj.msg=message; 116 | 117 | user.nNeedSave=1; 118 | 119 | //推送客户端全局修改信息 120 | var g_msg = { 121 | "op" : msg_id.NM_USER_DATA, 122 | "rmb":role.rmb , 123 | "free_chat":(const_value.CHAT_FREE_TIMES-role.chat_time), 124 | "ret" :msg_code.SUCC 125 | }; 126 | send(g_msg); 127 | global.log(JSON.stringify(g_msg)); 128 | 129 | var log_content={"msg":msg}; 130 | var logData=log_data_logic.help_create_log_data(role.gid,role.account,role.grid,role.level,role.name,"on_user_chat_data",log_content,log_data.logType.LOG_BEHAVIOR); 131 | log_data_logic.log(logData); 132 | 133 | help_notice_online_user(msg_obj); 134 | } 135 | exports.on_user_chat_data = on_user_chat_data; 136 | 137 | //通知用户聊天内容 138 | function help_notice_online_user(msg_obj) 139 | { 140 | global.log("help_notice_online_user"); 141 | 142 | var msg = { 143 | "op" : msg_id.NM_NOTICE_CHAT_DATA, 144 | "u" : msg_obj.uid, 145 | "n" : msg_obj.name, 146 | "t" : msg_obj.time, 147 | "l" : msg_obj.level, 148 | "x" : msg_obj.learder_xid, 149 | "m" : msg_obj.msg, 150 | "v" : msg_obj.vip, 151 | "ret" : msg_code.SUCC 152 | }; 153 | 154 | for(var key in ds.user_account_list) 155 | { 156 | var user = ds.user_account_list[key]; 157 | 158 | global.log("online : "+user.online); 159 | global.log("send : "+typeof(user.send)); 160 | global.log("account : "+user.account_data.account); 161 | 162 | if(user.online && user.send) 163 | { 164 | user.send(msg); 165 | } 166 | } 167 | 168 | } 169 | 170 | 171 | -------------------------------------------------------------------------------- /game/msg_logic/help_child_logic.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains WebStorm. 3 | * User: Administrator 4 | * Date: 13-6-3 5 | * Time: 下午9:36 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | 9 | var make_db = require("./make_db"); 10 | var common_func = require("./common_func"); 11 | var define_code = require("./define_code"); 12 | var ds = require("./data_struct"); 13 | var formation_logic = require("./help_formation_logic"); 14 | var mail_logic = require("./help_mail_logic"); 15 | var friend_logic = require("./help_friend_logic"); 16 | var purchase_shop_logic = require("./help_purchase_shop_logic"); 17 | var town_logic = require("./help_town_logic"); 18 | var arena_logic = require("./help_arena_logic"); 19 | var role_data_logic = require("./help_role_data_logic"); 20 | 21 | 22 | var const_value=define_code.const_value; 23 | var msg_id=define_code.msg_id; 24 | var msg_code=define_code.msg_code; 25 | 26 | var g_server = null; 27 | 28 | var init=function(s) 29 | { 30 | g_server=s; 31 | if(g_server.socket_server) 32 | { 33 | g_server.socket_server.on('exit',close_server); 34 | } 35 | if(g_server.config.test==1) 36 | { 37 | //控制台模式,监听程序打断事件 38 | /*process.on('SIGINT',function(){ 39 | global.log(11) 40 | close_server(); 41 | setTimeout(function(){ 42 | process.exit(); 43 | },5*1000); 44 | 45 | });*/ 46 | 47 | } 48 | process.on('message',child_process); 49 | }; 50 | exports.init=init; 51 | 52 | var handler={ 53 | "tick" : new on_tick(), 54 | "town_tick" : new on_town_tick(), 55 | "tick_user_offline" : new on_tick_user_offline(), 56 | "save_system_data" : new on_save_system_data(), 57 | "get_system_info" : new on_get_system_info() 58 | }; 59 | 60 | function child_process(msg) 61 | { 62 | global.log("child receive data is :"+JSON.stringify(msg)); 63 | handler[msg.op].handle(msg); 64 | } 65 | 66 | function on_tick() 67 | { 68 | this.handle = function(msg) 69 | { 70 | if(msg.param==0) 71 | { 72 | global.log("this time is 24"); 73 | //发送月卡返还 74 | purchase_shop_logic.auto_dispatch_cd_reward(); 75 | //只读邮件清空 76 | mail_logic.auto_clear_user_mail(); 77 | //清除战斗好友缓存 78 | friend_logic.auto_clear_fight_list(); 79 | } 80 | else if(msg.param==22) 81 | { 82 | global.log("this time is 22"); 83 | //发送排行榜奖励 84 | arena_logic.auto_provide_rank_reward(); 85 | } 86 | } 87 | } 88 | 89 | function on_town_tick() 90 | { 91 | this.handle = function(msg) 92 | { 93 | town_logic.help_town_fight_rank(msg); 94 | } 95 | } 96 | 97 | function on_save_system_data() 98 | { 99 | this.handle = function(msg) 100 | { 101 | global.log("on_save_system_data"); 102 | friend_logic.update_friend_data_list(); 103 | mail_logic.update_mail_data_list(); 104 | town_logic.update_town_data(); 105 | town_logic.update_town_title_data(); 106 | } 107 | } 108 | 109 | function on_tick_user_offline() 110 | { 111 | this.handle = function(msg) 112 | { 113 | global.log("on_tick_user_offline"); 114 | global.log("ds.user_account_list:" + Object.keys(ds.user_account_list).length); 115 | global.log("ds.user_list:" + Object.keys(ds.user_list).length); 116 | for (var key in ds.user_account_list) { 117 | var user = ds.user_account_list[key]; 118 | //var role = ds.get_cur_role(user);没有创建角色之前undefined 119 | var now = new Date(); 120 | 121 | global.log("user.online:" + user.online); 122 | global.log("now.getTime()-user.offline_time:" + (now.getTime() - user.offline_time)); 123 | 124 | if (user.online == 0 && now.getTime() - user.offline_time > 60 * 1000) { 125 | global.log("account:[" + user.account_data.account + "] gid:[" + user.account_data.gid + "] offline!"); 126 | delete ds.user_list[user.account_data.gid]; 127 | delete ds.user_account_list[key]; 128 | 129 | if (user.socket != null && user.socket != undefined) { 130 | user.socket.end(); 131 | user.socket.destroy(); 132 | clearInterval(user.socket.interval); 133 | user.socket = null; 134 | } 135 | user = null; 136 | } 137 | } 138 | } 139 | } 140 | 141 | 142 | 143 | function on_get_system_info() 144 | { 145 | this.handle = function(msg) 146 | { 147 | global.log("totalmem:" + require('os').totalmem()); 148 | global.log("freemem:" + require('os').freemem()); 149 | global.log('This process is pid ' + process.pid); 150 | global.log(require('util').inspect(process.memoryUsage())); 151 | global.log(process.memoryUsage().rss / require('os').totalmem()); 152 | } 153 | } 154 | 155 | //存储用户信息 156 | function auto_save_data(user) 157 | { 158 | var role = ds.get_cur_role(user); 159 | if(role == undefined) 160 | { 161 | return; 162 | } 163 | make_db.update_role_data(role); 164 | formation_logic.sava_role_formation(role); 165 | } 166 | exports.auto_save_data=auto_save_data; 167 | 168 | //服务器关闭,最好等待5秒以上,数据全部入库 169 | function close_server() 170 | { 171 | g_server.socket_server.close(function(){ 172 | global.log("server is closed!"); 173 | }); 174 | for(var key in ds.user_account_list) 175 | { 176 | var user = ds.user_account_list[key]; 177 | if(user && user.socket) 178 | { 179 | user.socket.emit("close"); 180 | } 181 | } 182 | on_save_system_data(); 183 | } 184 | 185 | 186 | 187 | -------------------------------------------------------------------------------- /game/msg_logic/help_client_error_logic.js: -------------------------------------------------------------------------------- 1 | var log_data=require("./log_data"); 2 | var log_data_logic=require("./help_log_data_logic"); 3 | 4 | 5 | //错误记录 6 | function on_client_error(data,send,s) 7 | { 8 | global.log("on_client_error"); 9 | 10 | var error=data.error; 11 | if(error == undefined) 12 | { 13 | global.log("error == undefined"); 14 | return; 15 | } 16 | 17 | var log_content={"error":error}; 18 | var logData=log_data_logic.help_create_log_data(0,0,0,0,0,"on_client_error",log_content,log_data.logType.LOG_CLIENT_ERROR); 19 | log_data_logic.log(logData); 20 | 21 | } 22 | exports.on_client_error = on_client_error; 23 | -------------------------------------------------------------------------------- /game/msg_logic/help_drop_logic.js: -------------------------------------------------------------------------------- 1 | var define_code=require("./define_code"); 2 | var drop = require("./drop_data"); 3 | var ds = require("./data_struct"); 4 | var card_logic=require("./help_card_logic"); 5 | var item_logic=require("./help_item_logic"); 6 | var money_logic=require("./help_money_logic"); 7 | var role_data_logic=require("./help_role_data_logic"); 8 | var common_func=require("./common_func"); 9 | 10 | 11 | var log_data=require("./log_data"); 12 | var log_data_logic=require("./help_log_data_logic"); 13 | var const_value=define_code.const_value; 14 | var msg_id=define_code.msg_id; 15 | var msg_code=define_code.msg_code; 16 | 17 | var g_server = null; 18 | exports.init = function(s) 19 | { 20 | g_server = s; 21 | }; 22 | 23 | //创建生成的物品 drop_item_id物品id,物品数量drop_item_num,类别 24 | function help_put_item_to_role(role,item_id,item_num,item_type) 25 | { 26 | global.log("help_put_item_to_role,item_id:"+item_id+",item_num:"+item_num+",item_type:"+item_type); 27 | if(role == undefined|| item_id==undefined||item_num ==undefined||item_type ==undefined) 28 | { 29 | global.log("role == undefined|| item_id==undefined||item_num ==undefined||item_type ==undefined"); 30 | return; 31 | } 32 | 33 | var item_num=Number(item_num); 34 | 35 | var gain_item={}; 36 | gain_item.uids=[]; 37 | gain_item.flag=0; //判断是否发送通知 38 | 39 | switch (Number(item_type)) 40 | { 41 | //卡牌 42 | case const_value.REWARD_TYPE_CARD: 43 | for(var n=0;n=0;j--) 142 | { 143 | if((j==0)||(drop_prob>drop_json_data.drop_ls[j-1].probability&&drop_prob<=drop_json_data.drop_ls[j].probability)) 144 | { 145 | var client_drop_data=new Object(); 146 | //掉落类别 147 | client_drop_data.type=drop_json_data.drop_ls[j].type; 148 | //物品id 149 | client_drop_data.xid=drop_json_data.drop_ls[j].drop; 150 | //数量 151 | client_drop_data.num=drop_json_data.drop_ls[j].num; 152 | drop_data.push(client_drop_data); 153 | break; 154 | } 155 | } 156 | } 157 | 158 | return drop_data; 159 | 160 | } 161 | exports.help_gain_drop_data = help_gain_drop_data; 162 | 163 | -------------------------------------------------------------------------------- /game/msg_logic/help_gift_logic.js: -------------------------------------------------------------------------------- 1 | var log_data=require("./log_data"); 2 | var log_data_logic=require("./help_log_data_logic"); 3 | var gift_data=require("./gift_data"); 4 | var make_db=require("./make_db"); 5 | var ds = require("./data_struct"); 6 | 7 | var billing_client = require("../billing_client"); 8 | var mail_logic=require("./help_mail_logic"); 9 | var drop_logic=require("./help_drop_logic"); 10 | 11 | var define_code=require("./define_code"); 12 | var msg_id=define_code.msg_id; 13 | var msg_code=define_code.msg_code; 14 | var const_value=define_code.const_value; 15 | 16 | var g_server=null; 17 | 18 | function init(s) 19 | { 20 | g_server = s; 21 | } 22 | exports.init=init; 23 | 24 | //兑换礼包 25 | function on_exchange_gift(data,send,s) 26 | { 27 | global.log("on_exchange_gift"); 28 | 29 | var gid = s.gid; 30 | if(gid == undefined) 31 | { 32 | global.log("gid == undefined"); 33 | return; 34 | } 35 | 36 | var user = ds.user_list[gid]; 37 | if(user == undefined) 38 | { 39 | global.log("user == undefined"); 40 | return; 41 | } 42 | var role = ds.get_cur_role(user); 43 | if(role == undefined) 44 | { 45 | global.log("role == undefined"); 46 | return; 47 | } 48 | 49 | var pft=data.pft; 50 | var code=data.code; 51 | if(pft==undefined || code==undefined) 52 | { 53 | global.log("pft==undefined || code==undefined"); 54 | return; 55 | } 56 | 57 | if(code.length<7) 58 | { 59 | var msg = { 60 | "op" : msg_id.NM_EXCHANGE_GIFT, 61 | "ret" : msg_code.CODE_IS_NOT_EXIST 62 | }; 63 | send(msg); 64 | return; 65 | } 66 | 67 | var msg = { 68 | "op": msg_id.NM_BL_VERIFY_CODE, 69 | "pft" : pft, 70 | "account" : role.account, 71 | "code" : code 72 | }; 73 | 74 | var verify_user=new Object(); 75 | 76 | verify_user.gid=role.gid; 77 | verify_user.grid=role.grid; 78 | verify_user.account=role.account; 79 | verify_user.level=role.level; 80 | verify_user.name=role.name; 81 | verify_user.socket=user.socket; 82 | 83 | ds.cd_verify_account_list[role.account] = verify_user; 84 | 85 | var b_socket = billing_client.get_billing_socket(); 86 | if(b_socket && b_socket.send) 87 | { 88 | b_socket.send(msg); 89 | global.log("send to billing_server ok!"); 90 | } 91 | else 92 | { 93 | global.log("on_exchange_gift error"); 94 | var msg = { 95 | "op" : msg_id.NM_EXCHANGE_GIFT, 96 | "ret" : msg_code.SERVER_ERROR 97 | }; 98 | send(msg); 99 | } 100 | 101 | var log_content={}; 102 | var logData=log_data_logic.help_create_log_data(role.gid,role.account,role.grid,role.level,role.name,"on_exchange_gift",log_content,log_data.logType.LOG_BEHAVIOR); 103 | log_data_logic.log(logData); 104 | } 105 | exports.on_exchange_gift = on_exchange_gift; 106 | 107 | //获取兑换礼包奖励 108 | function help_get_gift_result(data,send,s) 109 | { 110 | global.log("help_get_gift_result"); 111 | 112 | var account = data.account; 113 | var pft = data.pft; 114 | var verify_result = data.ret; 115 | 116 | if(account == undefined ||pft == undefined ||verify_result == undefined) 117 | { 118 | global.log("account == undefined ||pft == undefined ||verify_result == undefined"); 119 | return; 120 | } 121 | 122 | var temp_user = ds.cd_verify_account_list[account]; 123 | if(temp_user == undefined) 124 | { 125 | global.log("temp_user == undefined"); 126 | return; 127 | } 128 | 129 | if(verify_result==0) 130 | { 131 | //获取礼包 132 | for(var key in gift_data.gift_data_list) 133 | { 134 | var _gift_data=gift_data.gift_data_list[key]; 135 | if(_gift_data.pft==pft) 136 | { 137 | var _drop_data=drop_logic.help_gain_drop_data(_gift_data.drop); 138 | 139 | for(var i=0;i<_drop_data.length;i++) 140 | { 141 | var item=new Object(); 142 | item.type=_drop_data[i].type; 143 | item.id=_drop_data[i].xid; 144 | item.num=_drop_data[i].num; 145 | 146 | mail_logic.help_create_mail_data(temp_user.gid,temp_user.grid,const_value.MAIL_TYPE_REWARD,_gift_data.des,item); 147 | } 148 | } 149 | } 150 | 151 | var msg = { 152 | "op" : msg_id.NM_EXCHANGE_GIFT, 153 | "ret" : msg_code.SUCC 154 | }; 155 | if(temp_user.socket&&temp_user.socket.send) 156 | { 157 | temp_user.socket.send(msg); 158 | } 159 | 160 | } 161 | else 162 | { 163 | var msg = { 164 | "op" : msg_id.NM_EXCHANGE_GIFT, 165 | "ret" : msg_code.CODE_IS_NOT_EXIST 166 | }; 167 | 168 | if(temp_user.socket&&temp_user.socket.send) 169 | { 170 | temp_user.socket.send(msg); 171 | } 172 | } 173 | delete ds.temp_user_account_list[account]; 174 | 175 | var log_content={}; 176 | var logData=log_data_logic.help_create_log_data(temp_user.gid,temp_user.account,temp_user.grid,temp_user.level,temp_user.name,"help_get_gift_result",log_content,log_data.logType.LOG_BEHAVIOR); 177 | log_data_logic.log(logData); 178 | } 179 | exports.help_get_gift_result = help_get_gift_result; 180 | 181 | -------------------------------------------------------------------------------- /game/msg_logic/help_log_data_logic.js: -------------------------------------------------------------------------------- 1 | var log_data=require("./log_data.js"); 2 | 3 | function help_create_log_data(gid,account,grid,level,name,event,content,type) 4 | { 5 | var fd; 6 | if(gid==undefined) 7 | { 8 | gid=0; 9 | } 10 | if(account==undefined) 11 | { 12 | account=0; 13 | } 14 | if(grid==undefined) 15 | { 16 | grid=0; 17 | } 18 | if(level==undefined) 19 | { 20 | level=0; 21 | } 22 | if(name==undefined) 23 | { 24 | name=0; 25 | } 26 | if(event==undefined || content==undefined || type==undefined ) 27 | { 28 | return fd; 29 | } 30 | 31 | fd=new log_data.LogData(); 32 | fd.gid=gid; 33 | fd.account=account; 34 | fd.grid=grid; 35 | fd.level=level; 36 | fd.name=name; 37 | fd.event=event; 38 | fd.content=content; 39 | fd.type=type; 40 | 41 | fd.date=""; 42 | 43 | return fd; 44 | 45 | }; 46 | exports.help_create_log_data=help_create_log_data; 47 | 48 | function log(logData) 49 | { 50 | var now=new Date(); 51 | var year=now.getFullYear(); 52 | var month=Number(now.getMonth())+1; 53 | var date=now.getDate(); 54 | var hour=now.getHours(); 55 | var minute=now.getMinutes(); 56 | var second=now.getSeconds(); 57 | 58 | var d=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; 59 | var log_file_name; 60 | logData.date=d; 61 | 62 | switch (logData.type) 63 | { 64 | case log_data.logType.LOG_CONFIG : 65 | log_file_name=log_data.log_file_name.log_file_config; 66 | break; 67 | case log_data.logType.LOG_BEHAVIOR : 68 | log_file_name=log_data.log_file_name.log_file_behavior; 69 | break; 70 | case log_data.logType.LOG_MONEY : 71 | log_file_name=log_data.log_file_name.log_file_money; 72 | break; 73 | case log_data.logType.LOG_MAIL : 74 | log_file_name=log_data.log_file_name.log_file_mail; 75 | break; 76 | case log_data.logType.LOG_REGISTER : 77 | log_file_name=log_data.log_file_name.log_file_login; 78 | break; 79 | case log_data.logType.LOG_LOGIN : 80 | log_file_name=log_data.log_file_name.log_file_login; 81 | break; 82 | case log_data.logType.LOG_CLIENT_ERROR : 83 | log_file_name=log_data.log_file_name.log_file_error; 84 | break; 85 | } 86 | 87 | global.log2(log_file_name,logData); 88 | }; 89 | exports.log=log; -------------------------------------------------------------------------------- /game/msg_logic/help_money_logic.js: -------------------------------------------------------------------------------- 1 | var log_data=require("./log_data"); 2 | var log_data_logic=require("./help_log_data_logic"); 3 | var common_func=require("./common_func"); 4 | 5 | //支付金钱 6 | function help_pay_money(role,money) 7 | { 8 | global.log("help_pay_money"); 9 | 10 | if(role==undefined) 11 | { 12 | global.log("role==undefined"); 13 | return; 14 | } 15 | 16 | if(common_func.isEmpty(money)) 17 | { 18 | global.err("param money error"); 19 | return; 20 | } 21 | 22 | if(Number(money)||Number(money)==0) 23 | { 24 | var pay_ok=false; 25 | 26 | if(role.gold=1) 46 | { 47 | var reward_data=new RewardData(); 48 | reward_data.id=data["LOGIN_REWARD"][i].Xid1; 49 | reward_data.num=Number(data["LOGIN_REWARD"][i].Num1); 50 | reward_data.type=Number(data["LOGIN_REWARD"][i].Type1); 51 | lg_reward_data.reward_arr.push(reward_data); 52 | } 53 | else 54 | { 55 | lg_reward_data.reward_arr.push(0); 56 | } 57 | 58 | if(Number(data["LOGIN_REWARD"][i].Num2)>=1) 59 | { 60 | var reward_data=new RewardData(); 61 | reward_data.id=data["LOGIN_REWARD"][i].Xid2; 62 | reward_data.num=Number(data["LOGIN_REWARD"][i].Num2); 63 | reward_data.type=Number(data["LOGIN_REWARD"][i].Type2); 64 | lg_reward_data.reward_arr.push(reward_data); 65 | } 66 | else 67 | { 68 | lg_reward_data.reward_arr.push(0); 69 | } 70 | 71 | if(Number(data["LOGIN_REWARD"][i].Num3)>=1) 72 | { 73 | var reward_data=new RewardData(); 74 | reward_data.id=data["LOGIN_REWARD"][i].Xid3; 75 | reward_data.num=Number(data["LOGIN_REWARD"][i].Num3); 76 | reward_data.type=Number(data["LOGIN_REWARD"][i].Type3); 77 | lg_reward_data.reward_arr.push(reward_data); 78 | } 79 | else 80 | { 81 | lg_reward_data.reward_arr.push(0); 82 | } 83 | 84 | login_reward_data_list[lg_reward_data.id]=lg_reward_data; 85 | } 86 | 87 | var log_content={"count":count,"login_reward_data_list":login_reward_data_list}; 88 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_activity_data",log_content,log_data.logType.LOG_CONFIG); 89 | log_data_logic.log(logData); 90 | 91 | } 92 | -------------------------------------------------------------------------------- /game/msg_logic/mail_data.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains WebStorm. 3 | * User: Administrator 4 | * Date: 13-6-12 5 | * Time: 下午5:24 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | var json_config_file=require("./json_config_file"); 9 | var log_data=require("./log_data"); 10 | var log_data_logic=require("./help_log_data_logic"); 11 | 12 | function MailData() 13 | { 14 | this.mail_id = ""; 15 | this.content = ""; 16 | this.item ={}; 17 | } 18 | 19 | var g_server=null; 20 | 21 | var init=function(s) 22 | { 23 | g_server=s; 24 | load_mail_data_list(); 25 | }; 26 | exports.init=init; 27 | 28 | var MailDataDB=function() 29 | { 30 | this.gid=0; //用户gid 31 | this.grid=0; //用户grid 32 | this.mail_arr=[]; //value:MailBaseData 33 | }; 34 | exports.MailDataDB=MailDataDB; 35 | 36 | 37 | var MailBaseData=function() 38 | { 39 | this.id=0; //邮件id 40 | this.type=0;//邮件类型 1:可以领取的邮件,2:只读邮件 41 | this.content="";//邮件内容 42 | this.date=0;//邮件创建时间 43 | this.attachment="";//邮件附件 44 | }; 45 | exports.MailBaseData=MailBaseData; 46 | 47 | 48 | //邮件道具奖励数据结构 49 | var MailItem=function() 50 | { 51 | this.type=0;//道具类型 52 | this.id=0;//道具id 53 | this.num=0;//数量 54 | }; 55 | exports.mail_item=MailItem; 56 | 57 | //全局变量存放用户邮件 58 | var mail_list={}; //key:用户grid,value: MailDataDB 59 | exports.mail_list=mail_list; 60 | 61 | 62 | //全局变量存放用户需要更新入库的邮件的用户grid 63 | var mail_update_db_list=[]; //grid 64 | exports.mail_update_db_list=mail_update_db_list; 65 | 66 | 67 | var load_mail_data_list=function() 68 | { 69 | global.log("load_mail_data_list"); 70 | g_server.db.find("t_mail_list",{},function(arr){ 71 | 72 | if(arr.length!=0) 73 | { 74 | for(var i in arr) 75 | { 76 | var grid=arr[i].grid 77 | mail_list[grid]=arr[i]; 78 | } 79 | } 80 | }) 81 | }; 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /game/msg_logic/msg_type.js: -------------------------------------------------------------------------------- 1 | //消息ID与客户端ID值对应 2 | 3 | function MsgID() 4 | { 5 | this.NM_CONNECT=1; 6 | this.NM_RECONNECT = 2; 7 | this.NM_ALIVED = 3; //客户端连接成功后的心跳协议 8 | this.NM_MUTIL_LOGIN = 4;//有相同帐号登录 9 | this.NM_UPDATE_SERVER_STATUS = 6; //上传游戏服信息到billing服务器 10 | this.NM_USER_RECONNECT_TO_BILLING = 7;//重连GS后通知billing 11 | this.NM_BL_USER_OFFLINE = 8; 12 | this.NM_USER_NOTICE = 9; //GM发送用户公告 推送 13 | this.NM_USER_DATA = 10; //用户基础数据推送 14 | this.NM_ROLE_LIST=20; 15 | this.NM_MAIL_DATA=21; //服务器推送客户端单个邮件 16 | this.NM_BL_GS_USER_LOGIN = 26; //billing 登录确认 17 | this.NM_SERVER_STATUS = 27; // 运行状态上传 billing 18 | this.NM_BL_KICK_USER = 28; //从BILLING 传来踢玩家下线 19 | this.NM_BL_ACCOUNT_BIND = 29; //快速登录账号绑定billing 20 | this.NM_BL_VERIFY_CODE = 30; //BILLING 兑换码确认 21 | 22 | this.NM_FRIEND_DATA_LIST=50; //查看好友列表 23 | this.NM_ADD_FRIEND=51; //申请添加好友 24 | this.NM_DELETE_FRIEND=52; //删除好友 25 | this.NM_FRIEND_REQUEST_LIST=53; //查看申请列表 26 | this.NM_CLEAR_FRIEND_LIST=54; //清空申请列表 27 | this.NM_AGREE_REQUEST=55; //同意好友请求 28 | this.NM_REFUSE_REQUEST=56;//拒绝好友请求 29 | this.NM_SEARCH_FRIEND=57;//好友搜索 30 | this.NM_FRIEND_DETAIL=58;//好友详情 31 | 32 | this.NM_USER_PURC_DATA=80;//用户商城充值信息 33 | this.NM_APPLE_USER_PURCHASE=81;//正式苹果用户支付 34 | this.NM_GP_USER_PURCHASE=82;//正式Google play用户支付 35 | this.NM_PP_USER_PURCHASE=88;//用户充值结果(目前是PP助手的推送充值结果) 36 | 37 | 38 | this.NM_GET_NOTICE_COUNT=198; //获得通知数量 39 | this.NM_ADD_STAMINA=197; //增加体力 40 | 41 | 42 | 43 | this.NM_LOGIN=201; //登录 44 | this.NM_LOGIN_REWARD = 202;//登录奖励 45 | this.NM_RANDOM_NAME=203; //随机名 46 | this.NM_CREATE_ROLE = 205;//创建角色 47 | this.NM_ENTER_GAME = 207; //进入游戏 48 | 49 | this.NM_TOWN_DATA=299; //城池信息 50 | this.NM_GATE_DATA = 298;//关卡信息 51 | this.NM_CARD_BGA_DATA = 297;//卡牌背包信息 52 | this.NM_EQUIP_BGA_DATA = 296;//装备背包信息 53 | this.NM_FORMATION_DATA=295;//获取用户阵型信息 54 | this.NM_FIGHT_FRIEND_DATA=294;//邀请战斗好友列表 55 | this.NM_SELECT_FIGHT_FRIEND=293;//选择邀请好友 56 | this.NM_EXTEND_BAG=292;//扩充武将装备背包 57 | this.NM_CARD_STRENGTH=283;//武将强化 58 | this.NM_CARD_REBORN=282;//武将转生 59 | this.NM_FORMATION_EDIT=281;//阵型编辑 60 | this.NM_EQUIP_UPLOAD=280;//装备装载 61 | this.NM_GAIN_TOWN_REWARD=277;//领取副本奖励 62 | this.NM_WAR_REWARD_DATA=276;//预先计算关卡掉落 63 | this.NM_GATE_FIGHT_RESULT=275;//关卡战斗结果数据 64 | this.NM_ITEM_SELL=274;//道具出售 65 | this.NM_CARD_SELL=273;//武将出售 66 | this.NM_SWEEP_GATE=272;//关卡扫荡 67 | this.NM_RESET_SWEEP=271;//重置扫荡 68 | this.NM_BUY_EXPLORE_COUNT=267;//购买用户探索次数 69 | this.NM_USER_RECRUIT_DATA=266;//用户招募信息 70 | this.NM_TAKE_CARD=265;//抽卡 71 | this.NM_GET_ACTIVE_ACTIVITIES=262;//获取活动开启状态 72 | this.NM_ACTIVITY_DATA=261;//活动数据 73 | this.NM_ACTIVITY_GATE_DATA=260;//活动关卡数据 74 | this.NM_ROLE_MAIL_LIST=259;//发送用户邮件列表 75 | this.NM_GAIN_MAIL_REWARD=258;//领取邮件奖励 76 | this.NM_FINISH_ROOKIE_GUIDE=257; //完成的新手引导步骤号 77 | this.NM_UI_VISITED=256; //背包打开操作 78 | this.NM_FIGHT_REVIVE=255; //战斗复活 79 | this.NM_EQUIP_COMPOSE=253; //装备合成 80 | this.NM_CAED_PIECE_COMPOSE=252; //卡牌碎片合成 81 | this.NM_EQUIP_PIECE_COMPOSE=251; //装备碎片合成 82 | this.NM_ADD_EXPLORATION=249; //增加探索次数 83 | this.NM_EXPLORE=248; //探索 84 | this.NM_BUY_EXPLORE=247; //购买探索结果 85 | this.NM_GET_ACHIEVEMENT_DATA=246; //获取成就数据 86 | this.NM_GET_ACHIEVEMENT_REWARD=245; //获取成就奖励 87 | this.NM_REPORT_ACHIEVEMENT=244; //提交成就进度 88 | this.NM_GET_SEVEN_DATA=243; //获取7日登录信息 89 | this.NM_GET_SEVEN_REWARD=242; //领取7日登录奖励 90 | this.NM_GET_SIGN_DATA=241; //获取30日签到数据 91 | this.NM_SIGN_IN=240; //30日签到 92 | this.NM_EXCHANGE_GIFT=239; //兑换礼包 93 | this.NM_USER_CHAT_DATA=238; //用户发送聊天消息 94 | this.NM_NOTICE_CHAT_DATA=237; //通知用户聊天内容 95 | this.NM_GET_USER_INFO=236; //获取用户信息 96 | this.NM_GET_ACTIVITY_STATES=235; //获取活动状态 97 | this.NM_EAT_CHICK=234; //吃鸡 98 | this.NM_REFRESH_EXLIST=233; //刷新兑换列表 99 | this.NM_EXCHANGE=232; //兑换物品 100 | this.NM_SACRIFICE=231; //参拜 101 | this.NM_TOWN_CHALLENGE=230; //挑战城池信息 102 | this.NM_SET_TOWN_GUARD=229;//设置城守 103 | this.NM_GAIN_GUARD_TOWN_REWARD=228;//领取守城奖励 104 | this.NM_USE_ITEM=227; //使用道具 105 | this.NM_CARDFRAGMENT_SELL=225;//武将碎片出售 106 | this.NM_ARENA_DATA=224;//查看竞技场中玩家本人的信息 107 | this.NM_GAIN_ARENA_REWARD=222;//领取排行榜奖励 108 | this.NM_ARENA_ROLE_DETAIL=221;//获取排行榜玩家信息 109 | this.NM_ARENA_RANK_REWARD_DATA=220;//获取排行榜玩家奖励信息 110 | this.NM_SHOP_DATA=219;//获取商城数据 111 | this.NM_SHOP_BUY=218;//商城购买 112 | this.NM_ACCOUNT_REBIND=217;//账号重新绑定 113 | this.NM_GET_EXCHANGE_LIST=216; //获取兑换店列表 114 | this.NM_MONEY_TREE=215; //招财 115 | this.NM_CARD_FORGE=214; //卡牌熔炼 116 | this.NM_GET_SHARE_REWARD=213; //获取分享奖励 117 | this.NM_ONE_TOWN_CHALLENGE=212; //单个挑战城池信息 118 | this.NM_TOWN_RANk=211; //获取城池排行榜信息 119 | this.NM_TOWN_TITLE=210; //获取城池称号信息 120 | this.NM_SUMMON_CARD=209; //招降武将 121 | this.NM_BUY_BEAUTY=208; //购买美女 122 | this.NM_SELECT_BEAUTY=800; //战前更换美女 123 | this.NM_TEST_TOWN=3000; //城池全部打开 124 | } 125 | exports.MsgID=MsgID; 126 | -------------------------------------------------------------------------------- /game/msg_logic/pool_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var card_pool_data_list={}; //key star value [card_id] 7 | exports.card_pool_data_list=card_pool_data_list; 8 | 9 | var beauty_pool_data_list={}; //key star value [card_id] 10 | exports.beauty_pool_data_list=beauty_pool_data_list; 11 | 12 | 13 | function init() 14 | { 15 | load_card_pool_data(); 16 | load_beauty_pool_data(); 17 | } 18 | exports.init=init; 19 | 20 | function load_card_pool_data() 21 | { 22 | global.log("load_card_pool_data"); 23 | var file="card_pool.json"; 24 | var data=json_config_file.json_config_file_list[file]; 25 | 26 | var ks=Object.keys(data["CARD_POOL"]); 27 | var count=ks.length; 28 | 29 | for(var i=1 ; i<=count ; i++) 30 | { 31 | var star=data["CARD_POOL"][i].Star; 32 | if(!card_pool_data_list[star]) 33 | { 34 | card_pool_data_list[star]=[]; 35 | } 36 | 37 | card_pool_data_list[star].push(data["CARD_POOL"][i].CardId); 38 | } 39 | 40 | var log_content={"count":count,"card_pool_data_list":card_pool_data_list}; 41 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_card_pool_data",log_content,log_data.logType.LOG_CONFIG); 42 | log_data_logic.log(logData); 43 | 44 | } 45 | 46 | function load_beauty_pool_data() 47 | { 48 | global.log("load_beauty_pool_data"); 49 | var file="beauty_pool.json"; 50 | var data=json_config_file.json_config_file_list[file]; 51 | 52 | var ks=Object.keys(data["BEAUTY_POOL"]); 53 | var count=ks.length; 54 | 55 | for(var i=1 ; i<=count ; i++) 56 | { 57 | var star=data["BEAUTY_POOL"][i].Star; 58 | if(!beauty_pool_data_list[star]) 59 | { 60 | beauty_pool_data_list[star]=[]; 61 | } 62 | 63 | beauty_pool_data_list[star].push(data["BEAUTY_POOL"][i].BeautyId); 64 | } 65 | 66 | var log_content={"count":count,"beauty_pool_data_list":beauty_pool_data_list}; 67 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_beauty_pool_data",log_content,log_data.logType.LOG_CONFIG); 68 | log_data_logic.log(logData); 69 | 70 | } 71 | -------------------------------------------------------------------------------- /game/msg_logic/purchase_shop_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | //充值商城数据结构 7 | var PurchaseShopData=function() 8 | { 9 | this.goods_id=0; //商品id 10 | this.pft_type=0; //平台类型 11 | this.goods_price=0; //商品现价 12 | this.goods_rmb=0; //商品人民币获得 13 | this.first_reward=0; //首冲返利 14 | this.common_reward=0; //充值返利 15 | this.is_cd=0; //是否是月卡 16 | this.cd_reward=0; //月卡返利 17 | 18 | }; 19 | exports.PurchaseShopData=PurchaseShopData; 20 | 21 | function init() 22 | { 23 | load_purchase_shop_data(); 24 | 25 | } 26 | exports.init=init; 27 | 28 | //全局变量存放充值商店的数据 29 | var purchase_shop_data_list={}; //key:grid,value: PurchaseShopData 30 | exports.purchase_shop_data_list=purchase_shop_data_list; 31 | 32 | function load_purchase_shop_data() 33 | { 34 | global.log("load_purchase_shop_data"); 35 | var file="purchase_shop.json"; 36 | var data=json_config_file.json_config_file_list[file]; 37 | 38 | var ks=Object.keys(data["PURCHASE_SHOP"]); 39 | var count=ks.length; 40 | //实现完全拷贝 41 | for(var i=1 ; i<=count ; i++) 42 | { 43 | var purchase_shop_data=new PurchaseShopData(); 44 | 45 | purchase_shop_data.goods_id=data["PURCHASE_SHOP"][i].GoodsId; 46 | purchase_shop_data.pft_type=Number(data["PURCHASE_SHOP"][i].PftType); 47 | purchase_shop_data.goods_price=Number(data["PURCHASE_SHOP"][i].Price); 48 | purchase_shop_data.goods_rmb=Number(data["PURCHASE_SHOP"][i].GoodsRmb); 49 | purchase_shop_data.first_reward=Number(data["PURCHASE_SHOP"][i].FirstReward); 50 | purchase_shop_data.common_reward=Number(data["PURCHASE_SHOP"][i].CommonReward); 51 | purchase_shop_data.is_cd=Number(data["PURCHASE_SHOP"][i].IsCD); 52 | purchase_shop_data.cd_reward=Number(data["PURCHASE_SHOP"][i].CDReward); 53 | 54 | purchase_shop_data_list[purchase_shop_data.goods_id]=purchase_shop_data; 55 | } 56 | 57 | var log_content={"count":count,"purchase_shop_data_list":purchase_shop_data_list}; 58 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_purchase_shop_data",log_content,log_data.logType.LOG_CONFIG); 59 | log_data_logic.log(logData); 60 | 61 | } 62 | 63 | 64 | -------------------------------------------------------------------------------- /game/msg_logic/recharge_reward_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var RechargeRewardData=function() 7 | { 8 | this.id=0; 9 | this.item_type=0; 10 | this.item_id=0; 11 | this.item_num=0; 12 | }; 13 | 14 | var recharge_reward_data_list={}; 15 | exports.recharge_reward_data_list=recharge_reward_data_list; 16 | 17 | function init() 18 | { 19 | load_recharge_reward_data(); 20 | } 21 | exports.init=init; 22 | 23 | function load_recharge_reward_data() 24 | { 25 | global.log("load_recharge_reward_data"); 26 | var file="recharge_reward.json"; 27 | var data=json_config_file.json_config_file_list[file]; 28 | 29 | var ks=Object.keys(data["RECHARGE_REWARD"]); 30 | var count=ks.length; 31 | 32 | for(var i=1 ; i<=count ; i++) 33 | { 34 | var recharge_reward_data=new RechargeRewardData(); 35 | 36 | recharge_reward_data.id=data["RECHARGE_REWARD"][i].Id; 37 | recharge_reward_data.item_type=Number(data["RECHARGE_REWARD"][i].ItemType); 38 | recharge_reward_data.item_id=data["RECHARGE_REWARD"][i].ItemId; 39 | recharge_reward_data.item_num=Number(data["RECHARGE_REWARD"][i].ItemNum); 40 | 41 | recharge_reward_data_list[recharge_reward_data.id]=recharge_reward_data; 42 | } 43 | 44 | var log_content={"count":count,"recharge_reward_data_list":recharge_reward_data_list}; 45 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_recharge_reward_data",log_content,log_data.logType.LOG_CONFIG); 46 | log_data_logic.log(logData); 47 | 48 | } 49 | -------------------------------------------------------------------------------- /game/msg_logic/recruit_data.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains WebStorm. 3 | * User: Administrator 4 | * Date: 13-7-10 5 | * Time: 下午4:46 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | var json_config_file = require("./json_config_file"); 9 | var log_data = require("./log_data"); 10 | var log_data_logic = require("./help_log_data_logic"); 11 | 12 | function RecruitData() 13 | { 14 | this.recruit_id = 0; 15 | this.cost_type = 0; 16 | this.cost_num = 0; 17 | this.free_times=0;//免费次数 18 | this.first_free_minute = 0; 19 | this.free_minute = 0; 20 | this.first_coll_arr=0;//首抽集合 21 | this.low_coll_arr = 0;//低级集合 22 | this.mid_coll_arr = 0;//中级集合 23 | this.mid_add = 0;//中级增长 24 | this.mid_add_limit = 0;//中级集合增长限制 25 | this.hig_coll_arr = 0;//高级集合 26 | this.hig_add = 0;//高级增长 27 | this.hig_add_limit = 0;//高级集合增长限制 28 | } 29 | exports.RecruitData = RecruitData; 30 | 31 | 32 | var recruit_data_list = {}; 33 | exports.recruit_data_list = recruit_data_list; 34 | 35 | 36 | function init() 37 | { 38 | load_recruit_data(); 39 | } 40 | exports.init=init; 41 | 42 | function load_recruit_data() 43 | { 44 | global.log("load_recruit_data"); 45 | var file="recruit.json"; 46 | var data=json_config_file.json_config_file_list[file]; 47 | 48 | var ks=Object.keys(data["RECRUIT"]); 49 | var count=ks.length; 50 | 51 | for(var i=1 ; i<=count ; i++) 52 | { 53 | var recruit_data = new RecruitData(); 54 | recruit_data.recruit_id = data["RECRUIT"][i].RecruitId; 55 | recruit_data.cost_type = Number(data["RECRUIT"][i].CostType); 56 | recruit_data.cost_num = Number(data["RECRUIT"][i].CostNum); 57 | recruit_data.free_times = Number(data["RECRUIT"][i].FreeTimes); 58 | recruit_data.first_free_minute = Number(data["RECRUIT"][i].FirstFreeMinute); 59 | recruit_data.free_minute = Number(data["RECRUIT"][i].FreeMinute); 60 | recruit_data.first_coll_arr = (data["RECRUIT"][i].FirstColl).split("|"); 61 | recruit_data.low_coll_arr = (data["RECRUIT"][i].LowColl).split("|"); 62 | recruit_data.mid_coll_arr = (data["RECRUIT"][i].MidColl).split("|"); 63 | recruit_data.mid_add = Number(data["RECRUIT"][i].MidAdd); 64 | recruit_data.mid_add_limit = Number(data["RECRUIT"][i].MidAddLimit); 65 | recruit_data.hig_coll_arr = (data["RECRUIT"][i].HigColl).split("|"); 66 | recruit_data.hig_add = Number(data["RECRUIT"][i].HigAdd); 67 | recruit_data.hig_add_limit = Number(data["RECRUIT"][i].HigAddLimit); 68 | recruit_data_list[recruit_data.recruit_id] = recruit_data; 69 | } 70 | 71 | var log_content={"count":count,"recruit_data_list":recruit_data_list}; 72 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_recruit_data",log_content,log_data.logType.LOG_CONFIG); 73 | log_data_logic.log(logData); 74 | } 75 | 76 | -------------------------------------------------------------------------------- /game/msg_logic/robot_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var RobotData=function() 7 | { 8 | this.id=0; 9 | this.level=0; 10 | this.name=0; 11 | this.card_one=0; 12 | this.card_two=0; 13 | this.card_three=0; 14 | 15 | }; 16 | 17 | var robot_data_list={}; 18 | exports.robot_data_list=robot_data_list; 19 | 20 | 21 | function init() 22 | { 23 | load_robot_data(); 24 | } 25 | exports.init=init; 26 | 27 | function load_robot_data() 28 | { 29 | global.log("load_robot_data"); 30 | var file="robot.json"; 31 | var data=json_config_file.json_config_file_list[file]; 32 | 33 | var ks=Object.keys(data["ROBOT"]); 34 | var count=ks.length; 35 | 36 | for(var i=1 ; i<=count ; i++) 37 | { 38 | var robot_data=new RobotData(); 39 | 40 | robot_data.id=data["ROBOT"][i].Id; 41 | robot_data.name=data["ROBOT"][i].Name; 42 | robot_data.level=Number(data["ROBOT"][i].Level); 43 | robot_data.card_one=data["ROBOT"][i].CardOne; 44 | robot_data.card_two=data["ROBOT"][i].CardTwo; 45 | robot_data.card_three=data["ROBOT"][i].CardThree; 46 | 47 | robot_data_list[robot_data.id]=robot_data; 48 | } 49 | 50 | var log_content={"count":count,"robot_data_list":robot_data_list}; 51 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_robot_data",log_content,log_data.logType.LOG_CONFIG); 52 | log_data_logic.log(logData); 53 | 54 | } 55 | -------------------------------------------------------------------------------- /game/msg_logic/role_exp_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var RoleExpData=function() 7 | { 8 | this.level=0; 9 | this.exp_limit=0; 10 | }; 11 | 12 | var role_exp_data_list={}; 13 | exports.role_exp_data_list=role_exp_data_list; 14 | 15 | 16 | function init() 17 | { 18 | load_role_exp_data(); 19 | } 20 | exports.init=init; 21 | 22 | function load_role_exp_data() 23 | { 24 | global.log("load_role_exp_data"); 25 | var file="role_exp.json"; 26 | var data=json_config_file.json_config_file_list[file]; 27 | 28 | var ks=Object.keys(data["ROLE_EXP"]); 29 | var count=ks.length; 30 | 31 | for(var i=1 ; i<=count ; i++) 32 | { 33 | var role_exp_data=new RoleExpData(); 34 | 35 | role_exp_data.level=data["ROLE_EXP"][i].Level; 36 | role_exp_data.exp_limit=Number(data["ROLE_EXP"][i].ExpLimit); 37 | 38 | role_exp_data_list[role_exp_data.level]=role_exp_data; 39 | } 40 | 41 | var log_content={"count":count,"role_exp_data_list":role_exp_data_list}; 42 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_role_exp_data",log_content,log_data.logType.LOG_CONFIG); 43 | log_data_logic.log(logData); 44 | 45 | } 46 | -------------------------------------------------------------------------------- /game/msg_logic/server_config_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | function ServerConfigData() 7 | { 8 | /*配置表属性*/ 9 | this.id = 0; //配置表ID 10 | this.server_id = 0; //服务器ID 11 | this.name = ""; //服务器名字 12 | this.ip = ""; //服务器IP地址 13 | this.port = 0; //服务器端口号 14 | this.is_open = 0; //是否开放 15 | this.is_new = 0 ; //是否是新服务器 16 | this.is_test = 0 ; //是否是测试服务器 17 | this.max_online = 0; //最大在线人数 18 | this.max_register = 0; //最大注册人数 19 | this.pft = 0; //平台号 20 | this.district_id = 0;//所在区域ID 21 | /*配置表属性*/ 22 | 23 | 24 | /*程序自定义属性*/ 25 | 26 | this.online_count=0; //当前在线人数 27 | this.socket = 0; //socket 连接 28 | this.online = 0; //是否在线 0:不在线,1:在线 29 | this.state = -1; //服务器状态(爆满,繁忙,空闲) 30 | 31 | /*程序自定义属性*/ 32 | 33 | } 34 | exports.ServerConfigData = ServerConfigData; 35 | 36 | var server_config_data_list = []; 37 | exports.server_config_data_list = server_config_data_list; 38 | 39 | 40 | exports.init = function() 41 | { 42 | load_server_config_data(); 43 | }; 44 | 45 | function load_server_config_data() 46 | { 47 | var file = "server_config.json"; 48 | var data = json_config_file.json_config_file_list[file]; 49 | var ks = Object.keys(data["SERVERCONFIG"]); 50 | var count = ks.length; 51 | 52 | global.log("-----------------------------"); 53 | global.log("server count : " + count); 54 | 55 | for(var i = 1;i<=count;i++) 56 | { 57 | var config_data = new ServerConfigData(); 58 | config_data.id = Number(data["SERVERCONFIG"][i].ID); 59 | config_data.name = data["SERVERCONFIG"][i].NAME; 60 | config_data.ip = data["SERVERCONFIG"][i].IP; 61 | config_data.port = Number(data["SERVERCONFIG"][i].PORT); 62 | config_data.is_open = Number(data["SERVERCONFIG"][i].IS_OPEN); 63 | config_data.is_new = Number(data["SERVERCONFIG"][i].IS_NEW); 64 | config_data.is_test = Number(data["SERVERCONFIG"][i].IS_TEST); 65 | config_data.max_online = Number(data["SERVERCONFIG"][i].MAX_ONLINE); 66 | config_data.max_register = Number(data["SERVERCONFIG"][i].MAX_REGISTER); 67 | config_data.pft = Number(data["SERVERCONFIG"][i].PFT); 68 | config_data.district_id = Number(data["SERVERCONFIG"][i].DISTRICT_ID); 69 | config_data.server_id = get_gs_unique_id(config_data.pft,config_data.district_id,config_data.id); 70 | 71 | server_config_data_list.push(config_data); 72 | } 73 | 74 | var log_content={"count":count,"server_config_data_list":server_config_data_list}; 75 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_server_config_data",log_content,log_data.logType.LOG_CONFIG); 76 | log_data_logic.log(logData); 77 | } 78 | exports.load_server_config_data = load_server_config_data; 79 | 80 | var get_gs_unique_id = function(pft,district,id) 81 | { 82 | global.log("get_gs_unique_id"); 83 | if(pft==undefined || district ==undefined || id==undefined) 84 | { 85 | global.log("pft==undefined || district ==undefined || id==undefined"); 86 | return; 87 | } 88 | 89 | var t1 = pft,t2=district,t3=id; 90 | if(t2 <10 && t2 >0) 91 | { 92 | t2 ="0" + t2; 93 | } 94 | if(t3 < 100 && t3 >=10) 95 | { 96 | t3 = "0" + t3; 97 | } 98 | else if(t3<10 && t3>0) 99 | { 100 | t3 = "00" + t3; 101 | } 102 | return t1 + "" + t2 + "" + t3; 103 | }; -------------------------------------------------------------------------------- /game/msg_logic/share_data.js: -------------------------------------------------------------------------------- 1 | //facebook分享获取元宝表 2 | var json_config_file=require("./json_config_file"); 3 | var log_data=require("./log_data"); 4 | var log_data_logic=require("./help_log_data_logic"); 5 | 6 | 7 | var ShareData=function() 8 | { 9 | this.id=0; 10 | this.rmb=0; 11 | }; 12 | 13 | var share_data_list={}; 14 | exports.share_data_list=share_data_list; 15 | 16 | function init() 17 | { 18 | load_share_data(); 19 | } 20 | exports.init=init; 21 | 22 | function load_share_data() 23 | { 24 | global.log("load_share_data"); 25 | var file="share.json"; 26 | var data=json_config_file.json_config_file_list[file]; 27 | 28 | var ks=Object.keys(data["SHARE"]); 29 | var count=ks.length; 30 | for(var i=1 ; i<=count ; i++) 31 | { 32 | var share_data=new ShareData(); 33 | 34 | share_data.id=data["SHARE"][i].Id; 35 | share_data.rmb=Number(data["SHARE"][i].Rmb); 36 | 37 | share_data_list[share_data.id]=share_data; 38 | } 39 | 40 | var log_content={"count":count,"share_data_list":share_data_list}; 41 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_share_data",log_content,log_data.logType.LOG_CONFIG); 42 | log_data_logic.log(logData); 43 | 44 | } 45 | -------------------------------------------------------------------------------- /game/msg_logic/shop_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var ShopData=function() 7 | { 8 | this.id=0; 9 | this.type=0; 10 | this.vip=0; 11 | this.item_id=0; 12 | this.num=0; 13 | this.cost=0; 14 | this.times_limited=0; 15 | }; 16 | 17 | var shop_data_list={}; 18 | exports.shop_data_list=shop_data_list; 19 | 20 | function init(s) 21 | { 22 | load_shop_data(); 23 | } 24 | exports.init=init; 25 | 26 | function load_shop_data() 27 | { 28 | global.log("load_shop_data"); 29 | var file="shop.json"; 30 | var data=json_config_file.json_config_file_list[file]; 31 | 32 | var ks=Object.keys(data["SHOP"]); 33 | var count=ks.length; 34 | for(var i=1 ; i<=count ; i++) 35 | { 36 | var shop_data=new ShopData(); 37 | 38 | shop_data.id=data["SHOP"][i].Id; 39 | shop_data.type=Number(data["SHOP"][i].Type); 40 | if(shop_data.id.match("vip")) 41 | { 42 | shop_data.vip=Number(data["SHOP"][i].Vip); 43 | } 44 | shop_data.item_id=data["SHOP"][i].ItemId; 45 | shop_data.num=Number(data["SHOP"][i].Num); 46 | if(shop_data.id=="dumpling"||shop_data.id=="chestGold"||shop_data.id=="chestSilver"||shop_data.id=="chestIron") 47 | { 48 | shop_data.cost=[]; 49 | shop_data.times_limited=[]; 50 | 51 | (data["SHOP"][i].Cost).split(',').forEach(function(e){ 52 | shop_data.cost.push(Number(e)); 53 | }); 54 | 55 | (data["SHOP"][i].TimesLimited).split(',').forEach(function(e){ 56 | shop_data.times_limited.push(Number(e)); 57 | }); 58 | 59 | } 60 | else 61 | { 62 | shop_data.cost=Number(data["SHOP"][i].Cost); 63 | shop_data.times_limited=Number(data["SHOP"][i].TimesLimited); 64 | } 65 | 66 | 67 | shop_data_list[shop_data.id]=shop_data; 68 | } 69 | 70 | var log_content={"count":count,"shop_data_list":shop_data_list}; 71 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_shop_data",log_content,log_data.logType.LOG_CONFIG); 72 | log_data_logic.log(logData); 73 | 74 | } 75 | -------------------------------------------------------------------------------- /game/msg_logic/sign_reward_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | 6 | var SignRewardData=function() 7 | { 8 | this.id=0; 9 | this.rmb=0; 10 | this.gold=0; 11 | this.exp=0; 12 | this.reward_arr=[]; //value:RewardData 13 | }; 14 | 15 | var sign_reward_data_list={}; // 16 | exports.sign_reward_data_list=sign_reward_data_list; 17 | 18 | 19 | var RewardData=function() 20 | { 21 | this.type=0; 22 | this.id=0; 23 | this.num=0; 24 | }; 25 | 26 | function init() 27 | { 28 | load_sign_reward_data(); 29 | } 30 | exports.init=init; 31 | 32 | function load_sign_reward_data() 33 | { 34 | global.log("load_sign_reward_data"); 35 | var file="sign_reward.json"; 36 | var data=json_config_file.json_config_file_list[file]; 37 | 38 | var ks=Object.keys(data["SIGN_REWARD"]); 39 | var count=ks.length; 40 | 41 | for(var i=1 ; i<=count ; i++) 42 | { 43 | var si_reward_data=new SignRewardData(); 44 | 45 | si_reward_data.id=data["SIGN_REWARD"][i].Id; 46 | si_reward_data.rmb=Number(data["SIGN_REWARD"][i].Rmb); 47 | si_reward_data.gold=Number(data["SIGN_REWARD"][i].Gold); 48 | si_reward_data.exp=Number(data["SIGN_REWARD"][i].Exp); 49 | 50 | if(Number(data["SIGN_REWARD"][i].Num1)>=1) 51 | { 52 | var reward_data=new RewardData(); 53 | reward_data.id=data["SIGN_REWARD"][i].Xid1; 54 | reward_data.num=Number(data["SIGN_REWARD"][i].Num1); 55 | reward_data.type=Number(data["SIGN_REWARD"][i].Type1); 56 | si_reward_data.reward_arr.push(reward_data); 57 | } 58 | else 59 | { 60 | si_reward_data.reward_arr.push(0); 61 | } 62 | 63 | if(Number(data["SIGN_REWARD"][i].Num2)>=1) 64 | { 65 | var reward_data=new RewardData(); 66 | reward_data.id=data["SIGN_REWARD"][i].Xid2; 67 | reward_data.num=Number(data["SIGN_REWARD"][i].Num2); 68 | reward_data.type=Number(data["SIGN_REWARD"][i].Type2); 69 | si_reward_data.reward_arr.push(reward_data); 70 | } 71 | else 72 | { 73 | si_reward_data.reward_arr.push(0); 74 | } 75 | 76 | if(Number(data["SIGN_REWARD"][i].Num3)>=1) 77 | { 78 | var reward_data=new RewardData(); 79 | reward_data.id=data["SIGN_REWARD"][i].Xid3; 80 | reward_data.num=Number(data["SIGN_REWARD"][i].Num3); 81 | reward_data.type=Number(data["SIGN_REWARD"][i].Type3); 82 | si_reward_data.reward_arr.push(reward_data); 83 | } 84 | else 85 | { 86 | si_reward_data.reward_arr.push(0); 87 | } 88 | 89 | sign_reward_data_list[si_reward_data.id]=si_reward_data; 90 | } 91 | 92 | var log_content={"count":count,"sign_reward_data_list":sign_reward_data_list}; 93 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_sign_reward_data",log_content,log_data.logType.LOG_CONFIG); 94 | log_data_logic.log(logData); 95 | 96 | } 97 | -------------------------------------------------------------------------------- /game/msg_logic/t_reward_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | function init() 6 | { 7 | load_t_reward_data(); 8 | } 9 | exports.init=init; 10 | 11 | var TRewardData=function() 12 | { 13 | this.id=0; 14 | this.reward_first=0; 15 | this.reward_second=0; 16 | this.reward_third=0; 17 | this.reward_tai_shou=0; 18 | this.reward_shou_bei=0; 19 | }; 20 | 21 | 22 | var t_reward_data_list={}; 23 | exports.t_reward_data_list=t_reward_data_list; 24 | 25 | 26 | function load_t_reward_data() 27 | { 28 | global.log("load_t_reward_data"); 29 | var file="town_reward.json"; 30 | var data=json_config_file.json_config_file_list[file]; 31 | 32 | var ks=Object.keys(data["TOWN_REWARD"]); 33 | var count=ks.length; 34 | for(var i=1 ; i<=count ; i++) 35 | { 36 | var town_reward_data=new TRewardData(); 37 | town_reward_data.id=data["TOWN_REWARD"][i].Id; 38 | town_reward_data.reward_first=Number(data["TOWN_REWARD"][i].RewardFirst); 39 | town_reward_data.reward_second=Number(data["TOWN_REWARD"][i].RewardSecond); 40 | town_reward_data.reward_third=Number(data["TOWN_REWARD"][i].RewardThird); 41 | town_reward_data.reward_tai_shou=Number(data["TOWN_REWARD"][i].RewardTaiShou); 42 | town_reward_data.reward_shou_bei=Number(data["TOWN_REWARD"][i].RewardForShoubei); 43 | 44 | t_reward_data_list[town_reward_data.id]=town_reward_data; 45 | } 46 | 47 | var log_content={"count":count,"t_reward_data_list":t_reward_data_list}; 48 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_t_reward_data",log_content,log_data.logType.LOG_CONFIG); 49 | log_data_logic.log(logData); 50 | 51 | } 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /game/msg_logic/test.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xyfcode/zspeed/be4894be371c1b4edc2e78825624d2f4f24a91a7/game/msg_logic/test.js -------------------------------------------------------------------------------- /game/msg_logic/town_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | 5 | var TownData=function() 6 | { 7 | this.tid=0; 8 | this.next_tid=0; 9 | this.town_name=0; 10 | this.lv_limit=0; 11 | this.basic_money=0; 12 | this.add_money=0; 13 | this.add_rmb=0; 14 | this.gate=[]; 15 | this.rewards=[]; 16 | this.type1=0; 17 | this.id1=0; 18 | this.num1=0; 19 | this.type2=0; 20 | this.id2=0; 21 | this.num2=0; 22 | this.type3=0; 23 | this.id3=0; 24 | this.num3=0; 25 | this.card_star=0; 26 | this.beauty_star=0; 27 | 28 | }; 29 | 30 | var TownRewardData=function() 31 | { 32 | this.type=0; 33 | this.id=0; 34 | this.num=0; 35 | }; 36 | 37 | var town_data_list={}; 38 | exports.town_data_list=town_data_list; 39 | 40 | var g_server=null; 41 | 42 | function init(s) 43 | { 44 | g_server=s; 45 | load_town_data(); 46 | load_town_db_data(); 47 | } 48 | exports.init=init; 49 | 50 | function load_town_data() 51 | { 52 | global.log("load_town_data"); 53 | var file="town.json"; 54 | var data=json_config_file.json_config_file_list[file]; 55 | 56 | var ks=Object.keys(data["TOWN"]); 57 | var count=ks.length; 58 | //实现完全拷贝 59 | for(var i=1 ; i<=count ; i++) 60 | { 61 | var tn_data=new TownData(); 62 | 63 | tn_data.tid= data["TOWN"][i].TId; 64 | tn_data.next_tid= data["TOWN"][i].NextTId; 65 | tn_data.town_name= data["TOWN"][i].TownName; 66 | tn_data.lv_limit= Number(data["TOWN"][i].LvLimited); 67 | tn_data.basic_money= Number(data["TOWN"][i].BasicMoney); 68 | tn_data.add_money= Number(data["TOWN"][i].ArithmeticProgression); 69 | tn_data.add_rmb= Number(data["TOWN"][i].Gold); 70 | tn_data.card_star= data["TOWN"][i].CardStar; 71 | tn_data.card_rate= Number(data["TOWN"][i].CardRate)*100; 72 | tn_data.beauty_star= data["TOWN"][i].BeautyStar; 73 | tn_data.beauty_rate= Number(data["TOWN"][i].BeautyRate)*100; 74 | tn_data.gate= (data["TOWN"][i].Gate).split(','); 75 | 76 | if(data["TOWN"][i].Num1>0) 77 | { 78 | var tn_reward_data=new TownRewardData(); 79 | tn_reward_data.type=Number(data["TOWN"][i].Type1); 80 | tn_reward_data.id=data["TOWN"][i].Id1; 81 | tn_reward_data.num=Number(data["TOWN"][i].Num1); 82 | tn_data.rewards.push(tn_reward_data); 83 | } 84 | 85 | if(data["TOWN"][i].Num2>0) 86 | { 87 | var tn_reward_data=new TownRewardData(); 88 | tn_reward_data.type=Number(data["TOWN"][i].Type2); 89 | tn_reward_data.id=data["TOWN"][i].Id2; 90 | tn_reward_data.num=Number(data["TOWN"][i].Num2); 91 | tn_data.rewards.push(tn_reward_data); 92 | } 93 | 94 | if(data["TOWN"][i].Num3>0) 95 | { 96 | var tn_reward_data=new TownRewardData(); 97 | tn_reward_data.type=Number(data["TOWN"][i].Type3); 98 | tn_reward_data.id=data["TOWN"][i].Id3; 99 | tn_reward_data.num=Number(data["TOWN"][i].Num3); 100 | tn_data.rewards.push(tn_reward_data); 101 | } 102 | 103 | town_data_list[tn_data.tid]=tn_data; 104 | } 105 | 106 | var log_content={"count":count,"town_data_list":town_data_list}; 107 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","load_town_data",log_content,log_data.logType.LOG_CONFIG); 108 | log_data_logic.log(logData); 109 | 110 | } 111 | 112 | var Guard_Data=function() 113 | { 114 | this.unique_id=0;// 守城武将UID 115 | this.card_id=0;//守城武将 116 | this.level=0;//等级 117 | this.b_level=0;//转生等级 118 | this.equips=[];//配戴的装备 119 | }; 120 | exports.Guard_Data=Guard_Data; 121 | 122 | 123 | function GuardEquipData() 124 | { 125 | this.equip_id=""; //装备id 126 | //this.gem=[]; //装备宝石 127 | } 128 | exports.GuardEquipData=GuardEquipData; 129 | 130 | function TownFightData() 131 | { 132 | this.gid=0; //玩家gid 133 | this.grid=0; //玩家grid 134 | this.hurt=0; //伤害值 135 | } 136 | exports.TownFightData=TownFightData; 137 | 138 | var TownDbData=function() 139 | { 140 | this.tid=0; //城池ID 141 | this.guard_data=new Guard_Data();//守城武将数据 142 | this.last_arr=[]; //上期城池排名 value:[TownFightData] 143 | this.new_arr=[];//新的城池攻打数据 value:[TownFightData] 144 | this.owner_reward=0; //城主奖励 145 | this.reward=0; //本轮奖励 146 | }; 147 | exports.TownDbData=TownDbData; 148 | 149 | var town_db_data_list={}; //key tid value: TownDbData 150 | exports.town_db_data_list=town_db_data_list; 151 | 152 | 153 | //全局变量存放城池需要更新入库的用户tid 154 | var town_update_db_arr=[]; //tid 155 | exports.town_update_db_arr=town_update_db_arr; 156 | 157 | var load_town_db_data=function() 158 | { 159 | global.log("load_town_db_data"); 160 | g_server.db.find("t_town_list",{},function(arr){ 161 | if(arr.length>0) 162 | { 163 | for(var i in arr) 164 | { 165 | var tid=arr[i].tid; 166 | town_db_data_list[tid]=arr[i]; 167 | } 168 | } 169 | }); 170 | }; 171 | 172 | -------------------------------------------------------------------------------- /game/msg_logic/town_title_data.js: -------------------------------------------------------------------------------- 1 | var json_config_file=require("./json_config_file"); 2 | var log_data=require("./log_data"); 3 | var log_data_logic=require("./help_log_data_logic"); 4 | var define_code=require("./define_code"); 5 | var const_value=define_code.const_value; 6 | 7 | var g_server=null; 8 | function init(s) 9 | { 10 | g_server=s; 11 | load_town_title_data(); 12 | load_town_title_db_data(); 13 | } 14 | exports.init=init; 15 | 16 | var TownTitleData=function() 17 | { 18 | this.title_id=0; 19 | this.level=0; 20 | this.children=0; 21 | this.title_name=0; 22 | this.reward=0; 23 | }; 24 | 25 | 26 | var town_title_data_list={}; 27 | exports.town_title_data_list=town_title_data_list; 28 | 29 | 30 | var TownTitleFightData=function() 31 | { 32 | this.t_times=0; //总次数 33 | this.c_times=0; //连续攻占次数 34 | this.period=0; //上次排名所在周期 35 | }; 36 | exports.TownTitleFightData=TownTitleFightData; 37 | 38 | var TitleData=function() 39 | { 40 | this.id=0; //称号ID 41 | this.date=0; //称号获得时间 42 | }; 43 | exports.TitleData=TitleData; 44 | 45 | 46 | var TownTitleDbData=function() 47 | { 48 | this.grid=0; //玩家id 49 | this.date=0;// 获取最高称号时间 50 | this.town_fight={};//单个城池数据 key tid value TownTitleFightData 51 | this.garrison=[]; //守备 2次 TitleData 52 | this.satrap=[]; //太守 3次 TitleData 53 | this.governor=[]; //都督 TitleData 54 | this.general=[]; //将军 TitleData 55 | this.king=[]; //王 TitleData 56 | this.first_king=[]; // 秦始皇 TitleData 57 | }; 58 | exports.TownTitleDbData=TownTitleDbData; 59 | 60 | var town_title_db_data_list={}; //key grid value: TownTitleDbData 61 | exports.town_title_db_data_list=town_title_db_data_list; 62 | 63 | 64 | //全局变量存放称号需要更新入库的用户grid 65 | var town_title_update_db_arr=[]; //grid 66 | exports.town_title_update_db_arr=town_title_update_db_arr; 67 | 68 | 69 | function load_town_title_data() 70 | { 71 | global.log("load_town_title_data"); 72 | var file="town_title.json"; 73 | var data=json_config_file.json_config_file_list[file]; 74 | 75 | var ks=Object.keys(data["TOWN_TITLE"]); 76 | var count=ks.length; 77 | for(var i=1 ; i<=count ; i++) 78 | { 79 | var town_title_data=new TownTitleData(); 80 | 81 | town_title_data.title_id=data["TOWN_TITLE"][i].TitleID; 82 | town_title_data.level=Number(data["TOWN_TITLE"][i].Level); 83 | town_title_data.children=(data["TOWN_TITLE"][i].Children).split(','); 84 | town_title_data.title_name=Number(data["TOWN_TITLE"][i].TitleName); 85 | town_title_data.reward=Number(data["TOWN_TITLE"][i].RewardFortitle); 86 | 87 | town_title_data_list[town_title_data.title_id]=town_title_data; 88 | } 89 | 90 | var log_content={"count":count,"town_title_data_list":town_title_data_list}; 91 | var logData=log_data_logic.help_create_log_data("sys","sys","sys","sys","sys","town_title_data_list",log_content,log_data.logType.LOG_CONFIG); 92 | log_data_logic.log(logData); 93 | 94 | } 95 | 96 | var load_town_title_db_data=function() 97 | { 98 | global.log("load_town_title_db_data"); 99 | g_server.db.find("t_town_title_list",{},function(arr){ 100 | if(arr.length>0) 101 | { 102 | for(var i in arr) 103 | { 104 | var grid=arr[i].grid; 105 | town_title_db_data_list[grid]=arr[i]; 106 | } 107 | } 108 | }); 109 | }; 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /game/server.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xyfcode/zspeed/be4894be371c1b4edc2e78825624d2f4f24a91a7/game/server.log -------------------------------------------------------------------------------- /server.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xyfcode/zspeed/be4894be371c1b4edc2e78825624d2f4f24a91a7/server.log -------------------------------------------------------------------------------- /start_server.sh: -------------------------------------------------------------------------------- 1 | nohup ./node /home/project/server/game/app.js > ./server.log 2>&1 & 2 | -------------------------------------------------------------------------------- /stop_server.sh: -------------------------------------------------------------------------------- 1 | i1=`ps -ef|grep -E "./node /home/project/server/game/app.js" |grep -v grep| awk '{print $2}'` 2 | i2=`ps -ef|grep -E "/home/project/server/node /home/project/server/game/app.js" |grep -v grep| awk '{print $2}'` 3 | 4 | kill -9 $i1 5 | kill -9 $i2 6 | 7 | echo kill $i1 ok. 8 | echo kill $i2 ok. 9 | --------------------------------------------------------------------------------