Shift-JIS -> UTF-8

This commit is contained in:
oldmud0 2015-11-11 21:31:42 -06:00
parent 8363637872
commit b744ceaa3a
13 changed files with 897 additions and 897 deletions

View file

@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
using namespace System;
using namespace System::Reflection;
@ -7,9 +7,9 @@ using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
//
// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
//
[assembly:AssemblyTitleAttribute("LilithPort")];
[assembly:AssemblyDescriptionAttribute("")];
@ -21,15 +21,15 @@ using namespace System::Security::Permissions;
[assembly:AssemblyCultureAttribute("")];
//
// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を
// 既定値にすることができます:
// すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を
// 既定値にすることができます:
[assembly:AssemblyVersionAttribute("1.0.0.0")];

View file

@ -1,4 +1,4 @@
// LilithPort.cpp : メイン プロジェクト ファイルです。
// LilithPort.cpp : メイン プロジェクト ファイルです。
#include "stdafx.h"
#include "MainForm.h"
@ -6,7 +6,7 @@
using namespace LilithPort;
// グローバル
// グローバル
MT_SP_INFORMATION MTINFO;
MT_SP_OPTION MTOPTION;
MT_SP_WINDOW_STATE MTWS;
@ -17,18 +17,18 @@ CRITICAL_SECTION CS_CAPTION;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(true);
// 自プログラムのパス
// 自プログラムのパス
TCHAR drive[_MAX_DRIVE], dir[_MAX_DIR];
GetModuleFileName(NULL, MTOPTION.PATH, _MAX_PATH);
_tsplitpath_s(MTOPTION.PATH, drive, _MAX_DRIVE, dir, _MAX_DIR, NULL, 0, NULL, 0);
_stprintf_s(MTOPTION.PATH, _T("%s%s"), drive, dir);
// コマンドライン引数
// コマンドライン引数
if(args->Length > 0){
if(args[0] == "-s"){
MTINFO.SERVER_MODE = true;
@ -53,28 +53,28 @@ int main(array<System::String ^> ^args)
LoadMTOption();
CheckMTOption();
// 乱数の初期化&まぜまぜ
// 乱数の初期化&まぜまぜ
XorShift((UINT)DateTime::Now.Ticks);
XorShift();
XorShift();
XorShift();
// 音量(dB)をあらかじめ計算しておく
// 音量(dB)をあらかじめ計算しておく
MTINFO.VOLUME[0] = -10000;
for(int i = 1; i < 21; i++){
// -6dBで音量半減、DirectSound的には-600
// -6dBで音量半減、DirectSound的には-600
// 19.931568f = -6.0f / log10(0.5f);
MTINFO.VOLUME[i] = (INT32)(19.931568f*log10((float)(i*5)/100.0f)*100.0f);
}
InitializeCriticalSection(&CS_CAPTION);
// 未処理の例外をキャッチ
// 未処理の例外をキャッチ
Application::ThreadException += gcnew ThreadExceptionEventHandler(ApplicationThreadException);
Threading::Thread::GetDomain()->UnhandledException += gcnew UnhandledExceptionEventHandler(ApplicationUnhandledException);
// メイン ウィンドウを作成して、実行します
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew MainForm());
DeleteCriticalSection(&CS_CAPTION);

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="shift_jis"?>
<?xml version="1.0" encoding="shift_jis"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
@ -193,7 +193,7 @@
</References>
<Files>
<Filter
Name="ソース ファイル"
Name="ソース ファイル"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
@ -235,7 +235,7 @@
</File>
</Filter>
<Filter
Name="ヘッダー ファイル"
Name="ヘッダー ファイル"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
@ -274,7 +274,7 @@
</File>
</Filter>
<Filter
Name="リソース ファイル"
Name="リソース ファイル"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "OptionForm.h"
#include "MainForm.h"
@ -10,16 +10,16 @@ void OptionForm::SaveOption(bool apply){
try{
FileVersionInfo^ info = FileVersionInfo::GetVersionInfo(textBoxGameExe->Text);
if(info->FileDescription != "格闘ツクール2nd." && info->FileDescription != "2D格闘ツクール95"){
if(info->FileDescription != "格闘ツクール2nd." && info->FileDescription != "2D格闘ツクール95"){
throw gcnew Exception;
}
}
catch(Exception^){
textBoxGameExe->Text = gcnew String("格闘ツクールの実行ファイルではありません");
textBoxGameExe->Text = gcnew String("格闘ツクールの実行ファイルではありません");
}
IntPtr mp;
// パス
// パス
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(textBoxGameExe->Text);
_tcscpy_s(MTOPTION.GAME_EXE, static_cast<PTCHAR>(mp.ToPointer()));
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
@ -73,7 +73,7 @@ void OptionForm::SaveOption(bool apply){
MTOPTION.SHOW_GAME_OPTION = checkBoxShowGameOption->Checked;
MTOPTION.SHOW_RESULT = checkBoxShowResult->Checked;
// コメント
// コメント
if(textBoxComment->Text != gcnew String(MTOPTION.COMMENT)){
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(textBoxComment->Text);
_tcscpy_s(MTOPTION.COMMENT, static_cast<PTCHAR>(mp.ToPointer()));
@ -82,7 +82,7 @@ void OptionForm::SaveOption(bool apply){
parent->ChangeComment(textBoxComment->Text);
}
// ゲーム
// ゲーム
MTOPTION.MAX_STAGE = (UINT)numericUpDownMaxStage->Value;
MTOPTION.STAGE_SELECT = (UINT)numericUpDownStageSelect->Value;
MTOPTION.ROUND = (UINT)numericUpDownRound->Value;
@ -109,11 +109,11 @@ void OptionForm::SaveOption(bool apply){
MTOPTION.REPLAY_VERSION = 1;
}
// 当たり判定
// 当たり判定
if(MTOPTION.HIT_JUDGE != checkBoxHitJudge->Checked){
MTOPTION.HIT_JUDGE = checkBoxHitJudge->Checked;
// ゲーム起動中なら即時変更
// ゲーム起動中なら即時変更
if(MTINFO.INITIALIZED && MTINFO.PROCESS != NULL){
DWORD b = MTOPTION.HIT_JUDGE;
@ -126,13 +126,13 @@ void OptionForm::SaveOption(bool apply){
}
}
// 詳細設定
// 発言でウィンドウを点滅
// 詳細設定
// 発言でウィンドウを点滅
MTOPTION.TALK_FLASH = checkBoxTalkFlash->Checked;
// 名前が呼ばれたらウィンドウを点滅
// 名前が呼ばれたらウィンドウを点滅
MTOPTION.NAME_FLASH = checkBoxNameFlash->Checked;
// 色
// 色
MTCOLOR.SERVER_NAME = buttonServerName->ForeColor.ToArgb();
MTCOLOR.HOST_NAME = buttonHostName->ForeColor.ToArgb();
MTCOLOR.CLIENT_NAME = buttonClientName->ForeColor.ToArgb();
@ -148,10 +148,10 @@ void OptionForm::SaveOption(bool apply){
MTCOLOR.COMMENT_BACK = buttonCommentBack->BackColor.ToArgb();
MTCOLOR.SECRET = buttonSecret->ForeColor.ToArgb();
// 色を反映させる
// 色を反映させる
parent->ResetColor();
// 値のチェック
// 値のチェック
CheckMTOption();
if(apply){
@ -173,35 +173,35 @@ void OptionForm::CloseOption(){
parent->ChangeProfileEnabled();
}
bool OptionForm::CheckTextProfileName(String^ buf){
// プロファイル名バリデーション
// プロファイル名バリデーション
String^ mes;
if(buf == gcnew String(MTOPTION.PROFILE)){
return true;
}
if(buf->Length == 0){
mes = "プロファイル名が空欄です。";
mes = "プロファイル名が空欄です。";
}
if(buf->Contains(",") || buf->Contains("[") || buf->Contains("]")){
mes = "プロファイル名に使用できない文字(, [ ])が含まれています。";
mes = "プロファイル名に使用できない文字(, [ ])が含まれています。";
}
for(int i=0; i < Profile::SystemSection->Length; i++){
if(buf == Profile::SystemSection[i]){
mes = "そのプロファイル名は使用できません。";
mes = "そのプロファイル名は使用できません。";
}
}
for(int i=0; i < Profile::ProfileList->Count; i++){
if(buf == Profile::ProfileList[i]){
mes = "そのプロファイル名は既に存在します。";
mes = "そのプロファイル名は既に存在します。";
}
}
if(mes != nullptr){
MessageBox::Show(mes, "プロファイル保存", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
MessageBox::Show(mes, "プロファイル保存", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
return true;
}
return false;
}
void OptionForm::DeleteProfile(String^ buf){
// プロファイル削除
// プロファイル削除
TCHAR bufProfile[MAX_ARRAY];
IntPtr mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(buf);
_tcscpy_s(bufProfile, static_cast<PTCHAR>(mp.ToPointer()));
@ -211,7 +211,7 @@ void OptionForm::DeleteProfile(String^ buf){
SaveProfileOption();
}
void OptionForm::OverWriteProfile(String^ buf){
// 上書き保存
// 上書き保存
DeleteSection(MTOPTION.PROFILE);
IntPtr mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(buf);

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema

View file

@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "stdafx.h"
@ -13,13 +13,13 @@ using namespace System::Drawing;
namespace LilithPort {
/// <summary>
/// StartupForm の概要
/// StartupForm の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class StartupForm : public System::Windows::Forms::Form
{
@ -28,13 +28,13 @@ namespace LilithPort {
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//TODO: ここにコンストラクタ コードを追加します
//
}
protected:
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
~StartupForm()
{
@ -69,14 +69,14 @@ namespace LilithPort {
private: System::Windows::Forms::RichTextBox^ textBoxWelcome;
private:
/// <summary>
/// 必要なデザイナ変数です。
/// 必要なデザイナ変数です。
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
void InitializeComponent(void)
{
@ -154,7 +154,7 @@ namespace LilithPort {
this->labelServerName->Name = L"labelServerName";
this->labelServerName->Size = System::Drawing::Size(49, 12);
this->labelServerName->TabIndex = 0;
this->labelServerName->Text = L"サーバ名:";
this->labelServerName->Text = L"サーバ名:";
//
// textBoxIP
//
@ -170,7 +170,7 @@ namespace LilithPort {
this->labelOpenPort->Name = L"labelOpenPort";
this->labelOpenPort->Size = System::Drawing::Size(59, 12);
this->labelOpenPort->TabIndex = 0;
this->labelOpenPort->Text = L"待受ポート:";
this->labelOpenPort->Text = L"待受ポート:";
//
// numericUpDownOpenPort
//
@ -188,7 +188,7 @@ namespace LilithPort {
this->buttonOK->Name = L"buttonOK";
this->buttonOK->Size = System::Drawing::Size(58, 24);
this->buttonOK->TabIndex = 6;
this->buttonOK->Text = L"起動";
this->buttonOK->Text = L"起動";
this->buttonOK->UseVisualStyleBackColor = true;
this->buttonOK->Click += gcnew System::EventHandler(this, &StartupForm::buttonOK_Click);
//
@ -199,7 +199,7 @@ namespace LilithPort {
this->buttonCancel->Name = L"buttonCancel";
this->buttonCancel->Size = System::Drawing::Size(57, 24);
this->buttonCancel->TabIndex = 7;
this->buttonCancel->Text = L"閉じる";
this->buttonCancel->Text = L"閉じる";
this->buttonCancel->UseVisualStyleBackColor = true;
this->buttonCancel->Click += gcnew System::EventHandler(this, &StartupForm::buttonCancel_Click);
//
@ -217,7 +217,7 @@ namespace LilithPort {
this->labelComment->Name = L"labelComment";
this->labelComment->Size = System::Drawing::Size(40, 12);
this->labelComment->TabIndex = 4;
this->labelComment->Text = L"コメント:";
this->labelComment->Text = L"コメント:";
//
// textBoxName
//
@ -233,7 +233,7 @@ namespace LilithPort {
this->labelName->Name = L"labelName";
this->labelName->Size = System::Drawing::Size(61, 12);
this->labelName->TabIndex = 0;
this->labelName->Text = L"ニックネーム:";
this->labelName->Text = L"ニックネーム:";
//
// numericUpDownPort
//
@ -261,7 +261,7 @@ namespace LilithPort {
this->labelMaxConnection->Name = L"labelMaxConnection";
this->labelMaxConnection->Size = System::Drawing::Size(79, 12);
this->labelMaxConnection->TabIndex = 0;
this->labelMaxConnection->Text = L"最大接続者数:";
this->labelMaxConnection->Text = L"最大接続者数:";
//
// groupBoxStartMode
//
@ -279,7 +279,7 @@ namespace LilithPort {
this->groupBoxStartMode->Size = System::Drawing::Size(194, 115);
this->groupBoxStartMode->TabIndex = 8;
this->groupBoxStartMode->TabStop = false;
this->groupBoxStartMode->Text = L"起動モード";
this->groupBoxStartMode->Text = L"起動モード";
//
// textBoxServerName
//
@ -299,7 +299,7 @@ namespace LilithPort {
this->groupBoxConnection->Size = System::Drawing::Size(194, 66);
this->groupBoxConnection->TabIndex = 9;
this->groupBoxConnection->TabStop = false;
this->groupBoxConnection->Text = L"接続先";
this->groupBoxConnection->Text = L"接続先";
//
// labelAccessPort
//
@ -308,7 +308,7 @@ namespace LilithPort {
this->labelAccessPort->Name = L"labelAccessPort";
this->labelAccessPort->Size = System::Drawing::Size(71, 12);
this->labelAccessPort->TabIndex = 5;
this->labelAccessPort->Text = L"接続先ポート:";
this->labelAccessPort->Text = L"接続先ポート:";
//
// labelIP
//
@ -317,7 +317,7 @@ namespace LilithPort {
this->labelIP->Name = L"labelIP";
this->labelIP->Size = System::Drawing::Size(43, 12);
this->labelIP->TabIndex = 3;
this->labelIP->Text = L"アドレス:";
this->labelIP->Text = L"アドレス:";
//
// groupBoxProfile
//
@ -330,7 +330,7 @@ namespace LilithPort {
this->groupBoxProfile->Size = System::Drawing::Size(183, 67);
this->groupBoxProfile->TabIndex = 10;
this->groupBoxProfile->TabStop = false;
this->groupBoxProfile->Text = L"プロフィール";
this->groupBoxProfile->Text = L"プロフィール";
//
// groupBoxWelcome
//
@ -340,7 +340,7 @@ namespace LilithPort {
this->groupBoxWelcome->Size = System::Drawing::Size(183, 113);
this->groupBoxWelcome->TabIndex = 11;
this->groupBoxWelcome->TabStop = false;
this->groupBoxWelcome->Text = L"サーバメッセージ";
this->groupBoxWelcome->Text = L"サーバメッセージ";
//
// textBoxWelcome
//
@ -371,7 +371,7 @@ namespace LilithPort {
this->Name = L"StartupForm";
this->ShowInTaskbar = false;
this->StartPosition = System::Windows::Forms::FormStartPosition::CenterParent;
this->Text = L"スタートアップ";
this->Text = L"スタートアップ";
this->Load += gcnew System::EventHandler(this, &StartupForm::StartupForm_Load);
this->Shown += gcnew System::EventHandler(this, &StartupForm::StartupForm_Shown);
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDownOpenPort))->EndInit();
@ -439,9 +439,9 @@ namespace LilithPort {
if(radioButtonServer->Checked){
MTOPTION.CONNECTION_TYPE = CT_SERVER;
// サーバ名チェック
// サーバ名チェック
if(textBoxServerName->Text->Length == 0){
MessageBox::Show("サーバ名を入力してください。\n\nSERVERモードで起動するには、\nサーバ名を入力する必要があります。", "SERVERモードエラー", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
MessageBox::Show("サーバ名を入力してください。\n\nSERVERモードで起動するには、\nサーバ名を入力する必要があります。", "SERVERモードエラー", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
return;
}
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(textBoxServerName->Text);
@ -449,7 +449,7 @@ namespace LilithPort {
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
p2 = _tcschr(p1, _T(','));
if (p2 != NULL){
MessageBox::Show("サーバ名に使用できない文字(,)があります。\nサーバ名を確認してください。", "SERVERモードエラー", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
MessageBox::Show("サーバ名に使用できない文字(,)があります。\nサーバ名を確認してください。", "SERVERモードエラー", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
return;
}
}
@ -464,22 +464,22 @@ namespace LilithPort {
}
// サーバ名
// サーバ名
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(textBoxServerName->Text);
_tcscpy_s(MTOPTION.SERVER_NAME, static_cast<PTCHAR>(mp.ToPointer()));
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
// IPチェック
// IPチェック
if(MTOPTION.CONNECTION_TYPE == CT_HOST || MTOPTION.CONNECTION_TYPE == CT_CLIENT) {
if(textBoxIP->Text->Length == 0){
MessageBox::Show("接続先アドレスを入力してください。\n\nHOST, CLIENTモードで起動するには、\n接続先のアドレスを入力する必要があります。", "HOST, CLIENTモードエラー", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
MessageBox::Show("接続先アドレスを入力してください。\n\nHOST, CLIENTモードで起動するには、\n接続先のアドレスを入力する必要があります。", "HOST, CLIENTモードエラー", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
return;
}
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(textBoxIP->Text);
_tcscpy_s(p1, static_cast<PTCHAR>(mp.ToPointer()));
p2 = _tcschr(p1, _T(','));
if (p2 != NULL){
MessageBox::Show("接続先アドレスに使用できない文字(,)があります。\n接続先アドレスを確認してください。", "HOST, CLIENTモードエラー", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
MessageBox::Show("接続先アドレスに使用できない文字(,)があります。\n接続先アドレスを確認してください。", "HOST, CLIENTモードエラー", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
return;
}
}
@ -488,12 +488,12 @@ namespace LilithPort {
_tcscpy_s(MTOPTION.CONNECTION_IP, static_cast<PTCHAR>(mp.ToPointer()));
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
// 名前チェック
// 名前チェック
if(textBoxName->Text->Length == 0){
textBoxName->Text = gcnew String(MTOPTION.NAME);
if(textBoxName->Text->Length == 0){
textBoxName->Text = gcnew String("名無しさん");
textBoxName->Text = gcnew String("名無しさん");
}
}

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema

Binary file not shown.

View file

@ -1,13 +1,13 @@
// stdafx.cpp : 標準インクルード LilithPort.pch のみを
// 含むソース ファイルは、プリコンパイル済みヘッダーになります。
// stdafx.obj にはプリコンパイル済み型情報が含まれます。
// stdafx.cpp : 標準インクルード LilithPort.pch のみを
// 含むソース ファイルは、プリコンパイル済みヘッダーになります。
// stdafx.obj にはプリコンパイル済み型情報が含まれます。
#include "stdafx.h"
extern CRITICAL_SECTION CS_CAPTION;
using namespace System::Collections;
// 落ちる前にエラー内容をロギング
// 落ちる前にエラー内容をロギング
void WriteErrorLog(String^ text, String^ caption)
{
IO::StreamWriter^ sw = gcnew IO::StreamWriter(gcnew String(MTOPTION.PATH) + "error.log", true, Encoding::Default);
@ -28,33 +28,33 @@ void WriteErrorLog(String^ text, String^ caption)
}
}
// 例外調査
// 例外調査
void ApplicationThreadException(Object^ sender, Threading::ThreadExceptionEventArgs^ e)
{
WriteErrorLog(e->Exception->ToString(), "ThreadException");
MTINFO.ERRORED = true;
if(!MTINFO.SERVER_MODE){
MessageBox::Show("突然ですがLilithPort終了のお知らせです。", "緊急事態発生");
MessageBox::Show("突然ですがLilithPort終了のお知らせです。", "緊急事態発生");
}
Application::Exit();
}
// 主にコンソールアプリの例外
// 主にコンソールアプリの例外
void ApplicationUnhandledException(Object^ sender, UnhandledExceptionEventArgs^ e)
{
WriteErrorLog(safe_cast<Exception^>(e->ExceptionObject)->ToString(), "UnhandledException");
MTINFO.ERRORED = true;
if(!MTINFO.SERVER_MODE){
MessageBox::Show("突然ですがLilithPort終了のお知らせです。", "例外が飛んできました");
MessageBox::Show("突然ですがLilithPort終了のお知らせです。", "例外が飛んできました");
}
Application::Exit();
}
// iniの読み込み
// iniの読み込み
void LoadMTOption()
{
IntPtr mp;
@ -63,7 +63,7 @@ void LoadMTOption()
TCHAR* iniSection = _T("LilithPort");
UINT iniVersion;
_stprintf_s(ini, _T("%sLilithPort.ini"), MTOPTION.PATH);
// stdafx.hに記述
// stdafx.hに記述
TCHAR iniSystem[MAX_NAME], iniState[MAX_NAME], iniColor[MAX_NAME];
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(Profile::SystemSection[0]);
@ -74,8 +74,8 @@ void LoadMTOption()
_tcscpy_s(iniColor, static_cast<PTCHAR>(mp.ToPointer()));
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
// グローバルセクション読み込み
// 1.04以下互換用
// グローバルセクション読み込み
// 1.04以下互換用
iniVersion = GetPrivateProfileInt(iniSystem, _T("iniVersion"), 0, ini);
if(iniVersion == 0){
_tcscpy_s(iniSystem, iniSection);
@ -96,7 +96,7 @@ void LoadMTOption()
GetPrivateProfileString(iniSystem, _T("SeekSound"), _T("seek.wav"), MTOPTION.SEEK_SOUND, _MAX_PATH, ini);
GetPrivateProfileString(iniSystem, _T("KeywordSound"), _T("name.wav"), MTOPTION.KEYWORD_SOUND, _MAX_PATH, ini);
GetPrivateProfileString(iniSystem, _T("Keyword"), _T(""), MTOPTION.KEYWORD, MAX_KEYWORD, ini);
GetPrivateProfileString(iniSystem, _T("Name"), _T("名無しさん"), MTOPTION.NAME, MAX_NAME, ini);
GetPrivateProfileString(iniSystem, _T("Name"), _T("名無しさん"), MTOPTION.NAME, MAX_NAME, ini);
GetPrivateProfileString(iniSystem, _T("Comment"), _T(""), MTOPTION.COMMENT, MAX_NAME, ini);
MTOPTION.CONNECTION_TYPE = GetPrivateProfileInt(iniSystem, _T("ConnectType"), 0, ini);
MTOPTION.PORT = GetPrivateProfileInt(iniSystem, _T("Port"), 7500, ini);
@ -125,7 +125,7 @@ void LoadMTOption()
MTOPTION.SHOW_GAME_OPTION = GetPrivateProfileInt(iniSystem, _T("ShowGameOption"), 1, ini) == 1 ? true : false;
MTOPTION.SHOW_RESULT = GetPrivateProfileInt(iniSystem, _T("ShowResult"), 1, ini) == 1 ? true : false;
// ブックマーク読み込み
// ブックマーク読み込み
MTOPTION.BOOKMARK_COUNT = 0;
GetPrivateProfileString(iniSystem, _T("BookMarkServerName"), _T(""), tmpName, MAX_TITLE, ini);
GetPrivateProfileString(iniSystem, _T("BookMarkConnectIP"), _T(""), tmpIP, MAX_TITLE, ini);
@ -156,7 +156,7 @@ void LoadMTOption()
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(BookMarkIPList[i]);
_tcscpy_s(MTOPTION.BOOKMARK_CONNECTION_IP[i], static_cast<PTCHAR>(mp.ToPointer()));
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
// 1.04以下互換用
// 1.04以下互換用
if(BookMarkTypeList != nullptr && BookMarkPortList != nullptr){
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(BookMarkTypeList[i]);
_tcscpy_s(MTOPTION.BOOKMARK_CONNECTION_TYPE[i], static_cast<PTCHAR>(mp.ToPointer()));
@ -164,7 +164,7 @@ void LoadMTOption()
_tcscpy_s(MTOPTION.BOOKMARK_PORT[i], static_cast<PTCHAR>(mp.ToPointer()));
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
}else{
// 手動初期化
// 手動初期化
_tcscpy_s(MTOPTION.BOOKMARK_CONNECTION_TYPE[i], _T("2"));
_tcscpy_s(MTOPTION.BOOKMARK_PORT[i], _T("7500"));
}
@ -172,17 +172,17 @@ void LoadMTOption()
}
}
catch(Exception^){
MessageBox::Show("ブックマーク情報の読み込みに失敗しました。\n", "ブックマーク読み込み", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
MessageBox::Show("ブックマーク情報の読み込みに失敗しました。\n", "ブックマーク読み込み", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
}
// プロファイルリスト読み込み
// プロファイルリスト読み込み
Profile::ProfileList->Clear();
if(_tcslen(MTOPTION.PROFILE_LIST) > 0){
String^ tmpList = gcnew String(MTOPTION.PROFILE_LIST);
array<String^>^ tmpProfile = tmpList->Split(',');
for(int i=0; i < tmpProfile->Length; i++){
Profile::ProfileList->Add(tmpProfile[i]);
// デフォルトプロファイル
// デフォルトプロファイル
if(tmpProfile[i] == gcnew String(MTOPTION.PROFILE)){
MTOPTION.PROFILE_INDEX = i;
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(tmpProfile[i]);
@ -192,13 +192,13 @@ void LoadMTOption()
}
}
}else{
// 初期化
// 初期化
_tcsncpy_s(MTOPTION.PROFILE_LIST, _countof(MTOPTION.PROFILE_LIST), iniSection, MAX_PROFILE);
Profile::ProfileList->Add(gcnew String(iniSection));
MTOPTION.PROFILE_INDEX = 0;
}
// プロファイルセクション読み込み
// プロファイルセクション読み込み
GetPrivateProfileString(iniSection, _T("GameExe"), _T("game.exe"), MTOPTION.GAME_EXE, _MAX_PATH, ini);
GetPrivateProfileString(iniSection, _T("ReplayFolder"), _T("Replay"), MTOPTION.REPLAY_FOLDER, _MAX_PATH, ini);
MTOPTION.MAX_STAGE = GetPrivateProfileInt(iniSection, _T("MaxStage"), 1, ini);
@ -219,7 +219,7 @@ void LoadMTOption()
MTOPTION.INTERVAL = GetPrivateProfileInt(iniSection, _T("Interval"), 1, ini);
MTOPTION.REPLAY_VERSION = GetPrivateProfileInt(iniSection, _T("ReplayVersion"), 2, ini);
// ウィンドウ位置読み込み
// ウィンドウ位置読み込み
MTWS.LEFT = GetPrivateProfileInt(iniState, _T("Left"), 0, ini);
MTWS.TOP = GetPrivateProfileInt(iniState, _T("Top"), 0, ini);
MTWS.WIDTH = GetPrivateProfileInt(iniState, _T("Width"), 0, ini);
@ -228,7 +228,7 @@ void LoadMTOption()
MTWS.DIALOG_LEFT = GetPrivateProfileInt(iniState, _T("DialogLeft"), 0, ini);
MTWS.DIALOG_TOP = GetPrivateProfileInt(iniState, _T("DialogTop"), 0, ini);
// 色読み込み
// 色読み込み
MTCOLOR.SERVER_NAME = GetPrivateProfileInt(iniColor, _T("ServerName"), Color::ForestGreen.ToArgb(), ini);
MTCOLOR.HOST_NAME = GetPrivateProfileInt(iniColor, _T("HostName"), Color::MediumBlue.ToArgb(), ini);
MTCOLOR.CLIENT_NAME = GetPrivateProfileInt(iniColor, _T("ClientName"), Color::Black.ToArgb(), ini);
@ -243,7 +243,7 @@ void LoadMTOption()
MTCOLOR.COMMENT_BACK = GetPrivateProfileInt(iniColor, _T("CommentBack"), Color::MistyRose.ToArgb(), ini);
MTCOLOR.SECRET = GetPrivateProfileInt(iniColor, _T("Secret"), Color::HotPink.ToArgb(), ini);
// Welcomeのタブを改行に
// Welcomeのタブを改行に
int len = _tcslen(MTOPTION.WELCOME);
for(int i = 0; i < len; i++){
if(MTOPTION.WELCOME[i] == _T('\t')){
@ -251,17 +251,17 @@ void LoadMTOption()
}
}
// 1.04以下互換用
// 1.04以下互換用
if(iniVersion == 0){
DeleteSection(iniSection);
SaveMTOption();
}
}
// iniに書き出し
// iniに書き出し
void SaveMTOption()
{
// 改行をタブに置換
// 改行をタブに置換
int len = _tcslen(MTOPTION.WELCOME);
for(int i = 0; i < len; i++){
if(MTOPTION.WELCOME[i] == _T('\n')){
@ -277,7 +277,7 @@ void SaveMTOption()
TCHAR tmpStrPort[MAX_TITLE] = _T("");
TCHAR* iniSection = MTOPTION.PROFILE;
// stdafx.hに記述
// stdafx.hに記述
TCHAR iniSystem[MAX_NAME], iniState[MAX_NAME], iniColor[MAX_NAME];
mp = Runtime::InteropServices::Marshal::StringToHGlobalAuto(Profile::SystemSection[0]);
_tcscpy_s(iniSystem, static_cast<PTCHAR>(mp.ToPointer()));
@ -289,7 +289,7 @@ void SaveMTOption()
_stprintf_s(ini, _T("%sLilithPort.ini"), MTOPTION.PATH);
// グローバルセクション書き込み
// グローバルセクション書き込み
_itot_s(LP_VERSION, buf, 10);
WritePrivateProfileString(iniSystem, _T("iniVersion"), buf, ini);
_itot_s(MTOPTION.CONNECTION_TYPE, buf, 10);
@ -359,7 +359,7 @@ void SaveMTOption()
_itot_s(MTOPTION.SHOW_RESULT, buf, 10);
WritePrivateProfileString(iniSystem, _T("ShowResult"), buf, ini);
// ブックマーク書き込み
// ブックマーク書き込み
if(MTOPTION.BOOKMARK_COUNT > 0) {
for(UINT i=0;i < MTOPTION.BOOKMARK_COUNT;i++) {
if(gcnew String(MTOPTION.BOOKMARK_SERVER_NAME[i]) != ""){
@ -375,7 +375,7 @@ void SaveMTOption()
WritePrivateProfileString(iniSystem, _T("BookMarkPort"), tmpStrPort, ini);
}
// プロファイルリスト書き込み
// プロファイルリスト書き込み
WritePrivateProfileString(iniSystem, _T("DefaultProfile"), MTOPTION.PROFILE, ini);
String^ bufProfileList;
for(int i=0; i < Profile::ProfileList->Count; i++){
@ -390,7 +390,7 @@ void SaveMTOption()
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
WritePrivateProfileString(iniSystem, _T("ProfileList"), MTOPTION.PROFILE_LIST, ini);
// プロファイルセクション書き込み
// プロファイルセクション書き込み
WritePrivateProfileString(iniSection, _T("GameExe"), MTOPTION.GAME_EXE, ini);
WritePrivateProfileString(iniSection, _T("ReplayFolder"), MTOPTION.REPLAY_FOLDER, ini);
_itot_s(MTOPTION.MAX_STAGE, buf, 10);
@ -428,7 +428,7 @@ void SaveMTOption()
_itot_s(MTOPTION.REPLAY_VERSION, buf, 10);
WritePrivateProfileString(iniSection, _T("ReplayVersion"), buf, ini);
// ウィンドウ位置書き込み
// ウィンドウ位置書き込み
_itot_s(MTWS.LEFT, buf, 10);
WritePrivateProfileString(iniState, _T("Left"), buf, ini);
_itot_s(MTWS.TOP, buf, 10);
@ -444,7 +444,7 @@ void SaveMTOption()
_itot_s(MTWS.DIALOG_TOP, buf, 10);
WritePrivateProfileString(iniState, _T("DialogTop"), buf, ini);
// 色書き込み
// 色書き込み
_ultot_s(MTCOLOR.SERVER_NAME, buf, 10);
WritePrivateProfileString(iniColor, _T("ServerName"), buf, ini);
_ultot_s(MTCOLOR.HOST_NAME, buf, 10);
@ -472,13 +472,13 @@ void SaveMTOption()
_ultot_s(MTCOLOR.SECRET, buf, 10);
WritePrivateProfileString(iniColor, _T("Secret"), buf, ini);
}
// プロファイルセクション削除
// プロファイルセクション削除
void DeleteSection(TCHAR* obj){
TCHAR ini[_MAX_PATH];
_stprintf_s(ini, _T("%sLilithPort.ini"), MTOPTION.PATH);
WritePrivateProfileStruct(obj, NULL, NULL, 0, ini);
}
// プロファイル関連のみ書き出し
// プロファイル関連のみ書き出し
void SaveProfileOption(){
TCHAR ini[_MAX_PATH];
_stprintf_s(ini, _T("%sLilithPort.ini"), MTOPTION.PATH);
@ -503,11 +503,11 @@ void SaveProfileOption(){
Runtime::InteropServices::Marshal::FreeHGlobal(mp);
}
// 設定値を軽くチェック
// 設定値を軽くチェック
void CheckMTOption()
{
TCHAR buf[_MAX_PATH];
// 相対パス -> 絶対パス
// 相対パス -> 絶対パス
_tchdir(MTOPTION.PATH);
_tsplitpath_s(MTOPTION.GAME_EXE, NULL, 0, NULL, 0, NULL, 0, buf, _MAX_EXT);
@ -550,7 +550,7 @@ void CheckMTOption()
_tfullpath(MTOPTION.KEYWORD_SOUND, buf, _MAX_PATH);
}
// 絶対パスに変換されるとドライブ名が小文字になるのが気になっていけない
// 絶対パスに変換されるとドライブ名が小文字になるのが気になっていけない
MTOPTION.GAME_EXE[0] = _totupper(MTOPTION.GAME_EXE[0]);
MTOPTION.REPLAY_FOLDER[0] = _totupper(MTOPTION.REPLAY_FOLDER[0]);
MTOPTION.VS_SOUND[0] = _totupper(MTOPTION.VS_SOUND[0]);
@ -562,7 +562,7 @@ void CheckMTOption()
MTOPTION.KEYWORD_SOUND[0] = _totupper(MTOPTION.KEYWORD_SOUND[0]);
}
// 対戦中のタイトルバー
// 対戦中のタイトルバー
void SetCaption()
{
EnterCriticalSection(&CS_CAPTION);
@ -579,9 +579,9 @@ void SetCaption()
}
if(MTINFO.HWND != NULL){
// 最前面表示
// 最前面表示
if(MTINFO.SHOW_TOP == false){
// 格ツク95ウィンドウサイズ変更
// 格ツク95ウィンドウサイズ変更
if(MTOPTION.CHANGE_WINDOW_SIZE && MTINFO.KGT2K == false){
RECT rc;
SetRect(&rc, 0, 0, 640, 480);
@ -597,7 +597,7 @@ void SetCaption()
GetWindowText(MTINFO.HWND, MTINFO.ORIGINAL_TITLE, sizeof(MTINFO.ORIGINAL_TITLE));
if(_tcslen(MTINFO.ORIGINAL_TITLE) == 0 || _tcscmp(MTINFO.ORIGINAL_TITLE, _T("2D格闘ツクール95")) == 0){
if(_tcslen(MTINFO.ORIGINAL_TITLE) == 0 || _tcscmp(MTINFO.ORIGINAL_TITLE, _T("2D格闘ツクール95")) == 0){
MTINFO.HWND = NULL;
}
}
@ -606,7 +606,7 @@ void SetCaption()
LeaveCriticalSection(&CS_CAPTION);
}
// 暗号復号用乱数
// 暗号復号用乱数
UINT CipherRand(UINT32 seed)
{
static UINT32 a[4] = {1812433254, 3713160357, 3109174145, 64984499};
@ -626,7 +626,7 @@ UINT CipherRand(UINT32 seed)
return 0;
}
// 通常用
// 通常用
UINT XorShift(UINT32 seed)
{
static UINT32 a[4] = {1812433254, 3713160357, 3109174145, 64984499};
@ -646,7 +646,7 @@ UINT XorShift(UINT32 seed)
return 0;
}
// ランダムステージ用
// ランダムステージ用
UINT RandomStage(UINT32 seed)
{
static UINT32 a[4] = {1812433254, 3713160357, 3109174145, 64984499};
@ -667,7 +667,7 @@ UINT RandomStage(UINT32 seed)
}
// IPのエンコード
// IPのエンコード
String^ EncryptionIP(String^ ip)
{
String ^ipString;
@ -675,10 +675,10 @@ String^ EncryptionIP(String^ ip)
ipString = Int64(Net::IPAddress::Parse(ip)->Address).ToString();
}
catch (ArgumentNullException^) {
return "変換失敗。IPぬるぽエラー";
return "変換失敗。IPぬるぽエラー";
}
catch (FormatException^) {
return "変換失敗。IP形式エラー";
return "変換失敗。IP形式エラー";
}
array<Byte> ^binaryData = gcnew array<Byte>(11);
@ -689,28 +689,28 @@ String^ EncryptionIP(String^ ip)
ipBase64 = Convert::ToBase64String(binaryData);
}
catch (ArgumentNullException^) {
return "変換失敗。Base64ぬるぽエラー";
return "変換失敗。Base64ぬるぽエラー";
}
catch (FormatException^) {
return "変換失敗。Base64形式エラー";
return "変換失敗。Base64形式エラー";
}
return ipBase64;
}
// IPの変換(MTSPアドレス)
// IPの変換(MTSPアドレス)
String^ MTEncryptionIP(String^ ip)
{
String^ result, ^buf, ^part;
String^ dic = "そぞただちぢっつづてでとどなにぬねのはばabcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYGぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜ";
String^ dic = "そぞただちぢっつづてでとどなにぬねのはばabcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYGぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜ";
try{
// 10桁+シード
// 10桁+シード
Int64^ num = ((IPAddress::Parse(ip)->Address + 0xa68c8b5) ^ 0xe5c06811);
ip = num->ToString();
if((ip->Length % 2) == 1){
ip = String::Concat("0", ip);
}
// 5桁にしよう
// 5桁にしよう
for(int i=0; i < ip->Length; i+=2){
part = String::Concat(ip->default[i], ip->default[i+1]);
buf = String::Concat(dic->default[Convert::ToInt32(part)]);
@ -719,11 +719,11 @@ String^ MTEncryptionIP(String^ ip)
return result;
}
catch(Exception^){
return "IPアドレスのMTSP変換に失敗しました。";
return "IPアドレスのMTSP変換に失敗しました。";
}
}
// IPのデコード
// IPのデコード
_int64 DecryptionIP(String^ cipher_ip, bool enc)
{
array<Byte> ^binaryData;
@ -743,7 +743,7 @@ _int64 DecryptionIP(String^ cipher_ip, bool enc)
if(enc){
return Convert::ToInt64(Encoding::ASCII->GetString(binaryData));
}else{
// 1.02, 1.03互換用
// 1.02, 1.03互換用
return Convert::ToInt64(Encoding::Unicode->GetString(binaryData));
}
}
@ -752,8 +752,8 @@ _int64 MTDecryptionIP(String^ cipher_ip)
String^ buf;
TCHAR part;
int index;
String^ dic = "そぞただちぢっつづてでとどなにぬねのはばabcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYGぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜ";
String^ dic = "そぞただちぢっつづてでとどなにぬねのはばabcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYGぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜ";
try{
for(int i=0; i < cipher_ip->Length; i++){

View file

@ -1,10 +1,10 @@
// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
#pragma once
#pragma warning(disable: 4100)
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
@ -44,7 +44,7 @@ UINT CipherRand(UINT32 seed = 0);
UINT XorShift(UINT32 seed = 0);
UINT RandomStage(UINT32 seed = 0);
// メンバー情報
// メンバー情報
public ref struct MemberInfo
{
IPEndPoint^ IP_EP;
@ -57,19 +57,19 @@ public ref struct MemberInfo
DWORD RESPONSE;
};
// バックアップ
// バックアップ
public ref struct MemberInfoBackUp
{
IPEndPoint^ IP_EP;
UINT16 ID;
};
// プロファイルリスト
// プロファイルリスト
public ref class Profile
{
public:
static Generic::List<String^>^ ProfileList = gcnew Generic::List<String^>;
// バリデーション用
// バリデーション用
static array<String^>^ SystemSection = gcnew array<String^>{"System", "State", "Color"};
};
@ -195,11 +195,11 @@ const UINT VOLUME_SET_2_95 = 0x0040203F;
const BYTE VOLUME_SET_2_95_CODE[] = {0x50,0x8B,0x08,0xCC,0x52,0x50,0xFF,0x51,0x3C,0xE9,0x7B,0xFF,0xFF,0xFF,0x50,0x8B,
0x08,0xCC,0x52,0x50,0xFF,0x51,0x3C,0xE9,0x7A,0xFF,0xFF,0xFF};
// バージョン情報
// LilithPort 1.03以上互換, それ以前はなし
// バージョン情報
// LilithPort 1.03以上互換, それ以前はなし
const UINT LP_VERSION = 107;
// 設定項目
// 設定項目
const UINT MAX_NAME = 32;
const UINT MAX_ARRAY = 64;
const UINT MAX_ID = 0x3FFF;
@ -212,7 +212,7 @@ const UINT MAX_PROFILE = 2048;
const BYTE TYMT_VERSION = 6;
const UINT TIME_OUT = 3000;
// チームプレイ人数
// チームプレイ人数
const UINT MAX_TEAM_ROUND = 4;
@ -403,13 +403,13 @@ typedef enum {
PH_PING,
PH_PONG,
PH_REQ_CONNECTION, // 1:protocol 1:name_l n:name 1:comment_l n:comment
PH_REQ_CONNECTION_H, // HOSTな接続要求
PH_REQ_CONNECTION_H, // HOSTな接続要求
PH_RES_CONNECTION, // 1:server_name_l n:server_name 2:ID 1:name_l n:name 1:comment_l n:comment 1:state
PH_MESSAGE, // 2:ID 1:msg_l n:msg
PH_NOTICE, // 1:len n:notice
PH_REQ_LIST, // 2:ID 0で全員分
PH_RES_LIST, // 2:ID 1:name_l n:name 1:comment_l n:comment 1:state 4:IP 2:Port + 暗号
PH_NEW_MEMBER, // 上と同じ
PH_REQ_LIST, // 2:ID 0で全員分
PH_RES_LIST, // 2:ID 1:name_l n:name 1:comment_l n:comment 1:state 4:IP 2:Port + 暗号
PH_NEW_MEMBER, // 上と同じ
PH_QUIT, // 2:ID
PH_LOST, // 2:ID
PH_CHANGE_STATE, // 2:ID 1:STATE
@ -417,21 +417,21 @@ typedef enum {
PH_RES_STATE, // 2:ID 1:STATE
PH_CHANGE_COMMENT, // 2:ID 1:comment_l n:comment
PH_DICE, // 1:value
PH_REQ_VS, // 2:ID 4:実行ファイルのハッシュ
PH_REQ_VS, // 2:ID 4:実行ファイルのハッシュ
PH_RES_VS, // 1:state
PH_REQ_VS_PING, // 1:ID 5個バラでsend
PH_RES_VS_PONG, // 1秒間に4個以上受信で対戦開始
PH_REQ_VS_SETTING, // 1:delay localとhostで大きな値にあわせる
PH_REQ_VS_PING, // 1:ID 5個バラでsend
PH_RES_VS_PONG, // 1秒間に4個以上受信で対戦開始
PH_REQ_VS_SETTING, // 1:delay localとhostで大きな値にあわせる
PH_RES_VS_SETTING, // 1:delay 4:seed 1:max_stage 1:stage 1:round 1:timer
PH_VS_DATA, // 4:frame n:data 4*delay個分送信
PH_REQ_VS_DATA, // 4:frame パケット来てないので緊急要請
PH_VS_DATA, // 4:frame n:data 4*delay個分送信
PH_REQ_VS_DATA, // 4:frame パケット来てないので緊急要請
PH_RES_VS_DATA, // 4:frame 2:input
PH_VS_END,
PH_REQ_WATCH, // 2:ID
PH_RES_WATCH, // 1:state 2:P1ID 2:P2ID 4:seed 1:max_stage 1:stage 1:round 1:timer state = 0:観戦開始 1:観戦不可
PH_WATCH_DATA, // 4:frame 40:10フレーム分のデータ
PH_WATCH_END, // 2:ID 自分のと同じIDなら観戦終了、他のIDならリストから削除
PH_SECRET, // 1:type n:typeごとにいろいろ
PH_RES_WATCH, // 1:state 2:P1ID 2:P2ID 4:seed 1:max_stage 1:stage 1:round 1:timer state = 0:観戦開始 1:観戦不可
PH_WATCH_DATA, // 4:frame 40:10フレーム分のデータ
PH_WATCH_END, // 2:ID 自分のと同じIDなら観戦終了、他のIDならリストから削除
PH_SECRET, // 1:type n:typeごとにいろいろ
} MT_SP_PACKET_HEADER;
typedef enum {