Commit a6867db7 authored by DailyShana's avatar DailyShana Committed by GitHub

multiple effect label (#192)

parent 33346d1f
......@@ -41,7 +41,7 @@ effect::effect(duel* pd) {
reset_flag = 0;
count_code = 0;
category = 0;
label = 0;
label.reserve(4);
label_object = 0;
hint_timing[0] = 0;
hint_timing[1] = 0;
......
......@@ -54,7 +54,7 @@ public:
uint16 active_sequence;
card* active_handler;
uint16 status;
uint32 label;
std::vector<uint32> label;
int32 label_object;
int32 condition;
int32 cost;
......
......@@ -1688,7 +1688,7 @@ int32 scriptlib::card_register_flag_effect(lua_State *L) {
peffect->reset_flag = reset;
peffect->flag[0] = flag | EFFECT_FLAG_CANNOT_DISABLE;
peffect->reset_count = count;
peffect->label = lab;
peffect->label.push_back(lab);
peffect->description = desc;
pcard->add_effect(peffect);
interpreter::effect2value(L, peffect);
......@@ -1720,7 +1720,8 @@ int32 scriptlib::card_set_flag_effect_label(lua_State *L) {
if(eit == pcard->single_effect.end())
lua_pushboolean(L, FALSE);
else {
eit->second->label = lab;
eit->second->label.clear();
eit->second->label.push_back(lab);
lua_pushboolean(L, TRUE);
}
return 1;
......@@ -1732,10 +1733,8 @@ int32 scriptlib::card_get_flag_effect_label(lua_State *L) {
uint32 code = (lua_tointeger(L, 2) & 0xfffffff) | 0x10000000;
auto rg = pcard->single_effect.equal_range(code);
int32 count = 0;
for(; rg.first != rg.second; ++rg.first) {
lua_pushinteger(L, rg.first->second->label);
count++;
}
for(; rg.first != rg.second; ++rg.first, ++count)
lua_pushinteger(L, rg.first->second->label.size() ? rg.first->second->label[0] : 0);
if(!count) {
lua_pushnil(L);
return 1;
......
......@@ -108,7 +108,7 @@ int32 scriptlib::duel_register_flag_effect(lua_State *L) {
peffect->s_range = 1;
peffect->o_range = 0;
peffect->reset_count = count;
peffect->label = lab;
peffect->label.push_back(lab);
pduel->game_field->add_effect(peffect, playerid);
interpreter::effect2value(L, peffect);
return 1;
......@@ -154,7 +154,8 @@ int32 scriptlib::duel_set_flag_effect_label(lua_State *L) {
if(!eset.size())
lua_pushboolean(L, FALSE);
else {
eset[0]->label = lab;
eset[0]->label.clear();
eset[0]->label.push_back(lab);
lua_pushboolean(L, TRUE);
}
return 1;
......@@ -173,7 +174,7 @@ int32 scriptlib::duel_get_flag_effect_label(lua_State *L) {
return 1;
}
for(int32 i = 0; i < eset.size(); ++i)
lua_pushinteger(L, eset[i]->label);
lua_pushinteger(L, eset[i]->label.size() ? eset[i]->label[0] : 0);
return eset.size();
}
int32 scriptlib::duel_destroy(lua_State *L) {
......
......@@ -175,8 +175,11 @@ int32 scriptlib::effect_set_label(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_EFFECT, 1);
effect* peffect = *(effect**) lua_touserdata(L, 1);
uint32 v = lua_tointeger(L, 2);
peffect->label = v;
peffect->label.clear();
for(int32 i = 2; i <= lua_gettop(L); ++i) {
uint32 v = lua_tointeger(L, i);
peffect->label.push_back(v);
}
return 0;
}
int32 scriptlib::effect_set_label_object(lua_State *L) {
......@@ -337,8 +340,13 @@ int32 scriptlib::effect_get_label(lua_State *L) {
check_param(L, PARAM_TYPE_EFFECT, 1);
effect* peffect = *(effect**) lua_touserdata(L, 1);
if (peffect) {
lua_pushinteger(L, peffect->label);
return 1;
if(peffect->label.empty()) {
lua_pushinteger(L, 0);
return 1;
}
for(const auto& lab : peffect->label)
lua_pushinteger(L, lab);
return peffect->label.size();
}
return 0;
}
......
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