Commit 42c400f5 authored by argon.sun's avatar argon.sun

recon

parent 1865f9a0
...@@ -512,8 +512,8 @@ void Game::DrawSpec() { ...@@ -512,8 +512,8 @@ void Game::DrawSpec() {
break; break;
} }
case 100: { case 100: {
driver->draw2DImage(imageManager.tHand[showcardcode & 0x3], position2di(615, showcarddif)); driver->draw2DImage(imageManager.tHand[(showcardcode >> 16) & 0x3], position2di(615, showcarddif));
driver->draw2DImage(imageManager.tHand[(showcardcode >> 16) & 0x3], position2di(615, 540 - showcarddif)); driver->draw2DImage(imageManager.tHand[showcardcode & 0x3], position2di(615, 540 - showcarddif));
float dy = -0.333333f * showcardp + 10; float dy = -0.333333f * showcardp + 10;
showcardp++; showcardp++;
if(showcardp < 30) if(showcardp < 30)
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "../ocgcore/field.h" #include "../ocgcore/field.h"
#include "../ocgcore/duel.h" #include "../ocgcore/duel.h"
#include "game.h" #include "game.h"
#include "replay.h"
namespace ygo { namespace ygo {
...@@ -54,7 +55,7 @@ void DuelClient::StopClient(bool is_exiting) { ...@@ -54,7 +55,7 @@ void DuelClient::StopClient(bool is_exiting) {
if(!is_closing) { if(!is_closing) {
} }
event_base_loopexit(client_base, NULL); event_base_loopbreak(client_base);
} }
void DuelClient::ClientRead(bufferevent* bev, void* ctx) { void DuelClient::ClientRead(bufferevent* bev, void* ctx) {
evbuffer* input = bufferevent_get_input(bev); evbuffer* input = bufferevent_get_input(bev);
...@@ -125,11 +126,23 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) { ...@@ -125,11 +126,23 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
else mainGame->env->addMessageBox(L"", dataManager.GetSysString(1402)); else mainGame->env->addMessageBox(L"", dataManager.GetSysString(1402));
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
} else { } else {
mainGame->gMutex.Lock();
mainGame->stMessage->setText(dataManager.GetSysString(1502));
mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true);
mainGame->gMutex.Unlock();
mainGame->PopupElement(mainGame->wMessage);
mainGame->localAction.Reset();
mainGame->localAction.Wait();
mainGame->CloseDuelWindow();
mainGame->dInfo.isStarted = false;
mainGame->device->setEventReceiver(&mainGame->menuHandler);
mainGame->ShowElement(mainGame->wLanWindow);
} }
} }
} }
event_base_loopexit(client_base, NULL); event_base_loopexit(client_base, 0);
} }
} }
int DuelClient::ClientThread(void* param) { int DuelClient::ClientThread(void* param) {
...@@ -157,25 +170,31 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -157,25 +170,31 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->btnJoinCancel->setEnabled(true); mainGame->btnJoinCancel->setEnabled(true);
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
if(pkt->code == 0) if(pkt->code == 0)
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1403)); mainGame->wMessage->setText(dataManager.GetSysString(1403));
else if(pkt->code == 1) else if(pkt->code == 1)
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1404)); mainGame->wMessage->setText(dataManager.GetSysString(1404));
else if(pkt->code == 2) else if(pkt->code == 2)
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1405)); mainGame->wMessage->setText(dataManager.GetSysString(1405));
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
event_base_loopexit(client_base, NULL); mainGame->PopupElement(mainGame->wMessage);
mainGame->localAction.Reset();
mainGame->localAction.Wait();
event_base_loopbreak(client_base);
break; break;
} }
case ERRMSG_DECKERROR: { case ERRMSG_DECKERROR: {
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
if(pkt->code == 1) if(pkt->code == 1)
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1406)); mainGame->wMessage->setText(dataManager.GetSysString(1406));
else { else {
wchar_t msgbuf[64]; wchar_t msgbuf[64];
myswprintf(msgbuf, dataManager.GetSysString(1407), dataManager.GetName(pkt->code)); myswprintf(msgbuf, dataManager.GetSysString(1407), dataManager.GetName(pkt->code));
mainGame->env->addMessageBox(L"", msgbuf); mainGame->wMessage->setText(msgbuf);
} }
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
mainGame->PopupElement(mainGame->wMessage);
mainGame->localAction.Reset();
mainGame->localAction.Wait();
break; break;
} }
} }
...@@ -191,7 +210,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -191,7 +210,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
} }
case STOC_HAND_RESULT: { case STOC_HAND_RESULT: {
STOC_HandResult* pkt = (STOC_HandResult*)pdata; STOC_HandResult* pkt = (STOC_HandResult*)pdata;
mainGame->showcardcode = pkt->res1 + (pkt->res2 << 16); mainGame->stHintMsg->setVisible(false);
mainGame->showcardcode = (pkt->res1 - 1) + ((pkt->res2 - 1) << 16);
mainGame->showcarddif = 50; mainGame->showcarddif = 50;
mainGame->showcardp = 0; mainGame->showcardp = 0;
mainGame->showcard = 100; mainGame->showcard = 100;
...@@ -278,25 +298,47 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -278,25 +298,47 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->dInfo.isStarted = true; mainGame->dInfo.isStarted = true;
mainGame->wCardImg->setVisible(true); mainGame->wCardImg->setVisible(true);
mainGame->wInfos->setVisible(true); mainGame->wInfos->setVisible(true);
mainGame->wPhase->setVisible(true);
mainGame->device->setEventReceiver(&mainGame->dField); mainGame->device->setEventReceiver(&mainGame->dField);
if(selftype != 1) { if(selftype != 1) {
BufferIO::CopyWStr(mainGame->stHostSingleDuelist[0]->getText(), mainGame->dInfo.hostname, 20); BufferIO::CopyWStr(mainGame->stHostSingleDuelist[0]->getText(), mainGame->dInfo.hostname, 20);
BufferIO::CopyWStr(mainGame->stHostSingleDuelist[1]->getText(), mainGame->dInfo.hostname, 20); BufferIO::CopyWStr(mainGame->stHostSingleDuelist[1]->getText(), mainGame->dInfo.clientname, 20);
} else { } else {
BufferIO::CopyWStr(mainGame->stHostSingleDuelist[1]->getText(), mainGame->dInfo.hostname, 20); BufferIO::CopyWStr(mainGame->stHostSingleDuelist[1]->getText(), mainGame->dInfo.hostname, 20);
BufferIO::CopyWStr(mainGame->stHostSingleDuelist[0]->getText(), mainGame->dInfo.hostname, 20); BufferIO::CopyWStr(mainGame->stHostSingleDuelist[0]->getText(), mainGame->dInfo.clientname, 20);
} }
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
break; break;
} }
case STOC_DUEL_END: { case STOC_DUEL_END: {
mainGame->gMutex.Lock();
mainGame->stMessage->setText(dataManager.GetSysString(1500));
mainGame->gMutex.Unlock();
mainGame->PopupElement(mainGame->wMessage);
mainGame->localAction.Reset();
mainGame->localAction.Wait();
mainGame->CloseDuelWindow();
mainGame->ShowElement(mainGame->wLanWindow);
mainGame->dInfo.isStarted = false;
mainGame->device->setEventReceiver(&mainGame->menuHandler);
mainGame->ShowElement(mainGame->wLanWindow);
event_base_loopbreak(client_base);
break; break;
} }
case STOC_REPLAY: { case STOC_REPLAY: {
mainGame->ebRSName->setText(L"");
mainGame->PopupElement(mainGame->wReplaySave);
mainGame->localAction.Reset(); mainGame->localAction.Reset();
mainGame->ShowElement(mainGame->wReplaySave);
mainGame->localAction.Wait(); mainGame->localAction.Wait();
if(mainGame->actionParam) {
char* prep = pdata;
Replay new_replay;
memcpy(&new_replay.pheader, prep, sizeof(ReplayHeader));
prep += sizeof(ReplayHeader);
memcpy(new_replay.comp_data, prep, len - sizeof(ReplayHeader) - 1);
new_replay.comp_size = len - sizeof(ReplayHeader) - 1;
new_replay.SaveReplay(mainGame->ebRSName->getText());
}
break; break;
} }
case STOC_HS_PLAYER_ENTER: { case STOC_HS_PLAYER_ENTER: {
...@@ -380,7 +422,9 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) { ...@@ -380,7 +422,9 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
break; break;
} }
case HINT_MESSAGE: { case HINT_MESSAGE: {
mainGame->gMutex.Lock();
mainGame->stMessage->setText(dataManager.GetDesc(data)); mainGame->stMessage->setText(dataManager.GetDesc(data));
mainGame->gMutex.Unlock();
mainGame->PopupElement(mainGame->wMessage); mainGame->PopupElement(mainGame->wMessage);
mainGame->localAction.Reset(); mainGame->localAction.Reset();
mainGame->localAction.Wait(); mainGame->localAction.Wait();
......
...@@ -26,8 +26,10 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -26,8 +26,10 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case BUTTON_HAND2: case BUTTON_HAND2:
case BUTTON_HAND3: { case BUTTON_HAND3: {
mainGame->HideElement(mainGame->wHand); mainGame->HideElement(mainGame->wHand);
mainGame->stHintMsg->setText(L"");
mainGame->stHintMsg->setVisible(true);
CTOS_HandResult cshr; CTOS_HandResult cshr;
cshr.res = id - BUTTON_HAND1; cshr.res = id - BUTTON_HAND1 + 1;
DuelClient::SendPacketToServer(CTOS_HAND_RESULT, cshr); DuelClient::SendPacketToServer(CTOS_HAND_RESULT, cshr);
break; break;
} }
......
...@@ -161,10 +161,7 @@ bool Game::Initialize() { ...@@ -161,10 +161,7 @@ bool Game::Initialize() {
imgCard = env->addImage(rect<s32>(9, 9, 187, 262), wCardImg); imgCard = env->addImage(rect<s32>(9, 9, 187, 262), wCardImg);
imgCard->setUseAlphaChannel(true); imgCard->setUseAlphaChannel(true);
//phase //phase
wPhase = env->addWindow(rect<s32>(475, 310, 850, 330), false, L""); wPhase = env->addStaticText(L"", rect<s32>(475, 310, 850, 330));
wPhase->setDraggable(false);
wPhase->getCloseButton()->setVisible(false);
wPhase->setDrawBackground(false);
wPhase->setVisible(false); wPhase->setVisible(false);
btnDP = env->addButton(rect<s32>(0, 0, 50, 20), wPhase, -1, L"DP"); btnDP = env->addButton(rect<s32>(0, 0, 50, 20), wPhase, -1, L"DP");
btnDP->setEnabled(false); btnDP->setEnabled(false);
...@@ -750,8 +747,6 @@ void Game::CloseDuelWindow() { ...@@ -750,8 +747,6 @@ void Game::CloseDuelWindow() {
wPhase->setVisible(false); wPhase->setVisible(false);
wPosSelect->setVisible(false); wPosSelect->setVisible(false);
wQuery->setVisible(false); wQuery->setVisible(false);
wSelectOption->setVisible(false);
wSelectYesNo->setVisible(false);
} }
} }
...@@ -236,8 +236,6 @@ public: ...@@ -236,8 +236,6 @@ public:
irr::gui::CGUIImageButton* btnPSAD; irr::gui::CGUIImageButton* btnPSAD;
irr::gui::CGUIImageButton* btnPSDU; irr::gui::CGUIImageButton* btnPSDU;
irr::gui::CGUIImageButton* btnPSDD; irr::gui::CGUIImageButton* btnPSDD;
irr::gui::IGUIWindow* wSelectYesNo;
irr::gui::IGUIWindow* wSelectOption;
//card selection //card selection
irr::gui::IGUIWindow* wCardSelect; irr::gui::IGUIWindow* wCardSelect;
irr::gui::CGUIImageButton* btnCardSelect[5]; irr::gui::CGUIImageButton* btnCardSelect[5];
...@@ -270,7 +268,7 @@ public: ...@@ -270,7 +268,7 @@ public:
irr::gui::IGUIButton* btnAttack; irr::gui::IGUIButton* btnAttack;
irr::gui::IGUIButton* btnShowList; irr::gui::IGUIButton* btnShowList;
//phase button //phase button
irr::gui::IGUIWindow* wPhase; irr::gui::IGUIStaticText* wPhase;
irr::gui::IGUIButton* btnDP; irr::gui::IGUIButton* btnDP;
irr::gui::IGUIButton* btnSP; irr::gui::IGUIButton* btnSP;
irr::gui::IGUIButton* btnM1; irr::gui::IGUIButton* btnM1;
......
...@@ -35,7 +35,7 @@ bool NetServer::StartServer(unsigned short port) { ...@@ -35,7 +35,7 @@ bool NetServer::StartServer(unsigned short port) {
void NetServer::StopServer() { void NetServer::StopServer() {
if(!net_evbase) if(!net_evbase)
return; return;
event_base_loopexit(net_evbase, NULL); event_base_loopbreak(net_evbase);
} }
void NetServer::StopListen() { void NetServer::StopListen() {
evconnlistener_disable(listener); evconnlistener_disable(listener);
...@@ -51,7 +51,7 @@ void NetServer::ServerAccept(evconnlistener* listener, evutil_socket_t fd, socka ...@@ -51,7 +51,7 @@ void NetServer::ServerAccept(evconnlistener* listener, evutil_socket_t fd, socka
bufferevent_enable(bev, EV_READ); bufferevent_enable(bev, EV_READ);
} }
void NetServer::ServerAcceptError(evconnlistener* listener, void* ctx) { void NetServer::ServerAcceptError(evconnlistener* listener, void* ctx) {
event_base_loopexit(net_evbase, NULL); event_base_loopbreak(net_evbase);
} }
void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) { void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) {
evbuffer* input = bufferevent_get_input(bev); evbuffer* input = bufferevent_get_input(bev);
...@@ -109,10 +109,13 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) { ...@@ -109,10 +109,13 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
return; return;
switch(pktType) { switch(pktType) {
case CTOS_RESPONSE: { case CTOS_RESPONSE: {
if(!dp->game || !duel_mode->pduel)
return;
duel_mode->GetResponse(dp, pdata, len > 64 ? 64 : len - 1);
break; break;
} }
case CTOS_UPDATE_DECK: { case CTOS_UPDATE_DECK: {
if(!dp->game || !duel_mode) if(!dp->game)
return; return;
duel_mode->UpdateDeck(dp, pdata); duel_mode->UpdateDeck(dp, pdata);
break; break;
......
...@@ -117,6 +117,7 @@ public: ...@@ -117,6 +117,7 @@ public:
virtual void TPResult(DuelPlayer* dp, unsigned char tp) {}; virtual void TPResult(DuelPlayer* dp, unsigned char tp) {};
virtual void Process() {}; virtual void Process() {};
virtual int Analyze(char* msgbuffer, unsigned int len) {}; virtual int Analyze(char* msgbuffer, unsigned int len) {};
virtual void GetResponse(DuelPlayer* dp, void* pdata, unsigned int len) {};
virtual void EndDuel() {}; virtual void EndDuel() {};
public: public:
......
...@@ -89,7 +89,7 @@ void Replay::SaveReplay(const wchar_t* name) { ...@@ -89,7 +89,7 @@ void Replay::SaveReplay(const wchar_t* name) {
fp = _wfopen(fname, L"wb"); fp = _wfopen(fname, L"wb");
#else #else
char fname2[256]; char fname2[256];
DataManager::EncodeUTF8(fname, fname2); BufferIO::EncodeUTF8(fname, fname2);
fp = fopen(fname2, "wb"); fp = fopen(fname2, "wb");
#endif #endif
if(!fp) if(!fp)
...@@ -105,7 +105,7 @@ bool Replay::OpenReplay(const wchar_t* name) { ...@@ -105,7 +105,7 @@ bool Replay::OpenReplay(const wchar_t* name) {
fp = _wfopen(fname, L"rb"); fp = _wfopen(fname, L"rb");
#else #else
char fname2[256]; char fname2[256];
DataManager::EncodeUTF8(fname, fname2); BufferIO::EncodeUTF8(fname, fname2);
fp = fopen(fname2, "rb"); fp = fopen(fname2, "rb");
#endif #endif
if(!fp) if(!fp)
......
...@@ -324,6 +324,8 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -324,6 +324,8 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count);
set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count);
int opt = 0; int opt = 0;
if(host_info.enable_priority)
opt |= DUEL_ENABLE_PRIORITY;
last_replay.WriteInt32(host_info.start_lp, false); last_replay.WriteInt32(host_info.start_lp, false);
last_replay.WriteInt32(host_info.start_hand, false); last_replay.WriteInt32(host_info.start_hand, false);
last_replay.WriteInt32(host_info.draw_count, false); last_replay.WriteInt32(host_info.draw_count, false);
...@@ -367,6 +369,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -367,6 +369,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
RefreshExtra(0); RefreshExtra(0);
RefreshExtra(1); RefreshExtra(1);
start_duel(pduel, opt); start_duel(pduel, opt);
Process();
} }
void SingleDuel::Process() { void SingleDuel::Process() {
char engineBuffer[0x1000]; char engineBuffer[0x1000];
...@@ -430,19 +433,7 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -430,19 +433,7 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
type = BufferIO::ReadInt8(pbuf); type = BufferIO::ReadInt8(pbuf);
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::SendBufferToPlayer(players[1], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[1], STOC_GAME_MSG, offset, pbuf - offset);
last_replay.EndRecord(); EndDuel();
char replaybuf[0x2000], *pbuf = replaybuf;
memcpy(pbuf, &last_replay.pheader, sizeof(ReplayHeader));
pbuf += sizeof(ReplayHeader);
memcpy(pbuf, last_replay.comp_data, last_replay.comp_size);
NetServer::SendBufferToPlayer(players[0], STOC_REPLAY, replaybuf, sizeof(ReplayHeader) + last_replay.comp_size);
NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
NetServer::SendPacketToPlayer(players[0], STOC_DUEL_END);
NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
return 2; return 2;
} }
case MSG_SELECT_BATTLECMD: { case MSG_SELECT_BATTLECMD: {
...@@ -1084,9 +1075,31 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1084,9 +1075,31 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
} }
return 0; return 0;
} }
void SingleDuel::GetResponse(DuelPlayer* dp, void* pdata, unsigned int len) {
byte resb[64];
memcpy(resb, pdata, len);
last_replay.WriteData(resb, len);
set_responseb(pduel, resb);
players[dp->type]->state = 0xff;
Process();
}
void SingleDuel::EndDuel() { void SingleDuel::EndDuel() {
if(pduel) if(!pduel)
end_duel(pduel); return;
last_replay.EndRecord();
char replaybuf[0x2000], *pbuf = replaybuf;
memcpy(pbuf, &last_replay.pheader, sizeof(ReplayHeader));
pbuf += sizeof(ReplayHeader);
memcpy(pbuf, last_replay.comp_data, last_replay.comp_size);
NetServer::SendBufferToPlayer(players[0], STOC_REPLAY, replaybuf, sizeof(ReplayHeader) + last_replay.comp_size);
NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
NetServer::SendPacketToPlayer(players[0], STOC_DUEL_END);
NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
end_duel(pduel);
pduel = 0; pduel = 0;
} }
void SingleDuel::WaitforResponse(int playerid) { void SingleDuel::WaitforResponse(int playerid) {
......
...@@ -24,6 +24,7 @@ public: ...@@ -24,6 +24,7 @@ public:
virtual void TPResult(DuelPlayer* dp, unsigned char tp); virtual void TPResult(DuelPlayer* dp, unsigned char tp);
virtual void Process(); virtual void Process();
virtual int Analyze(char* msgbuffer, unsigned int len); virtual int Analyze(char* msgbuffer, unsigned int len);
virtual void GetResponse(DuelPlayer* dp, void* pdata, unsigned int len);
virtual void EndDuel(); virtual void EndDuel();
void WaitforResponse(int playerid); void WaitforResponse(int playerid);
......
...@@ -280,6 +280,9 @@ ...@@ -280,6 +280,9 @@
!system 1405 主机拒绝了连接。 !system 1405 主机拒绝了连接。
!system 1406 无效卡组。 !system 1406 无效卡组。
!system 1407 「%ls」的数量不符合当前设定。 !system 1407 「%ls」的数量不符合当前设定。
!system 1500 决斗结束。
!system 1501 录像结束。
!system 1502 连接已断开。
#vistory reason #vistory reason
!victory 0x1 LP变成0 !victory 0x1 LP变成0
!victory 0x2 没有卡可抽 !victory 0x2 没有卡可抽
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
antialias = 2 antialias = 2
nickname = Player nickname = Player
gamename = Game gamename = Game
lastdeck = gadget lastdeck = infernity
textfont = c:/windows/fonts/simsun.ttc textfont = c:/windows/fonts/simsun.ttc
numfont = c:/windows/fonts/arialbd.ttf numfont = c:/windows/fonts/arialbd.ttf
serverport = 7911 serverport = 7911
......
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