Commit 88b80643 authored by argon.sun's avatar argon.sun

fix

parent e73969cf
...@@ -145,6 +145,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) { ...@@ -145,6 +145,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
mainGame->HideElement(mainGame->wHostPrepare); mainGame->HideElement(mainGame->wHostPrepare);
mainGame->ShowElement(mainGame->wLanWindow); mainGame->ShowElement(mainGame->wLanWindow);
mainGame->wChat->setVisible(false);
if(events & BEV_EVENT_EOF) if(events & BEV_EVENT_EOF)
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1401)); mainGame->env->addMessageBox(L"", dataManager.GetSysString(1401));
else mainGame->env->addMessageBox(L"", dataManager.GetSysString(1402)); else mainGame->env->addMessageBox(L"", dataManager.GetSysString(1402));
......
...@@ -93,7 +93,12 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -93,7 +93,12 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break; break;
} }
case BUTTON_HP_KICK: { case BUTTON_HP_KICK: {
int id = caller - static_cast<IGUIElement*>(mainGame->btnHostPrepKick[0]); int id = 0;
while(id < 4) {
if(mainGame->btnHostPrepKick[id] == caller)
break;
id++;
}
CTOS_Kick csk; CTOS_Kick csk;
csk.pos = id; csk.pos = id;
DuelClient::SendPacketToServer(CTOS_HS_KICK, csk); DuelClient::SendPacketToServer(CTOS_HS_KICK, csk);
......
...@@ -261,7 +261,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -261,7 +261,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
} }
void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) { void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
if(dp != host_player || dp == players[pos] || !players[pos]) if(pos > 1 || dp != host_player || dp == players[pos] || !players[pos])
return; return;
LeaveGame(players[pos]); LeaveGame(players[pos]);
} }
......
...@@ -244,7 +244,7 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -244,7 +244,7 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
} }
void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) { void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
if(dp != host_player || dp == players[pos] || !players[pos]) if(pos > 3 || dp != host_player || dp == players[pos] || !players[pos])
return; return;
LeaveGame(players[pos]); LeaveGame(players[pos]);
} }
......
...@@ -76,4 +76,5 @@ public: ...@@ -76,4 +76,5 @@ public:
#define DUEL_ENABLE_PRIORITY 0x08 #define DUEL_ENABLE_PRIORITY 0x08
#define DUEL_PSEUDO_SHUFFLE 0x10 #define DUEL_PSEUDO_SHUFFLE 0x10
#define DUEL_TAG_MODE 0x20 #define DUEL_TAG_MODE 0x20
#define DUEL_SIMPLE_AI 0x40
#endif /* DUEL_H_ */ #endif /* DUEL_H_ */
...@@ -48,6 +48,15 @@ int32 scriptlib::debug_add_card(lua_State *L) { ...@@ -48,6 +48,15 @@ int32 scriptlib::debug_add_card(lua_State *L) {
pcard->set_status(STATUS_PROC_COMPLETE, TRUE); pcard->set_status(STATUS_PROC_COMPLETE, TRUE);
interpreter::card2value(L, pcard); interpreter::card2value(L, pcard);
return 1; return 1;
} else if(location == LOCATION_MZONE) {
card* pcard = pduel->new_card(code);
pcard->owner = owner;
card* fcard = pduel->game_field->get_field_card(playerid, location, sequence);
fcard->xyz_materials.push_back(pcard);
pcard->overlay_target = fcard;
pcard->current.controler = PLAYER_NONE;
pcard->current.location = LOCATION_OVERLAY;
pcard->current.sequence = fcard->xyz_materials.size() - 1;
} }
return 0; return 0;
} }
...@@ -66,6 +75,13 @@ int32 scriptlib::debug_set_player_info(lua_State *L) { ...@@ -66,6 +75,13 @@ int32 scriptlib::debug_set_player_info(lua_State *L) {
pd->game_field->player[playerid].draw_count = drawcount; pd->game_field->player[playerid].draw_count = drawcount;
return 0; return 0;
} }
int32 scriptlib::debug_set_duel_info(lua_State *L) {
check_param_count(L, 1);
duel* pduel = interpreter::get_duel_info(L);
uint32 flag = lua_tointeger(L, 1);
pduel->game_field->core.duel_options = flag;
return 0;
}
int32 scriptlib::debug_reload_field_begin(lua_State *L) { int32 scriptlib::debug_reload_field_begin(lua_State *L) {
} }
int32 scriptlib::debug_reload_field_end(lua_State *L) { int32 scriptlib::debug_reload_field_end(lua_State *L) {
......
...@@ -72,7 +72,7 @@ extern "C" DECL_DLLEXPORT ptr create_duel(uint32 seed) { ...@@ -72,7 +72,7 @@ extern "C" DECL_DLLEXPORT ptr create_duel(uint32 seed) {
} }
extern "C" DECL_DLLEXPORT void start_duel(ptr pduel, int options) { extern "C" DECL_DLLEXPORT void start_duel(ptr pduel, int options) {
duel* pd = (duel*)pduel; duel* pd = (duel*)pduel;
pd->game_field->core.duel_options = options; pd->game_field->core.duel_options |= options;
if(pd->game_field->player[0].start_count > 0) if(pd->game_field->player[0].start_count > 0)
pd->game_field->draw(0, REASON_RULE, PLAYER_NONE, 0, pd->game_field->player[0].start_count); pd->game_field->draw(0, REASON_RULE, PLAYER_NONE, 0, pd->game_field->player[0].start_count);
if(pd->game_field->player[1].start_count > 0) if(pd->game_field->player[1].start_count > 0)
......
...@@ -160,6 +160,10 @@ int32 field::select_idle_command(uint16 step, uint8 playerid) { ...@@ -160,6 +160,10 @@ int32 field::select_idle_command(uint16 step, uint8 playerid) {
} }
int32 field::select_effect_yes_no(uint16 step, uint8 playerid, card* pcard) { int32 field::select_effect_yes_no(uint16 step, uint8 playerid, card* pcard) {
if(step == 0) { if(step == 0) {
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
returns.ivalue[0] = 1;
return TRUE;
}
pduel->write_buffer8(MSG_SELECT_EFFECTYN); pduel->write_buffer8(MSG_SELECT_EFFECTYN);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
pduel->write_buffer32(pcard->data.code); pduel->write_buffer32(pcard->data.code);
...@@ -176,6 +180,10 @@ int32 field::select_effect_yes_no(uint16 step, uint8 playerid, card* pcard) { ...@@ -176,6 +180,10 @@ int32 field::select_effect_yes_no(uint16 step, uint8 playerid, card* pcard) {
} }
int32 field::select_yes_no(uint16 step, uint8 playerid, uint32 description) { int32 field::select_yes_no(uint16 step, uint8 playerid, uint32 description) {
if(step == 0) { if(step == 0) {
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
returns.ivalue[0] = 1;
return TRUE;
}
pduel->write_buffer8(MSG_SELECT_YESNO); pduel->write_buffer8(MSG_SELECT_YESNO);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
pduel->write_buffer32(description); pduel->write_buffer32(description);
...@@ -194,6 +202,10 @@ int32 field::select_option(uint16 step, uint8 playerid) { ...@@ -194,6 +202,10 @@ int32 field::select_option(uint16 step, uint8 playerid) {
returns.ivalue[0] = -1; returns.ivalue[0] = -1;
if(core.select_options.size() == 0) if(core.select_options.size() == 0)
return TRUE; return TRUE;
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
returns.ivalue[0] = 0;
return TRUE;
}
pduel->write_buffer8(MSG_SELECT_OPTION); pduel->write_buffer8(MSG_SELECT_OPTION);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
pduel->write_buffer8(core.select_options.size()); pduel->write_buffer8(core.select_options.size());
...@@ -219,6 +231,12 @@ int32 field::select_card(uint16 step, uint8 playerid, uint8 cancelable, uint8 mi ...@@ -219,6 +231,12 @@ int32 field::select_card(uint16 step, uint8 playerid, uint8 cancelable, uint8 mi
max = core.select_cards.size(); max = core.select_cards.size();
if(min > max) if(min > max)
min = max; min = max;
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
returns.bvalue[0] = min;
for(uint8 i = 0; i < min; ++i)
returns.bvalue[i + 1] = i + 1;
return TRUE;
}
core.units.begin()->arg2 = ((uint32)min) + (((uint32)max) << 16); core.units.begin()->arg2 = ((uint32)min) + (((uint32)max) << 16);
pduel->write_buffer8(MSG_SELECT_CARD); pduel->write_buffer8(MSG_SELECT_CARD);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
...@@ -268,6 +286,13 @@ int32 field::select_card(uint16 step, uint8 playerid, uint8 cancelable, uint8 mi ...@@ -268,6 +286,13 @@ int32 field::select_card(uint16 step, uint8 playerid, uint8 cancelable, uint8 mi
int32 field::select_chain(uint16 step, uint8 playerid, uint8 spe_count, uint8 forced) { int32 field::select_chain(uint16 step, uint8 playerid, uint8 spe_count, uint8 forced) {
if(step == 0) { if(step == 0) {
returns.ivalue[0] = -1; returns.ivalue[0] = -1;
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
if(core.select_chains.size() == 0)
returns.ivalue[0] = -1;
else
returns.ivalue[0] = 0;
return TRUE;
}
pduel->write_buffer8(MSG_SELECT_CHAIN); pduel->write_buffer8(MSG_SELECT_CHAIN);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
pduel->write_buffer8(core.select_chains.size()); pduel->write_buffer8(core.select_chains.size());
...@@ -298,6 +323,26 @@ int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count) ...@@ -298,6 +323,26 @@ int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count)
if(step == 0) { if(step == 0) {
if(count == 0) if(count == 0)
return TRUE; return TRUE;
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
returns.bvalue[0] = 1;
flag = ~flag;
if(flag & 0x1f) {
returns.bvalue[1] = LOCATION_MZONE;
if(flag & 0x4) returns.bvalue[2] = 2;
else if(flag & 0x2) returns.bvalue[2] = 1;
else if(flag & 0x8) returns.bvalue[2] = 3;
else if(flag & 0x1) returns.bvalue[2] = 0;
else returns.bvalue[2] = 4;
} else {
returns.bvalue[1] = LOCATION_SZONE;
if(flag & 0x400) returns.bvalue[2] = 2;
else if(flag & 0x200) returns.bvalue[2] = 1;
else if(flag & 0x800) returns.bvalue[2] = 3;
else if(flag & 0x100) returns.bvalue[2] = 0;
else returns.bvalue[2] = 4;
}
return true;
}
if(core.units.begin()->type == PROCESSOR_SELECT_PLACE) if(core.units.begin()->type == PROCESSOR_SELECT_PLACE)
pduel->write_buffer8(MSG_SELECT_PLACE); pduel->write_buffer8(MSG_SELECT_PLACE);
else else
...@@ -313,8 +358,8 @@ int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count) ...@@ -313,8 +358,8 @@ int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count)
p = returns.bvalue[pt]; p = returns.bvalue[pt];
l = returns.bvalue[pt + 1]; l = returns.bvalue[pt + 1];
s = returns.bvalue[pt + 2]; s = returns.bvalue[pt + 2];
if((p != 0 && p != 1) || (l != LOCATION_MZONE && l != LOCATION_SZONE) || s >= 5 if((p != 0 && p != 1) || ((l != LOCATION_MZONE) && (l != LOCATION_SZONE)) || s >= 5
|| ((1 << s) & (flag >> ((p == playerid ? 0 : 16) + (l == LOCATION_MZONE ? 0 : 8))))) { || ((1 << s) & (flag >> (((p == playerid) ? 0 : 16) + ((l == LOCATION_MZONE) ? 0 : 8))))) {
pduel->write_buffer8(MSG_RETRY); pduel->write_buffer8(MSG_RETRY);
return FALSE; return FALSE;
} }
...@@ -541,6 +586,10 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32 ...@@ -541,6 +586,10 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
int32 field::sort_card(int16 step, uint8 playerid, uint8 is_chain) { int32 field::sort_card(int16 step, uint8 playerid, uint8 is_chain) {
if(step == 0) { if(step == 0) {
returns.bvalue[0] = 0; returns.bvalue[0] = 0;
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
returns.ivalue[0] = -1;
return TRUE;
}
if(core.select_cards.empty()) if(core.select_cards.empty())
return TRUE; return TRUE;
if(is_chain) if(is_chain)
......
...@@ -461,6 +461,7 @@ public: ...@@ -461,6 +461,7 @@ public:
static int32 debug_message(lua_State *L); static int32 debug_message(lua_State *L);
static int32 debug_add_card(lua_State *L); static int32 debug_add_card(lua_State *L);
static int32 debug_set_player_info(lua_State *L); static int32 debug_set_player_info(lua_State *L);
static int32 debug_set_duel_info(lua_State *L);
static int32 debug_reload_field_begin(lua_State *L); static int32 debug_reload_field_begin(lua_State *L);
static int32 debug_reload_field_end(lua_State *L); static int32 debug_reload_field_end(lua_State *L);
}; };
......
...@@ -49,6 +49,7 @@ end ...@@ -49,6 +49,7 @@ end
function c45812361.operation(e,tp,eg,ep,ev,re,r,rp) function c45812361.operation(e,tp,eg,ep,ev,re,r,rp)
local ct=Duel.Draw(tp,2,REASON_EFFECT) local ct=Duel.Draw(tp,2,REASON_EFFECT)
if ct==0 then return end if ct==0 then return end
Duel.BreakEffect()
Duel.SkipPhase(tp,PHASE_MAIN1,RESET_PHASE+PHASE_END,1) Duel.SkipPhase(tp,PHASE_MAIN1,RESET_PHASE+PHASE_END,1)
local e1=Effect.CreateEffect(e:GetHandler()) local e1=Effect.CreateEffect(e:GetHandler())
e1:SetType(EFFECT_TYPE_FIELD) e1:SetType(EFFECT_TYPE_FIELD)
......
...@@ -37,7 +37,7 @@ function c48252330.cfilter(c) ...@@ -37,7 +37,7 @@ function c48252330.cfilter(c)
return c:IsFaceup() and c:IsSetCard(0x71) return c:IsFaceup() and c:IsSetCard(0x71)
end end
function c48252330.shcon(e,tp,eg,ep,ev,re,r,rp) function c48252330.shcon(e,tp,eg,ep,ev,re,r,rp)
return Duel.IsExistingMatchingCard(c48252330.cfilter,tp,LOCATION_MZONE,0,1,e:GetHandler()) return Duel.IsExistingMatchingCard(c48252330.cfilter,tp,LOCATION_MZONE,LOCATION_MZONE,1,e:GetHandler())
end end
function c48252330.filter(c) function c48252330.filter(c)
return c:IsType(TYPE_FIELD) and c:IsAbleToHand() return c:IsType(TYPE_FIELD) and c:IsAbleToHand()
...@@ -47,7 +47,7 @@ function c48252330.shtg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -47,7 +47,7 @@ function c48252330.shtg(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,1,tp,LOCATION_DECK) Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,1,tp,LOCATION_DECK)
end end
function c48252330.shop(e,tp,eg,ep,ev,re,r,rp) function c48252330.shop(e,tp,eg,ep,ev,re,r,rp)
if not Duel.IsExistingMatchingCard(c48252330.cfilter,tp,LOCATION_MZONE,0,1,e:GetHandler()) then return end if not Duel.IsExistingMatchingCard(c48252330.cfilter,tp,LOCATION_MZONE,LOCATION_MZONE,1,e:GetHandler()) then return end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND)
local g=Duel.SelectMatchingCard(tp,c48252330.filter,tp,LOCATION_DECK,0,1,1,nil) local g=Duel.SelectMatchingCard(tp,c48252330.filter,tp,LOCATION_DECK,0,1,1,nil)
if g:GetCount()>0 then if g:GetCount()>0 then
......
...@@ -9,5 +9,5 @@ lastdeck = sample ...@@ -9,5 +9,5 @@ lastdeck = sample
textfont = c:/windows/fonts/simsun.ttc 14 textfont = c:/windows/fonts/simsun.ttc 14
numfont = c:/windows/fonts/arialbd.ttf numfont = c:/windows/fonts/arialbd.ttf
serverport = 7911 serverport = 7911
lastip = 192.168.2.100 lastip = 192.168.3.235
lastport = 7911 lastport = 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