Commit 79919218 authored by fallenstardust's avatar fallenstardust

sync ocgcore

parent e2fcf847
...@@ -40,9 +40,10 @@ void ClientCard::UpdateInfo(unsigned char* buf) { ...@@ -40,9 +40,10 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
ClearData(); ClearData();
return; return;
} }
int pdata;
if(flag & QUERY_CODE) { if(flag & QUERY_CODE) {
pdata = BufferIO::ReadInt32(buf); int pdata = BufferIO::ReadInt32(buf);
if (!pdata)
ClearData();
if((location == LOCATION_HAND) && ((unsigned int)pdata != code)) { if((location == LOCATION_HAND) && ((unsigned int)pdata != code)) {
code = pdata; code = pdata;
mainGame->dField.MoveCard(this, 5); mainGame->dField.MoveCard(this, 5);
...@@ -50,7 +51,7 @@ void ClientCard::UpdateInfo(unsigned char* buf) { ...@@ -50,7 +51,7 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
code = pdata; code = pdata;
} }
if(flag & QUERY_POSITION) { if(flag & QUERY_POSITION) {
pdata = (BufferIO::ReadInt32(buf) >> 24) & 0xff; int pdata = (BufferIO::ReadInt32(buf) >> 24) & 0xff;
if((location & (LOCATION_EXTRA | LOCATION_REMOVED)) && (u8)pdata != position) { if((location & (LOCATION_EXTRA | LOCATION_REMOVED)) && (u8)pdata != position) {
position = pdata; position = pdata;
mainGame->dField.MoveCard(this, 1); mainGame->dField.MoveCard(this, 1);
...@@ -62,14 +63,14 @@ void ClientCard::UpdateInfo(unsigned char* buf) { ...@@ -62,14 +63,14 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
if(flag & QUERY_TYPE) if(flag & QUERY_TYPE)
type = BufferIO::ReadInt32(buf); type = BufferIO::ReadInt32(buf);
if(flag & QUERY_LEVEL) { if(flag & QUERY_LEVEL) {
pdata = BufferIO::ReadInt32(buf); int pdata = BufferIO::ReadInt32(buf);
if(level != (unsigned int)pdata) { if(level != (unsigned int)pdata) {
level = pdata; level = pdata;
myswprintf(lvstring, L"L%d", level); myswprintf(lvstring, L"L%d", level);
} }
} }
if(flag & QUERY_RANK) { if(flag & QUERY_RANK) {
pdata = BufferIO::ReadInt32(buf); int pdata = BufferIO::ReadInt32(buf);
if(pdata && rank != (unsigned int)pdata) { if(pdata && rank != (unsigned int)pdata) {
rank = pdata; rank = pdata;
myswprintf(lvstring, L"R%d", rank); myswprintf(lvstring, L"R%d", rank);
...@@ -158,7 +159,7 @@ void ClientCard::UpdateInfo(unsigned char* buf) { ...@@ -158,7 +159,7 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
myswprintf(rscstring, L"%d", rscale); myswprintf(rscstring, L"%d", rscale);
} }
if(flag & QUERY_LINK) { if(flag & QUERY_LINK) {
pdata = BufferIO::ReadInt32(buf); int pdata = BufferIO::ReadInt32(buf);
if (link != (unsigned int)pdata) { if (link != (unsigned int)pdata) {
link = pdata; link = pdata;
} }
......
...@@ -29,6 +29,45 @@ ClientField::ClientField() { ...@@ -29,6 +29,45 @@ ClientField::ClientField() {
} }
rnd.reset((uint_fast32_t)std::random_device()()); rnd.reset((uint_fast32_t)std::random_device()());
} }
ClientField::~ClientField() {
for (int i = 0; i < 2; ++i) {
for (auto card : deck[i]) {
delete card;
}
deck[i].clear();
for (auto card : hand[i]) {
delete card;
}
hand[i].clear();
for (auto card : mzone[i]) {
if (card)
delete card;
card = nullptr;
}
for (auto card : szone[i]) {
if (card)
delete card;
card = nullptr;
}
for (auto card : grave[i]) {
delete card;
}
grave[i].clear();
for (auto card : remove[i]) {
delete card;
}
remove[i].clear();
for (auto card : extra[i]) {
delete card;
}
extra[i].clear();
}
for (auto card : overlay_cards) {
delete card;
}
overlay_cards.clear();
}
void ClientField::Clear() { void ClientField::Clear() {
for(int i = 0; i < 2; ++i) { for(int i = 0; i < 2; ++i) {
for(auto cit = deck[i].begin(); cit != deck[i].end(); ++cit) for(auto cit = deck[i].begin(); cit != deck[i].end(); ++cit)
...@@ -529,13 +568,11 @@ void ClientField::ShowChainCard() { ...@@ -529,13 +568,11 @@ void ClientField::ShowChainCard() {
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff); mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
if(selectable_cards[i]->overlayTarget->controler) if(selectable_cards[i]->overlayTarget->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xff5a5a5a); mainGame->stCardPos[i]->setBackgroundColor(0xff5a5a5a);
else else mainGame->stCardPos[i]->setBackgroundColor(0xff56649f);
mainGame->stCardPos[i]->setBackgroundColor(0xff56649f);
} else { } else {
if(selectable_cards[i]->controler) if(selectable_cards[i]->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xff5a5a5a); mainGame->stCardPos[i]->setBackgroundColor(0xff5a5a5a);
else else mainGame->stCardPos[i]->setBackgroundColor(0xff56649f);
mainGame->stCardPos[i]->setBackgroundColor(0xff56649f);
} }
mainGame->stCardPos[i]->setVisible(true); mainGame->stCardPos[i]->setVisible(true);
mainGame->stCardPos[i]->setRelativePosition(rect<s32>((startpos + i * 125) * mainGame->xScale, 40 * mainGame->yScale, (startpos + 120 + i * 125) * mainGame->xScale, 60 * mainGame->yScale)); mainGame->stCardPos[i]->setRelativePosition(rect<s32>((startpos + i * 125) * mainGame->xScale, 40 * mainGame->yScale, (startpos + 120 + i * 125) * mainGame->xScale, 60 * mainGame->yScale));
......
...@@ -92,6 +92,7 @@ public: ...@@ -92,6 +92,7 @@ public:
mt19937 rnd; mt19937 rnd;
ClientField(); ClientField();
~ClientField();
void Clear(); void Clear();
void Initial(int player, int deckc, int extrac); void Initial(int player, int deckc, int extrac);
ClientCard* GetCard(int controler, int location, int sequence, int sub_seq = 0); ClientCard* GetCard(int controler, int location, int sequence, int sub_seq = 0);
......
...@@ -27,6 +27,38 @@ namespace ygo { ...@@ -27,6 +27,38 @@ namespace ygo {
Game *mainGame; Game *mainGame;
void DuelInfo::Clear() {
isStarted = false;
isFinished = false;
isReplay = false;
isReplaySkiping = false;
isFirst = false;
isTag = false;
isSingleMode = false;
is_shuffling = false;
tag_player[0] = false;
tag_player[1] = false;
isReplaySwapped = false;
lp[0] = 0;
lp[1] = 0;
start_lp = 0;
duel_rule = 0;
turn = 0;
curMsg = 0;
hostname[0] = 0;
clientname[0] = 0;
hostname_tag[0] = 0;
clientname_tag[0] = 0;
strLP[0][0] = 0;
strLP[1][0] = 0;
vic_string = 0;
player_type = 0;
time_player = 0;
time_limit = 0;
time_left[0] = 0;
time_left[1] = 0;
}
void Game::process(irr::SEvent &event) { void Game::process(irr::SEvent &event) {
if (event.EventType == EET_MOUSE_INPUT_EVENT) { if (event.EventType == EET_MOUSE_INPUT_EVENT) {
s32 x = event.MouseInput.X; s32 x = event.MouseInput.X;
......
...@@ -98,6 +98,9 @@ struct DuelInfo { ...@@ -98,6 +98,9 @@ struct DuelInfo {
unsigned char time_player{ 0 }; unsigned char time_player{ 0 };
unsigned short time_limit{ 0 }; unsigned short time_limit{ 0 };
unsigned short time_left[2]{ 0 }; unsigned short time_left[2]{ 0 };
void Clear();
int card_count[2]; int card_count[2];
int total_attack[2]; int total_attack[2];
wchar_t str_time_left[2][16]; wchar_t str_time_left[2][16];
...@@ -918,11 +921,11 @@ extern Game* mainGame; ...@@ -918,11 +921,11 @@ extern Game* mainGame;
#define BUTTON_BIG_CARD_ZOOM_OUT 382 #define BUTTON_BIG_CARD_ZOOM_OUT 382
#define BUTTON_BIG_CARD_ORIG_SIZE 383 #define BUTTON_BIG_CARD_ORIG_SIZE 383
//gframe messages //STOC_GAME_MSG messages
#define MSG_WAITING 3 #define MSG_WAITING 3
#define MSG_START 4 #define MSG_START 4
#define MSG_UPDATE_DATA 6 #define MSG_UPDATE_DATA 6 // flag=0: clear
#define MSG_UPDATE_CARD 7 #define MSG_UPDATE_CARD 7 // flag=QUERY_CODE, code=0: clear
#define MSG_REQUEST_DECK 8 #define MSG_REQUEST_DECK 8
#define MSG_REFRESH_DECK 34 #define MSG_REFRESH_DECK 34
#define MSG_CARD_SELECTED 80 #define MSG_CARD_SELECTED 80
......
...@@ -57,6 +57,7 @@ bool ReplayMode::ReadReplayResponse() { ...@@ -57,6 +57,7 @@ bool ReplayMode::ReadReplayResponse() {
} }
int ReplayMode::ReplayThread() { int ReplayMode::ReplayThread() {
const ReplayHeader& rh = cur_replay.pheader; const ReplayHeader& rh = cur_replay.pheader;
mainGame->dInfo.Clear();
mainGame->dInfo.isFirst = true; mainGame->dInfo.isFirst = true;
mainGame->dInfo.isTag = !!(rh.flag & REPLAY_TAG); mainGame->dInfo.isTag = !!(rh.flag & REPLAY_TAG);
mainGame->dInfo.isSingleMode = !!(rh.flag & REPLAY_SINGLE_MODE); mainGame->dInfo.isSingleMode = !!(rh.flag & REPLAY_SINGLE_MODE);
...@@ -276,7 +277,6 @@ void ReplayMode::Restart(bool refresh) { ...@@ -276,7 +277,6 @@ void ReplayMode::Restart(bool refresh) {
mainGame->dField.Clear(); mainGame->dField.Clear();
//mainGame->device->setEventReceiver(&mainGame->dField); //mainGame->device->setEventReceiver(&mainGame->dField);
cur_replay.Rewind(); cur_replay.Rewind();
//mainGame->dInfo.isFirst = true;
mainGame->dInfo.tag_player[0] = false; mainGame->dInfo.tag_player[0] = false;
mainGame->dInfo.tag_player[1] = false; mainGame->dInfo.tag_player[1] = false;
if(!StartDuel()) { if(!StartDuel()) {
...@@ -286,7 +286,12 @@ void ReplayMode::Restart(bool refresh) { ...@@ -286,7 +286,12 @@ void ReplayMode::Restart(bool refresh) {
mainGame->dField.RefreshAllCards(); mainGame->dField.RefreshAllCards();
mainGame->dInfo.isStarted = true; mainGame->dInfo.isStarted = true;
mainGame->dInfo.isFinished = false; mainGame->dInfo.isFinished = false;
//mainGame->dInfo.isReplay = true; }
if (mainGame->dInfo.isReplaySwapped){
std::swap(mainGame->dInfo.lp[0], mainGame->dInfo.lp[1]);
std::swap(mainGame->dInfo.strLP[0], mainGame->dInfo.strLP[1]);
std::swap(mainGame->dInfo.hostname, mainGame->dInfo.clientname);
std::swap(mainGame->dInfo.hostname_tag, mainGame->dInfo.clientname_tag);
} }
skip_turn = 0; skip_turn = 0;
} }
......
...@@ -463,16 +463,17 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -463,16 +463,17 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
BufferIO::WriteInt8(pbuf, host_info.duel_rule); BufferIO::WriteInt8(pbuf, host_info.duel_rule);
BufferIO::WriteInt32(pbuf, host_info.start_lp); BufferIO::WriteInt32(pbuf, host_info.start_lp);
BufferIO::WriteInt32(pbuf, host_info.start_lp); BufferIO::WriteInt32(pbuf, host_info.start_lp);
BufferIO::WriteInt16(pbuf, query_field_count(pduel, 0, 0x1)); BufferIO::WriteInt16(pbuf, query_field_count(pduel, 0, LOCATION_DECK));
BufferIO::WriteInt16(pbuf, query_field_count(pduel, 0, 0x40)); BufferIO::WriteInt16(pbuf, query_field_count(pduel, 0, LOCATION_EXTRA));
BufferIO::WriteInt16(pbuf, query_field_count(pduel, 1, 0x1)); BufferIO::WriteInt16(pbuf, query_field_count(pduel, 1, LOCATION_DECK));
BufferIO::WriteInt16(pbuf, query_field_count(pduel, 1, 0x40)); BufferIO::WriteInt16(pbuf, query_field_count(pduel, 1, LOCATION_EXTRA));
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, startbuf, 19); NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, startbuf, 19);
startbuf[1] = 1; startbuf[1] = 1;
NetServer::SendBufferToPlayer(players[1], STOC_GAME_MSG, startbuf, 19); NetServer::SendBufferToPlayer(players[1], STOC_GAME_MSG, startbuf, 19);
if(!swapped) if(!swapped)
startbuf[1] = 0x10; startbuf[1] = 0x10;
else startbuf[1] = 0x11; else
startbuf[1] = 0x11;
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::SendBufferToPlayer(*oit, STOC_GAME_MSG, startbuf, 19); NetServer::SendBufferToPlayer(*oit, STOC_GAME_MSG, startbuf, 19);
RefreshExtra(0); RefreshExtra(0);
...@@ -1547,14 +1548,16 @@ void SingleDuel::RefreshSingle(int player, int location, int sequence, int flag) ...@@ -1547,14 +1548,16 @@ void SingleDuel::RefreshSingle(int player, int location, int sequence, int flag)
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 4); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 4);
if (len <= LEN_HEADER) if (len <= LEN_HEADER)
return; return;
auto position = GetPosition(qbuf, 12); const int clen = BufferIO::ReadInt32(qbuf);
if(location == LOCATION_REMOVED && (position & POS_FACEDOWN)) auto position = GetPosition(qbuf, 8);
return; if (position & POS_FACEDOWN) {
if ((location & 0x90) || ((location & 0x2c) && (position & POS_FACEUP))) { BufferIO::WriteInt32(qbuf, QUERY_CODE);
NetServer::ReSendToPlayer(players[1 - player]); BufferIO::WriteInt32(qbuf, 0);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) memset(qbuf, 0, clen - 12);
NetServer::ReSendToPlayer(*pit);
} }
NetServer::SendBufferToPlayer(players[1 - player], STOC_GAME_MSG, query_buffer, len + 4);
for (auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
} }
uint32 SingleDuel::MessageHandler(intptr_t fduel, uint32 type) { uint32 SingleDuel::MessageHandler(intptr_t fduel, uint32 type) {
if(!enable_log) if(!enable_log)
......
...@@ -32,6 +32,7 @@ int SingleMode::SinglePlayThread() { ...@@ -32,6 +32,7 @@ int SingleMode::SinglePlayThread() {
const int start_lp = 8000; const int start_lp = 8000;
const int start_hand = 5; const int start_hand = 5;
const int draw_count = 1; const int draw_count = 1;
mainGame->dInfo.Clear();
int opt = 0; int opt = 0;
std::random_device rd; std::random_device rd;
unsigned int seed = rd(); unsigned int seed = rd();
......
...@@ -30,7 +30,6 @@ typedef signed char int8; ...@@ -30,7 +30,6 @@ typedef signed char int8;
#define TRUE 1 #define TRUE 1
#define FALSE 0 #define FALSE 0
#define SIZE_MESSAGE_BUFFER 0x2000 #define SIZE_MESSAGE_BUFFER 0x2000
#define SIZE_QUERY_BUFFER 0x4000
#define PROCESSOR_BUFFER_LEN 0x0fffffff #define PROCESSOR_BUFFER_LEN 0x0fffffff
#define PROCESSOR_FLAG 0xf0000000 #define PROCESSOR_FLAG 0xf0000000
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* Author: Argon * Author: Argon
*/ */
#include <cstring>
#include "duel.h" #include "duel.h"
#include "interpreter.h" #include "interpreter.h"
#include "field.h" #include "field.h"
...@@ -13,6 +14,14 @@ ...@@ -13,6 +14,14 @@
#include "group.h" #include "group.h"
#include "ocgapi.h" #include "ocgapi.h"
inline void write_buffer_vector(std::vector<byte>& buffer, const void* data, int size) {
if (size > 0) {
const auto len = buffer.size();
buffer.resize(len + size);
std::memcpy(&buffer[len], data, size);
}
}
duel::duel() { duel::duel() {
lua = new interpreter(this); lua = new interpreter(this);
game_field = new field(this); game_field = new field(this);
......
...@@ -19,14 +19,6 @@ class effect; ...@@ -19,14 +19,6 @@ class effect;
class field; class field;
class interpreter; class interpreter;
inline void write_buffer_vector(std::vector<byte>& buffer, const void* data, int size) {
if (size > 0) {
const auto len = buffer.size();
buffer.resize(len + size);
std::memcpy(&buffer[len], data, size);
}
}
class duel { class duel {
public: public:
using card_set = std::set<card*, card_sort>; using card_set = std::set<card*, card_sort>;
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* Author: Argon * Author: Argon
*/ */
#include <cstring>
#include "duel.h" #include "duel.h"
#include "group.h" #include "group.h"
#include "card.h" #include "card.h"
...@@ -17,7 +18,7 @@ interpreter::interpreter(duel* pd): coroutines(256) { ...@@ -17,7 +18,7 @@ interpreter::interpreter(duel* pd): coroutines(256) {
lua_state = luaL_newstate(); lua_state = luaL_newstate();
current_state = lua_state; current_state = lua_state;
pduel = pd; pduel = pd;
memcpy(lua_getextraspace(lua_state), &pd, LUA_EXTRASPACE); //set_duel_info std::memcpy(lua_getextraspace(lua_state), &pd, LUA_EXTRASPACE); //set_duel_info
no_action = 0; no_action = 0;
call_depth = 0; call_depth = 0;
//Initial //Initial
...@@ -663,6 +664,6 @@ int32 interpreter::get_function_handle(lua_State* L, int32 index) { ...@@ -663,6 +664,6 @@ int32 interpreter::get_function_handle(lua_State* L, int32 index) {
} }
duel* interpreter::get_duel_info(lua_State * L) { duel* interpreter::get_duel_info(lua_State * L) {
duel* pduel; duel* pduel;
memcpy(&pduel, lua_getextraspace(L), LUA_EXTRASPACE); std::memcpy(&pduel, lua_getextraspace(L), LUA_EXTRASPACE);
return pduel; return pduel;
} }
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include <list> #include <list>
#include <vector> #include <vector>
#include <cstdio> #include <cstdio>
#include <cstring>
class card; class card;
class effect; class effect;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* Author: Argon * Author: Argon
*/ */
#include <string.h> #include <cstring>
#include "scriptlib.h" #include "scriptlib.h"
#include "duel.h" #include "duel.h"
#include "field.h" #include "field.h"
...@@ -170,7 +170,7 @@ int32 scriptlib::debug_set_ai_name(lua_State *L) { ...@@ -170,7 +170,7 @@ int32 scriptlib::debug_set_ai_name(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L); duel* pduel = interpreter::get_duel_info(L);
pduel->write_buffer8(MSG_AI_NAME); pduel->write_buffer8(MSG_AI_NAME);
const char* pstr = lua_tostring(L, 1); const char* pstr = lua_tostring(L, 1);
int len = (int)strlen(pstr); int len = (int)std::strlen(pstr);
if(len > 100) if(len > 100)
len = 100; len = 100;
pduel->write_buffer16(len); pduel->write_buffer16(len);
...@@ -184,7 +184,7 @@ int32 scriptlib::debug_show_hint(lua_State *L) { ...@@ -184,7 +184,7 @@ int32 scriptlib::debug_show_hint(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L); duel* pduel = interpreter::get_duel_info(L);
pduel->write_buffer8(MSG_SHOW_HINT); pduel->write_buffer8(MSG_SHOW_HINT);
const char* pstr = lua_tostring(L, 1); const char* pstr = lua_tostring(L, 1);
int len = (int)strlen(pstr); int len = (int)std::strlen(pstr);
if(len > 1024) if(len > 1024)
len = 1024; len = 1024;
pduel->write_buffer16(len); pduel->write_buffer16(len);
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#ifndef MTRANDOM_H_ #ifndef MTRANDOM_H_
#define MTRANDOM_H_ #define MTRANDOM_H_
#include <cstdint>
#include <random> #include <random>
class mt19937 { class mt19937 {
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
* Created on: 2010-5-2 * Created on: 2010-5-2
* Author: Argon * Author: Argon
*/ */
#include <stdio.h> #include <cstdio>
#include <string.h> #include <cstring>
#include "ocgapi.h" #include "ocgapi.h"
#include "duel.h" #include "duel.h"
#include "card.h" #include "card.h"
...@@ -41,11 +41,11 @@ uint32 handle_message(void* pduel, uint32 msg_type) { ...@@ -41,11 +41,11 @@ uint32 handle_message(void* pduel, uint32 msg_type) {
} }
byte* default_script_reader(const char* script_name, int* slen) { byte* default_script_reader(const char* script_name, int* slen) {
FILE *fp; FILE *fp;
fp = fopen(script_name, "rb"); fp = std::fopen(script_name, "rb");
if (!fp) if (!fp)
return 0; return 0;
int len = (int)fread(buffer, 1, sizeof(buffer), fp); int len = (int)fread(buffer, 1, sizeof(buffer), fp);
fclose(fp); std::fclose(fp);
if(len >= sizeof(buffer)) if(len >= sizeof(buffer))
return 0; return 0;
*slen = len; *slen = len;
...@@ -120,7 +120,7 @@ extern "C" DECL_DLLEXPORT void set_player_info(intptr_t pduel, int32 playerid, i ...@@ -120,7 +120,7 @@ extern "C" DECL_DLLEXPORT void set_player_info(intptr_t pduel, int32 playerid, i
pd->game_field->player[playerid].draw_count = drawcount; pd->game_field->player[playerid].draw_count = drawcount;
} }
extern "C" DECL_DLLEXPORT void get_log_message(intptr_t pduel, byte* buf) { extern "C" DECL_DLLEXPORT void get_log_message(intptr_t pduel, byte* buf) {
strcpy((char*)buf, ((duel*)pduel)->strbuffer); std::strcpy((char*)buf, ((duel*)pduel)->strbuffer);
} }
extern "C" DECL_DLLEXPORT int32 get_message(intptr_t pduel, byte* buf) { extern "C" DECL_DLLEXPORT int32 get_message(intptr_t pduel, byte* buf) {
int32 len = ((duel*)pduel)->read_buffer(buf); int32 len = ((duel*)pduel)->read_buffer(buf);
......
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