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,
return atype;
if((mcount == 0 || pcard->is_affected_by_effect(EFFECT_DIRECT_ATTACK) || core.attack_player)
&& !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))
pcard->direct_attackable = 1;
return atype;
......
......@@ -962,6 +962,17 @@ int32 scriptlib::card_is_type(lua_State *L) {
lua_pushboolean(L, 0);
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) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
......@@ -1209,6 +1220,17 @@ int32 scriptlib::card_is_reason(lua_State *L) {
lua_pushboolean(L, 0);
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) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
......@@ -2695,6 +2717,29 @@ int32 scriptlib::card_is_defense_above(lua_State *L) {
}
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) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
......@@ -3358,6 +3403,7 @@ static const struct luaL_Reg cardlib[] = {
{ "IsOriginalCodeRule", scriptlib::card_is_origin_code_rule },
{ "IsCode", scriptlib::card_is_code },
{ "IsType", scriptlib::card_is_type },
{ "IsAllTypes", scriptlib::card_is_all_types },
{ "IsFusionType", scriptlib::card_is_fusion_type },
{ "IsSynchroType", scriptlib::card_is_synchro_type },
{ "IsXyzType", scriptlib::card_is_xyz_type },
......@@ -3375,6 +3421,7 @@ static const struct luaL_Reg cardlib[] = {
{ "IsNonAttribute", scriptlib::card_is_non_attribute },
{ "IsExtraDeckMonster", scriptlib::card_is_extra_deck_monster },
{ "IsReason", scriptlib::card_is_reason },
{ "IsAllReasons", scriptlib::card_is_all_reasons },
{ "IsSummonType", scriptlib::card_is_summon_type },
{ "IsSummonLocation", scriptlib::card_is_summon_location },
{ "IsSummonPlayer", scriptlib::card_is_summon_player },
......@@ -3493,6 +3540,8 @@ static const struct luaL_Reg cardlib[] = {
{ "IsAttackAbove", scriptlib::card_is_attack_above },
{ "IsDefenseBelow", scriptlib::card_is_defense_below },
{ "IsDefenseAbove", scriptlib::card_is_defense_above },
{ "IsHasLevel", scriptlib::card_is_has_level },
{ "IsHasDefense", scriptlib::card_is_has_defense },
{ "IsPublic", scriptlib::card_is_public },
{ "IsForbidden", scriptlib::card_is_forbidden },
{ "IsAbleToChangeControler", scriptlib::card_is_able_to_change_controler },
......
......@@ -44,6 +44,16 @@ int32 scriptlib::duel_set_lp(lua_State *L) {
pduel->write_buffer32(lp);
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) {
duel* pduel = interpreter::get_duel_info(L);
lua_pushinteger(L, pduel->game_field->infos.turn_player);
......@@ -498,9 +508,6 @@ int32 scriptlib::duel_sets(lua_State *L) {
pgroup = pduel->new_group(pcard);
} else if(check_param(L, PARAM_TYPE_GROUP, 2, TRUE)) {
pgroup = *(group**) lua_touserdata(L, 2);
if(pgroup->container.empty()) {
return 0;
}
pduel = pgroup->pduel;
} else
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) {
interpreter::group2value(L, pgroup);
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) {
duel* pduel = interpreter::get_duel_info(L);
lua_pushinteger(L, pduel->game_field->infos.phase);
......@@ -4645,6 +4680,7 @@ static const struct luaL_Reg duellib[] = {
{ "EnableGlobalFlag", scriptlib::duel_enable_global_flag },
{ "GetLP", scriptlib::duel_get_lp },
{ "SetLP", scriptlib::duel_set_lp },
{ "IsTurnPlayer", scriptlib::duel_is_turn_player },
{ "GetTurnPlayer", scriptlib::duel_get_turn_player },
{ "GetTurnCount", scriptlib::duel_get_turn_count },
{ "GetDrawCount", scriptlib::duel_get_draw_count },
......@@ -4744,6 +4780,9 @@ static const struct luaL_Reg duellib[] = {
{ "GetChainEvent", scriptlib::duel_get_chain_event },
{ "GetFirstTarget", scriptlib::duel_get_first_target },
{ "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 },
{ "SkipPhase", scriptlib::duel_skip_phase },
{ "IsDamageCalculated", scriptlib::duel_is_damage_calculated },
......
......@@ -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;
core.operated_set.swap(*drawed_set);
delete drawed_set;
returns.ivalue[0] = count;
returns.ivalue[0] = (int32)core.operated_set.size();
return TRUE;
}
}
......@@ -6359,7 +6359,7 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player,
}
}
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(playerid);
pduel->write_buffer8((uint8)core.coin_count);
......
......@@ -111,6 +111,7 @@ public:
static int32 card_is_origin_code_rule(lua_State *L);
static int32 card_is_code(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_synchro_type(lua_State *L);
static int32 card_is_xyz_type(lua_State *L);
......@@ -128,6 +129,7 @@ public:
static int32 card_is_non_attribute(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_all_reasons(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_player(lua_State *L);
......@@ -246,6 +248,8 @@ public:
static int32 card_is_attack_above(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_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_forbidden(lua_State *L);
static int32 card_is_able_to_change_controler(lua_State *L);
......@@ -383,6 +387,7 @@ public:
static int32 duel_enable_global_flag(lua_State *L);
static int32 duel_get_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_count(lua_State *L);
static int32 duel_get_draw_count(lua_State *L);
......@@ -483,6 +488,9 @@ public:
static int32 duel_get_chain_event(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_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_skip_phase(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