Commit 7d0634ba authored by fallenstardust's avatar fallenstardust

SYNC OCGCORE

parent 9e29dbcf
...@@ -939,6 +939,15 @@ void ReplayMode::ReplayReload() { ...@@ -939,6 +939,15 @@ void ReplayMode::ReplayReload() {
/*len = */query_field_card(pduel, 1, LOCATION_REMOVED, flag, queryBuffer, 0); /*len = */query_field_card(pduel, 1, LOCATION_REMOVED, flag, queryBuffer, 0);
mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(1), LOCATION_REMOVED, (char*)queryBuffer); mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(1), LOCATION_REMOVED, (char*)queryBuffer);
} }
byte* ReplayMode::ScriptReaderEx(const char* script_name, int* slen) {
char sname[256] = "./expansions";
strcat(sname, script_name + 1);//default script name: ./script/c%d.lua
byte* buffer = default_script_reader(sname, slen);
if(buffer)
return buffer;
else
return default_script_reader(script_name, slen);
}
int ReplayMode::MessageHandler(long fduel, int type) { int ReplayMode::MessageHandler(long fduel, int type) {
if(!enable_log) if(!enable_log)
return 0; return 0;
......
...@@ -47,6 +47,7 @@ public: ...@@ -47,6 +47,7 @@ public:
static void ReplayRefreshSingle(int player, int location, int sequence, int flag = 0xf81fff); static void ReplayRefreshSingle(int player, int location, int sequence, int flag = 0xf81fff);
static void ReplayReload(); static void ReplayReload();
static byte* ScriptReaderEx(const char* script_name, int* slen);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
}; };
......
...@@ -1547,6 +1547,15 @@ void SingleDuel::RefreshSingle(int player, int location, int sequence, int flag) ...@@ -1547,6 +1547,15 @@ void SingleDuel::RefreshSingle(int player, int location, int sequence, int flag)
NetServer::ReSendToPlayer(*pit); NetServer::ReSendToPlayer(*pit);
} }
} }
byte* SingleDuel::ScriptReaderEx(const char* script_name, int* slen) {
char sname[256] = "./expansions";
strcat(sname, script_name + 1);//default script name: ./script/c%d.lua
byte* buffer = default_script_reader(sname, slen);
if(buffer)
return buffer;
else
return default_script_reader(script_name, slen);
}
int SingleDuel::MessageHandler(long fduel, int type) { int SingleDuel::MessageHandler(long fduel, int type) {
if(!enable_log) if(!enable_log)
return 0; return 0;
......
...@@ -38,6 +38,7 @@ public: ...@@ -38,6 +38,7 @@ public:
void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1); void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshSingle(int player, int location, int sequence, int flag = 0xf81fff); void RefreshSingle(int player, int location, int sequence, int flag = 0xf81fff);
static byte* ScriptReaderEx(const char* script_name, int* slen);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
static void SingleTimer(evutil_socket_t fd, short events, void* arg); static void SingleTimer(evutil_socket_t fd, short events, void* arg);
......
...@@ -845,6 +845,14 @@ void SingleMode::SinglePlayReload() { ...@@ -845,6 +845,14 @@ void SingleMode::SinglePlayReload() {
/*len = */query_field_card(pduel, 1, LOCATION_REMOVED, flag, queryBuffer, 0); /*len = */query_field_card(pduel, 1, LOCATION_REMOVED, flag, queryBuffer, 0);
mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(1), LOCATION_REMOVED, (char*)queryBuffer); mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(1), LOCATION_REMOVED, (char*)queryBuffer);
} }
byte* SingleMode::ScriptReaderEx(const char* script_name, int* slen) {
char sname[256] = "./expansions";
strcat(sname, script_name + 1);//default script name: ./script/c%d.lua
if(ScriptReader(sname, slen))
return buffer;
else
return ScriptReader(script_name, slen);
}
byte* SingleMode::ScriptReader(const char* script_name, int* slen) { byte* SingleMode::ScriptReader(const char* script_name, int* slen) {
FILE *fp; FILE *fp;
#ifdef _WIN32 #ifdef _WIN32
......
...@@ -26,6 +26,7 @@ public: ...@@ -26,6 +26,7 @@ public:
static void SinglePlayRefreshSingle(int player, int location, int sequence, int flag = 0xf81fff); static void SinglePlayRefreshSingle(int player, int location, int sequence, int flag = 0xf81fff);
static void SinglePlayReload(); static void SinglePlayReload();
static byte* ScriptReaderEx(const char* script_name, int* slen);
static byte* ScriptReader(const char* script_name, int* slen); static byte* ScriptReader(const char* script_name, int* slen);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
......
...@@ -1664,6 +1664,15 @@ void TagDuel::RefreshSingle(int player, int location, int sequence, int flag) { ...@@ -1664,6 +1664,15 @@ void TagDuel::RefreshSingle(int player, int location, int sequence, int flag) {
} }
} }
} }
byte* TagDuel::ScriptReaderEx(const char* script_name, int* slen) {
char sname[256] = "./expansions";
strcat(sname, script_name + 1);//default script name: ./script/c%d.lua
byte* buffer = default_script_reader(sname, slen);
if(buffer)
return buffer;
else
return default_script_reader(script_name, slen);
}
int TagDuel::MessageHandler(long fduel, int type) { int TagDuel::MessageHandler(long fduel, int type) {
if(!enable_log) if(!enable_log)
return 0; return 0;
......
...@@ -38,6 +38,7 @@ public: ...@@ -38,6 +38,7 @@ public:
void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1); void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshSingle(int player, int location, int sequence, int flag = 0xf81fff); void RefreshSingle(int player, int location, int sequence, int flag = 0xf81fff);
static byte* ScriptReaderEx(const char* script_name, int* slen);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
static void TagTimer(evutil_socket_t fd, short events, void* arg); static void TagTimer(evutil_socket_t fd, short events, void* arg);
......
...@@ -116,17 +116,17 @@ void duel::restore_assumes() { ...@@ -116,17 +116,17 @@ void duel::restore_assumes() {
assumes.clear(); assumes.clear();
} }
void duel::write_buffer32(uint32 value) { void duel::write_buffer32(uint32 value) {
*((uint32*)bufferp) = value; std::memcpy(bufferp, &value, sizeof(value));
bufferp += 4; bufferp += 4;
bufferlen += 4; bufferlen += 4;
} }
void duel::write_buffer16(uint16 value) { void duel::write_buffer16(uint16 value) {
*((uint16*)bufferp) = value; std::memcpy(bufferp, &value, sizeof(value));
bufferp += 2; bufferp += 2;
bufferlen += 2; bufferlen += 2;
} }
void duel::write_buffer8(uint8 value) { void duel::write_buffer8(uint8 value) {
*((uint8*)bufferp) = value; std::memcpy(bufferp, &value, sizeof(value));
bufferp += 1; bufferp += 1;
bufferlen += 1; bufferlen += 1;
} }
......
...@@ -672,6 +672,9 @@ int32 effect::check_value_condition(uint32 extraargs) { ...@@ -672,6 +672,9 @@ int32 effect::check_value_condition(uint32 extraargs) {
return (int32)value; return (int32)value;
} }
} }
void* effect::get_label_object() {
return pduel->lua->get_ref_object(label_object);
}
int32 effect::get_speed() { int32 effect::get_speed() {
if(!(type & EFFECT_TYPE_ACTIONS)) if(!(type & EFFECT_TYPE_ACTIONS))
return 0; return 0;
......
...@@ -55,7 +55,7 @@ public: ...@@ -55,7 +55,7 @@ public:
card* active_handler; card* active_handler;
uint16 status; uint16 status;
uint32 label; uint32 label;
void* label_object; int32 label_object;
int32 condition; int32 condition;
int32 cost; int32 cost;
int32 target; int32 target;
...@@ -90,6 +90,7 @@ public: ...@@ -90,6 +90,7 @@ public:
void get_value(card* pcard, uint32 extraargs, std::vector<int32>* result); void get_value(card* pcard, uint32 extraargs, std::vector<int32>* result);
void get_value(effect* peffect, uint32 extraargs, std::vector<int32>* result); void get_value(effect* peffect, uint32 extraargs, std::vector<int32>* result);
int32 check_value_condition(uint32 extraargs = 0); int32 check_value_condition(uint32 extraargs = 0);
void* get_label_object();
int32 get_speed(); int32 get_speed();
effect* clone(); effect* clone();
card* get_owner() const; card* get_owner() const;
......
...@@ -2031,7 +2031,7 @@ int32 field::adjust_grant_effect() { ...@@ -2031,7 +2031,7 @@ int32 field::adjust_grant_effect() {
} }
for(auto cit = add_set.begin(); cit != add_set.end(); ++cit) { for(auto cit = add_set.begin(); cit != add_set.end(); ++cit) {
card* pcard = *cit; card* pcard = *cit;
effect* geffect = (effect*)peffect->label_object; effect* geffect = (effect*)peffect->get_label_object();
effect* ceffect = geffect->clone(); effect* ceffect = geffect->clone();
ceffect->owner = pcard; ceffect->owner = pcard;
pcard->add_effect(ceffect); pcard->add_effect(ceffect);
......
...@@ -744,15 +744,11 @@ int32 interpreter::load_card_script(uint32 code) { ...@@ -744,15 +744,11 @@ int32 interpreter::load_card_script(uint32 code) {
lua_pushstring(current_state, "__index"); lua_pushstring(current_state, "__index");
lua_pushvalue(current_state, -2); lua_pushvalue(current_state, -2);
lua_rawset(current_state, -3); lua_rawset(current_state, -3);
//load extra scripts
sprintf(script_name, "./expansions/script/c%d.lua", code);
if (!load_script(script_name)) {
sprintf(script_name, "./script/c%d.lua", code); sprintf(script_name, "./script/c%d.lua", code);
if (!load_script(script_name)) { if(!load_script(script_name)) {
return OPERATION_FAIL; return OPERATION_FAIL;
} }
} }
}
return OPERATION_SUCCESS; return OPERATION_SUCCESS;
} }
void interpreter::add_param(void *param, int32 type, bool front) { void interpreter::add_param(void *param, int32 type, bool front) {
...@@ -1179,6 +1175,14 @@ int32 interpreter::clone_function_ref(int32 func_ref) { ...@@ -1179,6 +1175,14 @@ int32 interpreter::clone_function_ref(int32 func_ref) {
int32 ref = luaL_ref(current_state, LUA_REGISTRYINDEX); int32 ref = luaL_ref(current_state, LUA_REGISTRYINDEX);
return ref; return ref;
} }
void* interpreter::get_ref_object(int32 ref_handler) {
if(ref_handler == 0)
return nullptr;
lua_rawgeti(current_state, LUA_REGISTRYINDEX, ref_handler);
void* p = *(void**)lua_touserdata(current_state, -1);
lua_pop(current_state, 1);
return p;
}
//Convert a pointer to a lua value, +1 -0 //Convert a pointer to a lua value, +1 -0
void interpreter::card2value(lua_State* L, card* pcard) { void interpreter::card2value(lua_State* L, card* pcard) {
if (!pcard || pcard->ref_handle == 0) if (!pcard || pcard->ref_handle == 0)
......
...@@ -69,6 +69,7 @@ public: ...@@ -69,6 +69,7 @@ public:
int32 get_function_value(int32 f, uint32 param_count, std::vector<int32>* result); int32 get_function_value(int32 f, uint32 param_count, std::vector<int32>* result);
int32 call_coroutine(int32 f, uint32 param_count, uint32* yield_value, uint16 step); int32 call_coroutine(int32 f, uint32 param_count, uint32* yield_value, uint16 step);
int32 clone_function_ref(int32 func_ref); int32 clone_function_ref(int32 func_ref);
void* get_ref_object(int32 ref_handler);
static void card2value(lua_State* L, card* pcard); static void card2value(lua_State* L, card* pcard);
static void group2value(lua_State* L, group* pgroup); static void group2value(lua_State* L, group* pgroup);
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "field.h" #include "field.h"
#include "card.h" #include "card.h"
#include "effect.h" #include "effect.h"
#include "group.h"
int32 scriptlib::effect_new(lua_State *L) { int32 scriptlib::effect_new(lua_State *L) {
check_param_count(L, 1); check_param_count(L, 1);
...@@ -186,10 +187,17 @@ int32 scriptlib::effect_set_label_object(lua_State *L) { ...@@ -186,10 +187,17 @@ int32 scriptlib::effect_set_label_object(lua_State *L) {
peffect->label_object = 0; peffect->label_object = 0;
return 0; return 0;
} }
if(!lua_isuserdata(L, 2)) if(check_param(L, PARAM_TYPE_CARD, 2, TRUE)) {
card* p = *(card**)lua_touserdata(L, 2);
peffect->label_object = p->ref_handle;
} else if(check_param(L, PARAM_TYPE_EFFECT, 2, TRUE)) {
effect* p = *(effect**)lua_touserdata(L, 2);
peffect->label_object = p->ref_handle;
} else if(check_param(L, PARAM_TYPE_GROUP, 2, TRUE)) {
group* p = *(group**)lua_touserdata(L, 2);
peffect->label_object = p->ref_handle;
} else
luaL_error(L, "Parameter 2 should be \"Card\" or \"Effect\" or \"Group\"."); luaL_error(L, "Parameter 2 should be \"Card\" or \"Effect\" or \"Group\".");
void* p = *(void**)lua_touserdata(L, 2);
peffect->label_object = p;
return 0; return 0;
} }
int32 scriptlib::effect_set_category(lua_State *L) { int32 scriptlib::effect_set_category(lua_State *L) {
...@@ -342,15 +350,14 @@ int32 scriptlib::effect_get_label_object(lua_State *L) { ...@@ -342,15 +350,14 @@ int32 scriptlib::effect_get_label_object(lua_State *L) {
lua_pushnil(L); lua_pushnil(L);
return 1; return 1;
} }
int32 type = *(int32*)peffect->label_object; lua_rawgeti(L, LUA_REGISTRYINDEX, peffect->label_object);
if(type == 1) if(lua_isuserdata(L, -1))
interpreter::card2value(L, (card*)peffect->label_object); return 1;
else if(type == 2) else {
interpreter::group2value(L, (group*)peffect->label_object); lua_pop(L, 1);
else if(type == 3) lua_pushnil(L);
interpreter::effect2value(L, (effect*)peffect->label_object);
else lua_pushnil(L);
return 1; return 1;
}
} }
int32 scriptlib::effect_get_category(lua_State *L) { int32 scriptlib::effect_get_category(lua_State *L) {
check_param_count(L, 1); check_param_count(L, 1);
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<pre> <pre>
更新: 更新:
1.更新ygo内核; 1.更新ygo内核;
4.新卡T1005; 4.新卡T1005+DBHS
优化: 优化:
1.卡密搜索可以搜到它规则上的同名卡和异画卡; 1.卡密搜索可以搜到它规则上的同名卡和异画卡;
2.筛选效果怪兽分类不显示其他种类; 2.筛选效果怪兽分类不显示其他种类;
......
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