Commit 9a8ac816 authored by DailyShana's avatar DailyShana

update scriptlib::check_param

parent 0a9318e3
...@@ -64,7 +64,6 @@ void card_data::clear() { ...@@ -64,7 +64,6 @@ void card_data::clear() {
std::memset(this, 0, sizeof(card_data)); std::memset(this, 0, sizeof(card_data));
} }
card::card(duel* pd) { card::card(duel* pd) {
scrtype = 1;
ref_handle = 0; ref_handle = 0;
pduel = pd; pduel = pd;
owner = PLAYER_NONE; owner = PLAYER_NONE;
......
...@@ -124,7 +124,6 @@ public: ...@@ -124,7 +124,6 @@ public:
uint8 location; uint8 location;
uint8 sequence; uint8 sequence;
}; };
int32 scrtype;
int32 ref_handle; int32 ref_handle;
duel* pduel; duel* pduel;
card_data data; card_data data;
......
...@@ -15,7 +15,6 @@ bool effect_sort_id(const effect* e1, const effect* e2) { ...@@ -15,7 +15,6 @@ bool effect_sort_id(const effect* e1, const effect* e2) {
return e1->id < e2->id; return e1->id < e2->id;
}; };
effect::effect(duel* pd) { effect::effect(duel* pd) {
scrtype = 3;
ref_handle = 0; ref_handle = 0;
pduel = pd; pduel = pd;
owner = 0; owner = 0;
......
...@@ -27,7 +27,6 @@ enum effect_flag2 : uint32; ...@@ -27,7 +27,6 @@ enum effect_flag2 : uint32;
class effect { class effect {
public: public:
int32 scrtype;
int32 ref_handle; int32 ref_handle;
duel* pduel; duel* pduel;
card* owner; card* owner;
......
...@@ -10,20 +10,17 @@ ...@@ -10,20 +10,17 @@
#include "duel.h" #include "duel.h"
group::group(duel* pd) { group::group(duel* pd) {
scrtype = 2;
ref_handle = 0; ref_handle = 0;
pduel = pd; pduel = pd;
is_readonly = FALSE; is_readonly = FALSE;
} }
group::group(duel* pd, card* pcard) { group::group(duel* pd, card* pcard) {
container.insert(pcard); container.insert(pcard);
scrtype = 2;
ref_handle = 0; ref_handle = 0;
pduel = pd; pduel = pd;
is_readonly = FALSE; is_readonly = FALSE;
} }
group::group(duel* pd, const card_set& cset): container(cset) { group::group(duel* pd, const card_set& cset): container(cset) {
scrtype = 2;
ref_handle = 0; ref_handle = 0;
pduel = pd; pduel = pd;
is_readonly = FALSE; is_readonly = FALSE;
......
...@@ -18,7 +18,6 @@ class duel; ...@@ -18,7 +18,6 @@ class duel;
class group { class group {
public: public:
typedef std::set<card*, card_sort> card_set; typedef std::set<card*, card_sort> card_set;
int32 scrtype;
int32 ref_handle; int32 ref_handle;
duel* pduel; duel* pduel;
card_set container; card_set container;
......
...@@ -7,54 +7,64 @@ ...@@ -7,54 +7,64 @@
#include "scriptlib.h" #include "scriptlib.h"
#include "duel.h" #include "duel.h"
int32 scriptlib::check_data_type(lua_State* L, int32 index, const char* tname) {
int32 result = FALSE;
if(lua_getmetatable(L, index)) {
lua_getglobal(L, tname);
if(lua_rawequal(L, -1, -2))
result = TRUE;
lua_pop(L, 2);
}
return result;
}
int32 scriptlib::check_param(lua_State* L, int32 param_type, int32 index, int32 retfalse) { int32 scriptlib::check_param(lua_State* L, int32 param_type, int32 index, int32 retfalse) {
int32 result;
switch (param_type) { switch (param_type) {
case PARAM_TYPE_CARD: case PARAM_TYPE_CARD: {
if (lua_isuserdata(L, index)) { int32 result = FALSE;
result = **(int32**)lua_touserdata(L, index); if(lua_isuserdata(L, index) && lua_getmetatable(L, index)) {
if(result == 1) result = check_data_type(L, -1, "Card");
return TRUE; lua_pop(L, 1);
} }
if(result)
return TRUE;
if(retfalse) if(retfalse)
return FALSE; return FALSE;
luaL_error(L, "Parameter %d should be \"Card\".", index); luaL_error(L, "Parameter %d should be \"Card\".", index);
break; break;
case PARAM_TYPE_GROUP:
if (lua_isuserdata(L, index)) {
result = **(int32**)lua_touserdata(L, index);
if(result == 2)
return TRUE;
} }
case PARAM_TYPE_GROUP: {
if(lua_isuserdata(L, index) && check_data_type(L, index, "Group"))
return TRUE;
if(retfalse) if(retfalse)
return FALSE; return FALSE;
luaL_error(L, "Parameter %d should be \"Group\".", index); luaL_error(L, "Parameter %d should be \"Group\".", index);
break; break;
case PARAM_TYPE_EFFECT:
if (lua_isuserdata(L, index)) {
result = **(int32**)lua_touserdata(L, index);
if(result == 3)
return TRUE;
} }
case PARAM_TYPE_EFFECT: {
if(lua_isuserdata(L, index) && check_data_type(L, index, "Effect"))
return TRUE;
if(retfalse) if(retfalse)
return FALSE; return FALSE;
luaL_error(L, "Parameter %d should be \"Effect\".", index); luaL_error(L, "Parameter %d should be \"Effect\".", index);
break; break;
case PARAM_TYPE_FUNCTION: }
if (lua_isfunction(L, index)) case PARAM_TYPE_FUNCTION: {
if(lua_isfunction(L, index))
return TRUE; return TRUE;
if(retfalse) if(retfalse)
return FALSE; return FALSE;
luaL_error(L, "Parameter %d should be \"Function\".", index); luaL_error(L, "Parameter %d should be \"Function\".", index);
break; break;
case PARAM_TYPE_STRING: }
if (lua_isstring(L, index)) case PARAM_TYPE_STRING: {
if(lua_isstring(L, index))
return TRUE; return TRUE;
if(retfalse) if(retfalse)
return FALSE; return FALSE;
luaL_error(L, "Parameter %d should be \"String\".", index); luaL_error(L, "Parameter %d should be \"String\".", index);
break; break;
} }
}
return FALSE; return FALSE;
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
class scriptlib { class scriptlib {
public: public:
static int32 check_data_type(lua_State* L, int32 index, const char* tname);
static int32 check_param(lua_State* L, int32 param_type, int32 index, BOOL retfalse = FALSE); static int32 check_param(lua_State* L, int32 param_type, int32 index, BOOL retfalse = FALSE);
static int32 check_param_count(lua_State* L, int32 count); static int32 check_param_count(lua_State* L, int32 count);
static int32 check_action_permission(lua_State* L); static int32 check_action_permission(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