Commit f9004164 authored by nekrozar's avatar nekrozar Committed by GitHub

update Card.IsLinkSummonable and Duel.LinkSummon (#230)

parent 6dae5c4d
......@@ -2949,13 +2949,14 @@ int32 card::is_spsummonable(effect* peffect) {
}
if(pduel->lua->check_condition(peffect->condition, param_count))
result = TRUE;
} else if(pduel->game_field->core.limit_link) {
} else if(pduel->game_field->core.limit_link || pduel->game_field->core.limit_link_card) {
pduel->lua->add_param(pduel->game_field->core.limit_link, PARAM_TYPE_GROUP);
uint32 param_count = 3;
pduel->lua->add_param(pduel->game_field->core.limit_link_card, PARAM_TYPE_CARD);
uint32 param_count = 4;
if(pduel->game_field->core.limit_link_minc) {
pduel->lua->add_param(pduel->game_field->core.limit_link_minc, PARAM_TYPE_INT);
pduel->lua->add_param(pduel->game_field->core.limit_link_maxc, PARAM_TYPE_INT);
param_count = 5;
param_count = 6;
}
if(pduel->lua->check_condition(peffect->condition, param_count))
result = TRUE;
......@@ -3137,6 +3138,7 @@ int32 card::is_special_summonable(uint8 playerid, uint32 summon_type) {
pduel->game_field->core.limit_xyz_minc = 0;
pduel->game_field->core.limit_xyz_maxc = 0;
pduel->game_field->core.limit_link = 0;
pduel->game_field->core.limit_link_card = 0;
pduel->game_field->core.limit_link_minc = 0;
pduel->game_field->core.limit_link_maxc = 0;
pduel->game_field->restore_lp_cost();
......
......@@ -99,6 +99,7 @@ field::field(duel* pduel) {
core.limit_xyz_minc = 0;
core.limit_xyz_maxc = 0;
core.limit_link = 0;
core.limit_link_card = 0;
core.limit_link_minc = 0;
core.limit_link_maxc = 0;
core.last_control_changed_id = 0;
......
......@@ -270,6 +270,7 @@ struct processor {
int32 limit_xyz_minc;
int32 limit_xyz_maxc;
group* limit_link;
card* limit_link_card;
int32 limit_link_minc;
int32 limit_link_maxc;
uint8 attack_cancelable;
......
......@@ -2032,18 +2032,26 @@ int32 scriptlib::card_is_link_summonable(lua_State *L) {
if(!(pcard->data.type & TYPE_LINK))
return 0;
group* materials = 0;
card* lcard = 0;
if(!lua_isnil(L, 2)) {
check_param(L, PARAM_TYPE_GROUP, 2);
materials = *(group**)lua_touserdata(L, 2);
}
if(lua_gettop(L) >= 3) {
if(!lua_isnil(L, 3)) {
check_param(L, PARAM_TYPE_CARD, 3);
lcard = *(card**)lua_touserdata(L, 3);
}
}
int32 minc = 0;
if(lua_gettop(L) >= 3)
minc = lua_tointeger(L, 3);
int32 maxc = 0;
if(lua_gettop(L) >= 4)
maxc = lua_tointeger(L, 4);
minc = lua_tointeger(L, 4);
int32 maxc = 0;
if(lua_gettop(L) >= 5)
maxc = lua_tointeger(L, 5);
uint32 p = pcard->pduel->game_field->core.reason_player;
pcard->pduel->game_field->core.limit_link = materials;
pcard->pduel->game_field->core.limit_link_card = lcard;
pcard->pduel->game_field->core.limit_link_minc = minc;
pcard->pduel->game_field->core.limit_link_maxc = maxc;
lua_pushboolean(L, pcard->is_special_summonable(p, SUMMON_TYPE_LINK));
......
......@@ -368,18 +368,26 @@ int32 scriptlib::duel_link_summon(lua_State *L) {
return 0;
card* pcard = *(card**)lua_touserdata(L, 2);
group* materials = 0;
card* lcard = 0;
if(!lua_isnil(L, 3)) {
check_param(L, PARAM_TYPE_GROUP, 3);
materials = *(group**)lua_touserdata(L, 3);
}
if(lua_gettop(L) >= 4) {
if(!lua_isnil(L, 4)) {
check_param(L, PARAM_TYPE_CARD, 4);
lcard = *(card**)lua_touserdata(L, 4);
}
}
int32 minc = 0;
if(lua_gettop(L) >= 4)
minc = lua_tointeger(L, 4);
int32 maxc = 0;
if(lua_gettop(L) >= 5)
maxc = lua_tointeger(L, 5);
minc = lua_tointeger(L, 5);
int32 maxc = 0;
if(lua_gettop(L) >= 6)
maxc = lua_tointeger(L, 6);
duel* pduel = pcard->pduel;
pduel->game_field->core.limit_link = materials;
pduel->game_field->core.limit_link_card = lcard;
pduel->game_field->core.limit_link_minc = minc;
pduel->game_field->core.limit_link_maxc = maxc;
pduel->game_field->core.summon_cancelable = FALSE;
......
......@@ -2533,6 +2533,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
int32 xminc = core.limit_xyz_minc;
int32 xmaxc = core.limit_xyz_maxc;
group* lmaterials = core.limit_link;
card* lcard = core.limit_link_card;
int32 lminc = core.limit_link_minc;
int32 lmaxc = core.limit_link_maxc;
target->filter_spsummon_procedure(sumplayer, &eset, summon_type);
......@@ -2545,6 +2546,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
core.limit_xyz_minc = xminc;
core.limit_xyz_maxc = xmaxc;
core.limit_link = lmaterials;
core.limit_link_card = lcard;
core.limit_link_minc = lminc;
core.limit_link_maxc = lmaxc;
if(!eset.size())
......@@ -2584,8 +2586,9 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
pduel->lua->add_param(core.limit_xyz_minc, PARAM_TYPE_INT);
pduel->lua->add_param(core.limit_xyz_maxc, PARAM_TYPE_INT);
}
} else if(core.limit_link) {
} else if(core.limit_link || core.limit_link_card) {
pduel->lua->add_param(core.limit_link, PARAM_TYPE_GROUP);
pduel->lua->add_param(core.limit_link_card, PARAM_TYPE_CARD);
if(core.limit_link_minc) {
pduel->lua->add_param(core.limit_link_minc, PARAM_TYPE_INT);
pduel->lua->add_param(core.limit_link_maxc, PARAM_TYPE_INT);
......@@ -2636,9 +2639,11 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
core.limit_xyz_maxc = 0;
}
}
if(core.limit_link) {
if(core.limit_link || core.limit_link_card) {
pduel->lua->add_param(core.limit_link, PARAM_TYPE_GROUP);
pduel->lua->add_param(core.limit_link_card, PARAM_TYPE_CARD);
core.limit_link = 0;
core.limit_link_card = 0;
if(core.limit_link_minc) {
pduel->lua->add_param(core.limit_link_minc, PARAM_TYPE_INT);
pduel->lua->add_param(core.limit_link_maxc, PARAM_TYPE_INT);
......
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