Commit f8389194 authored by nanahira's avatar nanahira

Add functions relate to rose

parent f4106132
......@@ -1007,6 +1007,10 @@ uint32 card::get_ritual_level(card* pcard) {
uint32 card::check_xyz_level(card* pcard, uint32 lv) {
if(status & STATUS_NO_LEVEL)
return 0;
//modded - rose xyz summon
card* rcard = pduel->game_field->rose_card;
if(rcard && rcard == this)
return lv;
uint32 lev;
effect_set eset;
filter_effect(EFFECT_XYZ_LEVEL, &eset);
......
......@@ -18,6 +18,8 @@ duel::duel() {
lua = new interpreter(this);
game_field = new field(this);
game_field->temp_card = new_card(0);
//modded - for rose xyz summon
game_field->rose_card = 0;
clear_buffer();
}
duel::~duel() {
......@@ -43,6 +45,8 @@ void duel::clear() {
effects.clear();
game_field = new field(this);
game_field->temp_card = new_card(0);
//modded - for rose xyz summon
game_field->rose_card = 0;
}
card* duel::new_card(uint32 code) {
card* pcard = new card(this);
......
......@@ -341,6 +341,8 @@ public:
processor core;
return_value returns;
tevent nil_event;
//modded - for rose xyz summon
card* rose_card;
static int32 field_used_count[32];
explicit field(duel* pduel);
......
......@@ -23,6 +23,7 @@ static const struct luaL_Reg cardlib[] = {
{ "SetCardData", scriptlib::card_set_card_data },
{ "GetLinkMarker", scriptlib::card_get_link_marker },
{ "GetOriginalLinkMarker", scriptlib::card_get_origin_link_marker },
{ "IsXyzSummonableByRose", scriptlib::card_is_xyz_summonable_by_rose },
{ "GetCode", scriptlib::card_get_code },
{ "GetOriginalCode", scriptlib::card_get_origin_code },
......@@ -384,6 +385,7 @@ static const struct luaL_Reg duellib[] = {
{ "SetMetatable", scriptlib::duel_setmetatable },
{ "MoveTurnCount", scriptlib::duel_move_turn_count },
{ "GetCardsInZone", scriptlib::duel_get_cards_in_zone },
{ "XyzSummonByRose", scriptlib::duel_xyz_summon_by_rose },
{ "EnableGlobalFlag", scriptlib::duel_enable_global_flag },
{ "GetLP", scriptlib::duel_get_lp },
......
......@@ -100,6 +100,28 @@ int32 scriptlib::card_get_origin_link_marker(lua_State *L) {
lua_pushinteger(L, pcard->data.link_marker);
return 1;
}
int32 scriptlib::card_is_xyz_summonable_by_rose(lua_State *L) {
check_param_count(L, 3);
check_param(L, PARAM_TYPE_CARD, 1);
check_param(L, PARAM_TYPE_CARD, 2);
check_param(L, PARAM_TYPE_CARD, 3);
card* pcard = *(card**) lua_touserdata(L, 1);
if(!(pcard->data.type & TYPE_XYZ))
return 0;
card* rcard = *(card**) lua_touserdata(L, 2);
card* mcard = *(card**) lua_touserdata(L, 3);
group* materials = pcard->pduel->new_group(rcard);
materials->container.insert(mcard);
uint32 p = pcard->pduel->game_field->core.reason_player;
pcard->pduel->game_field->core.limit_xyz = materials;
pcard->pduel->game_field->core.limit_xyz_minc = 2;
pcard->pduel->game_field->core.limit_xyz_maxc = 2;
pcard->pduel->game_field->rose_card = rcard;
int32 result = pcard->is_special_summonable(p, SUMMON_TYPE_XYZ);
pcard->pduel->game_field->rose_card = 0;
lua_pushboolean(L, result);
return 1;
}
int32 scriptlib::card_get_code(lua_State *L) {
check_param_count(L, 1);
......
......@@ -169,6 +169,29 @@ int32 scriptlib::duel_get_cards_in_zone(lua_State *L) {
interpreter::group2value(L, pgroup);
return 1;
}
int32 scriptlib::duel_xyz_summon_by_rose(lua_State *L) {
check_action_permission(L);
check_param_count(L, 4);
check_param(L, PARAM_TYPE_CARD, 2);
check_param(L, PARAM_TYPE_CARD, 3);
check_param(L, PARAM_TYPE_CARD, 4);
uint32 playerid = lua_tonumberint(L, 1);
if(playerid != 0 && playerid != 1)
return 0;
card* pcard = *(card**)lua_touserdata(L, 2);
card* rcard = *(card**) lua_touserdata(L, 3);
card* mcard = *(card**) lua_touserdata(L, 4);
duel* pduel = pcard->pduel;
group* materials = pduel->new_group(rcard);
materials->container.insert(mcard);
pduel->game_field->core.limit_xyz = materials;
pduel->game_field->core.limit_xyz_minc = 0;
pduel->game_field->core.limit_xyz_maxc = 0;
pduel->game_field->core.summon_cancelable = FALSE;
pcard->pduel->game_field->rose_card = rcard;
pduel->game_field->special_summon_rule(playerid, pcard, SUMMON_TYPE_XYZ);
return lua_yield(L, 0);
}
int32 scriptlib::duel_enable_global_flag(lua_State *L) {
check_param_count(L, 1);
......
......@@ -2570,7 +2570,11 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
if(proc->value == SUMMON_TYPE_SYNCHRO)
matreason = REASON_SYNCHRO;
else if(proc->value == SUMMON_TYPE_XYZ)
{
matreason = REASON_XYZ;
//modded - rose xyz summon
pduel->game_field->rose_card = 0;
}
else if(proc->value == SUMMON_TYPE_LINK)
matreason = REASON_LINK;
if (target->material_cards.size()) {
......
......@@ -23,6 +23,7 @@ public:
static int32 card_set_card_data(lua_State *L);
static int32 card_get_link_marker(lua_State *L);
static int32 card_get_origin_link_marker(lua_State *L);
static int32 card_is_xyz_summonable_by_rose(lua_State *L);
static int32 effect_set_owner(lua_State *L);
static int32 effect_get_range(lua_State *L);
static int32 effect_get_count_limit(lua_State *L);
......@@ -34,6 +35,7 @@ public:
static int32 duel_setmetatable(lua_State *L);
static int32 duel_move_turn_count(lua_State *L);
static int32 duel_get_cards_in_zone(lua_State *L);
static int32 duel_xyz_summon_by_rose(lua_State *L);
//metatable
static int32 group_meta_add(lua_State *L);
static int32 group_meta_sub(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