Commit 79b9ee57 authored by DailyShana's avatar DailyShana

add fusion attribute

parent 7f7633b1
...@@ -936,6 +936,18 @@ uint32 card::get_attribute() { ...@@ -936,6 +936,18 @@ uint32 card::get_attribute() {
temp.attribute = 0xffffffff; temp.attribute = 0xffffffff;
return attribute; return attribute;
} }
uint32 card::get_fusion_attribute(uint8 playerid) {
effect_set effects;
filter_effect(EFFECT_CHANGE_FUSION_ATTRIBUTE, &effects);
if(!effects.size())
return get_attribute();
uint32 attribute;
for(int32 i = 0; i < effects.size(); ++i) {
pduel->lua->add_param(playerid, PARAM_TYPE_INT);
attribute = effects[i]->get_value(this, 1);
}
return attribute;
}
// see get_level() // see get_level()
uint32 card::get_race() { uint32 card::get_race() {
if(assume_type == ASSUME_RACE) if(assume_type == ASSUME_RACE)
...@@ -2148,7 +2160,14 @@ int32 card::fusion_check(group* fusion_m, card* cg, uint32 chkf) { ...@@ -2148,7 +2160,14 @@ int32 card::fusion_check(group* fusion_m, card* cg, uint32 chkf) {
pduel->lua->add_param(fusion_m, PARAM_TYPE_GROUP); pduel->lua->add_param(fusion_m, PARAM_TYPE_GROUP);
pduel->lua->add_param(cg, PARAM_TYPE_CARD); pduel->lua->add_param(cg, PARAM_TYPE_CARD);
pduel->lua->add_param(chkf, PARAM_TYPE_INT); pduel->lua->add_param(chkf, PARAM_TYPE_INT);
return pduel->lua->check_condition(peffect->condition, 4); effect* oreason = pduel->game_field->core.reason_effect;
uint8 op = pduel->game_field->core.reason_player;
pduel->game_field->core.reason_effect = peffect;
pduel->game_field->core.reason_player = peffect->get_handler_player();
int32 res = pduel->lua->check_condition(peffect->condition, 4);
pduel->game_field->core.reason_effect = oreason;
pduel->game_field->core.reason_player = op;
return res;
} }
void card::fusion_select(uint8 playerid, group* fusion_m, card* cg, uint32 chkf) { void card::fusion_select(uint8 playerid, group* fusion_m, card* cg, uint32 chkf) {
effect* peffect = 0; effect* peffect = 0;
......
...@@ -178,6 +178,7 @@ public: ...@@ -178,6 +178,7 @@ public:
uint32 get_ritual_level(card* pcard); uint32 get_ritual_level(card* pcard);
uint32 check_xyz_level(card* pcard, uint32 lv); uint32 check_xyz_level(card* pcard, uint32 lv);
uint32 get_attribute(); uint32 get_attribute();
uint32 get_fusion_attribute(uint8 playerid);
uint32 get_race(); uint32 get_race();
uint32 get_lscale(); uint32 get_lscale();
uint32 get_rscale(); uint32 get_rscale();
......
...@@ -405,6 +405,9 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2) ...@@ -405,6 +405,9 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EFFECT_EXTRA_ATTACK_MONSTER 346 #define EFFECT_EXTRA_ATTACK_MONSTER 346
#define EFFECT_UNION_STATUS 347 #define EFFECT_UNION_STATUS 347
#define EFFECT_OLDUNION_STATUS 348 #define EFFECT_OLDUNION_STATUS 348
//#define EFFECT_ADD_FUSION_ATTRIBUTE 349
//#define EFFECT_REMOVE_FUSION_ATTRIBUTE 350
#define EFFECT_CHANGE_FUSION_ATTRIBUTE 351
#define EVENT_STARTUP 1000 #define EVENT_STARTUP 1000
#define EVENT_FLIP 1001 #define EVENT_FLIP 1001
......
...@@ -39,6 +39,7 @@ static const struct luaL_Reg cardlib[] = { ...@@ -39,6 +39,7 @@ static const struct luaL_Reg cardlib[] = {
{ "GetOriginalRightScale", scriptlib::card_get_origin_rscale }, { "GetOriginalRightScale", scriptlib::card_get_origin_rscale },
{ "GetAttribute", scriptlib::card_get_attribute }, { "GetAttribute", scriptlib::card_get_attribute },
{ "GetOriginalAttribute", scriptlib::card_get_origin_attribute }, { "GetOriginalAttribute", scriptlib::card_get_origin_attribute },
{ "GetFusionAttribute", scriptlib::card_get_fusion_attribute },
{ "GetRace", scriptlib::card_get_race }, { "GetRace", scriptlib::card_get_race },
{ "GetOriginalRace", scriptlib::card_get_origin_race }, { "GetOriginalRace", scriptlib::card_get_origin_race },
{ "GetAttack", scriptlib::card_get_attack }, { "GetAttack", scriptlib::card_get_attack },
...@@ -81,6 +82,7 @@ static const struct luaL_Reg cardlib[] = { ...@@ -81,6 +82,7 @@ static const struct luaL_Reg cardlib[] = {
{ "IsType", scriptlib::card_is_type }, { "IsType", scriptlib::card_is_type },
{ "IsRace", scriptlib::card_is_race }, { "IsRace", scriptlib::card_is_race },
{ "IsAttribute", scriptlib::card_is_attribute }, { "IsAttribute", scriptlib::card_is_attribute },
{ "IsFusionAttribute", scriptlib::card_is_fusion_attribute },
{ "IsReason", scriptlib::card_is_reason }, { "IsReason", scriptlib::card_is_reason },
{ "IsStatus", scriptlib::card_is_status }, { "IsStatus", scriptlib::card_is_status },
{ "IsNotTuner", scriptlib::card_is_not_tuner }, { "IsNotTuner", scriptlib::card_is_not_tuner },
......
...@@ -251,6 +251,18 @@ int32 scriptlib::card_get_origin_attribute(lua_State *L) { ...@@ -251,6 +251,18 @@ int32 scriptlib::card_get_origin_attribute(lua_State *L) {
lua_pushinteger(L, pcard->data.attribute); lua_pushinteger(L, pcard->data.attribute);
return 1; return 1;
} }
int32 scriptlib::card_get_fusion_attribute(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**)lua_touserdata(L, 1);
int32 playerid = PLAYER_NONE;
if(lua_gettop(L) > 1 && !lua_isnil(L, 2))
playerid = lua_tointeger(L, 2);
else
playerid = pcard->pduel->game_field->core.reason_player;
lua_pushinteger(L, pcard->get_fusion_attribute(playerid));
return 1;
}
int32 scriptlib::card_get_race(lua_State *L) { int32 scriptlib::card_get_race(lua_State *L) {
check_param_count(L, 1); check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1); check_param(L, PARAM_TYPE_CARD, 1);
...@@ -586,6 +598,22 @@ int32 scriptlib::card_is_attribute(lua_State *L) { ...@@ -586,6 +598,22 @@ int32 scriptlib::card_is_attribute(lua_State *L) {
lua_pushboolean(L, 0); lua_pushboolean(L, 0);
return 1; return 1;
} }
int32 scriptlib::card_is_fusion_attribute(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**)lua_touserdata(L, 1);
uint32 tattrib = lua_tointeger(L, 2);
int32 playerid = PLAYER_NONE;
if(lua_gettop(L) > 2 && !lua_isnil(L, 3))
playerid = lua_tointeger(L, 3);
else
playerid = pcard->pduel->game_field->core.reason_player;
if(pcard->get_fusion_attribute(playerid) & tattrib)
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::card_is_reason(lua_State *L) { int32 scriptlib::card_is_reason(lua_State *L) {
check_param_count(L, 2); check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1); check_param(L, PARAM_TYPE_CARD, 1);
......
...@@ -41,6 +41,7 @@ public: ...@@ -41,6 +41,7 @@ public:
static int32 card_get_origin_rscale(lua_State *L); static int32 card_get_origin_rscale(lua_State *L);
static int32 card_get_attribute(lua_State *L); static int32 card_get_attribute(lua_State *L);
static int32 card_get_origin_attribute(lua_State *L); static int32 card_get_origin_attribute(lua_State *L);
static int32 card_get_fusion_attribute(lua_State *L);
static int32 card_get_race(lua_State *L); static int32 card_get_race(lua_State *L);
static int32 card_get_origin_race(lua_State *L); static int32 card_get_origin_race(lua_State *L);
static int32 card_get_attack(lua_State *L); static int32 card_get_attack(lua_State *L);
...@@ -83,6 +84,7 @@ public: ...@@ -83,6 +84,7 @@ public:
static int32 card_is_type(lua_State *L); static int32 card_is_type(lua_State *L);
static int32 card_is_race(lua_State *L); static int32 card_is_race(lua_State *L);
static int32 card_is_attribute(lua_State *L); static int32 card_is_attribute(lua_State *L);
static int32 card_is_fusion_attribute(lua_State *L);
static int32 card_is_reason(lua_State *L); static int32 card_is_reason(lua_State *L);
static int32 card_is_status(lua_State *L); static int32 card_is_status(lua_State *L);
static int32 card_is_not_tuner(lua_State *L); static int32 card_is_not_tuner(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