Commit 4b6d74e0 authored by nanahira's avatar nanahira

match_pick_test

parent b4155ba0
......@@ -456,6 +456,9 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
hand_result[1] = 0;
players[0]->state = CTOS_HAND_RESULT;
players[1]->state = CTOS_HAND_RESULT;
//2pick
pick_deck[0] = 0;
pick_deck[1] = 0;
}
void SingleDuel::HandResult(DuelPlayer* dp, unsigned char res) {
if(res > 3)
......@@ -514,8 +517,13 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
Deck d = pdeck[0];
pdeck[0] = pdeck[1];
pdeck[1] = d;
SwapPickDeck();
swapped = true;
}
if(pick_deck[0] && pick_deck[1]) {
pdeck[0] = pick_deck[0];
pdeck[1] = pick_deck[1];
}
dp->state = CTOS_RESPONSE;
ReplayHeader rh;
rh.id = 0x31707279;
......@@ -657,6 +665,7 @@ void SingleDuel::DuelEndProc() {
Deck d = pdeck[0];
pdeck[0] = pdeck[1];
pdeck[1] = d;
SwapPickDeck();
}
ready[0] = false;
ready[1] = false;
......@@ -708,6 +717,21 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
offset = pbuf;
unsigned char engType = BufferIO::ReadUInt8(pbuf);
switch (engType) {
//2pick
case MSG_SAVE_PICK_DECK: {
player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf);
int cardlist[128];
int counter = 0;
Deck tdeck;
for(int i = 0; i < count; i++) {
int code = BufferIO::ReadInt32(pbuf);
cardlist[counter++] = code;
}
deckManager.LoadDeck(tdeck, cardlist, count, 0);
pick_deck[player] = tdeck;
break;
}
case MSG_RETRY: {
WaitforResponse(last_response);
NetServer::SendBufferToPlayer(players[last_response], STOC_GAME_MSG, offset, pbuf - offset);
......@@ -1942,5 +1966,12 @@ void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) {
event_del(sd->etimer);
}
}
void SingleDuel::SwapPickDeck() {
if(pick_deck[0] && pick_deck[0]) {
Deck d = pick_deck[0];
pick_deck[0] = pick_deck[1];
pick_deck[1] = d;
}
}
}
......@@ -40,12 +40,16 @@ public:
static int MessageHandler(long fduel, int type);
static void SingleTimer(evutil_socket_t fd, short events, void* arg);
//2pick
void SwapPickDeck();
protected:
DuelPlayer* players[2];
DuelPlayer* pplayer[2];
bool ready[2];
Deck pdeck[2];
//2pick
Deck pick_deck[2];
int deck_error[2];
unsigned char hand_result[2];
unsigned char last_response;
......
......@@ -912,4 +912,6 @@ public:
#define MSG_CUSTOM_MSG 180
#define MSG_SELECT_UNSELECT_CARD 190
//2pick
#define MSG_SAVE_PICK_DECK 222
#endif /* FIELD_H_ */
......@@ -369,6 +369,8 @@ static const struct luaL_Reg grouplib[] = {
};
static const struct luaL_Reg duellib[] = {
//2pick
{ "SavePickDeck", scriptlib::duel_save_pick_deck },
//modded
{ "SelectField", scriptlib::duel_select_field },
{ "GetMasterRule", scriptlib::duel_get_master_rule },
......
......@@ -13,6 +13,24 @@
#include "group.h"
#include "ocgapi.h"
//2pick
int32 scriptlib::duel_save_pick_deck(lua_State * L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_GROUP, 2)
int32 playerid = lua_tonumberint(L, 1);
if(playerid != 0 && playerid != 1)
return 0;
group* pgroup = *(group**) lua_touserdata(L, 2);
duel* pduel = pgroup->pduel;
if(pgroup->container.size() == 0)
luaL_error(L, "Deck empty.", 2);
pduel->write_buffer8(MSG_SAVE_PICK_DECK);
pduel->write_buffer8(playerid);
pduel->write_buffer8(pgroup->container.size());
for(auto cit = pgroup->container.begin(); cit != pgroup->container.end(); ++cit) {
pduel->write_buffer32((*cit)->data.code);
}
}
//modded
int32 scriptlib::duel_select_field(lua_State * L) {
check_action_permission(L);
......
......@@ -16,6 +16,8 @@ public:
static int32 check_param(lua_State* L, int32 param_type, int32 index, BOOL retfalse = FALSE);
static int32 check_param_count(lua_State* L, int32 count);
static int32 check_action_permission(lua_State* L);
//2pick
static int32 duel_save_pick_deck(lua_State *L);
//millux
static int32 card_is_ritual_type(lua_State *L);
//modded
......
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