From 3731a8e9a30f1fd9b30f99f94e2fe62bbdb285a1 Mon Sep 17 00:00:00 2001 From: mekolat Date: Wed, 14 Oct 2015 15:58:59 -0400 Subject: add more params, allow get/set to use char id --- src/map/pc.cpp | 21 +++++++++++++++++++++ src/map/script-fun.cpp | 28 ++++++++++++++++++++++++++-- src/mmo/clif.t.hpp | 4 +++- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 1440454..0f6c9a6 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -3522,6 +3522,12 @@ int pc_readparam(dumb_ptr bl, SP type) case SP::BL_TYPE: val = static_cast(bl->bl_type); break; + case SP::PARTNER: + val = sd ? unwrap(sd->status.partner_id) : 0; + break; + case SP::CHAR_ID: + val = sd ? unwrap(sd->status_key.char_id) : 0; + break; } return val; @@ -3663,6 +3669,21 @@ int pc_setparam(dumb_ptr sd, SP type, int val) case SP::LUK: pc_statusup2(sd, type, (val - sd->status.attrs[sp_to_attr(type)])); break; + case SP::PARTNER: + dumb_ptr p_bl; + if (val < 2000000 && val >= 150000) + { + dumb_ptr p_sd = nullptr; + if ((p_sd = map_nick2sd(map_charid2nick(wrap(val)))) != nullptr) + p_bl = map_id2bl(p_sd->bl_id); + } + else + p_bl = map_id2bl(wrap(val)); + if (val < 1) + pc_divorce(sd); + else + p_bl ? pc_marriage(sd, p_bl->is_player()) : 0; + break; } clif_updatestatus(sd, type); diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp index 3592095..f7108d0 100644 --- a/src/map/script-fun.cpp +++ b/src/map/script-fun.cpp @@ -995,7 +995,19 @@ void builtin_set(ScriptState *st) } else { - id = wrap(conv_num(st, sdata)); + int num = conv_num(st, sdata); + if (num >= 2000000) + id = wrap(num); + else if (num >= 150000) + { + dumb_ptr p_sd = nullptr; + if ((p_sd = map_nick2sd(map_charid2nick(wrap(num)))) != nullptr) + id = p_sd->bl_id; + else + return; + } + else + return; bl = map_id2bl(id); } } @@ -3399,7 +3411,19 @@ void builtin_get(ScriptState *st) } else { - id = wrap(conv_num(st, sdata)); + int num = conv_num(st, sdata); + if (num >= 2000000) + id = wrap(num); + else if (num >= 150000) + { + dumb_ptr p_sd = nullptr; + if ((p_sd = map_nick2sd(map_charid2nick(wrap(num)))) != nullptr) + id = p_sd->bl_id; + else + return; + } + else + return; bl = map_id2bl(id); } diff --git a/src/mmo/clif.t.hpp b/src/mmo/clif.t.hpp index fec0201..888fd66 100644 --- a/src/mmo/clif.t.hpp +++ b/src/mmo/clif.t.hpp @@ -307,8 +307,9 @@ enum class SP : uint16_t // sent to client JOBLEVEL = 55, -#if 0 PARTNER = 57, + +#if 0 CART = 58, FAME = 59, UNBREAKABLE = 60, @@ -475,6 +476,7 @@ enum class SP : uint16_t PVP_CHANNEL = 1076, BL_ID = 1077, BL_TYPE = 1078, + CHAR_ID = 1079, }; constexpr -- cgit v1.2.3-60-g2f50