Commit 83adc22c authored by 神楽坂玲奈's avatar 神楽坂玲奈

0.0.1 released

parent c4d05080
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
* XMPP聊天室 conference.my-card.in * XMPP聊天室 conference.my-card.in
* 以下全都为临时,开发用 * 以下全都为临时,开发用
* 用户认证 https://my-card.in/users/me.json?name=用户名&password=密码 * 用户认证 https://my-card.in/users/me.json?name=用户名&password=密码
* 反重力场 ws://122.0.65.69:10800/ * 反重力场 ws://115.29.191.63:10800/
* 应用列表 (本地app目录) apps.json * 应用列表 (本地app目录) apps.json
* 应用元文件 (本地app目录) meta * 应用元文件 (本地app目录) meta
......
...@@ -71,6 +71,9 @@ iframe, ...@@ -71,6 +71,9 @@ iframe,
.navbar > .container { .navbar > .container {
padding-right: 85px; padding-right: 85px;
} }
.nav-sidebar > .active > a:hover {
background-color: #4169e1;
}
.main_wrapper { .main_wrapper {
float: left; float: left;
width: 100%; width: 100%;
...@@ -96,6 +99,13 @@ iframe, ...@@ -96,6 +99,13 @@ iframe,
width: 72px; width: 72px;
margin-right: 12px; margin-right: 12px;
} }
.achievement {
margin-right: 4px;
margin-bottom: 8px;
}
.achievement.locked {
-webkit-filter: grayscale(100%);
}
#candy { #candy {
height: 207px; height: 207px;
width: 100%; width: 100%;
...@@ -159,3 +169,6 @@ iframe, ...@@ -159,3 +169,6 @@ iframe,
#roster_title .btn { #roster_title .btn {
border-right: none; border-right: none;
} }
.modal {
overflow-y: auto;
}
...@@ -50,6 +50,12 @@ a, button, input, span, p, li, td, th, h1, h2, h3, h4, h5, h6, iframe, .bootstra ...@@ -50,6 +50,12 @@ a, button, input, span, p, li, td, th, h1, h2, h3, h4, h5, h6, iframe, .bootstra
.navbar > .container .navbar > .container
padding-right: 85px; padding-right: 85px;
//应用列表
.nav-sidebar > .active > a:hover {
background-color: royalblue;
}
//游戏内容区域 //游戏内容区域
.main_wrapper .main_wrapper
//background linear-gradient(to right, rgba(255,255,255,0.9), rgba(255,255,255,0.2), rgba(255,255,255,0.2), rgba(255,255,255,0.2), rgba(255,255,255,0.9)), url(../apps/th135/readme/images/th13.5_XQL_OP.jpg) //background linear-gradient(to right, rgba(255,255,255,0.9), rgba(255,255,255,0.2), rgba(255,255,255,0.2), rgba(255,255,255,0.2), rgba(255,255,255,0.9)), url(../apps/th135/readme/images/th13.5_XQL_OP.jpg)
...@@ -76,6 +82,12 @@ a, button, input, span, p, li, td, th, h1, h2, h3, h4, h5, h6, iframe, .bootstra ...@@ -76,6 +82,12 @@ a, button, input, span, p, li, td, th, h1, h2, h3, h4, h5, h6, iframe, .bootstra
width: 72px; width: 72px;
margin-right 12px margin-right 12px
.achievement
margin-right:4px;
margin-bottom:8px;
.achievement.locked
-webkit-filter:grayscale(100%)
//聊天室 //聊天室
#candy { #candy {
height: 207px; height: 207px;
...@@ -159,4 +171,8 @@ a, button, input, span, p, li, td, th, h1, h2, h3, h4, h5, h6, iframe, .bootstra ...@@ -159,4 +171,8 @@ a, button, input, span, p, li, td, th, h1, h2, h3, h4, h5, h6, iframe, .bootstra
#roster_title .btn { #roster_title .btn {
border-right: none; border-right: none;
} }
\ No newline at end of file
//modal
.modal
overflow-y: auto;
\ No newline at end of file
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
<div id="wrapper"> <div id="wrapper">
<div class="col-sm-3 col-md-2 sidebar" ng-controller="AppsListController"> <div class="col-sm-3 col-md-2 sidebar" ng-controller="AppsListController">
<ul class="nav nav-sidebar"> <ul class="nav nav-sidebar">
<li ng-repeat="app in apps"> <li ng-repeat="app in apps" ng-class="active(app.id)">
<a href="#/apps/{{app.id}}">{{app.name}}</a> <a href="#/apps/{{app.id}}">{{app.name}}</a>
</li> </li>
</ul> </ul>
...@@ -94,8 +94,6 @@ ...@@ -94,8 +94,6 @@
</div> </div>
</div> </div>
<!-- Bootstrap core JavaScript <!-- Bootstrap core JavaScript
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
......
...@@ -7,23 +7,39 @@ mkdirp = require 'mkdirp' ...@@ -7,23 +7,39 @@ mkdirp = require 'mkdirp'
rmdir = require 'rmdir' rmdir = require 'rmdir'
gui = require 'nw.gui' gui = require 'nw.gui'
Datastore = require 'nw_nedb' Datastore = require 'nw_nedb'
db = db =
apps: new Datastore({ filename: path.join(gui.App.dataPath, 'apps.db'), autoload: true }) apps: new Datastore({ filename: path.join(gui.App.dataPath, 'apps.db'), autoload: true })
local: new Datastore({ filename: path.join(gui.App.dataPath, 'local.db'), autoload: true }) local: new Datastore({ filename: path.join(gui.App.dataPath, 'local.db'), autoload: true })
profile: new Datastore({ filename: path.join(gui.App.dataPath, 'profile.db'), autoload: true })
angular.module('maotama.controllers', []) angular.module('maotama.controllers', [])
.controller 'AppsListController', ['$scope', '$routeParams', '$http', '$location', ($scope, $routeParams, $http, $location)->
.controller 'AppsListController', ($scope, $http)->
$scope.orderProp = 'id'; $scope.orderProp = 'id';
$http.get('apps.json').success (data)-> $http.get('apps.json').success (data)->
console.log data
db.apps.remove {}, { multi: true }, (err, numRemoved)-> db.apps.remove {}, { multi: true }, (err, numRemoved)->
throw err if err throw err if err
db.apps.insert data, (err, newDocs)-> db.apps.insert data, (err, newDocs)->
throw err if err throw err if err
$scope.apps = data $scope.apps = data
$scope.$digest() if !$routeParams.app_id
$location.path("/apps/#{data[0].id}");
$scope.$apply()
else
$scope.$digest()
$scope.active = (app_id)->
"active" if $routeParams.app_id == app_id
$scope.category_active = (category)->
if $scope.apps
app = null
for a in $scope.apps
if a.id == $routeParams.app_id
app = a
if app
if app.category == category
"active"
]
.controller 'AppsShowController', ['$scope', '$routeParams', ($scope, $routeParams)-> .controller 'AppsShowController', ['$scope', '$routeParams', ($scope, $routeParams)->
db.apps.findOne {id: $routeParams.app_id}, (err, doc)-> db.apps.findOne {id: $routeParams.app_id}, (err, doc)->
throw err if err throw err if err
...@@ -35,7 +51,17 @@ angular.module('maotama.controllers', []) ...@@ -35,7 +51,17 @@ angular.module('maotama.controllers', [])
db.local.findOne {id: $routeParams.app_id}, (err, doc)-> db.local.findOne {id: $routeParams.app_id}, (err, doc)->
$scope.local = doc ? {} $scope.local = doc ? {}
$scope.$digest(); db.profile.findOne {id: $routeParams.app_id}, (err, doc)->
if doc #and doc.achievements.length == $scope.app.achievements.length
$scope.profile = doc
$scope.$digest();
else
$scope.profile =
id: $routeParams.app_id
achievements: ([] for achievement in $scope.app.achievements) if $scope.app.achievements
db.profile.insert $scope.profile, (err, newDoc)->
throw err if err
$scope.$digest();
$scope.add = (installation)-> $scope.add = (installation)->
$scope.local.installation = path.dirname installation $scope.local.installation = path.dirname installation
...@@ -51,7 +77,6 @@ angular.module('maotama.controllers', []) ...@@ -51,7 +77,6 @@ angular.module('maotama.controllers', [])
throw err if err throw err if err
$scope.$digest(); $scope.$digest();
$scope.install = ()-> $scope.install = ()->
$scope.runtime.installing[$scope.app.id] = $scope.runtime.installing[$scope.app.id] =
process: 0 process: 0
label: '正在连接' label: '正在连接'
...@@ -143,11 +168,45 @@ angular.module('maotama.controllers', []) ...@@ -143,11 +168,45 @@ angular.module('maotama.controllers', [])
when 'ACHIEVEMENT' when 'ACHIEVEMENT'
achievement = $scope.app.achievements[$(command).attr('type')] achievement = $scope.app.achievements[$(command).attr('type')]
achievement_item = achievement.items[$(command).attr('id')] achievement_item = achievement.items[$(command).attr('id')]
$scope.profile.achievements[$(command).attr('type')] ?= {}
return if $scope.profile.achievements[$(command).attr('type')][$(command).attr('id')]
window.LOCAL_NW.desktopNotifications.notify achievement_item.icon, "获得#{achievement.name}: #{achievement_item.name}", achievement_item.description window.LOCAL_NW.desktopNotifications.notify achievement_item.icon, "获得#{achievement.name}: #{achievement_item.name}", achievement_item.description
$scope.profile.achievements[$(command).attr('type')][$(command).attr('id')] =
created_at: new Date()
updated_at: new Date()
count: 1
db.profile.update {
id: $scope.app.id
}, $scope.profile, (err, numReplaced, newDoc)->
throw err if err
$scope.$digest();
else else
window.LOCAL_NW.desktopNotifications.notify $scope.app.icon, "unknown command", matches[1] window.LOCAL_NW.desktopNotifications.notify $scope.app.icon, "unknown command", matches[1]
game.on 'close', (code)-> game.on 'close', (code)->
$scope.runtime.running = false $scope.runtime.running = false
$scope.$digest(); $scope.$digest();
$scope.achievement_unlocked_count = (category)->
$scope.profile.achievements[category].length
$scope.achievement_total_count = (category)->
$scope.app.achievements[category].items.length
$scope.achievement_last_unlocked = (category)->
last = null
last_index = null
for index, achievement of $scope.profile.achievements[category]
if !last or result.created_at < last.created_at
last = achievement
last_index = index
$scope.app.achievements[category].items[index]
$scope.achievement_locked = (category, index)->
if $scope.profile.achievements[category][index]
''
else
'locked'
] ]
...@@ -26,29 +26,62 @@ ...@@ -26,29 +26,62 @@
local: new Datastore({ local: new Datastore({
filename: path.join(gui.App.dataPath, 'local.db'), filename: path.join(gui.App.dataPath, 'local.db'),
autoload: true autoload: true
}),
profile: new Datastore({
filename: path.join(gui.App.dataPath, 'profile.db'),
autoload: true
}) })
}; };
angular.module('maotama.controllers', []).controller('AppsListController', function($scope, $http) { angular.module('maotama.controllers', []).controller('AppsListController', [
$scope.orderProp = 'id'; '$scope', '$routeParams', '$http', '$location', function($scope, $routeParams, $http, $location) {
return $http.get('apps.json').success(function(data) { $scope.orderProp = 'id';
console.log(data); $http.get('apps.json').success(function(data) {
return db.apps.remove({}, { return db.apps.remove({}, {
multi: true multi: true
}, function(err, numRemoved) { }, function(err, numRemoved) {
if (err) {
throw err;
}
return db.apps.insert(data, function(err, newDocs) {
if (err) { if (err) {
throw err; throw err;
} }
$scope.apps = data; return db.apps.insert(data, function(err, newDocs) {
return $scope.$digest(); if (err) {
throw err;
}
$scope.apps = data;
if (!$routeParams.app_id) {
$location.path("/apps/" + data[0].id);
return $scope.$apply();
} else {
return $scope.$digest();
}
});
}); });
}); });
}); $scope.active = function(app_id) {
}).controller('AppsShowController', [ if ($routeParams.app_id === app_id) {
return "active";
}
};
return $scope.category_active = function(category) {
var a, app, _i, _len, _ref;
if ($scope.apps) {
app = null;
_ref = $scope.apps;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
a = _ref[_i];
if (a.id === $routeParams.app_id) {
app = a;
}
}
if (app) {
if (app.category === category) {
return "active";
}
}
}
};
}
]).controller('AppsShowController', [
'$scope', '$routeParams', function($scope, $routeParams) { '$scope', '$routeParams', function($scope, $routeParams) {
db.apps.findOne({ db.apps.findOne({
id: $routeParams.app_id id: $routeParams.app_id
...@@ -66,7 +99,35 @@ ...@@ -66,7 +99,35 @@
id: $routeParams.app_id id: $routeParams.app_id
}, function(err, doc) { }, function(err, doc) {
$scope.local = doc != null ? doc : {}; $scope.local = doc != null ? doc : {};
return $scope.$digest(); return db.profile.findOne({
id: $routeParams.app_id
}, function(err, doc) {
var achievement;
if (doc) {
$scope.profile = doc;
return $scope.$digest();
} else {
$scope.profile = {
id: $routeParams.app_id,
achievements: $scope.app.achievements ? (function() {
var _i, _len, _ref, _results;
_ref = $scope.app.achievements;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
achievement = _ref[_i];
_results.push([]);
}
return _results;
})() : void 0
};
return db.profile.insert($scope.profile, function(err, newDoc) {
if (err) {
throw err;
}
return $scope.$digest();
});
}
});
}); });
}); });
$scope.add = function(installation) { $scope.add = function(installation) {
...@@ -186,7 +247,7 @@ ...@@ -186,7 +247,7 @@
}); });
}); });
}; };
return $scope.run = function() { $scope.run = function() {
var game; var game;
$scope.runtime.running = true; $scope.runtime.running = true;
game = child_process.spawn($scope.app.main, [], { game = child_process.spawn($scope.app.main, [], {
...@@ -194,24 +255,41 @@ ...@@ -194,24 +255,41 @@
}); });
game.stdout.setEncoding('utf8'); game.stdout.setEncoding('utf8');
game.stdout.on('data', function(data) { game.stdout.on('data', function(data) {
var achievement, achievement_item, command, matches, _i, _len, _ref, _results; var achievement, achievement_item, command, matches, _base, _i, _len, _name, _ref;
console.log(data); console.log(data);
if (matches = data.match(/<maotama>(.+)<\/maotama>/)) { if (matches = data.match(/<maotama>(.+)<\/maotama>/)) {
_ref = $(matches[1]); _ref = $(matches[1]);
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (_i = 0, _len = _ref.length; _i < _len; _i++) {
command = _ref[_i]; command = _ref[_i];
switch (command.tagName) { switch (command.tagName) {
case 'ACHIEVEMENT': case 'ACHIEVEMENT':
achievement = $scope.app.achievements[$(command).attr('type')]; achievement = $scope.app.achievements[$(command).attr('type')];
achievement_item = achievement.items[$(command).attr('id')]; achievement_item = achievement.items[$(command).attr('id')];
_results.push(window.LOCAL_NW.desktopNotifications.notify(achievement_item.icon, "获得" + achievement.name + ": " + achievement_item.name, achievement_item.description)); if ((_base = $scope.profile.achievements)[_name = $(command).attr('type')] == null) {
_base[_name] = {};
}
if ($scope.profile.achievements[$(command).attr('type')][$(command).attr('id')]) {
return;
}
window.LOCAL_NW.desktopNotifications.notify(achievement_item.icon, "获得" + achievement.name + ": " + achievement_item.name, achievement_item.description);
$scope.profile.achievements[$(command).attr('type')][$(command).attr('id')] = {
created_at: new Date(),
updated_at: new Date(),
count: 1
};
db.profile.update({
id: $scope.app.id
}, $scope.profile, function(err, numReplaced, newDoc) {
if (err) {
throw err;
}
return $scope.$digest();
});
break; break;
default: default:
_results.push(window.LOCAL_NW.desktopNotifications.notify($scope.app.icon, "unknown command", matches[1])); window.LOCAL_NW.desktopNotifications.notify($scope.app.icon, "unknown command", matches[1]);
} }
} }
return _results;
} }
}); });
return game.on('close', function(code) { return game.on('close', function(code) {
...@@ -219,6 +297,33 @@ ...@@ -219,6 +297,33 @@
return $scope.$digest(); return $scope.$digest();
}); });
}; };
$scope.achievement_unlocked_count = function(category) {
return $scope.profile.achievements[category].length;
};
$scope.achievement_total_count = function(category) {
return $scope.app.achievements[category].items.length;
};
$scope.achievement_last_unlocked = function(category) {
var achievement, index, last, last_index, _ref;
last = null;
last_index = null;
_ref = $scope.profile.achievements[category];
for (index in _ref) {
achievement = _ref[index];
if (!last || result.created_at < last.created_at) {
last = achievement;
last_index = index;
}
}
return $scope.app.achievements[category].items[index];
};
return $scope.achievement_locked = function(category, index) {
if ($scope.profile.achievements[category][index]) {
return '';
} else {
return 'locked';
}
};
} }
]); ]);
......
This diff is collapsed.
...@@ -41,7 +41,7 @@ listen = (port, address='127.0.0.1', callback)-> ...@@ -41,7 +41,7 @@ listen = (port, address='127.0.0.1', callback)->
else else
throw 'unknown message' throw 'unknown message'
console.log "正在连接服务器" console.log "正在连接服务器"
client.connect "ws://122.0.65.69:10800/", "shinkirou" client.connect "ws://115.29.191.63:10800/", "shinkirou"
exports.listen = (port, address='127.0.0.1', callback)-> exports.listen = (port, address='127.0.0.1', callback)->
...@@ -54,6 +54,7 @@ exports.listen = (port, address='127.0.0.1', callback)-> ...@@ -54,6 +54,7 @@ exports.listen = (port, address='127.0.0.1', callback)->
protocol: raw.Protocol.UDP protocol: raw.Protocol.UDP
#success #success
puncher = require './puncher' puncher = require './puncher'
listen(port, address, callback)
catch e catch e
#failed, need elevate #failed, need elevate
#FUCK UAC. #FUCK UAC.
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
}); });
}); });
console.log("正在连接服务器"); console.log("正在连接服务器");
return client.connect("ws://122.0.65.69:10800/", "shinkirou"); return client.connect("ws://115.29.191.63:10800/", "shinkirou");
}; };
exports.listen = function(port, address, callback) { exports.listen = function(port, address, callback) {
...@@ -72,7 +72,8 @@ ...@@ -72,7 +72,8 @@
socket = raw.createSocket({ socket = raw.createSocket({
protocol: raw.Protocol.UDP protocol: raw.Protocol.UDP
}); });
return puncher = require('./puncher'); puncher = require('./puncher');
return listen(port, address, callback);
} catch (_error) { } catch (_error) {
e = _error; e = _error;
WebSocketServer = require('nw_websocket').server; WebSocketServer = require('nw_websocket').server;
......
...@@ -6,5 +6,5 @@ ...@@ -6,5 +6,5 @@
"tunnel.coffee" "tunnel.coffee"
], ],
"names": [], "names": [],
"mappings": "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" "mappings": "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"
} }
\ No newline at end of file
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
</div> </div>
<input id="app_add_file" class="hide" type="file" accept="application/octet-stream"/> <input id="app_add_file" class="hide" type="file" accept="application/octet-stream"/>
<div class="progress progress-striped active" ng-repeat="item in runtime.installing"> <div class="progress progress-striped active" ng-repeat="item in runtime.installing">
<div class="progress-bar" role="progressbar" aria-valuenow="{{item.progress}}" aria-valuemin="0" aria-valuemax="100" style="width:{{item.progress}}%"> <div class="progress-bar" role="progressbar" aria-valuenow="{{item.progress}}" aria-valuemin="0" aria-valuemax="100" style="width:{{item.progress}}%">
{{item.label}} {{item.label}}
</div> </div>
</div> </div>
...@@ -107,22 +107,28 @@ ...@@ -107,22 +107,28 @@
<img class="friend img-thumbnail" src="https://lh5.googleusercontent.com/-crYEtoQ-4Ho/AAAAAAAAAAI/AAAAAAAAAZE/OVA-78yQjU8/s46-c-k-no/photo.jpg"> <img class="friend img-thumbnail" src="https://lh5.googleusercontent.com/-crYEtoQ-4Ho/AAAAAAAAAAI/AAAAAAAAAZE/OVA-78yQjU8/s46-c-k-no/photo.jpg">
<img class="friend img-thumbnail" src="https://lh5.googleusercontent.com/-crYEtoQ-4Ho/AAAAAAAAAAI/AAAAAAAAAZE/OVA-78yQjU8/s46-c-k-no/photo.jpg"> <img class="friend img-thumbnail" src="https://lh5.googleusercontent.com/-crYEtoQ-4Ho/AAAAAAAAAAI/AAAAAAAAAZE/OVA-78yQjU8/s46-c-k-no/photo.jpg">
<h2 class="sub-header">收集</h2> <h2 class="sub-header" ng-repeat-start="achievement in app.achievements">{{achievement.name}}</h2>
<div class="clearfix"> <div class="clearfix" ng-if="achievement_unlocked_count($index) > 0">
<img class="achievement_image img-thumbnail pull-left" src="https://lh5.googleusercontent.com/-crYEtoQ-4Ho/AAAAAAAAAAI/AAAAAAAAAZE/OVA-78yQjU8/s46-c-k-no/photo.jpg"> <img class="achievement_image img-thumbnail pull-left" ng-src="{{achievement_last_unlocked($index).icon}}">
<div class="pull-left achievement_text"> <div class="pull-left achievement_text">
<p>最近获得的新符卡 <br> HJ的BUG</p> <p>最近获得的新{{achievement.name}} <br>{{achievement_last_unlocked($index).name}}</p>
<span class="help-block">你已获得 120 / 200 的符卡 (60%)</span> <span class="help-block">你已获得 {{achievement_unlocked_count($index)}} / {{achievement_total_count($index)}} 的{{achievement.name}} ({{100*achievement_unlocked_count($index)/achievement_total_count($index)}}%)</span>
</div> </div>
</div> </div>
<div class="progress"> <div class="progress" ng-if="achievement_unlocked_count($index) > 0">
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;"> <div class="progress-bar" role="progressbar" aria-valuenow="{{achievement_unlocked_count($index)}}" aria-valuemin="0" aria-valuemax="{{achievement_total_count($index)}}" style="width: {{100*achievement_unlocked_count($index)/achievement_total_count($index)}}%;">
<span class="sr-only">60% Complete</span> <span class="sr-only">60% Complete</span>
</div> </div>
</div> </div>
<div ng-repeat-end>
<a href="#" data-toggle="tooltip" data-container="body" title="Some tooltip text!" ng-repeat="item in achievement.items">
<img class="achievement img-thumbnail" ng-class="achievement_locked($parent.$index, $index)" src="{{item.icon}}">
</a>
</div>
<div ng-show="local.installation"> <div ng-show="local.installation">
<h2 class="sub-header">设置</h2> <h2 class="sub-header">设置</h2>
<button id="app_uninstall" type="button" class="btn btn-default" data-toggle="modal" data-target="#app_uninstall_modal" ng-disable="runtime.running || runtime.uninstalling"> <button id="app_uninstall" type="button" class="btn btn-default" data-toggle="modal" data-target="#app_uninstall_modal" ng-disable="runtime.running || runtime.uninstalling">
......
现在还在早期开发阶段,里面绝大部分功能都是不能用的,仅仅能拿来联FXTZ/楼了就发出来了
不要看什么功能都乱点,只进行下面的操作:
从左边游戏列表里 选择 东方非想天则 或 东方心绮楼
点【添加】按钮,选择则/楼的主程序
点【开始】按钮 (或者从其他地方手动开启则/楼也可以,不一定非得从平台打开),在10800端口建立主机
点【反重力场】按钮,之后会得到一个IP地址和端口,把那个发送给你的对手 (★对手不需要有平台)
通过反重力场建立的游戏无视电信/联通,不用特意找同一个网络运营商的连
加速原理跟放学对战平台一样,服务器也都是用的阿里云杭州,所以用那个效果不好的这个同样也会不好。
(而且这个聊天功能也不还能用简直弱爆了啊哈哈哈)
★ 另外,现在这个版本只是早期技术测试,可能随时会停止服务
★ 发现任何问题或建议请联系 zh99998@gmail.com
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment