Commit f7212e86 authored by VanillaSalt's avatar VanillaSalt

add function

parent 0ac8029c
......@@ -209,13 +209,17 @@ uint32 card::get_infos(byte* buf, int32 query_flag, int32 use_cache) {
q_cache.rscale = tdata;
*p++ = tdata;
} else query_flag &= ~QUERY_RSCALE;
if((query_flag & QUERY_LINK) && ((get_link() != q_cache.link) || (get_link_marker() != q_cache.link_marker))) {
q_cache.link = get_link();
*p++ = tdata;
q_cache.link_marker = get_link_marker();
*p++ = tdata;
if(query_flag & QUERY_LINK) {
uint32 link = get_link();
uint32 link_marker = get_link_marker();
if((link != q_cache.link) || (link_marker != q_cache.link_marker)) {
q_cache.link = link;
*p++ = (int32)link;
q_cache.link_marker = link_marker;
*p++ = (int32)link_marker;
} else query_flag &= ~QUERY_LINK;
}
}
*(uint32*)buf = (byte*)p - buf;
*(uint32*)(buf + 4) = query_flag;
return (byte*)p - buf;
......
......@@ -414,6 +414,7 @@ public:
#define REASON_REPLACE 0x1000000 //
#define REASON_DRAW 0x2000000 //
#define REASON_REDIRECT 0x4000000 //
#define REASON_LINK 0x8000000 //
//Summon Type
#define SUMMON_TYPE_NORMAL 0x10000000
#define SUMMON_TYPE_ADVANCE 0x11000000
......@@ -425,6 +426,7 @@ public:
#define SUMMON_TYPE_SYNCHRO 0x46000000
#define SUMMON_TYPE_XYZ 0x49000000
#define SUMMON_TYPE_PENDULUM 0x4a000000
#define SUMMON_TYPE_LINK 0x4c000000
//Status
#define STATUS_DISABLED 0x0001 //
#define STATUS_TO_ENABLE 0x0002 //
......
......@@ -30,6 +30,7 @@ static const struct luaL_Reg cardlib[] = {
{ "GetFusionType", scriptlib::card_get_fusion_type },
{ "GetLevel", scriptlib::card_get_level },
{ "GetRank", scriptlib::card_get_rank },
{ "GetLink", scriptlib::card_get_link },
{ "GetSynchroLevel", scriptlib::card_get_synchro_level },
{ "GetRitualLevel", scriptlib::card_get_ritual_level },
{ "GetOriginalLevel", scriptlib::card_get_origin_level },
......@@ -39,6 +40,9 @@ static const struct luaL_Reg cardlib[] = {
{ "GetOriginalLeftScale", scriptlib::card_get_origin_lscale },
{ "GetRightScale", scriptlib::card_get_rscale },
{ "GetOriginalRightScale", scriptlib::card_get_origin_rscale },
{ "IsLinkMarker", scriptlib::card_is_link_marker },
{ "GetLinkedGroup", scriptlib::card_get_linked_group },
{ "GetLinkedGroupCount", scriptlib::card_get_linked_group_count },
{ "GetAttribute", scriptlib::card_get_attribute },
{ "GetOriginalAttribute", scriptlib::card_get_origin_attribute },
{ "GetFusionAttribute", scriptlib::card_get_fusion_attribute },
......
......@@ -175,6 +175,13 @@ int32 scriptlib::card_get_rank(lua_State *L) {
lua_pushinteger(L, pcard->get_rank());
return 1;
}
int32 scriptlib::card_get_link(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_link());
return 1;
}
int32 scriptlib::card_get_synchro_level(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 2);
......@@ -249,6 +256,33 @@ int32 scriptlib::card_get_origin_rscale(lua_State *L) {
lua_pushinteger(L, pcard->data.rscale);
return 1;
}
int32 scriptlib::card_is_link_marker(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 dir = lua_tointeger(L, 2);
lua_pushboolean(L, pcard->is_link_marker(dir));
return 1;
}
int32 scriptlib::card_get_linked_group(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
card::card_set cset;
pcard->get_linked_cards(&cset);
group* pgroup = pcard->pduel->new_group(cset);
interpreter::group2value(L, pgroup);
return 1;
}
int32 scriptlib::card_get_linked_group_count(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
card::card_set cset;
pcard->get_linked_cards(&cset);
lua_pushinteger(L, cset.size());
return 1;
}
int32 scriptlib::card_get_attribute(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
......
......@@ -2300,7 +2300,13 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
}
case 6: {
effect* proc = core.units.begin()->peffect;
int32 matreason = proc->value == SUMMON_TYPE_SYNCHRO ? REASON_SYNCHRO : proc->value == SUMMON_TYPE_XYZ ? REASON_XYZ : REASON_SPSUMMON;
int32 matreason = REASON_SPSUMMON;
if(proc->value == SUMMON_TYPE_SYNCHRO)
matreason = REASON_SYNCHRO;
else if(proc->value == SUMMON_TYPE_XYZ)
matreason = SUMMON_TYPE_XYZ;
else if(proc->value == SUMMON_TYPE_LINK)
matreason = REASON_LINK;
if (target->material_cards.size()) {
for (auto mit = target->material_cards.begin(); mit != target->material_cards.end(); ++mit)
raise_single_event(*mit, 0, EVENT_BE_PRE_MATERIAL, proc, matreason, sumplayer, sumplayer, 0);
......@@ -2366,7 +2372,13 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
pduel->write_buffer8(MSG_SPSUMMONED);
adjust_instant();
effect* proc = core.units.begin()->peffect;
int32 matreason = proc->value == SUMMON_TYPE_SYNCHRO ? REASON_SYNCHRO : proc->value == SUMMON_TYPE_XYZ ? REASON_XYZ : REASON_SPSUMMON;
int32 matreason = REASON_SPSUMMON;
if(proc->value == SUMMON_TYPE_SYNCHRO)
matreason = REASON_SYNCHRO;
else if(proc->value == SUMMON_TYPE_XYZ)
matreason = SUMMON_TYPE_XYZ;
else if(proc->value == SUMMON_TYPE_LINK)
matreason = REASON_LINK;
if(target->material_cards.size()) {
for(auto mit = target->material_cards.begin(); mit != target->material_cards.end(); ++mit)
raise_single_event(*mit, 0, EVENT_BE_MATERIAL, proc, matreason, sumplayer, sumplayer, 0);
......
......@@ -32,6 +32,7 @@ public:
static int32 card_get_fusion_type(lua_State *L);
static int32 card_get_level(lua_State *L);
static int32 card_get_rank(lua_State *L);
static int32 card_get_link(lua_State *L);
static int32 card_get_synchro_level(lua_State *L);
static int32 card_get_ritual_level(lua_State *L);
static int32 card_get_origin_level(lua_State *L);
......@@ -41,6 +42,9 @@ public:
static int32 card_get_origin_lscale(lua_State *L);
static int32 card_get_rscale(lua_State *L);
static int32 card_get_origin_rscale(lua_State *L);
static int32 card_is_link_marker(lua_State *L);
static int32 card_get_linked_group(lua_State *L);
static int32 card_get_linked_group_count(lua_State *L);
static int32 card_get_attribute(lua_State *L);
static int32 card_get_origin_attribute(lua_State *L);
static int32 card_get_fusion_attribute(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