Commit a785e260 authored by VanillaSalt's avatar VanillaSalt

add GetFusionCode

parent 130de2f6
......@@ -19,6 +19,7 @@ static const struct luaL_Reg cardlib[] = {
{ "GetCode", scriptlib::card_get_code },
{ "GetOriginalCode", scriptlib::card_get_origin_code },
{ "GetOriginalCodeRule", scriptlib::card_get_origin_code_rule },
{ "GetFusionCode", scriptlib::card_get_fusion_code },
{ "IsFusionCode", scriptlib::card_is_fusion_code },
{ "IsSetCard", scriptlib::card_is_set_card },
{ "IsPreviousSetCard", scriptlib::card_is_pre_set_card },
......
......@@ -61,24 +61,45 @@ int32 scriptlib::card_get_origin_code_rule(lua_State *L) {
}
return 1;
}
int32 scriptlib::card_get_fusion_code(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
lua_pushinteger(L, pcard->get_code());
int32 count = 1;
uint32 otcode = pcard->get_another_code();
if(otcode) {
lua_pushinteger(L, otcode);
count++;
}
effect_set eset;
pcard->filter_effect(EFFECT_ADD_FUSION_CODE, &eset);
for(int32 i = 0; i < eset.size(); ++i)
lua_pushinteger(L, eset[i]->get_value(pcard));
return count + eset.size();
}
int32 scriptlib::card_is_fusion_code(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 tcode = lua_tointeger(L, 2);
effect_set eset;
pcard->filter_effect(EFFECT_ADD_FUSION_CODE, &eset);
if(!eset.size())
return card_is_code(L);
uint32 code1 = pcard->get_code();
uint32 code2 = pcard->get_another_code();
std::unordered_set<uint32> fcode;
for(int32 i = 0; i < eset.size(); ++i)
fcode.insert(eset[i]->get_value(pcard));
uint32 count = lua_gettop(L) - 1;
uint32 result = FALSE;
if(code1 == tcode || (code2 && code2 == tcode)) {
result = TRUE;
} else {
effect_set eset;
pcard->filter_effect(EFFECT_ADD_FUSION_CODE, &eset);
for(int32 i = 0; i < eset.size(); ++i) {
if(tcode == eset[i]->get_value(pcard)) {
result = TRUE;
break;
}
for(uint32 i = 0; i < count; ++i) {
if(lua_isnil(L, i + 2))
continue;
uint32 tcode = lua_tointeger(L, i + 2);
if(code1 == tcode || (code2 && code2 == tcode) || fcode.find(tcode) != fcode.end()) {
result = TRUE;
break;
}
}
lua_pushboolean(L, result);
......
......@@ -21,6 +21,7 @@ public:
static int32 card_get_code(lua_State *L);
static int32 card_get_origin_code(lua_State *L);
static int32 card_get_origin_code_rule(lua_State *L);
static int32 card_get_fusion_code(lua_State *L);
static int32 card_is_fusion_code(lua_State *L);
static int32 card_is_set_card(lua_State *L);
static int32 card_is_pre_set_card(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