-Miku Miku Online 0.3.9
+Miku Miku Online 0.3.10
// ******************************** 警告 *********************************** //
// ***
/2d6 - 6面サイコロを2つ振ります。dの前後の数字は任意のものを指定できます。
+/trip [パスワード] - トリップを設定します
+
=== 操作方法
* キーボード
std::string model_name() const;
void set_model_name(const std::string& name);
+ std::string trip_passwd() const;
+ void set_trip_passwd(const std::string& trip_passwd);
+
uint16_t udp_port() const;
void set_udp_port(uint16_t port);
std::string private_key_;
std::string name_;
- std::string trip_;
+ std::string trip_passwd_;
std::string model_name_;
std::string host_;
auto self = static_cast<Card*>(args.Holder()->GetPointerFromInternalField(0));\r
\r
if (args.Length() >= 1 &&\r
- args[0]->IsString() &&\r
- args[0]->ToString()->Length() > 0) {\r
+ args[0]->IsString()) {\r
\r
+ auto trip_passwd = std::string(*String::Utf8Value(args[0]->ToString()));\r
if (auto command_manager = self->manager_accessor_->command_manager().lock()) {\r
- auto trip = std::string(*String::Utf8Value(args[0]->ToString()));\r
- command_manager->Write(network::ServerUpdateAccountProperty(TRIP, trip));\r
+ command_manager->Write(network::ServerUpdateAccountProperty(TRIP, trip_passwd));\r
}\r
+\r
+ if (auto account_manager = self->manager_accessor_->account_manager().lock()) {\r
+ account_manager->set_trip_passwd(trip_passwd);\r
+ }\r
}\r
\r
+\r
return Undefined();\r
}\r
\r
music_paths_.clear();
- path p("./system/music");
+ path p("./music");
try{
if (exists(p) && is_directory(p)) {
se_paths_.clear();
- p = "./system/se";
+ p = "./se";
try{
if (exists(p) && is_directory(p)) {
return model_name_;\r
}\r
\r
-void Player::set_model_name(const std::string& trip)\r
+void Player::set_model_name(const std::string& name)\r
{\r
- model_name_ = trip;\r
+ model_name_ = name;\r
}\r
\r
std::string Player::current_model_name() const\r
// チャットメッセージ受信
var even_line = false;
Network.onReceive = function (info, msg) {
+ var trip = ""
+ if (info.player.trip()) {
+ trip = "《" + info.player.trip() + "》"
+ }
+
if (msg.body && !msg.private) {
list.addItem(
new UI.Label({
docking: UI.DOCKING_TOP | UI.DOCKING_LEFT | UI.DOCKING_RIGHT,
- text: "[" + info.player.name() + "] " + msg.body,
+ text: trip + "[" + info.player.name() + "] " + msg.body,
bgcolor: ((even_line = !even_line) ? "#AFEEEECC" : "#FFFFFFCC")
})
);
list.addItem(
new UI.Label({
docking: UI.DOCKING_TOP | UI.DOCKING_LEFT | UI.DOCKING_RIGHT,
- text: "[private:" + info.player.name() + "] " + msg.body,
+ text: trip + "[private:" + info.player.name() + "] " + msg.body,
bgcolor: ((even_line = !even_line) ? "#add8e6CC" : "#87ceebCC")
})
)
case "nick":
Account.updateName(args.trim());
break;
+
+ case "trip":
+ passwd = args ? args.trim() : ""
+ Account.updateTrip(passwd);
+ break;
// モデルを変更
case "model":
return unicode::ToTString(account_manager->name());
}), manager_accessor_));
+ items_.push_back(std::make_shared<TextItem>(_LT("option.status.trip"),
+ std::make_shared<std::function<tstring(void)>>(
+ [player_manager](){
+ return unicode::ToTString(player_manager->GetMyself()->trip());
+ }), manager_accessor_));
+
items_.push_back(std::make_shared<TextItem>(_LT("option.status.modelname"),
std::make_shared<std::function<tstring(void)>>(
[account_manager](){
if (drag_offset_rect_.x >= 0) {
offset_rect_.x= input->GetMouseX() - drag_offset_rect_.x;
offset_rect_.y= input->GetMouseY() - drag_offset_rect_.y;
+
input->CancelMouseLeft();
} else if (drag_resize_offset_rect_.x >= 0) {
offset_rect_.width= input->GetMouseX() - drag_resize_offset_rect_.x;
LOGIN = 0x2,
CHANNEL = 0x3,
NAME = 0xA3,
- TRIP = 0xA4,
+// TRIP = 0xA4,
MODEL_NAME = 0xA5,
+ TRIP = 0xA6,
IP_ADDRESS = 0xF0,
UDP_PORT = 0xF1,
};
\r
#include <boost/format.hpp>\r
#include <sha.h>\r
+#include <whrlpool.h>\r
#include <osrng.h>\r
#include "Encrypter.hpp"\r
#include "Utils.hpp"\r
\r
namespace network {\r
\r
-const int Encrypter::TRIP_LENGTH = 20;\r
+const int Encrypter::TRIP_LENGTH = 12;\r
\r
using namespace CryptoPP;\r
\r
std::string Encrypter::GetHash(const std::string& in)\r
{\r
std::unique_ptr<byte[]> outbuf(new byte [64]);\r
- CryptoPP::SHA512().CalculateDigest(outbuf.get(), (const byte*)in.data(), in.size());\r
+ CryptoPP::Whirlpool().CalculateDigest(outbuf.get(), (const byte*)in.data(), in.size());\r
+ return std::string((char*)outbuf.get(), 64);\r
+}\r
\r
+std::string Encrypter::GetTripHash(const std::string& in)\r
+{\r
+ std::unique_ptr<byte[]> outbuf(new byte [64]);\r
+ CryptoPP::SHA512().CalculateDigest(outbuf.get(), (const byte*)in.data(), in.size());\r
return std::string((char*)outbuf.get(), 64);\r
}\r
\r
std::string Encrypter::GetTrip(const std::string& in)\r
{\r
static const uint8_t trip_chars[] =\r
- "abcdefghijklmnopqrstuvwxyz"\r
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\r
- ".:;@#$%&_()=*{}~+-!?[]()^/";\r
+ "opt0uXE{WZABCcdvi&_gMrsmn9)<"\r
+ "Q(TU}q5wx:DP3yFKL1Gab>|@=*8[$%"\r
+ "NO6Ye#-!?R4ShHIJV72)f+](jklz/\\";\r
\r
int pattern_size = sizeof(trip_chars) - 1;\r
\r
- auto buffer = GetTripHash(in).substr(0, TRIP_LENGTH);\r
+ std::string digest = GetTripHash(in);\r
+ for (int i = 0; i < 20; i++) {\r
+ digest = GetTripHash(digest + in) + GetHash(in + digest);\r
+ }\r
+\r
+ auto buffer = digest.substr(0, TRIP_LENGTH);\r
std::string out;\r
\r
for (auto it = buffer.begin(); it != buffer.end(); ++it) {\r
return out;\r
}\r
\r
-std::string Encrypter::GetTripHash(const std::string& in)\r
-{\r
- return GetHash(in);\r
-}\r
-\r
bool Encrypter::CheckKeyPair()\r
{\r
// 復号化できるかチェック\r
relative_path = os.path.relpath(absolute_path, bin_path)
zip.write(absolute_path, relative_path)
+ zip.writestr('music/', '')
+ zip.writestr('se/', '')
+
zip.close()
def make_server_package():
\r
void Account::SetUserTrip(UserID user_id, const std::string& trip)\r
{\r
- if (trip.size() > 0 && trip.size() <= 64) {\r
- std::string crypted_trip = network::Encrypter::GetTrip(trip);\r
- Set(user_id, TRIP, crypted_trip);\r
- }\r
+ if (trip.size() > 0 && trip.size() <= 256) {\r
+ Set(user_id, TRIP, network::Encrypter::GetTrip(trip));\r
+ } else {\r
+ Set(user_id, TRIP, std::string());\r
+ }\r
}\r
\r
std::string Account::GetUserModelName(UserID user_id) const\r
{\r
std::string value;\r
network::Utils::Deserialize(buffer, &value);\r
- account.SetUserName(session->id(), buffer);\r
+ account.SetUserName(session->id(), value);\r
}\r
break;\r
case TRIP:\r