Commit 9e2b1d82 authored by fallenstardust's avatar fallenstardust

sync ocgcore

parent 75f4e4f3
...@@ -2477,7 +2477,7 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack, ...@@ -2477,7 +2477,7 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack,
return atype; return atype;
if((mcount == 0 || pcard->is_affected_by_effect(EFFECT_DIRECT_ATTACK) || core.attack_player) if((mcount == 0 || pcard->is_affected_by_effect(EFFECT_DIRECT_ATTACK) || core.attack_player)
&& !pcard->is_affected_by_effect(EFFECT_CANNOT_DIRECT_ATTACK) && !pcard->is_affected_by_effect(EFFECT_CANNOT_DIRECT_ATTACK)
&& !(extra_count_m && pcard->announce_count > extra_count) && !(!chain_attack && extra_count_m && pcard->announce_count > extra_count)
&& !(chain_attack && core.chain_attack_target)) && !(chain_attack && core.chain_attack_target))
pcard->direct_attackable = 1; pcard->direct_attackable = 1;
return atype; return atype;
......
...@@ -962,6 +962,17 @@ int32 scriptlib::card_is_type(lua_State *L) { ...@@ -962,6 +962,17 @@ int32 scriptlib::card_is_type(lua_State *L) {
lua_pushboolean(L, 0); lua_pushboolean(L, 0);
return 1; return 1;
} }
int32 scriptlib::card_is_all_types(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 ttype = (uint32)lua_tointeger(L, 2);
if((pcard->get_type() & ttype) == ttype)
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::card_is_fusion_type(lua_State *L) { int32 scriptlib::card_is_fusion_type(lua_State *L) {
check_param_count(L, 2); check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1); check_param(L, PARAM_TYPE_CARD, 1);
...@@ -1209,6 +1220,17 @@ int32 scriptlib::card_is_reason(lua_State *L) { ...@@ -1209,6 +1220,17 @@ int32 scriptlib::card_is_reason(lua_State *L) {
lua_pushboolean(L, 0); lua_pushboolean(L, 0);
return 1; return 1;
} }
int32 scriptlib::card_is_all_reasons(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 treason = (uint32)lua_tointeger(L, 2);
if((pcard->current.reason & treason) == treason)
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::card_is_summon_type(lua_State *L) { int32 scriptlib::card_is_summon_type(lua_State *L) {
check_param_count(L, 2); check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1); check_param(L, PARAM_TYPE_CARD, 1);
...@@ -2695,6 +2717,29 @@ int32 scriptlib::card_is_defense_above(lua_State *L) { ...@@ -2695,6 +2717,29 @@ int32 scriptlib::card_is_defense_above(lua_State *L) {
} }
return 1; return 1;
} }
int32 scriptlib::card_is_has_level(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
if((pcard->data.type & (TYPE_XYZ | TYPE_LINK))
|| (pcard->status & STATUS_NO_LEVEL)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !pcard->is_affected_by_effect(EFFECT_PRE_MONSTER)))
lua_pushboolean(L, 0);
else
lua_pushboolean(L, 1);
return 1;
}
int32 scriptlib::card_is_has_defense(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
if((pcard->data.type & TYPE_LINK)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !pcard->is_affected_by_effect(EFFECT_PRE_MONSTER)))
lua_pushboolean(L, 0);
else
lua_pushboolean(L, 1);
return 1;
}
int32 scriptlib::card_is_public(lua_State *L) { int32 scriptlib::card_is_public(lua_State *L) {
check_param_count(L, 1); check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1); check_param(L, PARAM_TYPE_CARD, 1);
...@@ -3358,6 +3403,7 @@ static const struct luaL_Reg cardlib[] = { ...@@ -3358,6 +3403,7 @@ static const struct luaL_Reg cardlib[] = {
{ "IsOriginalCodeRule", scriptlib::card_is_origin_code_rule }, { "IsOriginalCodeRule", scriptlib::card_is_origin_code_rule },
{ "IsCode", scriptlib::card_is_code }, { "IsCode", scriptlib::card_is_code },
{ "IsType", scriptlib::card_is_type }, { "IsType", scriptlib::card_is_type },
{ "IsAllTypes", scriptlib::card_is_all_types },
{ "IsFusionType", scriptlib::card_is_fusion_type }, { "IsFusionType", scriptlib::card_is_fusion_type },
{ "IsSynchroType", scriptlib::card_is_synchro_type }, { "IsSynchroType", scriptlib::card_is_synchro_type },
{ "IsXyzType", scriptlib::card_is_xyz_type }, { "IsXyzType", scriptlib::card_is_xyz_type },
...@@ -3375,6 +3421,7 @@ static const struct luaL_Reg cardlib[] = { ...@@ -3375,6 +3421,7 @@ static const struct luaL_Reg cardlib[] = {
{ "IsNonAttribute", scriptlib::card_is_non_attribute }, { "IsNonAttribute", scriptlib::card_is_non_attribute },
{ "IsExtraDeckMonster", scriptlib::card_is_extra_deck_monster }, { "IsExtraDeckMonster", scriptlib::card_is_extra_deck_monster },
{ "IsReason", scriptlib::card_is_reason }, { "IsReason", scriptlib::card_is_reason },
{ "IsAllReasons", scriptlib::card_is_all_reasons },
{ "IsSummonType", scriptlib::card_is_summon_type }, { "IsSummonType", scriptlib::card_is_summon_type },
{ "IsSummonLocation", scriptlib::card_is_summon_location }, { "IsSummonLocation", scriptlib::card_is_summon_location },
{ "IsSummonPlayer", scriptlib::card_is_summon_player }, { "IsSummonPlayer", scriptlib::card_is_summon_player },
...@@ -3493,6 +3540,8 @@ static const struct luaL_Reg cardlib[] = { ...@@ -3493,6 +3540,8 @@ static const struct luaL_Reg cardlib[] = {
{ "IsAttackAbove", scriptlib::card_is_attack_above }, { "IsAttackAbove", scriptlib::card_is_attack_above },
{ "IsDefenseBelow", scriptlib::card_is_defense_below }, { "IsDefenseBelow", scriptlib::card_is_defense_below },
{ "IsDefenseAbove", scriptlib::card_is_defense_above }, { "IsDefenseAbove", scriptlib::card_is_defense_above },
{ "IsHasLevel", scriptlib::card_is_has_level },
{ "IsHasDefense", scriptlib::card_is_has_defense },
{ "IsPublic", scriptlib::card_is_public }, { "IsPublic", scriptlib::card_is_public },
{ "IsForbidden", scriptlib::card_is_forbidden }, { "IsForbidden", scriptlib::card_is_forbidden },
{ "IsAbleToChangeControler", scriptlib::card_is_able_to_change_controler }, { "IsAbleToChangeControler", scriptlib::card_is_able_to_change_controler },
......
...@@ -44,6 +44,16 @@ int32 scriptlib::duel_set_lp(lua_State *L) { ...@@ -44,6 +44,16 @@ int32 scriptlib::duel_set_lp(lua_State *L) {
pduel->write_buffer32(lp); pduel->write_buffer32(lp);
return 0; return 0;
} }
int32 scriptlib::duel_is_turn_player(lua_State *L) {
check_param_count(L, 1);
int32 playerid = (int32)lua_tointeger(L, 1);
duel* pduel = interpreter::get_duel_info(L);
if(pduel->game_field->infos.turn_player == playerid)
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::duel_get_turn_player(lua_State *L) { int32 scriptlib::duel_get_turn_player(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L); duel* pduel = interpreter::get_duel_info(L);
lua_pushinteger(L, pduel->game_field->infos.turn_player); lua_pushinteger(L, pduel->game_field->infos.turn_player);
...@@ -498,9 +508,6 @@ int32 scriptlib::duel_sets(lua_State *L) { ...@@ -498,9 +508,6 @@ int32 scriptlib::duel_sets(lua_State *L) {
pgroup = pduel->new_group(pcard); pgroup = pduel->new_group(pcard);
} else if(check_param(L, PARAM_TYPE_GROUP, 2, TRUE)) { } else if(check_param(L, PARAM_TYPE_GROUP, 2, TRUE)) {
pgroup = *(group**) lua_touserdata(L, 2); pgroup = *(group**) lua_touserdata(L, 2);
if(pgroup->container.empty()) {
return 0;
}
pduel = pgroup->pduel; pduel = pgroup->pduel;
} else } else
return luaL_error(L, "Parameter %d should be \"Card\" or \"Group\".", 2); return luaL_error(L, "Parameter %d should be \"Card\" or \"Group\".", 2);
...@@ -2237,6 +2244,34 @@ int32 scriptlib::duel_get_targets_relate_to_chain(lua_State* L) { ...@@ -2237,6 +2244,34 @@ int32 scriptlib::duel_get_targets_relate_to_chain(lua_State* L) {
interpreter::group2value(L, pgroup); interpreter::group2value(L, pgroup);
return 1; return 1;
} }
int32 scriptlib::duel_is_phase(lua_State *L) {
check_param_count(L, 1);
uint32 pphase = (uint32)lua_tointeger(L, 1);
duel* pduel = interpreter::get_duel_info(L);
if(pduel->game_field->infos.phase == pphase)
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::duel_is_main_phase(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L);
uint16 phase = pduel->game_field->infos.phase;
if(phase == PHASE_MAIN1 || phase == PHASE_MAIN2)
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::duel_is_battle_phase(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L);
uint16 phase = pduel->game_field->infos.phase;
if((phase >= PHASE_BATTLE_START) && (phase <= PHASE_BATTLE))
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::duel_get_current_phase(lua_State *L) { int32 scriptlib::duel_get_current_phase(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L); duel* pduel = interpreter::get_duel_info(L);
lua_pushinteger(L, pduel->game_field->infos.phase); lua_pushinteger(L, pduel->game_field->infos.phase);
...@@ -4645,6 +4680,7 @@ static const struct luaL_Reg duellib[] = { ...@@ -4645,6 +4680,7 @@ static const struct luaL_Reg duellib[] = {
{ "EnableGlobalFlag", scriptlib::duel_enable_global_flag }, { "EnableGlobalFlag", scriptlib::duel_enable_global_flag },
{ "GetLP", scriptlib::duel_get_lp }, { "GetLP", scriptlib::duel_get_lp },
{ "SetLP", scriptlib::duel_set_lp }, { "SetLP", scriptlib::duel_set_lp },
{ "IsTurnPlayer", scriptlib::duel_is_turn_player },
{ "GetTurnPlayer", scriptlib::duel_get_turn_player }, { "GetTurnPlayer", scriptlib::duel_get_turn_player },
{ "GetTurnCount", scriptlib::duel_get_turn_count }, { "GetTurnCount", scriptlib::duel_get_turn_count },
{ "GetDrawCount", scriptlib::duel_get_draw_count }, { "GetDrawCount", scriptlib::duel_get_draw_count },
...@@ -4744,6 +4780,9 @@ static const struct luaL_Reg duellib[] = { ...@@ -4744,6 +4780,9 @@ static const struct luaL_Reg duellib[] = {
{ "GetChainEvent", scriptlib::duel_get_chain_event }, { "GetChainEvent", scriptlib::duel_get_chain_event },
{ "GetFirstTarget", scriptlib::duel_get_first_target }, { "GetFirstTarget", scriptlib::duel_get_first_target },
{ "GetTargetsRelateToChain", scriptlib::duel_get_targets_relate_to_chain }, { "GetTargetsRelateToChain", scriptlib::duel_get_targets_relate_to_chain },
{ "IsPhase", scriptlib::duel_is_phase },
{ "IsMainPhase", scriptlib::duel_is_main_phase },
{ "IsBattlePhase", scriptlib::duel_is_battle_phase },
{ "GetCurrentPhase", scriptlib::duel_get_current_phase }, { "GetCurrentPhase", scriptlib::duel_get_current_phase },
{ "SkipPhase", scriptlib::duel_skip_phase }, { "SkipPhase", scriptlib::duel_skip_phase },
{ "IsDamageCalculated", scriptlib::duel_is_damage_calculated }, { "IsDamageCalculated", scriptlib::duel_is_damage_calculated },
......
...@@ -445,7 +445,7 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso ...@@ -445,7 +445,7 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso
card_set* drawed_set = (card_set*)core.units.begin()->ptarget; card_set* drawed_set = (card_set*)core.units.begin()->ptarget;
core.operated_set.swap(*drawed_set); core.operated_set.swap(*drawed_set);
delete drawed_set; delete drawed_set;
returns.ivalue[0] = count; returns.ivalue[0] = (int32)core.operated_set.size();
return TRUE; return TRUE;
} }
} }
...@@ -6359,7 +6359,7 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player, ...@@ -6359,7 +6359,7 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player,
} }
} }
if (!core.coin_count) if (!core.coin_count)
core.coin_count == MAX_COIN_COUNT; core.coin_count = MAX_COIN_COUNT;
pduel->write_buffer8(MSG_TOSS_COIN); pduel->write_buffer8(MSG_TOSS_COIN);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
pduel->write_buffer8((uint8)core.coin_count); pduel->write_buffer8((uint8)core.coin_count);
......
...@@ -111,6 +111,7 @@ public: ...@@ -111,6 +111,7 @@ public:
static int32 card_is_origin_code_rule(lua_State *L); static int32 card_is_origin_code_rule(lua_State *L);
static int32 card_is_code(lua_State *L); static int32 card_is_code(lua_State *L);
static int32 card_is_type(lua_State *L); static int32 card_is_type(lua_State *L);
static int32 card_is_all_types(lua_State *L);
static int32 card_is_fusion_type(lua_State *L); static int32 card_is_fusion_type(lua_State *L);
static int32 card_is_synchro_type(lua_State *L); static int32 card_is_synchro_type(lua_State *L);
static int32 card_is_xyz_type(lua_State *L); static int32 card_is_xyz_type(lua_State *L);
...@@ -128,6 +129,7 @@ public: ...@@ -128,6 +129,7 @@ public:
static int32 card_is_non_attribute(lua_State *L); static int32 card_is_non_attribute(lua_State *L);
static int32 card_is_extra_deck_monster(lua_State *L); static int32 card_is_extra_deck_monster(lua_State *L);
static int32 card_is_reason(lua_State *L); static int32 card_is_reason(lua_State *L);
static int32 card_is_all_reasons(lua_State *L);
static int32 card_is_summon_type(lua_State *L); static int32 card_is_summon_type(lua_State *L);
static int32 card_is_summon_location(lua_State *L); static int32 card_is_summon_location(lua_State *L);
static int32 card_is_summon_player(lua_State *L); static int32 card_is_summon_player(lua_State *L);
...@@ -246,6 +248,8 @@ public: ...@@ -246,6 +248,8 @@ public:
static int32 card_is_attack_above(lua_State *L); static int32 card_is_attack_above(lua_State *L);
static int32 card_is_defense_below(lua_State *L); static int32 card_is_defense_below(lua_State *L);
static int32 card_is_defense_above(lua_State *L); static int32 card_is_defense_above(lua_State *L);
static int32 card_is_has_level(lua_State *L);
static int32 card_is_has_defense(lua_State *L);
static int32 card_is_public(lua_State *L); static int32 card_is_public(lua_State *L);
static int32 card_is_forbidden(lua_State *L); static int32 card_is_forbidden(lua_State *L);
static int32 card_is_able_to_change_controler(lua_State *L); static int32 card_is_able_to_change_controler(lua_State *L);
...@@ -383,6 +387,7 @@ public: ...@@ -383,6 +387,7 @@ public:
static int32 duel_enable_global_flag(lua_State *L); static int32 duel_enable_global_flag(lua_State *L);
static int32 duel_get_lp(lua_State *L); static int32 duel_get_lp(lua_State *L);
static int32 duel_set_lp(lua_State *L); static int32 duel_set_lp(lua_State *L);
static int32 duel_is_turn_player(lua_State *L);
static int32 duel_get_turn_player(lua_State *L); static int32 duel_get_turn_player(lua_State *L);
static int32 duel_get_turn_count(lua_State *L); static int32 duel_get_turn_count(lua_State *L);
static int32 duel_get_draw_count(lua_State *L); static int32 duel_get_draw_count(lua_State *L);
...@@ -483,6 +488,9 @@ public: ...@@ -483,6 +488,9 @@ public:
static int32 duel_get_chain_event(lua_State *L); static int32 duel_get_chain_event(lua_State *L);
static int32 duel_get_first_target(lua_State *L); static int32 duel_get_first_target(lua_State *L);
static int32 duel_get_targets_relate_to_chain(lua_State *L); static int32 duel_get_targets_relate_to_chain(lua_State *L);
static int32 duel_is_phase(lua_State *L);
static int32 duel_is_main_phase(lua_State *L);
static int32 duel_is_battle_phase(lua_State *L);
static int32 duel_get_current_phase(lua_State *L); static int32 duel_get_current_phase(lua_State *L);
static int32 duel_skip_phase(lua_State *L); static int32 duel_skip_phase(lua_State *L);
static int32 duel_is_damage_calculated(lua_State *L); static int32 duel_is_damage_calculated(lua_State *L);
......
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