Commit 79b9ee57 authored by DailyShana's avatar DailyShana

add fusion attribute

parent 7f7633b1
......@@ -936,6 +936,18 @@ uint32 card::get_attribute() {
temp.attribute = 0xffffffff;
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()
uint32 card::get_race() {
if(assume_type == ASSUME_RACE)
......@@ -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(cg, PARAM_TYPE_CARD);
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) {
effect* peffect = 0;
......
......@@ -178,6 +178,7 @@ public:
uint32 get_ritual_level(card* pcard);
uint32 check_xyz_level(card* pcard, uint32 lv);
uint32 get_attribute();
uint32 get_fusion_attribute(uint8 playerid);
uint32 get_race();
uint32 get_lscale();
uint32 get_rscale();
......
......@@ -405,6 +405,9 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EFFECT_EXTRA_ATTACK_MONSTER 346
#define EFFECT_UNION_STATUS 347
#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_FLIP 1001
......
......@@ -39,6 +39,7 @@ static const struct luaL_Reg cardlib[] = {
{ "GetOriginalRightScale", scriptlib::card_get_origin_rscale },
{ "GetAttribute", scriptlib::card_get_attribute },
{ "GetOriginalAttribute", scriptlib::card_get_origin_attribute },
{ "GetFusionAttribute", scriptlib::card_get_fusion_attribute },
{ "GetRace", scriptlib::card_get_race },
{ "GetOriginalRace", scriptlib::card_get_origin_race },
{ "GetAttack", scriptlib::card_get_attack },
......@@ -81,6 +82,7 @@ static const struct luaL_Reg cardlib[] = {
{ "IsType", scriptlib::card_is_type },
{ "IsRace", scriptlib::card_is_race },
{ "IsAttribute", scriptlib::card_is_attribute },
{ "IsFusionAttribute", scriptlib::card_is_fusion_attribute },
{ "IsReason", scriptlib::card_is_reason },
{ "IsStatus", scriptlib::card_is_status },
{ "IsNotTuner", scriptlib::card_is_not_tuner },
......
......@@ -251,6 +251,18 @@ int32 scriptlib::card_get_origin_attribute(lua_State *L) {
lua_pushinteger(L, pcard->data.attribute);
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) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
......@@ -586,6 +598,22 @@ int32 scriptlib::card_is_attribute(lua_State *L) {
lua_pushboolean(L, 0);
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) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
......
......@@ -41,6 +41,7 @@ public:
static int32 card_get_origin_rscale(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);
static int32 card_get_race(lua_State *L);
static int32 card_get_origin_race(lua_State *L);
static int32 card_get_attack(lua_State *L);
......@@ -83,6 +84,7 @@ public:
static int32 card_is_type(lua_State *L);
static int32 card_is_race(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_status(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