Commit 02e33615 authored by nanahira's avatar nanahira

Will load default deck

parent 8b2a3e39
...@@ -88,8 +88,8 @@ function Auxiliary.SaveDeck() ...@@ -88,8 +88,8 @@ function Auxiliary.SaveDeck()
Duel.SavePickDeck(p,g) Duel.SavePickDeck(p,g)
end end
end end
function Auxiliary.SinglePick(p,list,count) function Auxiliary.SinglePick(p,list,count)
if not Duel.IsPlayerNeedToPickDeck(p) then return end
local g1=Group.CreateGroup() local g1=Group.CreateGroup()
local g2=Group.CreateGroup() local g2=Group.CreateGroup()
for _,g in ipairs({g1,g2}) do for _,g in ipairs({g1,g2}) do
...@@ -111,6 +111,7 @@ function Auxiliary.SinglePick(p,list,count) ...@@ -111,6 +111,7 @@ function Auxiliary.SinglePick(p,list,count)
end end
function Auxiliary.SinglePickForMain(p,list,count) function Auxiliary.SinglePickForMain(p,list,count)
if not Duel.IsPlayerNeedToPickDeck(p) then return end
local g1=Group.CreateGroup() local g1=Group.CreateGroup()
local g2=Group.CreateGroup() local g2=Group.CreateGroup()
for _,g in ipairs({g1,g2}) do for _,g in ipairs({g1,g2}) do
...@@ -139,29 +140,13 @@ end ...@@ -139,29 +140,13 @@ end
function Auxiliary.StartPick(e) function Auxiliary.StartPick(e)
math.randomseed(os.time()) math.randomseed(os.time())
local g=Duel.GetFieldGroup(0,LOCATION_HAND | LOCATION_DECK | LOCATION_EXTRA, LOCATION_HAND | LOCATION_DECK | LOCATION_EXTRA) for p=0,1 do
if g:GetCount()>=80 then if Duel.IsPlayerNeedToPickDeck(p) then
--already picked local g=Duel.GetFieldGroup(p,0xff,0)
Auxiliary.SaveDeck() Duel.Exile(g,REASON_RULE)
Duel.Draw(0,5,REASON_RULE) end
Duel.Draw(1,5,REASON_RULE)
e:Reset()
return
end end
Duel.Exile(g,REASON_RULE)
for i=1,5 do for i=1,5 do
--[[local list=main
local count=4
if i==9 then
list=semi_limited
elseif i==10 then
list=limited
count=3
elseif i==11 then
list=forbidden
count=1
end]]
local list=main_monster local list=main_monster
if i==4 then if i==4 then
list=main_spell list=main_spell
...@@ -170,7 +155,6 @@ function Auxiliary.StartPick(e) ...@@ -170,7 +155,6 @@ function Auxiliary.StartPick(e)
end end
for p=0,1 do for p=0,1 do
Auxiliary.SinglePickForMain(p,list,4) Auxiliary.SinglePickForMain(p,list,4)
--Auxiliary.SinglePick(p,main,4)
end end
end end
for tp,list in pairs(extra_sp) do for tp,list in pairs(extra_sp) do
...@@ -180,14 +164,17 @@ function Auxiliary.StartPick(e) ...@@ -180,14 +164,17 @@ function Auxiliary.StartPick(e)
end end
end end
end end
for i=1,1 do for i=1,2 do
for p=0,1 do for p=0,1 do
Auxiliary.SinglePick(p,extra,4) Auxiliary.SinglePick(p,extra,4)
end end
end end
Auxiliary.SaveDeck() Auxiliary.SaveDeck()
Duel.ShuffleDeck(0) for p=0,1 do
Duel.ShuffleDeck(1) if Duel.IsPlayerNeedToPickDeck(p) then
Duel.ShuffleDeck(p)
end
end
Duel.Draw(0,5,REASON_RULE) Duel.Draw(0,5,REASON_RULE)
Duel.Draw(1,5,REASON_RULE) Duel.Draw(1,5,REASON_RULE)
e:Reset() e:Reset()
......
...@@ -110,11 +110,11 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tc ...@@ -110,11 +110,11 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tc
if(!list) if(!list)
return 0; return 0;
int dc = 0; int dc = 0;
if(deck.main.size() > 1) if(deck.main.size() < 40 || deck.main.size() > 60)
return (DECKERROR_MAINCOUNT << 28) + deck.main.size(); return (DECKERROR_MAINCOUNT << 28) + deck.main.size();
if(deck.extra.size() > 0) if(deck.extra.size() > 15)
return (DECKERROR_EXTRACOUNT << 28) + deck.extra.size(); return (DECKERROR_EXTRACOUNT << 28) + deck.extra.size();
if(deck.side.size() > 0) if(deck.side.size() > 15)
return (DECKERROR_SIDECOUNT << 28) + deck.side.size(); return (DECKERROR_SIDECOUNT << 28) + deck.side.size();
for(size_t i = 0; i < deck.main.size(); ++i) { for(size_t i = 0; i < deck.main.size(); ++i) {
......
...@@ -27,6 +27,10 @@ SingleDuel::SingleDuel(bool is_match) { ...@@ -27,6 +27,10 @@ SingleDuel::SingleDuel(bool is_match) {
cache_recorder = 0; cache_recorder = 0;
replay_recorder = 0; replay_recorder = 0;
#endif #endif
//2pick
int cardlist[128];
cardlist[0] = 89631139;
deckManager.LoadDeck(default_deck, cardlist, 1, 0);
} }
SingleDuel::~SingleDuel() { SingleDuel::~SingleDuel() {
} }
...@@ -365,7 +369,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -365,7 +369,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
return; return;
if(is_ready) { if(is_ready) {
unsigned int deckerror = 0; unsigned int deckerror = 0;
if(!host_info.no_check_deck) { /*if(!host_info.no_check_deck) {
if(deck_error[dp->type]) { if(deck_error[dp->type]) {
deckerror = (DECKERROR_UNKNOWNCARD << 28) + deck_error[dp->type]; deckerror = (DECKERROR_UNKNOWNCARD << 28) + deck_error[dp->type];
} else { } else {
...@@ -373,7 +377,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -373,7 +377,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
bool allow_tcg = host_info.rule == 1 || host_info.rule == 2; bool allow_tcg = host_info.rule == 1 || host_info.rule == 2;
deckerror = deckManager.CheckDeck(pdeck[dp->type], host_info.lflist, allow_ocg, allow_tcg); deckerror = deckManager.CheckDeck(pdeck[dp->type], host_info.lflist, allow_ocg, allow_tcg);
} }
} }*/
if(deckerror) { if(deckerror) {
STOC_HS_PlayerChange scpc; STOC_HS_PlayerChange scpc;
scpc.status = (dp->type << 4) | PLAYERCHANGE_NOTREADY; scpc.status = (dp->type << 4) | PLAYERCHANGE_NOTREADY;
...@@ -522,12 +526,12 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -522,12 +526,12 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
swapped = true; swapped = true;
} }
//2pick deck check //2pick deck check
if(pick_deck_saved[0]) for(int i = 0; i < 2; i++) {
pdeck[0] = pick_deck[0]; if(pick_deck_saved[i])
if(pick_deck_saved[1]) pdeck[i] = pick_deck[i];
pdeck[1] = pick_deck[1]; else
pick_deck_saved[0] = false; pdeck[i] = default_deck;
pick_deck_saved[1] = false; }
dp->state = CTOS_RESPONSE; dp->state = CTOS_RESPONSE;
ReplayHeader rh; ReplayHeader rh;
rh.id = 0x31707279; rh.id = 0x31707279;
...@@ -557,8 +561,10 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -557,8 +561,10 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
set_message_handler((message_handler)SingleDuel::MessageHandler); set_message_handler((message_handler)SingleDuel::MessageHandler);
rnd.reset(seed); rnd.reset(seed);
pduel = create_duel(rnd.rand()); pduel = create_duel(rnd.rand());
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, !pick_deck_saved[0]);
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, !pick_deck_saved[1]);
pick_deck_saved[0] = false;
pick_deck_saved[1] = false;
int opt = (int)host_info.duel_rule << 16; int opt = (int)host_info.duel_rule << 16;
if(host_info.no_shuffle_deck) if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE; opt |= DUEL_PSEUDO_SHUFFLE;
......
...@@ -45,6 +45,7 @@ public: ...@@ -45,6 +45,7 @@ public:
protected: protected:
//2pick //2pick
Deck default_deck;
Deck pick_deck[2]; Deck pick_deck[2];
bool pick_deck_saved[2]; bool pick_deck_saved[2];
......
...@@ -71,6 +71,7 @@ struct player_info { ...@@ -71,6 +71,7 @@ struct player_info {
int32 lp; int32 lp;
int32 start_count; int32 start_count;
int32 draw_count; int32 draw_count;
int32 pick_needed;
uint32 used_location; uint32 used_location;
uint32 disabled_location; uint32 disabled_location;
uint32 extra_p_count; uint32 extra_p_count;
......
...@@ -370,7 +370,8 @@ static const struct luaL_Reg grouplib[] = { ...@@ -370,7 +370,8 @@ static const struct luaL_Reg grouplib[] = {
static const struct luaL_Reg duellib[] = { static const struct luaL_Reg duellib[] = {
//2pick //2pick
{ "SavePickDeck", scriptlib::duel_save_pick_deck }, { "SavePickDeck", scriptlib::duel_save_pick_deck },
{ "IsPlayerNeedToPickDeck", scriptlib::duel_is_player_need_to_pick_deck },
//modded //modded
{ "SelectField", scriptlib::duel_select_field }, { "SelectField", scriptlib::duel_select_field },
{ "GetMasterRule", scriptlib::duel_get_master_rule }, { "GetMasterRule", scriptlib::duel_get_master_rule },
......
...@@ -32,6 +32,15 @@ int32 scriptlib::duel_save_pick_deck(lua_State * L) { ...@@ -32,6 +32,15 @@ int32 scriptlib::duel_save_pick_deck(lua_State * L) {
} }
return 0; return 0;
} }
int32 scriptlib::duel_is_player_need_to_pick_deck(lua_State * L) {
check_param_count(L, 1);
int32 p = lua_tonumberint(L, 1);
if(p != 0 && p != 1)
luaL_error(L, "Parameter 1 should be 0 or 1.", 2);;
duel* pduel = interpreter::get_duel_info(L);
lua_pushboolean(L, pduel->game_field->player[p].pick_needed);
return 1;
}
//modded //modded
int32 scriptlib::duel_select_field(lua_State * L) { int32 scriptlib::duel_select_field(lua_State * L) {
check_action_permission(L); check_action_permission(L);
......
...@@ -111,7 +111,7 @@ extern "C" DECL_DLLEXPORT void end_duel(ptr pduel) { ...@@ -111,7 +111,7 @@ extern "C" DECL_DLLEXPORT void end_duel(ptr pduel) {
delete pd; delete pd;
} }
} }
extern "C" DECL_DLLEXPORT void set_player_info(ptr pduel, int32 playerid, int32 lp, int32 startcount, int32 drawcount) { extern "C" DECL_DLLEXPORT void set_player_info(ptr pduel, int32 playerid, int32 lp, int32 startcount, int32 drawcount, bool pick_needed) {
duel* pd = (duel*)pduel; duel* pd = (duel*)pduel;
if(lp > 0) if(lp > 0)
pd->game_field->player[playerid].lp = lp; pd->game_field->player[playerid].lp = lp;
...@@ -119,6 +119,11 @@ extern "C" DECL_DLLEXPORT void set_player_info(ptr pduel, int32 playerid, int32 ...@@ -119,6 +119,11 @@ extern "C" DECL_DLLEXPORT void set_player_info(ptr pduel, int32 playerid, int32
pd->game_field->player[playerid].start_count = startcount; pd->game_field->player[playerid].start_count = startcount;
if(drawcount >= 0) if(drawcount >= 0)
pd->game_field->player[playerid].draw_count = drawcount; pd->game_field->player[playerid].draw_count = drawcount;
//2pick
if(pick_needed)
pd->game_field->player[playerid].pick_needed = TRUE;
else
pd->game_field->player[playerid].pick_needed = FALSE;
} }
extern "C" DECL_DLLEXPORT void get_log_message(ptr pduel, byte* buf) { extern "C" DECL_DLLEXPORT void get_log_message(ptr pduel, byte* buf) {
strcpy((char*)buf, ((duel*)pduel)->strbuffer); strcpy((char*)buf, ((duel*)pduel)->strbuffer);
......
...@@ -38,7 +38,7 @@ uint32 handle_message(void* pduel, uint32 message_type); ...@@ -38,7 +38,7 @@ uint32 handle_message(void* pduel, uint32 message_type);
extern "C" DECL_DLLEXPORT ptr create_duel(uint32 seed); extern "C" DECL_DLLEXPORT ptr create_duel(uint32 seed);
extern "C" DECL_DLLEXPORT void start_duel(ptr pduel, int32 options); extern "C" DECL_DLLEXPORT void start_duel(ptr pduel, int32 options);
extern "C" DECL_DLLEXPORT void end_duel(ptr pduel); extern "C" DECL_DLLEXPORT void end_duel(ptr pduel);
extern "C" DECL_DLLEXPORT void set_player_info(ptr pduel, int32 playerid, int32 lp, int32 startcount, int32 drawcount); extern "C" DECL_DLLEXPORT void set_player_info(ptr pduel, int32 playerid, int32 lp, int32 startcount, int32 drawcount, bool pick_needed = false);
extern "C" DECL_DLLEXPORT void get_log_message(ptr pduel, byte* buf); extern "C" DECL_DLLEXPORT void get_log_message(ptr pduel, byte* buf);
extern "C" DECL_DLLEXPORT int32 get_message(ptr pduel, byte* buf); extern "C" DECL_DLLEXPORT int32 get_message(ptr pduel, byte* buf);
extern "C" DECL_DLLEXPORT int32 process(ptr pduel); extern "C" DECL_DLLEXPORT int32 process(ptr pduel);
......
...@@ -18,6 +18,7 @@ public: ...@@ -18,6 +18,7 @@ public:
static int32 check_action_permission(lua_State* L); static int32 check_action_permission(lua_State* L);
//2pick //2pick
static int32 duel_save_pick_deck(lua_State *L); static int32 duel_save_pick_deck(lua_State *L);
static int32 duel_is_player_need_to_pick_deck(lua_State *L);
//millux //millux
static int32 card_is_ritual_type(lua_State *L); static int32 card_is_ritual_type(lua_State *L);
//modded //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