Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
123new

Создаем 'нормальную' бд персонажей сервера вместе

Собственно, в шапке темы написано все. Давайте в этой теме обсуждать вопрос создания 'нормальной' (привычной для всех, в том числе и для редактирования) базы данных персонажей сервера. Возможно, даже с возможностью мультисерверной работы (что крайне лишним не было бы).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

Даже взять файл missionGameplay.c  какой функционал там прописан, но уверен не все используется

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах



  • 0

Ну хорошо, если пойти другим путем, в экзешнике вместо HIVE прописать mysql, а в конфиге сервера  конект к базе данных типа так:

Host = localhost

Driver = com.mysql.jdbc.Driver
URL = jdbc:mysql://localhost/dayzsa
Login = dayzsa
Password = 1234567890

А так как сервер основан на Java то подключим jdbc  Java 

Структуру и таблицы можно из экзешника вытянуть, осталось по экзешнику прописать мисиию, думаю как вариант

Изменено пользователем Alex39 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ну вроде движуха не стоит на месте, общими силами продвигаемся, и вот подошел кульминационный момент, составить базу данных,

 

Кто еще заинтересован, ваши варианты, какая структура базы должна быть, файл какой и так далее?

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

По поводу базы данных Hive, я один не потяну с редактированием, но возникла другая идея, онлайн базу перевести в офлайн, так как в офлайне много отключенных фишек, хочу попробовать подключить, что получется не знаю, но у меня не хватает знаний по базе написать миссию , сам функционал

Изменено пользователем Alex39 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Не могу понять что за ошибка прет, у кого какие мысли?

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Возможно что в базе прописано init а в экзешнике storage

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

самое интересное что конект в базу уже есть, это уже хорошо

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ну с этим разобрался, сервер запущен, и по скрину видно что ошибка в Джава скрипте

 

5c83a0d542422_Image1.jpg.ce8cb4410c4e68c2120c8be6ac1ce734.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Alex39 сказал:

Не могу понять что за ошибка прет, у кого какие мысли?

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

сервер посылает запрос и ожидает получить ответ в каком-то определенном виде. Учитывая, что ответа не поступило, либо он поступил в каком-то некорректном виде, который сервер не смог разобрать, он крашнулся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, 123new сказал:

сервер посылает запрос и ожидает получить ответ в каком-то определенном виде. Учитывая, что ответа не поступило, либо он поступил в каком-то некорректном виде, который сервер не смог разобрать, он крашнулся.

Конечно некоректное, надо переписать со старой базы на новую, все запросы

 

app.use(bodyParser());

var getRawBody = require('raw-body');

app.use(function (req, res, next) {
	if (req.headers['content-type'] === 'application/octet-stream') {
		getRawBody(req, {
			length: req.headers['content-length'],
			encoding: this.charset
		}, function (err, string) {
			if (err)
				return next(err)

			req.body = string
			next()
		})
	}
	else {
		next()
	}
});

exports.start = function () {
	app.listen(8080);
	console.log('Server running on port 8080');
}

function responseFile(filePath, response) {
  fs.exists(filePath, function(exists){
      if (exists) {
		console.log('responseFile...');
		response.setHeader('Expect', '100-continue');
		response.setHeader('Content-Type', 'application/octet-stream');
        fs.createReadStream(filePath).pipe(response);
		console.log('responseFile...Complete?');
      } else {
        response.writeHead(400, {"Content-Type": "text/plain"});
        response.end("ERROR File does NOT Exists");
      }
    });
}


function countOcurrences(find,str){
   return (str.split(find).length - 1)
}

function IsJsonString(str) {
	if ((countOcurrences("(",str) == countOcurrences(")",str)) && 
	    (countOcurrences("[",str) == countOcurrences("]",str)) &&
	    (countOcurrences("{",str) == countOcurrences("}",str))
	   ){
        return true;
    } else {
        return false;
    }
}

app.get('/HOME', function (req, res) {
		pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
		} else {
			connection.query('SELECT uid FROM objects', function (err, rows, fields) {
				if (err) {
					console.log("数据库连接失败")
					res.send('[]');
					return;
				} 
				connection.release();
	
				if (rows.length == 0) {
					console.log('没有家园数据');
					res.send('[]');
					return;
				}
				var ids = '[';
				rows.forEach(function(element){
					ids += '"' + element.uid+ '",';
				});
				ids = ids.substring(0,ids.length-1) + "]";
				res.send(ids);
				console.log('获取家园数据[' + rows.length +']')
				return;
			});
		}
	});
	
});

app.post('/DayZServlet/lud0/findobj', function (req, res) {
	console.log('找到物品 ' + req.query.uid);

	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
		} else {

			connection.query('SELECT model,x,y,z FROM objects WHERE uid = ?', [req.query.uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				} 
				connection.release();
		
				if (rows.length == 0) {
					console.log('No data found');
					res.send('{}');
					return;
				}
				
				if ((rows[0].x == '0') && (rows[0].y == '0') && (rows[0].z == '0'))
				{
					console.log('Corrupt data');
					res.send('{}');
					return;
				}
				// Edit result for sending
				rows[0].pos = [rows[0].x, rows[0].y, rows[0].z];
				delete rows[0].x;
				delete rows[0].y;
				delete rows[0].z;
		
				// Calculate queue
				res.send(JSON.stringify(rows[0]));
				
			});
		}
	});
});

app.get('/DayZServlet/lud0/loadobj', function (req, res) {
	console.log('加载物品 ' + req.query.uid);
	
	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
		} else {
			connection.query('SELECT * FROM objects WHERE uid = ?', [req.query.uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				} 
				connection.release();
	
				if (rows.length == 0) {
					console.log('No data found');
					res.send('{}');
					return;
				}
				
				//console.log(rows[0].items);
				//Check if data is corrupt
				if (
				(IsJsonString(rows[0].items) == false) || ((rows[0].items).length < 1)
				)
				{
					console.log('Corrupt data');
					res.send('{}');
					return;
				}
		
				//console.log('Sent character data: ' + JSON.stringify(rows[0]));
				//res.send(JSON.stringify(rows[0]));
				var loadData = '{"model":"'+rows[0].model+'","pos":['+rows[0].x+','+rows[0].z+','+rows[0].y+'],"items":'+rows[0].items+',"dir":['+rows[0].dir_x+','+rows[0].dir_y+','+rows[0].dir_z+'],"up":['+rows[0].up_0+','+rows[0].up_1+','+rows[0].up_2+']'+',"guid":"'+rows[0].guid+'"}';
				console.log(loadData);
				if (IsJsonString(loadData) == true) {
					res.send(loadData);
				}else{
					console.log("Resonce not json!");
					res.send("{}");
				}
			});
		}
	});
});

app.post('/DayZServlet/lud0/saveobj', function (req, res) {

	var guid = req.body.guid.replace(/\"/g,"");
	var uid = req.query.uid.replace(/\"/g,"");
	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
			return;
		}
						connection.query('SELECT * FROM objects WHERE uid = ?', [uid], function (err, rows, fields) {
						if (err) {
							console.log(err)
							res.send('{}');
							return;
						} 

						if (rows.length == 0) {
							console.log(getNowFormatDate1()+" 创建物品 "+req.query.uid);
							connection.query(
								'INSERT INTO objects(uid,model,items,guid,x,y,z,dir_x,dir_y,dir_z,up_0,up_1,up_2,time_created) VALUES(?,?,"[]",?,?,?,?,?,?,?,?,?,?,NOW())',
								[uid,req.body.model,guid,req.body.pos[0], req.body.pos[2], req.body.pos[1], req.body.dir[0], req.body.dir[1], req.body.dir[2], req.body.up[0], req.body.up[1], req.body.up[2]],
								function (err, rows, fields) {
									if (err) console.log(err);
								}
							);
						} else {
							console.log(getNowFormatDate1()+" 更新物品 "+req.query.uid);
							if(typeof (req.body.items) == 'undefined') {
								req.body.items = [];
							}
							connection.query('UPDATE objects SET model = ?, items = ?, guid = ?, x = ?, z = ?, y = ?, dir_x = ?, dir_y = ?, dir_z = ?, up_0 = ?, up_1 = ?, up_2 = ? WHERE uid = ?', [req.body.model, JSON.stringify(req.body.items), guid, req.body.pos[0], req.body.pos[1], req.body.pos[2], req.body.dir[0], req.body.dir[1], req.body.dir[2], req.body.up[0], req.body.up[1], req.body.up[2], uid], function (err, rows, fields) {	
									if (err) console.log(err);
								}
							);
						}
						connection.release();
						res.send('{}');
					});
	});
});

app.post('/DayZServlet/lud0/killobj', function (req, res) {
	if (countOcurrences("?", req.query.uid) == 1){
		var uid = (req.query.uid).replace('?uid=', '');
	}else{
		var uid = req.query.uid;
	}
	console.log('删除物品 ' + uid);

	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
		} else {	
			connection.query('DELETE FROM objects WHERE uid = ?', [uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				}	
				connection.release();			
			});			
		}
	});
	res.send('{}');
});



app.post('/DayZServlet/lud0/find', function (req, res) {
	console.log('Got find: ' + req.query.uid);

	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
		} else {

			connection.query('SELECT model,x,y,z,queue FROM player WHERE uid = ?', [req.query.uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				} 
				connection.release();
		
				if (rows.length == 0) {
					console.log('No data found');
					res.send('{}');
					return;
				}
				
				if ((rows[0].x == '0') && (rows[0].y == '0') && (rows[0].z == '0'))
				{
					console.log('Corrupt data');
					res.send('{}');
					return;
				}
				// Edit result for sending
				rows[0].pos = [rows[0].x, rows[0].y, rows[0].z];
				delete rows[0].x;
				delete rows[0].y;
				delete rows[0].z;
		
				// Calculate queue
				var queueEnd = moment(rows[0].queue);
				rows[0].queue = -queueEnd.diff(moment(), 'seconds');
		
				res.send(JSON.stringify(rows[0]));
				
			});
		}
	});
});

app.get('/DayZServlet/lud0/load', function (req, res) {
		console.log('Got load: ' + req.query.uid);
	
	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
		} else {
			connection.query('SELECT * FROM player WHERE uid = ?', [req.query.uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				} 
				connection.release();
	
				if (rows.length == 0) {
					console.log('No data found');
					res.send('{}');
					return;
				}
				
				console.log(rows[0].items);
				//Check if data is corrupt
				if (
				((IsJsonString(rows[0].items) == false) && 
				(IsJsonString(rows[0].state) == false)) ||
				(((rows[0].items).length < 1) ||
				((rows[0].state).length < 1))
				)
				{
					console.log('Corrupt data');
					res.send('{}');
					return;
				}
	

				// Calculate queue
				var queueEnd = moment(rows[0].queue);
				rows[0].queue = -queueEnd.diff(moment(), 'seconds');
		
		
		
		
				//console.log('Sent character data: ' + JSON.stringify(rows[0]));
				//res.send(JSON.stringify(rows[0]));
				var loadData = '{"model":"'+rows[0].model+'","alive":'+rows[0].alive+',"queue":'+rows[0].queue+',"pos":['+rows[0].x+','+rows[0].z+','+rows[0].y+'],"items":'+rows[0].items+',"state":'+rows[0].state+',"dir":['+rows[0].dir_x+','+rows[0].dir_y+','+rows[0].dir_z+'],"up":['+rows[0].up_0+','+rows[0].up_1+','+rows[0].up_2+']}';
				//console.log(loadData);
				if (IsJsonString(loadData) == true) {
					res.send(loadData);
				}else{
					console.log("Resonce not json!");
					res.send("{}");
				}
			});
		}
	});
});

app.post('/DayZServlet/lud0/create', function (req, res) {
	console.log('Got create: ' + req.query.uid);
	
	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
		} else {
			
			connection.query('INSERT IGNORE INTO player(uid) VALUES(?)', [req.query.uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				} 
				
				connection.query('UPDATE record SET RespawnCount=RespawnCount+1', function (err, result) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				}		
				connection.release();
				res.send('{}');
				});				
			});
		}
	});
});

app.post('/DayZServlet/lud0/save', function (req, res) {

	console.log('Got save: ' + req.query.uid);
	
	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
			return;
		}
				
		//console.log(JSON.stringify(req.body.items));
		connection.query('UPDATE player SET model = ?, alive = ?, items = ?, state = ?, x = ?, z = ?, y = ?, dir_x = ?, dir_y = ?, dir_z = ?, up_0 = ?, up_1 = ?, up_2 = ? WHERE uid = ?', [req.body.model, req.body.alive, JSON.stringify(req.body.items), JSON.stringify(req.body.state), req.body.pos[0], req.body.pos[1], req.body.pos[2], req.body.dir[0], req.body.dir[1], req.body.dir[2], req.body.up[0], req.body.up[1], req.body.up[2], req.query.uid], function (err, rows, fields) {
			if (err) {
				console.log(err)
				res.send('{}');
				return;
			} 
			connection.release();
			res.send('{}');
		});
	});
});

app.post('/DayZServlet/lud0/queue', function (req, res) {

	console.log('Got queue: ' + req.query.uid + ' (' + req.body.queue + 's)');
	
	pool.getConnection(function (err, connection) {
		if (err) {
				console.log(err)
				res.send('{}');
		} else {
			connection.query('SELECT queue FROM player WHERE uid = ?', [req.query.uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				} 
					var query = 'UPDATE player SET queue = DATE_ADD(CURRENT_TIMESTAMP,INTERVAL ' + mysql.escape(JSON.stringify(req.body.queue)) + ' SECOND) WHERE uid = ?';
				connection.query(query, [req.query.uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				} 
					connection.release();
					res.send('{}');
				});
			});
		}
	});

});

app.post('/DayZServlet/lud0/kill', function (req, res) {
	if (countOcurrences("?", req.query.uid) == 1){
		var uid = (req.query.uid).replace('?uid=', '');
	}else{
		var uid = req.query.uid;
	}
	console.log('Got kill: ' + uid);

	pool.getConnection(function (err, connection) {
		if (err) {
			console.log(err)
			res.send('{}');
		} else {	
			connection.query('DELETE FROM player WHERE uid = ?', [uid], function (err, rows, fields) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				}		
				connection.query('UPDATE record SET DeadCount=DeadCount+1', function (err, result) {
				if (err) {
					console.log(err)
					res.send('{}');
					return;
				}		
				connection.release();
			});
				
			});			
		}
	});
	res.send('{}');
});

app.post('/0061/rest/init/enviroment', function (req, res) {
	res.send('{"primary":"http://127.0.0.1:8080/Mikejones420Gaming","envsec":"http://127.0.0.1:8080/Mikejones420Gaming"}');
	console.log('Env POST: ' + req.url);
});

app.post('/0061/rest/init/ping', function (req, res) {
	res.send('{"ping":100}');
	console.log('Env POST: ' + req.url);
});

app.get('/0061/rest/u3sT1/status', function (req, res) {
	//res.send('{"status":"ok","message":"ok","timeout":30}');
	res.send('{"status":"ok","message":"ok","timeout":30}');
	console.log('Env POST: ' + req.url);
});

app.post('/0061/rest/init/startup', function (req, res) {//res.send('{"s_flags":0,"s_log":1,"s_synctime":18000,"s_statstime":0,"s_deathtime":90,"s_queuetime":30}');
	res.send('{"success": 1,"message": "ok","timeout": 30,"type": 1,"key": "12312132414564564fdsaaezdxqs45","version_required": "0.60:133913","version_allowed": "0.60:133913","check": 0,"categorycount": 12,"s_flags":1,"s_log":0,"s_synctime":18000,"s_statstime":30,"s_deathtime":90,"s_queuetime":30}');
	console.log('Env POST: ' + req.url);
});

app.post('/0061/rest/init/confirm', function (req, res) {
	res.send('{"success": 1,"message": "ok","timeout": 30,"type": 1,"key": "12312132414564564fdsaaezdxqs45","version_required": "0.60:133913","version_allowed": "0.60:133913","check": 0,"categorycount": 12,"s_flags":1,"s_log":0,"s_synctime":18000,"s_statstime":30,"s_deathtime":90,"s_queuetime":30}');
	console.log('Env POST: ' + req.url);
});

app.post('/0061/rest/init/sync', function (req, res) {
	res.send('{"success": 1,"message": "ok","timeout": 30,"type": 1,"key": "12312132414564564fdsaaezdxqs45","version_required": "0.60:133913","version_allowed": "0.60:133913","check": 0,"categorycount": 12,"s_flags":1,"s_log":0,"s_synctime":18000,"s_statstime":30,"s_deathtime":90,"s_queuetime":30}');
	console.log('Env POST: ' + req.url);
});

app.post('/0061/u3sT1/global/record/get', function (req, res) {
	//res.send('[["1","Animals killed","hunt"],["1","Infected killed","kill"]]');
	//res.send('[["hunt","1","Animals killed"],["kill","1","Infected killed"]]');
	//res.send('{"record":{"type":"hunt","localization":"Animals killed","flags":"1"}}');
	//res.send('[{"record":{"type":"hunt","localization":"Animals killed","flags":"1"}},{"record":{"type":"kill","localization":"Infected killed","flags":"1"}}]');
	//res.send('{"record":[{"type":"hunt","localization":"Animals killed","flags":"1"},{"type":"kill","localization":"Infected killed","flags":"1"}]}');
	//res.send('{"record":[{"type":"hunt","localization":"Animals killed","flags":"1","record":1},{"type":"kill","localization":"Infected killed","flags":"1","record":2}]}');
res.send('{"record":[{"type":"hunt","localization":"Animals killed","flags":"1","record":"true"},{"type":"kill","localization":"Infected killed","flags":"1","record":"true"}]}');
	console.log('Env POST: ' + req.url);
});

/*
app.post('/0061/u3sT1/global/record/get', function (req, res) {
	res.send('{"records":{"record":[{"flags":"1","localization":"Animals killed","type":"hunt"},{"flags":"1","localization":"Infected killed","type":"kill"},{"flags":"1","localization":"Survivors killed","type":"murder"},{"flags":"1","localization":"Distance traveled","type":"dist"},{"flags":"1","localization":"Survivors aided","type":"aid"},{"flags":"1","localization":"Water consumed","type":"water"},{"flags":"1","localization":"Calories burned","type":"calories"},{"flags":"3","localization":"Hours survived","type":"playtime"}]}}');
	console.log('Env POST: ' + req.url);
});
*/

app.post('/0061/u3sT1/global/actions/get', function (req, res) {
	res.send('{"message": "test ok"}');
	console.log('Env POST: ' + req.url);
});

app.post('/0061/w_0ld/global/category/get', function (req, res) {
	res.send('<?xml version="1.0" encoding="UTF-8"?><categories><category id="1" type="dynamic"/><category id="2" type="static"/><category id="3" type="animal"/><category id="4" type="zombie"/><category id="5" type="vehicle"/><category id="6" type="wreck"/><category id="7" type="container"/><category id="8" type="random"/><category id="9" type="custom"/><category id="10" type="building"/><category id="11" type="door"/><category id="12" type="player"/></categories>');
	console.log('Env POST: ' + req.url);
});

app.post('/0061/w_0ld/global/type/getbin', function (req, res) {
	res.sendfile('type.bin');
	console.log('Env POST: ' + req.url);
});

app.post('/0061/w_0ld/global/type/setbin', function (req, res) {
	//res.send('{}');
	var noneExistFileName = ['type', '', '.bin'].join('');
	fs.writeFile(noneExistFileName, req.body, function(err){
		if(err) throw err;
		console.log(noneExistFileName+' is written!');
	});
	res.status(200);
	console.log('SET BIN: '+req.url);
});

app.post('/0061/a_0fg/find', function (req, res) {
	res.send('{"model":"SurvivorPartsMaleMatt", "queue": 0, "alive": true, "pos":[1000,1000,0]}');
	//res.send('{}');
	console.log('CHAR: ' + req.url);
});

app.get('/0061/a_0fg/loadbin', function (req, res) {
	//res.sendfile(req.query.uid + '.bin');
	//res.send('');
	res.sendfile('123.bin');
	console.log('LOAD: ' + req.url + ' UID' + req.query.uid);
});

app.post('/0061/a_0fg/create', function (req, res) {
	//res.send('{}');
	console.log('Got create: ' + req.query.uid);
});

app.post('/0061/a_0fg/process', function (req, res) {
	var noneExistFileName = [req.query.uid, '', '.bin'].join('');
	fs.writeFile(noneExistFileName, req.body, function(err){
		if(err) throw err;
		console.log(noneExistFileName+' is written!');
	});
	res.status(200);
	console.log('Got process: ' + req.url + ' UID' + req.query.uid);
	
});

app.post('/mpmissions/dayzOffline.chernarusplus/storage_1/data/events.bin', function (req, res) {
	/*
	res.setHeader('Content-Type', 'application/octet-stream');
	res.sendfile('events.bin');
	*/
	//res.send('');
	console.log('Env POST: ' + req.url);
});



/*
app.post('/0061/w_0ld/global/category/get', function (req, res) {
	res.send('{"categories":{"category":{{"id":"1","type":"dynamic"},{"id":"2","type":"static"},{"id":"3","type":"animal"},{"id":"4","type":"zombie"},{"id":"5","type":"vehicle"},{"id":"6","type":"wreck"},{"id":"7","type":"container"},{"id":"8","type":"random"},{"id":"9","type":"custom"},{"id":"10","type":"building"},{"id":"11","type":"door"}}}}');
	console.log('Env POST: ' + req.url);
});
*/


app.post(/.*/, function (req, res) {
	console.log('Got unhandled POST: ' + req.url);
	res.send('{}');
});

app.get(/.*/, function (req, res) {
	console.log('Got unhandled GET: ' + req.url);
	res.send('{}');
});




var net = require('net');
var HOST = '127.0.0.1';
var PORT = 9433;

net.createServer(function(sock) {
	
	// We have a connection - a socket object is assigned to the connection automatically
	//console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);
	
	// Add a 'data' event handler to this instance of socket
	sock.on('data', function(data) {
	
		var response = data.toString().trim();

		if(response.search("Ping") > -1) {
			console.log('Recived Ping');
			sock.write('Pong');
		}


		if(response.search("ObjectIDS") > -1) {
			console.log('Getting Objects IDS');

			pool.getConnection(function (err, connection) {
				if (err) {
					console.log(err)
					sock.write('Empty');
				} else{

					connection.query('SELECT uid FROM objects', function (err, rows, fields) {
						if (err) {
							console.log(err)
							sock.write('Empty');
							return;
						} 
	
						connection.release();
	
						if (rows.length == 0) {
							sock.write('Empty');
						} else {
	
							var ids = '';
							rows.forEach(function(element){
								ids += element.uid+',';
							});
	
							ids = ids.substring(0, ids.length - 1);
							sock.write(ids);

						}
					});
				}
			});
		}

		if(response.search("ObjectSave: ") > -1) {
			//console.log(JSON.parse(response.match(/\[\[.{3,}\]\]/g)[0]));
			//var match = /*JSON.parse*/(response.match(/\[\[.{3,}\]\]/g));
			var match = /\[\["(\d+)","([\w\d_-]+)",(\[[\d,\.\[]+\]\])\],(.*\])\]/g.exec(response);
			if (match) {
				pool.getConnection(function (err, connection) {


				if (err) {
				console.log(err)
				sock.write('Empty');
				} else{

					connection.query('SELECT * FROM objects WHERE ObjectID = ?', [match[1]], function (err, rows, fields) {
						if (err) {
							console.log(err)
							sock.write('Empty');
							return;
						} 

						if (rows.length == 0) {
							console.log("CREATE "+match[1]+" "+match[2]);
							connection.query(
								'INSERT INTO objects(ObjectID,model,position,items,time_created,time_updated) VALUES(?,?,?,?,NOW(),NOW())',
								[match[1],match[2],match[3],match[4]],
								function (err, rows, fields) {
									if (err) console.log(err);
								}
							);
						} else {
							console.log("UPDATE "+match[1]+" "+match[2]);
							connection.query(
								'UPDATE objects SET position=?, items=?, time_updated=NOW() WHERE ObjectID=?',
								[match[3],match[4],match[1]],
								function (err, rows, fields) {
									if (err) console.log(err);
								}
							);
						}
						connection.release();
					});
					}
				});
			}
			sock.write('Ok');
			sleep.sleep(0.01);
		}




		if(response.search("ObjectLoad: ") > -1) {
			var match = JSON.parse(response.match(/\d+/g));
			if (match) {
				var oid = match;
				console.log("LOAD "+oid);
				pool.getConnection(function (err, connection) {


				if (err) {
				console.log(err)
				sock.write('Empty');
				} else{
					connection.query('SELECT * FROM objects WHERE ObjectID = ?', [oid], function (err, rows, fields) {
						if (err) {
							console.log(err)
							sock.write('Empty');
							return;
						} 
						connection.release();

						if (rows.length == 0) {
							console.log("Could not find object.");
								sock.write('Empty');
						} else {
							var ret = '[["'+rows[0].ObjectID+'","'+rows[0].model+'",'+rows[0].position+'],'+rows[0].items+']';
							console.log(ret);
							sock.write(ret);
						}
					});
					}
				});
			} else {
				sock.write('Empty');
		}
		}




		if(response.search("ObjectDelete: ") > -1) {
			var match = JSON.parse(response.match(/\d+/g));
			if (match) {
				var oid = match;
				console.log("Deleting object "+oid);

				pool.getConnection(function (err, connection) {
									if (err) {
				console.log(err)
				sock.write('Empty');
				} else{
					connection.query('DELETE FROM objects WHERE ObjectID = ?', [oid], function (err, rows, fields) {
						if (err) {
							console.log(err)
							sock.write('Empty');
							return;
						} 
						connection.release();
					});
					}
				});
			}
			sock.write('Ok');
		}
		
	});
	
	// Add a 'close' event handler to this instance of socket
	sock.on('close', function(data) {
		//console.log('SOCKET CONNECTION CLOSED');
	});
	sock.on('error', function(data) {
		console.log("Tried to send to a closed socket.");
	});
}).listen(PORT, HOST);

console.log(getNowFormatDate1()+' Socket listening on ' + HOST +':'+ PORT);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Alex39 имхо, структуру бд брать с оффлайновой

Где блок с парпаметрами перса забинарен

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
38 минут назад, BorizzK сказал:

Alex39 имхо, структуру бд брать с оффлайновой

Где блок с парпаметрами перса забинарен

 

 

Цитата

надо переписать со старой базы на новую, все запросы

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Alex39 

Для начала нужно понять

Куда и как коннектится серв при InitDbOnline

Указать ip-порт

И скажем WireShark'ом посмотреть

И поднять скажем тот же апач и смотреть что серв от него хочет в логах апача

Я бы занялся, да времени небыло

 

Завтра попробую вайршарком изучить

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
21 час назад, BorizzK сказал:

Alex39 

Для начала нужно понять

Куда и как коннектится серв при InitDbOnline

Указать ip-порт

И скажем WireShark'ом посмотреть

И поднять скажем тот же апач и смотреть что серв от него хочет в логах апача

Я бы занялся, да времени небыло

 

Завтра попробую вайршарком изучить

 

 

Ну попробуй, я и так знаю что он хочет, только мозги надо иметь что бы сделать, это не просто

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, Alex39 сказал:

Ну попробуй, я и так знаю что он хочет, только мозги надо иметь что бы сделать, это не просто

рассказвай, может хоть вместе кто-то чего поможет сделать. Я бы помог, но в этой области уже увы, знаю мало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 минуту назад, 123new сказал:

рассказвай, может хоть вместе кто-то чего поможет сделать. Я бы помог, но в этой области уже увы, знаю мало.

Вот и я знаю мало, надо открывать уроки по MySQL и изучать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Alex39 ты хочешь сказать, что там всежтаки mysql?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
3 минуты назад, BorizzK сказал:

Alex39 ты хочешь сказать, что там всежтаки mysql?

На сколько я понял что Hive использует компоненты MySQL, это же база данных

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Сервер дейз использует запросы mysql?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
6 минут назад, BorizzK сказал:

Сервер дейз использует запросы mysql?

Не сервер, Hive

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

И не сам MySQL, а компоненты, на котором и построена система, надо только правильно подключить это все и полностью использовать сам MySQL

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Самое главное произвести конект в саму базу MySQL, а потом уже составлять таблицы, вот и пытаюсь, что бы хотя бы сервер видел хост Mysql, но пока что не получается, я для примера взял @extDB3, но видать не все понимаю или делаю

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
5 минут назад, Alex39 сказал:

Самое главное произвести конект в саму базу MySQL, а потом уже составлять таблицы, вот и пытаюсь, что бы хотя бы сервер видел хост Mysql, но пока что не получается, я для примера взял @extDB3, но видать не все понимаю или делаю

научитесь перехватывать запросы с hive этого и давать ответы - все получится, а в mysql отправлять уже дело десятое.
там как я понял получается связка php-java-mysql

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 минуту назад, 123new сказал:

научитесь перехватывать запросы с hive этого и давать ответы - все получится, а в mysql отправлять уже дело десятое.
там как я понял получается связка php-java-mysql

Верно, они совместили php-java-mysql, вот и пытаюсь, но пока не выходит, мало знаний

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: 123new
      В данной теме я распишу возможность создания серверного мода для сервера на собственном примере и объясню как его собрать.Работающий на момент публикации статьи на версии сервера игры 1.04.152050.
       
      Темы к ознакомлению, связанные с данным материалом:
      https://s-platoon.ru/topic/8701-enscript-uchimsya-osnovam-skriptinga/
      https://s-platoon.ru/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga-modov/
       
      Нам понадобятся:
      1. Сервер игры актуальной версии, не ниже патча 1.04. Как установить можно узнать тут:
      До версии 1.04 параметра servermod у сервера игры не существовало!!!
      2. Программа 'PBO manager' с состава инструментария армы из сети: https://www.armaholic.com/page.php?id=16369
      Зеркало: https://yadi.sk/d/_gmzoNSDpNJTt
      Еще зеркало:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      3. Скрипты для упаковки в наш мод, сформированные и подготовленные нами вручную. Как - смотрите тему
      4. Notepad++ https://notepad-plus-plus.org/download
      P.S. Вместо 'PBO manager' можно использовать DayZ Tools, но как им пользоваться разбираемся сами 😉
       
      И так, приступим:
      1. Предположим, что у нас имеется свой некий набор
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Подробнее о создании скриптов для своих целей - читайте вот эту тему!
      2. Создаем папку с нашим модом. Для примера, это будет папка '@My_Server_Mod'. В созданной нами папке создаем папку 'Addons', а в ней папку 'My_Server_Mod'.
      3. Помещаем содержимое распакованного архива в папку 'My_Server_Mod'. Должно получиться так:

      4. В папке 'My_Server_Mod' создаем файлик 'config.cpp' и заполняем его следующими данными (советую использовать Notepad++ для этого):
      class CfgPatches // требуется обязательно { class My_Server_Mod // требуется обязательно, совпадает с именем мода { units[]={}; // may be not worked weapons[]={}; // may be not worked requiredVersion=0.1; // may be not worked requiredAddons[]={}; /* requiredAddons[]= { "DZ_Data", // Перечисляем требуемые и используемые модом аддоны (pbo-файлы игры и модов по их внутренним скриптовым именам) }; */ }; }; class CfgMods // // требуется обязательно, совпадает с именем мода { // https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation class My_Server_Mod { dir = "My_Server_Mod"; // Имя папки мода, совпадает с именем мода picture = ""; // Картинка в описании мода action = ""; // Ссылка, например вот так: action = "https://dayz.com/"; hideName = 1; // Не уверен, что этот параметр работает hidePicture = 1; // Не уверен, что этот параметр работает name = "My_Server_Mod"; // Имя мода (а также его внутреннее скриптовое имя) logoSmall = "Mods/TestMod/modlogosmall.tga"; // значок рядом с именем мода, если описание не развернуто logo = "Mods/TestMod/modlogo.tga"; // логотип под меню игры logoOver = "Mods/TestMod/modlogohover.tga"; // при наведении курсора мыши на логотип tooltip = "tooltip"; // подсказка при наведении курсора мыши overview = "My Server Mod"; // Описание credits = "123new"; // credits author = "123new"; // author authorID = "0"; // author steam ID version = "1.0"; // version extra = 0; // Не уверен, что этот параметр работает type = "mod"; // требуется обязательно, остается неизменным // inputs = "mods\testmod\inputs\my_new_inputs.xml"; // необязательно, при использовании пользовательских inputs dependencies[]={"Core","GameLib","Game","World","Mission"}; // необязательно, если необходимо установить зависимость класса class defs { class engineScriptModule { value=""; // если значение пустое, используется функция ввода по умолчанию files[]={"My_Server_Mod/scripts/1_Core"}; // вы можете добавить любое количество файлов или каталогов, и они будут скомпилированы вместе с оригинальными скриптами игрового модуля }; class gameLibScriptModule { value=""; files[]={"My_Server_Mod/scripts/2_GameLib"}; }; class gameScriptModule { //value="CreateGameMod"; // когда значение заполнено, имя функции ввода модуля скрипта по умолчанию перезаписывается им value = ""; files[]={"My_Server_Mod/scripts/3_Game"}; }; class worldScriptModule { value=""; files[]={"My_Server_Mod/scripts/4_World"}; }; class missionScriptModule { value=""; files[]={"My_Server_Mod/scripts/5_Mission"}; }; }; // Если какой-то из разделов скриптинга вам не нужен и вы не сибираетесь его паковать, сотрите необходимый блок с ним выше и в массиве dependencies }; }; Пояснения в файле оставил. Файл готовый:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Как видите, в 'deffs' названия классов и путей соответствуют родным из 'scripts.pbo', но с допиской имени мода. Имя мода в данном случае и есть идентификатор для обращения к своему моду извне. А в 'dependencies' перечисляются используемые классы оригинальных скриптов без дописки номера секции. Количество используемых 'dependencies' и блоков 'deffs' должно быть идентично.
      Пояснения есть также и в официальной документации от разработчика: https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation
      5. Запаковываем нашу папку 'My_Server_Mod' в pbo-файл 'My_Server_Mod.pbo' через 'PBO manager', как на скриншоте ниже:

      Можно использовать и другие способы запаковки, если знаете их или привычны вам.
      6. Добавляем в параметры запуска сервера параметр:
      "-servermod=@My_Server_Mod;" -FilePatching 7. Радуемся, наш серверный
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      P.S. Создавать bikey файл для мода и bisign подписи для него не требуется, иначе это может привести к неработоспособности серверной модификации (возможно, недоработка сервера игры разработчиком)
       
      Отмечу сразу, что данный способ подходит для модификации и переписывания оригинальных классов скриптов сервера от разработчиков и модификации чужих модов с помощью моддинга, применяется исключительно на стороне сервера игры и клиент игры не затрагивает. Распространять такой мод игрокам НЕ НУЖНО!
      Изменение оригинальных скриптов, для которых не предусмотрена операция 'modded class' в движке игры, а также классов и функций, которые защищены языком и движком игры от такого рода действий через серверные моды не получится. Если вы столкнулись с этим, вам проще распаковать scripts.pbo и поместить папку scripts в корень сервера игры, добавить в параметры запуска сервера параметр -FilePatching и изменять напрямую в папке необходимые вам файлы.Запаковывать назад в pbo папку и размещать в dta в таком случае не нужно!
       
      P.P.S. Процедура создания своего собственного клиент-серверного мода на основе скриптов работает таким же образом. В случае создания такого мода, файл 'config.cpp' может быть для стандартного мода более разнообразным, а также после требуется обязательная подпись такого мода в bisign и создание bikey файлов. Более подробно это освещать требуется отдельно!
    • Автор: 123new
      Здравствуйте, дорогие друзья и посетители сайта. В данной теме я распишу как создать свой "чистый" сервер на основе первых официальных серверных файлов игры, доступных каждому в steam для тех, кто приобрел эту замечательную игру. Для тех, кто не приобретал ее, не расстраивайтесь, добавлю зеркала на файлы.
      И так, приступим.
       
      Системные требования игры:
      https://s-platoon.ru/topic/7014-polnaya-dokumentaciya-servernyh-faylov-dayz-standalone-dayz-server-files-documentation/?do=findComment&comment=61219
       
      Нам понадобятся:
      1. Notepad++ https://notepad-plus-plus.org/download
      2. Официальные серверные файлы игры со steam. Скачать  их можно:
      В Steam из раздела 'инструменты' , выбрав DayZ Server и нажав 'установить' Вручную через утилиту SteamCMD:
      3. Официальный клиент игры из steam: https://store.steampowered.com/app/221100/DayZ/
      4. "Настроенная конфигурация серверной части игры" и батник для старта сервера:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      И так, приступим.
      Копируем папку со скачанными серверными файлами игры (папку DayZServer ) в отдельную папку. В пути и имени папки не должно быть пробелов и русских символов. Саму новую папку можно назвать как хотите, я же назову ее MyServer. Распаковываем архив с "Настроенной конфигурацией серверной части игры" в папку с серверными файлами (папка MyServer). Получим что-то типа такого: Далее мы работаем уже только внутри папки MyServer Открываем в Notepad++ файл server.cfg в папке Instance_1.  Настраиваем его, комментарии к настройке на русском в файле имеются.
      При особой необходимости вы можете свериться с serverDZ.cfg в корневой папке сервера, это оригинальный файл конфигурации, предоставленный разработчиками. Также, можете прочитать информацию из официальной документации с переводом в теме вот этой(смотрите во 2 сообщении указанной темы). Плюсом есть пояснения в конце гайда! Открываем в Notepad++ файлы BEServer.cfg  и BEServer_x64.cfg в папке Instance_1\Battleye в папке сервера. Настраиваем параметры, содержимое обоих файлов должно быть идентичным.
      Параметры:
      RConPassword - Устанавливает пароль для подключения RCon инструментов  (инструмент удаленного администрирования, таких как BEC/Dart).
      RestrictRCon - Включает\отключает RCon-функции (кик\бан\ограничение подключения) (0 для отключения органичений)
      MaxPing - устанавливает ограничение на сервере по пингу
      В примере, уже имеющемся у вас, 12345678 - rcon-пароль сервера, 500 - максимальный пинг, разрешенный battleye для игры на сервере, RestrictRCon 0 - разрешить подключение с RCon-клиентов с правами кика и бана (0 - разрешено все, 1 - запрещен кик и бан, только отправка в чат). Запускаем !!!Start_server.bat и наш сервер запустится. Запускаем клиент игры со steam, находим наш сервер вручную по ip и порту, либо имени сервера.
      Если сервер запущен на том же компьютере, где и игра, и на стандартном порту 2302, то поумолчанию поиск выполняется по 127.0.0.1:2302
      Если сервер запущен на другом компьютере, то вместо 127.0.0.1 будет ip адрес компьютера, где запущен сервер, или его доменное имя. Например, myserver.com:2302 или 178.123.22.12:2302
      ВАЖНО: если сервер запущен на другом компьютере, отличном от компьютера где запущена игра, то для доступа на сервер игроков необходимо иметь "внешний" выделенный ip-адрес и открытый порт сервера!
      Сменить порт сервера можно в !!!Start_server.bat (Notepad++ для редактирования),  параметр запуска сервера -port= Более подробно по параметрам запуска читайте ниже. Для выключения сервера рекоммендуется пользоваться !!!Server_kill.bat файлом, созданным в соответствии с рекоммендациями разработчиков игры и официальной документацией.  
      Разъяснения по параметрам запуска сервера игры (для !!!Start_server.bat ):
      Разъяснения по конфигурационному файлу сервера игры (для serverDZ.cfg ):
       
      Crack SmartSteamEmu v. 1.4.3 данной версии клиента игры и сервера:
      Скачать с Zippyshare.com: https://www64.zippyshare.com/v/mHmPweqg/file.html
      Скачать с Mega.nz: https://mega.nz/#!rnZBXK4b!KRrJm6obcJjUlzMpEPNQ3R8sy2z0pP-0Myb_ao4TVhg
      Скачать с yandex.disk: https://yadi.sk/d/4xSF1dSt6XN41g
      Инструкция по установке есть в архиве, дублирую:
       
      Дополнительно:
      Для работы с Battleye, кика и бана игроков используйте ip-адрес и порт сервера, и любой rcon-клиент с паролем из BEServer_x64.cfg
      Для работы BEC файл BEServer.cfg должен быть идентичным по содержанию BEServer_x64.cfg иначе программа не будет работать!
      База данных (storage) теперь хранится по пути: mpmissions\dayzOffline.chernarusplus\storage_{номер instance с cfg сервера}
      В базе данных также хранится файл с сохранениями игроков на сервере с именем players.db
      Если вы не находите свой сервер в списке серверов игры во вкладке Community, проверьте на доступность и открытость извне игровой порт, а также порты steam и steamquery (см. cfg файл сервера). Сервера с crack не отобразятся там.
       
      Вот и все, приятной игры на сервере!
       
       
    • Автор: 123new
      В данной теме я распишу мой вариант установки сейвзоны, работающий на момент публикации статьи на версии сервера игры 1.06.152885.
       
      Установка
      1. Открываем 'init.c' в  'MpMissions' вашей.
      2. Вверху файла добавляем 1 строкой:
      #include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c" Где 'dayzoffline.chernarusplus' - имя папки с активной 'MpMissions' вашей.
      Т.е. для карты Livonia 'dayzoffline.chernarusplus'  надо вручную заменить на 'dayzOffline.enoch'
      Пример:

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      3.Создаем папку 'Scripts' в корне 'MpMissions' вашей, а в ней создаем файл с именем 'safezone.c' следующего содержания:
      /* Author: Sania(ZoS) (aka 123new) Project: S-platoon.ru Install: 1. Create a 'Scripts' directory in your active mpmissions 2. Plase this filename (safezone.c) in 'Scripts' 3. Add in init.c this line: #include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c" Where is 'dayzoffline.chernarusplus' is active mpmission directory in cfg filename server 4. Configure a next settings */ class SafeZone_PlugIn { protected bool Activate_SafeZone_PlugIn = true; // safezone on (true) or off (false) protected float SAFEZONE_time_repeat_checking = 10; //In seconds ref static TStringArray SAFEZONE_LOACTIONS = {"15145.1 32.9793 13919.0", "12145.1 32.9793 10919.0"};//Map coords (positions of the safe zone) protected static float SAFEZONE_RADIUS = 100; //In meter protected static string SAFEZONE_ENTRY_MESSAGE = "Welcome to The SafeZone! Godmode ENABLED!"; protected static string SAFEZONE_EXIT_MESSAGE = "You Have Left The SafeZone! Godmode DISABLED!"; void OnInit() { if(Activate_SafeZone_PlugIn) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(RunCheckStart, (SAFEZONE_time_repeat_checking * 1000), true); } } static void RunCheckStart() { private array<Man> players = new array<Man>; GetGame().GetPlayers( players ); if (SAFEZONE_LOACTIONS.Count() > 0) { if (players.Count() > 0) { foreach(string SAFEZONE_LOACTION: SAFEZONE_LOACTIONS) { if( players.Count() > 0 ) { foreach(Man player: players) { if(player) { private PlayerBase player_casted = PlayerBase.Cast(player); CheckingPosition(player_casted,SAFEZONE_LOACTION.ToVector()); } } } } } } } static void CheckingPosition(PlayerBase player,vector SAFEZONE_LOACTION) { private float SAFEZONE_distance; private string SAFEZONE_ZoneCheck, SAFEZONE_UID_PLAYER, SAFEZONE_NAME_PLAYER; SAFEZONE_NAME_PLAYER = player.GetIdentity().GetName(); SAFEZONE_UID_PLAYER = player.GetIdentity().GetPlainId(); //Steam 64 private vector SAFEZONE_pos_player = player.GetPosition(); private vector SAFEZONE_LOCATION_FIXED = CorrectToGroundPosY(SAFEZONE_LOACTION); private string name_mesage_profile = "GodModeEnabledFor: " + SAFEZONE_UID_PLAYER + " Location: " + SAFEZONE_LOACTION.ToString(); SAFEZONE_distance = vector.Distance(SAFEZONE_pos_player,SAFEZONE_LOCATION_FIXED); if (SAFEZONE_distance <= SAFEZONE_RADIUS) //Player Inside Zone { SAFEZONE_ZoneCheck = ""; GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck); if (SAFEZONE_ZoneCheck == "true") //Already in zone { GetGame().SetProfileString(name_mesage_profile,"true"); player.SetAllowDamage(false); //GodMode On return; } else { GetGame().SetProfileString(name_mesage_profile,"true"); Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Enter in safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString()); player.SetAllowDamage(false); //GodMode On SendPersonalMessage(SAFEZONE_ENTRY_MESSAGE, player); } } else { //Player Outside of Zone if (SAFEZONE_distance > SAFEZONE_RADIUS) //Player Outside of Zone { SAFEZONE_ZoneCheck = ""; GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck); if (SAFEZONE_ZoneCheck == "false") { GetGame().SetProfileString(name_mesage_profile,"false"); return; } else { if (SAFEZONE_ZoneCheck != "") { GetGame().SetProfileString(name_mesage_profile,"false"); Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Left safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString()); player.SetAllowDamage(true); //GodMode Off SendPersonalMessage(SAFEZONE_EXIT_MESSAGE, player); } else { GetGame().SetProfileString(name_mesage_profile,"false"); return; } } } } } static vector CorrectToGroundPosY(vector pos) { private float pos_x = pos[0]; private float pos_z = pos[2]; private float pos_y = GetGame().SurfaceY(pos_x, pos_z); private vector tmp_pos = Vector(pos_x, pos_y, pos_z); return tmp_pos; } static void SendPersonalMessage(string message, PlayerBase casted_player) { Man player; Class.CastTo(player, casted_player); if(( player ) && (message != "")) { Param1<string> m_GlobalMessage = new Param1<string>(message); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); } } } /* class SafeZone_Config //test config for json { vector SAFEZONE_LOACTION = "15145.1 32.9793 13919.0"; //Map coords (position of the safe zone) float SAFEZONE_RADIUS = 100.0; //In meter string SAFEZONE_ENTRY_MESSAGE = "Welcome to The SafeZone! Godmode ENABLED!"; string SAFEZONE_EXIT_MESSAGE = "You Have Left The SafeZone! Godmode DISABLED!";\ } */ ref SafeZone_PlugIn SafeZone = new SafeZone_PlugIn(); modded class CustomMission { override void OnInit () { super.OnInit(); SafeZone.OnInit(); } } Ну или скачиваем его отсюда в готовом виде:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Здесь:
       'SAFEZONE_LOACTIONS' - координаты точкек центра сейвзоны, можно указать несколько.
      'SAFEZONE_RADIUS' - радиус от указанного центра севзоны, на котором действует защита
      'ENTRY_MESSAGE' - сообщение о входе в зону (не рекоммендуется указывать русский язык, может не отображаться)
      'EXIT_MESSAGE' - сообщение о выходе из зоны (не рекоммендуется указывать русский язык, может не отображаться)
      'SAFEZONE_time_repeat_checking' - время повтора проверки наличия игроков в зонах, в секундах
      'Activate_SafeZone_PlugIn' - активация плагина скрипта, true - ключен, false - выключен
      4. Запускаем сервер и проверяем.
       
      Для совсем ленивых готовая миссия сервера с настроенной сейвзоной для патча игры 1.06 
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
       
      Гайд обновлен: 31.01.2020
       
       
    • Автор: Ksenagami
      Всем доброго времени суток. 
      Столкнулся с проблемой запуска/настройкой сервера, собственно ошибки при разных вариантах подключения приведу ниже.
       
      При запуске сервера с конфигом:
      start DayZServer_x64.exe -config=serverDZ.cfg -port=2302 -dologs -adminlog -netlog -freezecheck -noFilePatching -BEpath=D:\server-dayz-1.03\battleye -profiles=D:\server-dayz-1.03\Logs Выбивает ошибку подключения:
      1:03:22 Xeontius uses modified data file 1:03:22 [Login]: Adding player Xeontius (1169892374) to login queue at position 1 1:03:22 [LoginMachine]: Add player Xeontius (1169892374) 1:03:22 [StateMachine]: Player Xeontius (dpnid 1169892374 uid ) Entering AuthPlayerLoginState 1:03:22 BattlEye Server: Player #0 Xeontius (192.168.0.100:2316) connected 1:03:22 Player Xeontius connecting. 1:03:22 [StateMachine]: Player Xeontius (dpnid 1169892374 uid ) Entering WaitAuthPlayerLoginState 1:03:23 BattlEye Server: Player #0 Xeontius - BE GUID: 7126d814230e63595389e560519f301a 1:03:23 Player Xeontius (1169892374) kicked from server: 2 (Auth error: INVALID TICKET)  
      Но есть и другая проблема, если запускаю сервера при помощи .bat который в свою очередь пускает сервера StartServer.ini
      [Launcher] Target = DayZServer_x64.exe StartIn = CommandLine = -port=2302 -config=configs\serverDz.cfg -cfg=configs\basic.cfg -profiles=configs -user=configs -name=Server -nologs -adminlog -freezecheck -noFilePatching SteamClientPath = SmartSteamEmu\SmartSteamEmu.dll SteamClientPath64 = SmartSteamEmu\SmartSteamEmu64.dll Persist = 0 ParanoidMode = 0 InjectDll = 0 При подключении к серверу выдаёт ошибку:
      1:14:20 Xeontius uses modified data file 1:14:20 [Login]: Adding player Xeontius (65353324) to login queue at position 1 1:14:20 [LoginMachine]: Add player Xeontius (65353324) 1:14:20 [StateMachine]: Player Xeontius (dpnid 65353324 uid ) Entering AuthPlayerLoginState 1:14:20 BattlEye Server: Player #0 Xeontius (192.168.0.100:2316) connected 1:14:20 Player Xeontius connecting. 1:14:20 [StateMachine]: Player Xeontius (dpnid 65353324 uid ) Entering WaitAuthPlayerLoginState 1:14:20 BattlEye Server: Player #0 Xeontius - BE GUID: 7126d814230e63595399e560519f301a 1:14:21 BattlEye Server: Verified GUID (7126d814230e63595399e560519f301a) of player #0 Xeontius 1:14:21 Player Xeontius connected (id=iOfimjHCetIp4iIJeCjtwueZU8aXZUeLSy7PL+ECMLg=). 1:14:21 [StateMachine]: Player Xeontius (dpnid 65353324 uid iOfimjHCetIp4iIJeCjtwueZU8aXZUeLSy7PL+ECMLg=) Entering GetCharacterLoginState 1:14:21 [StateMachine]: Player Xeontius (dpnid 65353324 uid iOfimjHCetIp4iIJeCjtwueZU8aXZUeLSy7PL+ECMLg=) Entering CreateNetObjectsLoginState 1:14:21 Player Xeontius dpid=65353324 at pos (10867.0, 0.0, 2400.1) 1:14:21 [StateMachine]: Player Xeontius (dpnid 65353324 uid iOfimjHCetIp4iIJeCjtwueZU8aXZUeLSy7PL+ECMLg=) Entering PreloadCamLoginState 1:14:21 [StateMachine]: Player Xeontius (dpnid 65353324 uid iOfimjHCetIp4iIJeCjtwueZU8aXZUeLSy7PL+ECMLg=) Entering WaitPreloadCamLoginState 1:14:39 [StateMachine]: Player Xeontius (dpnid 65353324 uid iOfimjHCetIp4iIJeCjtwueZU8aXZUeLSy7PL+ECMLg=) Entering GetNewCharLoginState 1:14:39 [StateMachine]: Player Xeontius (dpnid 65353324 uid iOfimjHCetIp4iIJeCjtwueZU8aXZUeLSy7PL+ECMLg=) State Error (GetNewCharLoginState): Player with network id 0 not found 1:14:39 Player Xeontius (65353324) kicked from server: 6 () 1:14:39 [StateMachine]: Kick player Xeontius (dpnid 65353324 uid iOfimjHCetIp4iIJeCjtwueZU8aXZUeLSy7PL+ECMLg=) State GetNewCharLoginState Error 1:14:39 [Disconnect]: Client 65353324 early disconnect 1:14:39 [Disconnect]: No player -> call DB exit 65353324 1:14:39 [Disconnect]: No player -> remove player info 65353324 1:14:39 [Disconnect]: DisconnectPlayerFinish 65353324 1:14:39 [Disconnect]: Remove player info 65353324 1:14:39 [Disconnect]: Player destroy 65353324 1:14:39 Player Xeontius disconnected. 1:14:39 BattlEye Server: Player #0 Xeontius disconnected Запуск клиента делал DayZ_BE.exe и DayZ_x64.exe результат один и тот же.
      В клиенте сервера находит как официальный, в ЛВС пусто.
      Версия клиента и сервера 1.03.151507
    • Автор: klochkovilo
      Приветствую всех! Ребят, не нашел тему на форуме, может слепой (тыкнете пальцем пожалуйста) Необходимо 
      распаковать Авто Бэкапы сервера (стандартные, БАГемии) Подскажите какой прогой, если возможно вообще.
      Заранее Спасибо!
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.