summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/admin/ladmin.cpp370
-rw-r--r--src/char/char.cpp86
-rw-r--r--src/generic/dumb_ptr.hpp5
-rw-r--r--src/login/login.cpp219
-rw-r--r--src/map/battle.cpp11
-rw-r--r--src/map/battle.hpp1
-rw-r--r--src/map/chrif.cpp133
-rw-r--r--src/map/chrif.hpp1
-rw-r--r--src/map/clif.cpp108
-rw-r--r--src/map/clif.hpp5
-rw-r--r--src/map/npc.cpp21
-rw-r--r--src/map/npc.hpp1
-rw-r--r--src/map/pc.cpp180
-rw-r--r--src/map/pc.hpp5
-rw-r--r--src/map/script-fun.cpp83
-rw-r--r--src/mmo/skill.t.hpp3
-rw-r--r--src/mmo/version.cpp2
17 files changed, 102 insertions, 1132 deletions
diff --git a/src/admin/ladmin.cpp b/src/admin/ladmin.cpp
index e3557dd..97b570e 100644
--- a/src/admin/ladmin.cpp
+++ b/src/admin/ladmin.cpp
@@ -224,29 +224,6 @@ AString ladmin_log_filename = "log/ladmin.log"_s;
// all other values are 'No MSG', then use state 9 please.
// 'error_message_#7': message of the code error 6 = Your are Prohibited to log in until %s (packet 0x006a)
//
-// timeadd <account_name> <modifier>
-// Adds or substracts time from the validity limit of an account.
-// Modifier is done as follows:
-// Adjustment value (-1, 1, +1, etc...)
-// Modified element:
-// a or y: year
-// m: month
-// j or d: day
-// h: hour
-// mn: minute
-// s: second
-// <example> timeadd testname +1m-2mn1s-6y
-// this example adds 1 month and 1 second, and substracts 2 minutes and 6 years at the same time.
-// NOTE: You can not modify a unlimited validity limit.
-// If you want modify it, you want probably create a limited validity limit.
-// So, at first, you must set the validity limit to a date/time.
-//
-// timeset <account_name> yyyy/mm/dd [hh:mm:ss]
-// Changes the validity limit of an account.
-// Default time [hh:mm:ss]: 23:59:59.
-// timeset <account_name> 0
-// Gives an unlimited validity limit (0 = unlimited).
-//
// unban/unbanish <account name>
// Unban an account.
// Like banset <account name> 0.
@@ -491,13 +468,6 @@ void display_help(ZString param)
PRINTF(" Research by name is not possible with this command.\n"_fmt);
PRINTF(" <example> list 10 9999999\n"_fmt);
}
- else if (command == "itemfrob"_s)
- {
- PRINTF("itemfrob <source-id> <dest-id>\n"_fmt);
- PRINTF(" Translates item IDs for all accounts.\n"_fmt);
- PRINTF(" Any items matching the source item ID will be mapped to the dest-id.\n"_fmt);
- PRINTF(" <example> itemfrob 500 700\n"_fmt);
- }
else if (command == "listban"_s)
{
PRINTF("listban [start_id [end_id]]\n"_fmt);
@@ -569,34 +539,6 @@ void display_help(ZString param)
PRINTF(" 'error_message_#7': message of the code error 6\n"_fmt);
PRINTF(" = Your are Prohibited to log in until... (packet 0x006a)\n"_fmt);
}
- else if (command == "timeadd"_s)
- {
- PRINTF("timeadd <account_name> <modifier>\n"_fmt);
- PRINTF(" Adds or substracts time from the validity limit of an account.\n"_fmt);
- PRINTF(" Modifier is done as follows:\n"_fmt);
- PRINTF(" Adjustment value (-1, 1, +1, etc...)\n"_fmt);
- PRINTF(" Modified element:\n"_fmt);
- PRINTF(" a or y: year\n"_fmt);
- PRINTF(" m: month\n"_fmt);
- PRINTF(" j or d: day\n"_fmt);
- PRINTF(" h: hour\n"_fmt);
- PRINTF(" mn: minute\n"_fmt);
- PRINTF(" s: second\n"_fmt);
- PRINTF(" <example> timeadd testname +1m-2mn1s-6y\n"_fmt);
- PRINTF(" this example adds 1 month and 1 second, and substracts 2 minutes\n"_fmt);
- PRINTF(" and 6 years at the same time.\n"_fmt);
- PRINTF("NOTE: You can not modify a unlimited validity limit.\n"_fmt);
- PRINTF(" If you want modify it, you want probably create a limited validity limit.\n"_fmt);
- PRINTF(" So, at first, you must set the validity limit to a date/time.\n"_fmt);
- }
- else if (command == "timeadd"_s)
- {
- PRINTF("timeset <account_name> yyyy/mm/dd [hh:mm:ss]\n"_fmt);
- PRINTF(" Changes the validity limit of an account.\n"_fmt);
- PRINTF(" Default time [hh:mm:ss]: 23:59:59.\n"_fmt);
- PRINTF("timeset <account_name> 0\n"_fmt);
- PRINTF(" Gives an unlimited validity limit (0 = unlimited).\n"_fmt);
- }
else if (command == "unban"_s)
{
PRINTF("unban/unbanish <account name>\n"_fmt);
@@ -648,7 +590,6 @@ void display_help(ZString param)
PRINTF(" gm <account_name> [GM_level] -- Modify the GM level of an account\n"_fmt);
PRINTF(" id <account name> -- Give the id of an account\n"_fmt);
PRINTF(" info <account_id> -- Display all information of an account\n"_fmt);
- PRINTF(" itemfrob <source-id> <dest-id> -- Map all items from one item ID to another\n"_fmt);
PRINTF(" kami <message> -- Sends a broadcast message (in yellow)\n"_fmt);
PRINTF(" kamib <message> -- Sends a broadcast message (in blue)\n"_fmt);
PRINTF(" list [First_id [Last_id]] -- Display a list of accounts\n"_fmt);
@@ -665,10 +606,6 @@ void display_help(ZString param)
PRINTF(" search <expression> -- Seek accounts\n"_fmt);
PRINTF(" sex <nomcompte> <sexe> -- Modify the sex of an account\n"_fmt);
PRINTF(" state <account_name> <new_state> <error_message_#7> -- Change the state\n"_fmt);
- PRINTF(" timeadd <account_name> <modifier> -- Add or substract time from the\n"_fmt);
- PRINTF(" example: ta apple +1m-2mn1s-2y validity limit of an account\n"_fmt);
- PRINTF(" timeset <account_name> yyyy/mm/dd [hh:mm:ss] -- Change the validify limit\n"_fmt);
- PRINTF(" timeset <account_name> 0 -- Give a unlimited validity limit\n"_fmt);
PRINTF(" unban <account name> -- Remove the banishment of an account\n"_fmt);
PRINTF(" unblock <account name> -- Set state 0 (Account ok) to an account\n"_fmt);
PRINTF(" version -- Gives the version of the login-server\n"_fmt);
@@ -1264,29 +1201,6 @@ void listaccount(ZString param, int type)
list_count = 0;
}
-//--------------------------------------------------------
-// Sub-function: Frobnicate items
-//--------------------------------------------------------
-static
-int itemfrob(ZString param)
-{
- ItemNameId source_id, dest_id;
-
- if (!extract(param, record<' '>(&source_id, &dest_id)))
- {
- PRINTF("You must provide the source and destination item IDs.\n"_fmt);
- return 1;
- }
-
- Packet_Fixed<0x7924> fixed_24;
- fixed_24.source_item_id = source_id;
- fixed_24.dest_item_id = dest_id;
- send_fpacket<0x7924, 10>(login_session, fixed_24);
- bytes_to_read = 1; // all logging is done to the three main servers
-
- return 0;
-}
-
//--------------------------------------------
// Sub-function: Asking to modify a memo field
//--------------------------------------------
@@ -1556,179 +1470,6 @@ void blockaccount(ZString param)
changestatesub(name, 5, "-"_s); // state 5, no error message
}
-//---------------------------------------------------------------------
-// Sub-function: Add/substract time to the validity limit of an account
-//---------------------------------------------------------------------
-static
-void timeaddaccount(ZString param)
-{
- AccountName name;
- HumanTimeDiff modif {};
-
- if (!qsplit(param, &name, &modif))
- {
- PRINTF("Please input an account name and a modifier.\n"_fmt);
- PRINTF(" <example>: timeadd testname +1m-2mn1s-6y\n"_fmt);
- PRINTF(" this example adds 1 month and 1 second, and substracts 2 minutes\n"_fmt);
- PRINTF(" and 6 years at the same time.\n"_fmt);
- LADMIN_LOG("Incomplete parameters to modify a limit time ('timeadd' command).\n"_fmt);
- return;
- }
- if (name.is_print())
- {
- return;
- }
-
- if (!modif)
- {
- PRINTF("Please give an adjustment with this command:\n"_fmt);
- PRINTF(" Adjustment value (-1, 1, +1, etc...)\n"_fmt);
- PRINTF(" Modified element:\n"_fmt);
- PRINTF(" a or y: year\n"_fmt);
- PRINTF(" m: month\n"_fmt);
- PRINTF(" j or d: day\n"_fmt);
- PRINTF(" h: hour\n"_fmt);
- PRINTF(" mn: minute\n"_fmt);
- PRINTF(" s: second\n"_fmt);
- PRINTF(" <example> timeadd testname +1m-2mn1s-6y\n"_fmt);
- PRINTF(" this example adds 1 month and 1 second, and substracts 2 minutes\n"_fmt);
- PRINTF(" and 6 years at the same time.\n"_fmt);
- LADMIN_LOG("No adjustment isn't an adjustment ('timeadd' command).\n"_fmt);
- return;
- }
-
- LADMIN_LOG("Request to login-server to modify a time limit.\n"_fmt);
-
- Packet_Fixed<0x7950> fixed_50;
- fixed_50.account_name = name;
- fixed_50.valid_add = modif;
- send_fpacket<0x7950, 38>(login_session, fixed_50);
- bytes_to_read = 1;
-}
-
-//-------------------------------------------------
-// Sub-function: Set a validity limit of an account
-//-------------------------------------------------
-static
-void timesetaccount(ZString param)
-{
- AccountName name;
- XString date;
- XString time_;
- int year, month, day, hour, minute, second;
-
- year = month = day = hour = minute = second = 0;
-
- // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
- TimeT connect_until_time = TimeT();
- struct tm tmtime = connect_until_time; // initialize
-
- if (!qsplit(param, &name, &date, &time_)
- && !qsplit(param, &name, &date))
- {
- PRINTF("Please input an account name, a date and a hour.\n"_fmt);
- PRINTF("<example>: timeset <account_name> yyyy/mm/dd [hh:mm:ss]\n"_fmt);
- PRINTF(" timeset <account_name> 0 (0 = unlimited)\n"_fmt);
- PRINTF(" Default time [hh:mm:ss]: 23:59:59.\n"_fmt);
- LADMIN_LOG("Incomplete parameters to set a limit time ('timeset' command).\n"_fmt);
- return;
- }
- if (!name.is_print())
- return;
-
- if (!time_)
- time_ = "23:59:59"_s;
-
- if (date != "0"_s
- && ((!extract(date, record<'/'>(&year, &month, &day))
- && !extract(date, record<'-'>(&year, &month, &day))
- && !extract(date, record<'.'>(&year, &month, &day)))
- || !extract(time_, record<':'>(&hour, &minute, &second))))
- {
- PRINTF("Please input 0 or a date and a time (format: 0 or yyyy/mm/dd hh:mm:ss).\n"_fmt);
- LADMIN_LOG("Invalid format for the date/time ('timeset' command).\n"_fmt);
- return;
- }
-
- if (date == "0"_s)
- {
- connect_until_time = TimeT();
- }
- else
- {
- if (year < 70)
- {
- year = year + 100;
- }
- if (year >= 1900)
- {
- year = year - 1900;
- }
- if (month < 1 || month > 12)
- {
- PRINTF("Please give a correct value for the month (from 1 to 12).\n"_fmt);
- LADMIN_LOG("Invalid month for the date ('timeset' command).\n"_fmt);
- return;
- }
- month = month - 1;
- if (day < 1 || day > 31)
- {
- PRINTF("Please give a correct value for the day (from 1 to 31).\n"_fmt);
- LADMIN_LOG("Invalid day for the date ('timeset' command).\n"_fmt);
- return;
- }
- if (((month == 3 || month == 5 || month == 8 || month == 10)
- && day > 30) ||(month == 1 && day > 29))
- {
- PRINTF("Please give a correct value for a day of this month (%d).\n"_fmt,
- month);
- LADMIN_LOG("Invalid day for this month ('timeset' command).\n"_fmt);
- return;
- }
- if (hour < 0 || hour > 23)
- {
- PRINTF("Please give a correct value for the hour (from 0 to 23).\n"_fmt);
- LADMIN_LOG("Invalid hour for the time ('timeset' command).\n"_fmt);
- return;
- }
- if (minute < 0 || minute > 59)
- {
- PRINTF("Please give a correct value for the minutes (from 0 to 59).\n"_fmt);
- LADMIN_LOG("Invalid minute for the time ('timeset' command).\n"_fmt);
- return;
- }
- if (second < 0 || second > 59)
- {
- PRINTF("Please give a correct value for the seconds (from 0 to 59).\n"_fmt);
- LADMIN_LOG("Invalid second for the time ('timeset' command).\n"_fmt);
- return;
- }
- tmtime.tm_year = year;
- tmtime.tm_mon = month;
- tmtime.tm_mday = day;
- tmtime.tm_hour = hour;
- tmtime.tm_min = minute;
- tmtime.tm_sec = second;
- tmtime.tm_isdst = -1; // -1: no winter/summer time modification
- connect_until_time = tmtime;
- if (connect_until_time.error())
- {
- PRINTF("Invalid date.\n"_fmt);
- PRINTF("Please add 0 or a date and a time (format: 0 or yyyy/mm/dd hh:mm:ss).\n"_fmt);
- LADMIN_LOG("Invalid date. ('timeset' command).\n"_fmt);
- return;
- }
- }
-
- LADMIN_LOG("Request to login-server to set a time limit.\n"_fmt);
-
- Packet_Fixed<0x7948> fixed_48;
- fixed_48.account_name = name;
- fixed_48.valid_until = connect_until_time;
- send_fpacket<0x7948, 30>(login_session, fixed_48);
- bytes_to_read = 1;
-}
-
//------------------------------------------------------------------------------
// Sub-function: Asking to displaying information about an account (by its name)
//------------------------------------------------------------------------------
@@ -1878,8 +1619,6 @@ void prompt(void)
infoaccount(wrap<AccountId>(static_cast<uint32_t>(atoi(parameters.c_str()))));
else if (command == "kami"_s)
sendbroadcast(parameters); // flag for normal
- else if (command == "itemfrob"_s)
- itemfrob(parameters); // 0: to list all
else if (command == "list"_s)
listaccount(parameters, 0); // 0: to list all
else if (command == "listban"_s)
@@ -1902,10 +1641,6 @@ void prompt(void)
changesex(parameters);
else if (command == "state"_s)
changestate(parameters);
- else if (command == "timeadd"_s)
- timeaddaccount(parameters);
- else if (command == "timeset"_s)
- timesetaccount(parameters);
else if (command == "unban"_s)
unbanaccount(parameters);
else if (command == "unblock"_s)
@@ -1990,17 +1725,6 @@ void parse_fromlogin(Session *s)
break;
}
- case 0x7925: // Itemfrob-OK
- {
- Packet_Fixed<0x7925> fixed;
- rv = recv_fpacket<0x7925, 2>(s, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- bytes_to_read = 0;
- break;
- }
-
case 0x7921: // Displaying of the list of accounts
{
std::vector<Packet_Repeat<0x7921>> repeat;
@@ -2491,47 +2215,6 @@ void parse_fromlogin(Session *s)
break;
}
- case 0x7949: // answer of an account validity limit set
- {
- Packet_Fixed<0x7949> fixed;
- rv = recv_fpacket<0x7949, 34>(s, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- AccountId account_id = fixed.account_id;
- AccountName name = fixed.account_name;
- if (!account_id)
- {
- PRINTF("Account [%s] validity limit changing failed. Account doesn't exist.\n"_fmt,
- name);
- LADMIN_LOG("Account [%s] validity limit changing failed. Account doesn't exist.\n"_fmt,
- name);
- }
- else
- {
- TimeT timestamp = fixed.valid_until;
- if (!timestamp)
- {
- PRINTF("Validity Limit of the account [%s][id: %d] successfully changed to [unlimited].\n"_fmt,
- name, account_id);
- LADMIN_LOG("Validity Limit of the account [%s][id: %d] successfully changed to [unlimited].\n"_fmt,
- name, account_id);
- }
- else
- {
- timestamp_seconds_buffer tmpstr;
- stamp_time(tmpstr, &timestamp);
- PRINTF("Validity Limit of the account [%s][id: %d] successfully changed to be until %s.\n"_fmt,
- name, account_id, tmpstr);
- LADMIN_LOG("Validity Limit of the account [%s][id: %d] successfully changed to be until %s.\n"_fmt,
- name, account_id,
- tmpstr);
- }
- }
- bytes_to_read = 0;
- break;
- }
-
case 0x794b: // answer of an account ban set
{
Packet_Fixed<0x794b> fixed;
@@ -2636,50 +2319,6 @@ void parse_fromlogin(Session *s)
break;
}
- case 0x7951: // answer of an account validity limit changing
- {
- Packet_Fixed<0x7951> fixed;
- rv = recv_fpacket<0x7951, 34>(s, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- AccountId account_id = fixed.account_id;
- AccountName name = fixed.account_name;
- if (!account_id)
- {
- PRINTF("Account [%s] validity limit changing failed. Account doesn't exist.\n"_fmt,
- name);
- LADMIN_LOG("Account [%s] validity limit changing failed. Account doesn't exist.\n"_fmt,
- name);
- }
- else
- {
- TimeT timestamp = fixed.valid_until;
- if (!timestamp)
- {
- PRINTF("Validity limit of the account [%s][id: %d] unchanged.\n"_fmt,
- name, account_id);
- PRINTF("The account have an unlimited validity limit or\n"_fmt);
- PRINTF("the changing is impossible with the proposed adjustments.\n"_fmt);
- LADMIN_LOG("Validity limit of the account [%s][id: %d] unchanged. The account have an unlimited validity limit or the changing is impossible with the proposed adjustments.\n"_fmt,
- name, account_id);
- }
- else
- {
- timestamp_seconds_buffer tmpstr;
- stamp_time(tmpstr, &timestamp);
- PRINTF("Validity limit of the account [%s][id: %d] successfully changed to be until %s.\n"_fmt,
- name, account_id,
- tmpstr);
- LADMIN_LOG("Validity limit of the account [%s][id: %d] successfully changed to be until %s.\n"_fmt,
- name, account_id,
- tmpstr);
- }
- }
- bytes_to_read = 0;
- break;
- }
-
case 0x7953: // answer of a request about informations of an account (by account name/id)
{
Packet_Head<0x7953> head;
@@ -2700,7 +2339,6 @@ void parse_fromlogin(Session *s)
timestamp_milliseconds_buffer lastlogin = head.last_login_string;
VString<15> last_ip_ = head.ip_string;
AccountEmail email = head.email;
- TimeT connect_until_time = head.connect_until;
TimeT ban_until_time = head.ban_until;
AString& memo = repeat;
if (!account_id)
@@ -2794,17 +2432,9 @@ void parse_fromlogin(Session *s)
connections);
PRINTF(" Last connection at: %s (ip: %s)\n"_fmt,
lastlogin, last_ip_);
- if (!connect_until_time)
{
PRINTF(" Validity limit: unlimited.\n"_fmt);
}
- else
- {
- timestamp_seconds_buffer tmpstr;
- stamp_time(tmpstr, &connect_until_time);
- PRINTF(" Validity limit: until %s.\n"_fmt,
- tmpstr);
- }
PRINTF(" Memo: '%s'\n"_fmt, memo);
}
}
diff --git a/src/char/char.cpp b/src/char/char.cpp
index 0b166c2..8ce2165 100644
--- a/src/char/char.cpp
+++ b/src/char/char.cpp
@@ -145,7 +145,6 @@ struct char_session_data : SessionData
SEX sex;
unsigned short packet_tmw_version;
AccountEmail email;
- TimeT connect_until_time;
};
void SessionDeleter::operator()(SessionData *sd)
@@ -162,7 +161,6 @@ struct AuthFifoEntry
int delflag;
SEX sex;
unsigned short packet_tmw_version;
- TimeT connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
};
static
std::array<AuthFifoEntry, 256> auth_fifo;
@@ -1287,7 +1285,6 @@ void parse_tologin(Session *ls)
sd->email = stringish<AccountEmail>(fixed.email);
if (!e_mail_check(sd->email))
sd->email = DEFAULT_EMAIL;
- sd->connect_until_time = fixed.connect_until;
// send characters to player
mmo_char_send006b(s2, sd);
}
@@ -1326,7 +1323,6 @@ void parse_tologin(Session *ls)
sd->email = fixed.email;
if (!e_mail_check(sd->email))
sd->email = DEFAULT_EMAIL;
- sd->connect_until_time = fixed.connect_until;
break;
}
}
@@ -1484,64 +1480,6 @@ void parse_tologin(Session *ls)
break;
}
- case 0x7924:
- { // [Fate] Itemfrob package: forwarded from login-server
- Packet_Fixed<0x7924> fixed;
- rv = recv_fpacket<0x7924, 10>(ls, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- ItemNameId source_id = fixed.source_item_id;
- ItemNameId dest_id = fixed.dest_item_id;
-
- Packet_Fixed<0x2afa> fixed_fa;
- fixed_fa.source_item_id = source_id;
- fixed_fa.dest_item_id = dest_id;
-
- // forward package to map servers
- for (Session *ss : iter_map_sessions())
- {
- send_fpacket<0x2afa, 10>(ss, fixed_fa);
- }
-
- for (CharPair& cp : char_keys)
- {
- CharKey *k = &cp.key;
- CharData& cd = *cp.data.get();
- CharData *c = &cd;
- Borrowed<Storage> s = account2storage(k->account_id);
- int changes = 0;
-#define FIX(v) if (v == source_id) {v = dest_id; ++changes; }
- for (IOff0 j : IOff0::iter())
- {
- FIX(c->inventory[j].nameid);
- }
- // used to FIX cart, but it's no longer supported
- // FIX(c->weapon);
- FIX(c->shield);
- FIX(c->head_top);
- FIX(c->head_mid);
- FIX(c->head_bottom);
-
- {
- for (SOff0 j : SOff0::iter())
- {
- FIX(s->storage_[j].nameid);
- }
- }
-#undef FIX
- if (changes)
- CHAR_LOG("itemfrob(%d -> %d): `%s'(%d, account %d): changed %d times\n"_fmt,
- source_id, dest_id, k->name, k->char_id,
- k->account_id, changes);
-
- }
-
- mmo_char_sync();
- inter_storage_save();
- break;
- }
-
// Account deletion notification (from login-server)
case 0x2730:
{
@@ -1739,22 +1677,6 @@ void parse_frommap(Session *ms)
{
switch (packet_id)
{
- // request from map-server to reload GM accounts. Transmission to login-server (by Yor)
- case 0x2af7:
- {
- Packet_Fixed<0x2af7> fixed;
- rv = recv_fpacket<0x2af7, 2>(ms, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- if (login_session)
- { // don't send request if no login-server
- Packet_Fixed<0x2709> fixed_09;
- send_fpacket<0x2709, 2>(login_session, fixed_09);
- }
- break;
- }
-
// Receiving map names list from the map-server
case 0x2afa:
{
@@ -1880,7 +1802,6 @@ void parse_frommap(Session *ms)
Packet_Payload<0x2afd> payload_fd; // not file descriptor
payload_fd.account_id = account_id;
payload_fd.login_id2 = afi.login_id2;
- payload_fd.connect_until = afi.connect_until_time;
cd->sex = afi.sex;
payload_fd.packet_tmw_version = afi.packet_tmw_version;
FPRINTF(stderr,
@@ -1986,7 +1907,6 @@ void parse_frommap(Session *ms)
auth_fifo_iter->login_id1 = fixed.login_id1;
auth_fifo_iter->login_id2 = fixed.login_id2;
auth_fifo_iter->delflag = 2;
- auth_fifo_iter->connect_until_time = TimeT(); // unlimited/unknown time by default (not display in map-server)
auth_fifo_iter->ip = fixed.ip;
auth_fifo_iter++;
@@ -2025,7 +1945,6 @@ void parse_frommap(Session *ms)
auth_fifo_iter->char_id = fixed.char_id;
auth_fifo_iter->delflag = 0;
auth_fifo_iter->sex = fixed.sex;
- auth_fifo_iter->connect_until_time = TimeT(); // unlimited/unknown time by default (not display in map-server)
auth_fifo_iter->ip = fixed.client_ip;
// default, if not found in the loop
@@ -2417,7 +2336,6 @@ void handle_x0066(Session *s, struct char_session_data *sd, uint8_t rfifob_2, IP
auth_fifo_iter->login_id2 = sd->login_id2;
auth_fifo_iter->delflag = 0;
auth_fifo_iter->sex = sd->sex;
- auth_fifo_iter->connect_until_time = sd->connect_until_time;
auth_fifo_iter->ip = s->client_ip;
auth_fifo_iter->packet_tmw_version = sd->packet_tmw_version;
auth_fifo_iter++;
@@ -2486,7 +2404,6 @@ void parse_char(Session *s)
s->session_data = make_unique<char_session_data, SessionDeleter>();
sd = static_cast<char_session_data *>(s->session_data.get());
sd->email = stringish<AccountEmail>("no mail"_s); // put here a mail without '@' to refuse deletion if we don't receive the e-mail
- sd->connect_until_time = TimeT(); // unknow or illimited (not displaying on map-server)
}
sd->account_id = account_id;
sd->login_id1 = fixed.login_id1;
@@ -2665,9 +2582,6 @@ void parse_char(Session *s)
s->set_eof();
return;
}
- AccountEmail email = fixed.email;
- if (!e_mail_check(email))
- email = DEFAULT_EMAIL;
{
{
diff --git a/src/generic/dumb_ptr.hpp b/src/generic/dumb_ptr.hpp
index 72247d5..2ada93b 100644
--- a/src/generic/dumb_ptr.hpp
+++ b/src/generic/dumb_ptr.hpp
@@ -35,8 +35,11 @@ class dumb_ptr
friend class dumb_ptr;
T *impl;
public:
+ dumb_ptr() noexcept
+ : impl(nullptr)
+ {}
explicit
- dumb_ptr(T *p=nullptr) noexcept
+ dumb_ptr(T *p) noexcept
: impl(p)
{}
template<class U>
diff --git a/src/login/login.cpp b/src/login/login.cpp
index fa528ba..526eb5d 100644
--- a/src/login/login.cpp
+++ b/src/login/login.cpp
@@ -177,8 +177,6 @@ GmLevel min_level_to_connect = GmLevel::from(0_u32); // minimum level of player
static
int add_to_unlimited_account = 0; // Give possibility or not to adjust (ladmin command: timeadd) the time of an unlimited account.
static
-int start_limited_time = -1; // Starting additional sec from now for the limited time at creation of accounts (-1: unlimited time, 0 or more: additional sec from now)
-static
int check_ip_flag = 1; // It's to check IP of a player between login-server and char-server (part of anti-hacking system)
DIAG_PUSH();
@@ -216,7 +214,6 @@ struct AuthData
AccountEmail email; // e-mail (by default: a@a.com)
timestamp_seconds_buffer error_message; // Message of error code #6 = Your are Prohibited to log in until %s (packet 0x006a)
TimeT ban_until_time; // # of seconds 1/1/1970 (timestamp): ban time limit of the account (0 = no ban)
- TimeT connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
IP4Address last_ip; // save of last IP of connection
VString<254> memo; // a memo field
int account_reg2_num;
@@ -482,7 +479,7 @@ AString mmo_auth_tostr(const AuthData *p)
p->state,
p->email,
p->error_message,
- p->connect_until_time,
+ TimeT(),
p->last_ip,
p->memo,
p->ban_until_time);
@@ -499,6 +496,7 @@ AString mmo_auth_tostr(const AuthData *p)
static
bool extract(XString line, AuthData *ad)
{
+ TimeT unused_connect_until_time;
std::vector<GlobalReg> vars;
VString<1> sex;
VString<15> ip;
@@ -513,7 +511,7 @@ bool extract(XString line, AuthData *ad)
&ad->state,
&ad->email,
&ad->error_message,
- &ad->connect_until_time,
+ &unused_connect_until_time,
&ip,
&ad->memo,
&ad->ban_until_time,
@@ -797,17 +795,6 @@ AccountId mmo_auth_new(struct mmo_account *account, SEX sex, AccountEmail email)
ad.error_message = stringish<timestamp_seconds_buffer>("-"_s);
ad.ban_until_time = TimeT();
- if (start_limited_time < 0)
- ad.connect_until_time = TimeT(); // unlimited
- else
- {
- // limited time
- TimeT timestamp = static_cast<time_t>(TimeT::now()) + start_limited_time;
- // there used to be a silly overflow check here, but it wasn't
- // correct, and we don't support time-limited accounts.
- ad.connect_until_time = timestamp;
- }
-
ad.last_ip = IP4Address();
ad.memo = "!"_s;
ad.account_reg2_num = 0;
@@ -901,14 +888,6 @@ int mmo_auth(struct mmo_account *account, Session *s)
}
}
- if (ad->connect_until_time
- && ad->connect_until_time < TimeT::now())
- {
- LOGIN_LOG("Connection refused (account: %s, expired ID, ip: %s)\n"_fmt,
- account->userid, ip);
- return 2; // 2 = This ID is expired
- }
-
LOGIN_LOG("Authentification accepted (account: %s (id: %d), ip: %s)\n"_fmt,
account->userid, ad->account_id, ip);
}
@@ -997,22 +976,6 @@ void parse_fromchar(Session *s)
switch (packet_id)
{
- // request from map-server via char-server to reload GM accounts (by Yor).
- case 0x2709:
- {
- Packet_Fixed<0x2709> fixed;
- rv = recv_fpacket<0x2709, 2>(s, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- LOGIN_LOG("Char-server '%s': Request to re-load GM configuration file (ip: %s).\n"_fmt,
- server[id].name, ip);
- read_gm_account();
- // send GM accounts to all char-servers
- send_GM_accounts();
- break;
- }
-
case 0x2712: // request from char-server to authentify an account
{
Packet_Fixed<0x2712> fixed;
@@ -1059,7 +1022,6 @@ void parse_fromchar(Session *s)
fixed_13.account_id = acc;
fixed_13.invalid = 0;
fixed_13.email = ad.email;
- fixed_13.connect_until = ad.connect_until_time;
send_fpacket<0x2713, 51>(s, fixed_13);
break;
@@ -1118,7 +1080,6 @@ void parse_fromchar(Session *s)
Packet_Fixed<0x2717> fixed_17;
fixed_17.account_id = account_id;
fixed_17.email = ad.email;
- fixed_17.connect_until = ad.connect_until_time;
send_fpacket<0x2717, 50>(s, fixed_17);
if (rv != RecvResult::Complete)
@@ -1720,23 +1681,6 @@ void parse_admin(Session *s)
break;
}
- case 0x7924:
- { // [Fate] Itemfrob package: change item IDs
- Packet_Fixed<0x7924> fixed;
- rv = recv_fpacket<0x7924, 10>(s, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- for (Session *ss : iter_char_sessions())
- {
- send_fpacket<0x7924, 10>(ss, fixed);
- }
-
- Packet_Fixed<0x7925> fixed_25;
- send_fpacket<0x7925, 2>(s, fixed_25);
- break;
- }
-
case 0x7930: // Request for an account creation
{
Packet_Fixed<0x7930> fixed;
@@ -2332,48 +2276,6 @@ void parse_admin(Session *s)
break;
}
- case 0x7948: // Request to change the validity limit (timestamp) (absolute value)
- {
- Packet_Fixed<0x7948> fixed;
- rv = recv_fpacket<0x7948, 30>(s, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- Packet_Fixed<0x7949> fixed_49;
- {
- fixed_49.account_id = AccountId();
- AccountName account_name = stringish<AccountName>(fixed.account_name.to_print());
- TimeT timestamp = fixed.valid_until;
- timestamp_seconds_buffer tmpstr = stringish<timestamp_seconds_buffer>("unlimited"_s);
- if (timestamp)
- stamp_time(tmpstr, &timestamp);
- AuthData *ad = search_account(account_name);
- if (ad)
- {
- fixed_49.account_name = ad->userid;
- LOGIN_LOG("'ladmin': Change of a validity limit (account: %s, new validity: %lld (%s), ip: %s)\n"_fmt,
- ad->userid,
- timestamp,
- tmpstr,
- ip);
- ad->connect_until_time = timestamp;
- fixed_49.account_id = ad->account_id;
- }
- else
- {
- fixed_49.account_name = account_name;
- LOGIN_LOG("'ladmin': Attempt to change the validity limit of an unknown account (account: %s, received validity: %lld (%s), ip: %s)\n"_fmt,
- account_name,
- timestamp,
- tmpstr,
- ip);
- }
- fixed_49.valid_until = timestamp;
- }
- send_fpacket<0x7949, 34>(s, fixed_49);
- break;
- }
-
case 0x794a: // Request to change the final date of a banishment (timestamp) (absolute value)
{
Packet_Fixed<0x794a> fixed;
@@ -2585,99 +2487,6 @@ void parse_admin(Session *s)
break;
}
- case 0x7950: // Request to change the validity limite (timestamp) (relative change)
- {
- Packet_Fixed<0x7950> fixed;
- rv = recv_fpacket<0x7950, 38>(s, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- Packet_Fixed<0x7951> fixed_51;
- {
- fixed_51.account_id = AccountId();
- AccountName account_name = stringish<AccountName>(fixed.account_name.to_print());
- AuthData *ad = search_account(account_name);
- if (ad)
- {
- fixed_51.account_id = ad->account_id;
- fixed_51.account_name = ad->userid;
- if (add_to_unlimited_account == 0 && !ad->connect_until_time)
- {
- LOGIN_LOG("'ladmin': Attempt to adjust the validity limit of an unlimited account (account: %s, ip: %s)\n"_fmt,
- ad->userid, ip);
- fixed_51.valid_until = TimeT();
- }
- else
- {
- TimeT now = TimeT::now();
- TimeT timestamp = ad->connect_until_time;
- if (!timestamp || timestamp < now)
- timestamp = now;
- struct tm tmtime = timestamp;
- HumanTimeDiff v_diff = fixed.valid_add;
- tmtime.tm_year += v_diff.year;
- tmtime.tm_mon += v_diff.month;
- tmtime.tm_mday += v_diff.day;
- tmtime.tm_hour += v_diff.hour;
- tmtime.tm_min += v_diff.minute;
- tmtime.tm_sec += v_diff.second;
- timestamp = tmtime;
- if (timestamp.okay())
- {
- timestamp_seconds_buffer tmpstr = stringish<timestamp_seconds_buffer>("unlimited"_s);
- timestamp_seconds_buffer tmpstr2 = stringish<timestamp_seconds_buffer>("unlimited"_s);
- if (ad->connect_until_time)
- stamp_time(tmpstr, &ad->connect_until_time);
- if (timestamp)
- stamp_time(tmpstr2, &timestamp);
- LOGIN_LOG("'ladmin': Adjustment of a validity limit (account: %s, %lld (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> new validity: %lld (%s), ip: %s)\n"_fmt,
- ad->userid,
- ad->connect_until_time,
- tmpstr,
- v_diff.year,
- v_diff.month,
- v_diff.day,
- v_diff.hour,
- v_diff.minute,
- v_diff.second,
- timestamp,
- tmpstr2,
- ip);
- ad->connect_until_time = timestamp;
- fixed_51.valid_until = timestamp;
- }
- else
- {
- timestamp_seconds_buffer tmpstr = stringish<timestamp_seconds_buffer>("unlimited"_s);
- if (ad->connect_until_time)
- stamp_time(tmpstr, &ad->connect_until_time);
- LOGIN_LOG("'ladmin': Impossible to adjust a validity limit (account: %s, %lld (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> ???, ip: %s)\n"_fmt,
- ad->userid,
- ad->connect_until_time,
- tmpstr,
- v_diff.year,
- v_diff.month,
- v_diff.day,
- v_diff.hour,
- v_diff.minute,
- v_diff.second,
- ip);
- fixed_51.valid_until = TimeT();
- }
- }
- }
- else
- {
- fixed_51.account_name = account_name;
- LOGIN_LOG("'ladmin': Attempt to adjust the validity limit of an unknown account (account: %s, ip: %s)\n"_fmt,
- account_name, ip);
- fixed_51.valid_until = TimeT();
- }
- }
- send_fpacket<0x7951, 34>(s, fixed_51);
- break;
- }
-
case 0x7952: // Request about informations of an account (by account name)
{
Packet_Fixed<0x7952> fixed;
@@ -2701,7 +2510,6 @@ void parse_admin(Session *s)
head_53.last_login_string = ad->lastlogin;
head_53.ip_string = convert_for_printf(ad->last_ip);
head_53.email = ad->email;
- head_53.connect_until = ad->connect_until_time;
head_53.ban_until = ad->ban_until_time;
XString repeat_53 = ad->memo;
@@ -2747,7 +2555,6 @@ void parse_admin(Session *s)
head_53.last_login_string = ad.lastlogin;
head_53.ip_string = convert_for_printf(ad.last_ip);
head_53.email = ad.email;
- head_53.connect_until = ad.connect_until_time;
head_53.ban_until = ad.ban_until_time;
XString repeat_53 = ad.memo;
send_vpacket<0x7953, 150, 1>(s, head_53, repeat_53);
@@ -3401,10 +3208,6 @@ bool login_config(XString w1, ZString w2)
{
add_to_unlimited_account = config_switch(w2);
}
- else if (w1 == "start_limited_time"_s)
- {
- start_limited_time = atoi(w2.c_str());
- }
else if (w1 == "check_ip_flag"_s)
{
check_ip_flag = config_switch(w2);
@@ -3626,14 +3429,6 @@ bool display_conf_warnings(void)
rv = false;
}
- if (start_limited_time < -1)
- { // -1: create unlimited account, 0 or more: additionnal sec from now to create limited time
- PRINTF("***WARNING: Invalid value for start_limited_time parameter\n"_fmt);
- PRINTF(" -> set to -1 (new accounts are created with unlimited time).\n"_fmt);
- start_limited_time = -1;
- rv = false;
- }
-
if (check_ip_flag != 0 && check_ip_flag != 1)
{ // 0: no, 1: yes
PRINTF("***WARNING: Invalid value for check_ip_flag parameter\n"_fmt);
@@ -3775,13 +3570,9 @@ void save_config_in_log(void)
else
LOGIN_LOG("- to refuse adjustment (with timeadd ladmin) on an unlimited account. You must use timeset (ladmin command) before.\n"_fmt);
- if (start_limited_time < 0)
+ {
LOGIN_LOG("- to create new accounts with an unlimited time.\n"_fmt);
- else if (start_limited_time == 0)
- LOGIN_LOG("- to create new accounts with a limited time: time of creation.\n"_fmt);
- else
- LOGIN_LOG("- to create new accounts with a limited time: time of creation + %d second(s).\n"_fmt,
- start_limited_time);
+ }
if (check_ip_flag)
LOGIN_LOG("- with control of players IP between login-server and char-server.\n"_fmt);
diff --git a/src/map/battle.cpp b/src/map/battle.cpp
index 28c9d5f..0a6ffa7 100644
--- a/src/map/battle.cpp
+++ b/src/map/battle.cpp
@@ -985,17 +985,6 @@ int battle_stopattack(dumb_ptr<block_list> bl)
return 0;
}
-// 移動停止
-int battle_stopwalking(dumb_ptr<block_list> bl, int type)
-{
- nullpo_retz(bl);
- if (bl->bl_type == BL::MOB)
- return mob_stop_walking(bl->is_mob(), type);
- else if (bl->bl_type == BL::PC)
- return pc_stop_walking(bl->is_player(), type);
- return 0;
-}
-
/*==========================================
* ダメージ最終計算
*------------------------------------------
diff --git a/src/map/battle.hpp b/src/map/battle.hpp
index aa96a72..7733391 100644
--- a/src/map/battle.hpp
+++ b/src/map/battle.hpp
@@ -58,7 +58,6 @@ int battle_heal(dumb_ptr<block_list> bl, dumb_ptr<block_list> target, int hp,
// 攻撃や移動を止める
int battle_stopattack(dumb_ptr<block_list> bl);
-int battle_stopwalking(dumb_ptr<block_list> bl, int type);
// 通常攻撃処理まとめ
ATK battle_weapon_attack(dumb_ptr<block_list> bl, dumb_ptr<block_list> target,
diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp
index 7119ee8..9a36a60 100644
--- a/src/map/chrif.cpp
+++ b/src/map/chrif.cpp
@@ -912,126 +912,6 @@ int chrif_recvgmaccounts(Session *s, const std::vector<Packet_Repeat<0x2b15>>& r
return 0;
}
-/*==========================================
- * Request to reload GM accounts and their levels: send to char-server by [Yor]
- *------------------------------------------
- */
-int chrif_reloadGMdb(void)
-{
- if (!char_session)
- return -1;
-
- Packet_Fixed<0x2af7> fixed_f7;
- send_fpacket<0x2af7, 2>(char_session, fixed_f7);
-
- return 0;
-}
-
-/*========================================
- * Map item IDs
- *----------------------------------------
- */
-
-static
-void ladmin_itemfrob_fix_item(ItemNameId source, ItemNameId dest, Item *item)
-{
- if (item && item->nameid == source)
- {
- item->nameid = dest;
- item->equip = EPOS::ZERO;
- }
-}
-
-static
-void ladmin_itemfrob_c2(dumb_ptr<block_list> bl, ItemNameId source_id, ItemNameId dest_id)
-{
-#define IFIX(v) if (v == source_id) {v = dest_id; }
-#define FIX(item) ladmin_itemfrob_fix_item(source_id, dest_id, &item)
-
- if (!bl)
- return;
-
- switch (bl->bl_type)
- {
- case BL::PC:
- {
- dumb_ptr<map_session_data> pc = bl->is_player();
-
- for (IOff0 j : IOff0::iter())
- IFIX(pc->status.inventory[j].nameid);
- // cart is no longer supported
- // IFIX(pc->status.weapon);
- IFIX(pc->status.shield);
- IFIX(pc->status.head_top);
- IFIX(pc->status.head_mid);
- IFIX(pc->status.head_bottom);
-
- Option<P<Storage>> stor_ = account2storage2(pc->status_key.account_id);
- if OPTION_IS_SOME_NOLOOP(stor, stor_)
- {
- for (SOff0 j : SOff0::iter())
- FIX(stor->storage_[j]);
- }
-
- for (IOff0 j : IOff0::iter())
- {
- P<struct item_data> item = TRY_UNWRAP(pc->inventory_data[j], continue);
- if (item->nameid == source_id)
- {
- item->nameid = dest_id;
- if (bool(item->equip))
- pc_unequipitem(pc, j, CalcStatus::NOW);
- item->nameid = dest_id;
- }
- }
-
- break;
- }
-
- case BL::MOB:
- {
- dumb_ptr<mob_data> mob = bl->is_mob();
- for (Item& itm : mob->lootitemv)
- FIX(itm);
- break;
- }
-
- case BL::ITEM:
- {
- dumb_ptr<flooritem_data> item = bl->is_item();
- FIX(item->item_data);
- break;
- }
- }
-#undef FIX
-#undef IFIX
-}
-
-static
-void ladmin_itemfrob_c(dumb_ptr<block_list> bl, ItemNameId source_id, ItemNameId dest_id)
-{
- ladmin_itemfrob_c2(bl, source_id, dest_id);
-}
-
-static
-void ladmin_itemfrob(Session *, const Packet_Fixed<0x2afa>& fixed)
-{
- ItemNameId source_id = fixed.source_item_id;
- ItemNameId dest_id = fixed.dest_item_id;
- dumb_ptr<block_list> bl = map_get_first_session();
-
- // flooritems
- map_foreachobject(std::bind(ladmin_itemfrob_c, ph::_1, source_id, dest_id),
- BL::NUL /* any object */);
-
- // player characters (and, hopefully, mobs)
- while (bl->bl_next)
- {
- ladmin_itemfrob_c2(bl, source_id, dest_id);
- bl = bl->bl_next;
- }
-}
-
static
void chrif_delete(Session *s)
{
@@ -1066,16 +946,6 @@ void chrif_parse(Session *s)
chrif_connectack(s, fixed);
break;
}
- case 0x2afa:
- {
- Packet_Fixed<0x2afa> fixed;
- rv = recv_fpacket<0x2afa, 10>(s, fixed);
- if (rv != RecvResult::Complete)
- break;
-
- ladmin_itemfrob(s, fixed);
- break;
- }
case 0x2afb:
{
Packet_Fixed<0x2afb> fixed;
@@ -1095,12 +965,11 @@ void chrif_parse(Session *s)
AccountId id = payload.account_id;
int login_id2 = payload.login_id2;
- TimeT connect_until_time = payload.connect_until;
short tmw_version = payload.packet_tmw_version;
CharKey st_key = payload.char_key;
CharData st_data = payload.char_data;
pc_authok(id, login_id2,
- connect_until_time, tmw_version,
+ tmw_version,
&st_key, &st_data);
break;
}
diff --git a/src/map/chrif.hpp b/src/map/chrif.hpp
index 4bd00aa..59fb541 100644
--- a/src/map/chrif.hpp
+++ b/src/map/chrif.hpp
@@ -47,7 +47,6 @@ void chrif_changeemail(AccountId id, AccountEmail actual_email, AccountEmail new
void chrif_char_ask_name(AccountId id, CharName character_name, short operation_type,
HumanTimeDiff modif);
int chrif_saveaccountreg2(dumb_ptr<map_session_data> sd);
-int chrif_reloadGMdb(void);
int chrif_send_divorce(CharId char_id);
void do_init_chrif(void);
diff --git a/src/map/clif.cpp b/src/map/clif.cpp
index 3a84e03..61fa8c5 100644
--- a/src/map/clif.cpp
+++ b/src/map/clif.cpp
@@ -622,37 +622,6 @@ int clif_clearchar(dumb_ptr<block_list> bl, BeingRemoveWhy type)
return 0;
}
-static
-void clif_clearchar_delay_sub(TimerData *, tick_t,
- dumb_ptr<block_list> bl, BeingRemoveWhy type)
-{
- clif_clearchar(bl, type);
- MapBlockLock::freeblock(bl);
-}
-
-int clif_clearchar_delay(tick_t tick,
- dumb_ptr<block_list> bl, BeingRemoveWhy type)
-{
- dumb_ptr<block_list> tmpbl;
- tmpbl.new_();
-
- // yikes!
- tmpbl->bl_next = bl->bl_next;
- tmpbl->bl_prev = bl->bl_prev;
- tmpbl->bl_id = bl->bl_id;
- tmpbl->bl_m = bl->bl_m;
- tmpbl->bl_x = bl->bl_x;
- tmpbl->bl_y = bl->bl_y;
- tmpbl->bl_type = bl->bl_type;
-
- Timer(tick,
- std::bind(clif_clearchar_delay_sub, ph::_1, ph::_2,
- tmpbl, type)
- ).detach();
-
- return 0;
-}
-
/*==========================================
*
*------------------------------------------
@@ -2686,43 +2655,6 @@ void clif_mobinsight(dumb_ptr<block_list> bl, dumb_ptr<mob_data> md)
}
/*==========================================
- *
- *------------------------------------------
- */
-int clif_skillinfo(dumb_ptr<map_session_data> sd, SkillID skillid, int type,
- int range)
-{
- nullpo_retz(sd);
-
- Session *s = sd->sess;
- if (!sd->status.skill[skillid].lv)
- return 0;
- Packet_Fixed<0x0147> fixed_147;
- fixed_147.info.skill_id = skillid;
- if (type < 0)
- fixed_147.info.type_or_inf = skill_get_inf(skillid);
- else
- fixed_147.info.type_or_inf = type;
- fixed_147.info.flags = SkillFlags::ZERO;
- fixed_147.info.level = sd->status.skill[skillid].lv;
- fixed_147.info.sp = skill_get_sp(skillid, sd->status.skill[skillid].lv);
- if (range < 0)
- {
- range = skill_get_range(skillid, sd->status.skill[skillid].lv);
- if (range < 0)
- range = battle_get_range(sd) - (range + 1);
- fixed_147.info.range = range;
- }
- else
- fixed_147.info.range = range;
- fixed_147.info.unused = ""_s;
- fixed_147.info.can_raise = sd->status.skill[skillid].lv < skill_get_max_raise(skillid);
- send_fpacket<0x0147, 39>(s, fixed_147);
-
- return 0;
-}
-
-/*==========================================
* スキルリストを送信する
*------------------------------------------
*/
@@ -3203,21 +3135,6 @@ int clif_movetoattack(dumb_ptr<map_session_data> sd, dumb_ptr<block_list> bl)
}
/*==========================================
- * MVPエフェクト
- *------------------------------------------
- */
-int clif_mvp_effect(dumb_ptr<map_session_data> sd)
-{
- nullpo_retz(sd);
-
- Packet_Fixed<0x010c> fixed_10c;
- fixed_10c.block_id = sd->bl_id;
- Buffer buf = create_fpacket<0x010c, 6>(fixed_10c);
- clif_send(buf, sd, SendWho::AREA);
- return 0;
-}
-
-/*==========================================
* エモーション
*------------------------------------------
*/
@@ -3844,25 +3761,6 @@ RecvResult clif_parse_Emotion(Session *s, dumb_ptr<map_session_data> sd)
*------------------------------------------
*/
static
-RecvResult clif_parse_HowManyConnections(Session *s, dumb_ptr<map_session_data>)
-{
- Packet_Fixed<0x00c1> fixed;
- RecvResult rv = recv_fpacket<0x00c1, 2>(s, fixed);
- if (rv != RecvResult::Complete)
- return rv;
-
- Packet_Fixed<0x00c2> fixed_c2;
- fixed_c2.users = map_getusers();
- send_fpacket<0x00c2, 6>(s, fixed_c2);
-
- return rv;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static
RecvResult clif_parse_ActionRequest(Session *s, dumb_ptr<map_session_data> sd)
{
Packet_Fixed<0x0089> fixed;
@@ -4757,7 +4655,7 @@ RecvResult clif_parse_RemovePartyMember(Session *s, dumb_ptr<map_session_data> s
*------------------------------------------
*/
static
-RecvResult clif_parse_PartyChangeOpt0(Session *s, dumb_ptr<map_session_data> sd)
+RecvResult clif_parse_PartyChangeOption(Session *s, dumb_ptr<map_session_data> sd)
{
Packet_Fixed<0x0102> fixed;
RecvResult rv = recv_fpacket<0x0102, 6>(s, fixed);
@@ -5002,7 +4900,7 @@ func_table clif_parse_func_table[0x0220] =
{0, 5, nullptr, }, // 0x00be
{1000, 3, clif_parse_Emotion, }, // 0x00bf
{0, 7, nullptr, }, // 0x00c0
- {0, 2, clif_parse_HowManyConnections, }, // 0x00c1
+ {0, 2, nullptr, }, // 0x00c1
{0, 6, nullptr, }, // 0x00c2
{0, 8, nullptr, }, // 0x00c3
{0, 6, nullptr, }, // 0x00c4
@@ -5067,7 +4965,7 @@ func_table clif_parse_func_table[0x0220] =
{0, 10, clif_parse_ReplyPartyInvite, }, // 0x00ff
{0, 2, clif_parse_LeaveParty, }, // 0x0100
{0, 6, nullptr, }, // 0x0101
- {0, 6, clif_parse_PartyChangeOpt0, }, // 0x0102
+ {0, 6, clif_parse_PartyChangeOption, }, // 0x0102
{0, 30, clif_parse_RemovePartyMember, }, // 0x0103
{0, 79, nullptr, }, // 0x0104
{0, 31, nullptr, }, // 0x0105
diff --git a/src/map/clif.hpp b/src/map/clif.hpp
index 24f4b80..2242949 100644
--- a/src/map/clif.hpp
+++ b/src/map/clif.hpp
@@ -52,7 +52,6 @@ int clif_charselectok(BlockId);
int clif_dropflooritem(dumb_ptr<flooritem_data>);
int clif_clearflooritem(dumb_ptr<flooritem_data>, Session *);
int clif_clearchar(dumb_ptr<block_list>, BeingRemoveWhy); // area or fd
-int clif_clearchar_delay(tick_t, dumb_ptr<block_list>, BeingRemoveWhy);
void clif_clearchar_id(BlockId, BeingRemoveWhy, Session *);
int clif_spawnpc(dumb_ptr<map_session_data>); //area
int clif_spawnnpc(dumb_ptr<npc_data>); // area
@@ -131,8 +130,6 @@ void clif_pcoutsight(dumb_ptr<block_list>, dumb_ptr<map_session_data>);
void clif_mobinsight(dumb_ptr<block_list>, dumb_ptr<mob_data>);
void clif_moboutsight(dumb_ptr<block_list>, dumb_ptr<mob_data>);
-int clif_skillinfo(dumb_ptr<map_session_data> sd, SkillID skillid, int type,
- int range);
void clif_skillinfoblock(dumb_ptr<map_session_data> sd);
int clif_skillup(dumb_ptr<map_session_data> sd, SkillID skill_num);
@@ -152,8 +149,6 @@ void clif_wis_end(Session *s, int flag);
void clif_itemlist(dumb_ptr<map_session_data> sd);
void clif_equiplist(dumb_ptr<map_session_data> sd);
-int clif_mvp_effect(dumb_ptr<map_session_data> sd);
-
int clif_movetoattack(dumb_ptr<map_session_data> sd, dumb_ptr<block_list> bl);
// party
diff --git a/src/map/npc.cpp b/src/map/npc.cpp
index 90ac917..cd80cdf 100644
--- a/src/map/npc.cpp
+++ b/src/map/npc.cpp
@@ -199,27 +199,6 @@ int npc_delete(dumb_ptr<npc_data> nd)
return 0;
}
-void npc_timer_event(NpcEvent eventname)
-{
- P<struct event_data> ev = TRY_UNWRAP(ev_db.search(eventname),
- {
- PRINTF("npc_event: event not found [%s]\n"_fmt,
- eventname);
- return;
- });
-
- dumb_ptr<npc_data_script> nd;
-
- if ((nd = ev->nd) == nullptr)
- {
- PRINTF("npc_event: event not found [%s]\n"_fmt,
- eventname);
- return;
- }
-
- run_script(ScriptPointer(borrow(*nd->scr.script), ev->pos), nd->bl_id, nd->bl_id);
-}
-
/*==========================================
* 全てのNPCのOn*イベント実行
*------------------------------------------
diff --git a/src/map/npc.hpp b/src/map/npc.hpp
index cb42dbd..e62faf2 100644
--- a/src/map/npc.hpp
+++ b/src/map/npc.hpp
@@ -44,7 +44,6 @@ constexpr Species INVISIBLE_CLASS = wrap<Species>(32767);
int npc_event_dequeue(dumb_ptr<map_session_data> sd);
int npc_event(dumb_ptr<map_session_data> sd, NpcEvent npcname, int);
-void npc_timer_event(NpcEvent eventname); // Added by RoVeRT
int npc_command(dumb_ptr<map_session_data> sd, NpcName npcname, XString command);
int npc_touch_areanpc(dumb_ptr<map_session_data>, Borrowed<map_local>, int, int);
int npc_click(dumb_ptr<map_session_data>, BlockId);
diff --git a/src/map/pc.cpp b/src/map/pc.cpp
index 55e430a..a38c05f 100644
--- a/src/map/pc.cpp
+++ b/src/map/pc.cpp
@@ -606,7 +606,7 @@ int pc_isequip(dumb_ptr<map_session_data> sd, IOff0 n)
* char鯖から送られてきたステータスを設定
*------------------------------------------
*/
-int pc_authok(AccountId id, int login_id2, TimeT connect_until_time,
+int pc_authok(AccountId id, int login_id2,
short tmw_version, const CharKey *st_key, const CharData *st_data)
{
dumb_ptr<map_session_data> sd = nullptr;
@@ -760,15 +760,6 @@ int pc_authok(AccountId id, int login_id2, TimeT connect_until_time,
sd->packet_flood_reset_due = TimeT();
sd->packet_flood_in = 0;
- // message of the limited time of the account
- if (connect_until_time)
- {
- timestamp_seconds_buffer buffer;
- stamp_time(buffer, &connect_until_time);
- AString tmpstr = STRPRINTF("Your account time limit is: %s"_fmt, buffer);
-
- clif_wis_message(sd->sess, wisp_server_name, tmpstr);
- }
pc_calcstatus(sd, 1);
return 0;
@@ -2530,72 +2521,6 @@ void pc_touch_all_relevant_npcs(dumb_ptr<map_session_data> sd)
sd->areanpc_id = BlockId();
}
-/*==========================================
- *
- *------------------------------------------
- */
-int pc_movepos(dumb_ptr<map_session_data> sd, int dst_x, int dst_y)
-{
- int moveblock;
- int dx, dy;
-
- struct walkpath_data wpd;
-
- nullpo_retz(sd);
-
- if (path_search(&wpd, sd->bl_m, sd->bl_x, sd->bl_y, dst_x, dst_y, 0))
- return 1;
-
- sd->dir = sd->head_dir = map_calc_dir(sd, dst_x, dst_y);
-
- dx = dst_x - sd->bl_x;
- dy = dst_y - sd->bl_y;
-
- moveblock = (sd->bl_x / BLOCK_SIZE != dst_x / BLOCK_SIZE
- || sd->bl_y / BLOCK_SIZE != dst_y / BLOCK_SIZE);
-
- map_foreachinmovearea(std::bind(clif_pcoutsight, ph::_1, sd),
- sd->bl_m,
- sd->bl_x - AREA_SIZE, sd->bl_y - AREA_SIZE,
- sd->bl_x + AREA_SIZE, sd->bl_y + AREA_SIZE,
- dx, dy,
- BL::NUL);
-
- if (moveblock)
- map_delblock(sd);
- sd->bl_x = dst_x;
- sd->bl_y = dst_y;
- if (moveblock)
- map_addblock(sd);
-
- map_foreachinmovearea(std::bind(clif_pcinsight, ph::_1, sd),
- sd->bl_m,
- sd->bl_x - AREA_SIZE, sd->bl_y - AREA_SIZE,
- sd->bl_x + AREA_SIZE, sd->bl_y + AREA_SIZE,
- -dx, -dy,
- BL::NUL);
-
- if (sd->status.party_id)
- { // パーティのHP情報通知検査
- Option<PartyPair> p = party_search(sd->status.party_id);
- if (p.is_some())
- {
- int flag = 0;
- map_foreachinmovearea(std::bind(party_send_hp_check, ph::_1, sd->status.party_id, &flag),
- sd->bl_m,
- sd->bl_x - AREA_SIZE, sd->bl_y - AREA_SIZE,
- sd->bl_x + AREA_SIZE, sd->bl_y + AREA_SIZE,
- -dx, -dy,
- BL::PC);
- if (flag)
- sd->party_hp = -1;
- }
- }
-
- pc_touch_all_relevant_npcs(sd);
- return 0;
-}
-
//
// 武器戦闘
//
@@ -3146,94 +3071,6 @@ int pc_skillup(dumb_ptr<map_session_data> sd, SkillID skill_num)
}
/*==========================================
- * /resetlvl
- *------------------------------------------
- */
-int pc_resetlvl(dumb_ptr<map_session_data> sd, int type)
-{
- nullpo_retz(sd);
-
- for (SkillID i : erange(SkillID(1), MAX_SKILL))
- {
- sd->status.skill[i].lv = 0;
- }
-
- if (type == 1)
- {
- sd->status.skill_point = 0;
- sd->status.base_level = 1;
- sd->status.job_level = 1;
- sd->status.base_exp = 0;
- sd->status.job_exp = 0;
- sd->status.option = Opt0::ZERO;
-
- for (ATTR attr : ATTRs)
- sd->status.attrs[attr] = 1;
- }
-
- if (type == 2)
- {
- sd->status.skill_point = 0;
- sd->status.base_level = 1;
- sd->status.job_level = 1;
- sd->status.base_exp = 0;
- sd->status.job_exp = 0;
- }
- if (type == 3)
- {
- sd->status.base_level = 1;
- sd->status.base_exp = 0;
- }
- if (type == 4)
- {
- sd->status.job_level = 1;
- sd->status.job_exp = 0;
- }
-
- clif_updatestatus(sd, SP::STATUSPOINT);
- clif_updatestatus(sd, SP::STR);
- clif_updatestatus(sd, SP::AGI);
- clif_updatestatus(sd, SP::VIT);
- clif_updatestatus(sd, SP::INT);
- clif_updatestatus(sd, SP::DEX);
- clif_updatestatus(sd, SP::LUK);
- clif_updatestatus(sd, SP::BASELEVEL);
- clif_updatestatus(sd, SP::JOBLEVEL);
- clif_updatestatus(sd, SP::STATUSPOINT);
- clif_updatestatus(sd, SP::NEXTBASEEXP);
- clif_updatestatus(sd, SP::NEXTJOBEXP);
- clif_updatestatus(sd, SP::SKILLPOINT);
-
- clif_updatestatus(sd, SP::USTR); // Updates needed stat points - Valaris
- clif_updatestatus(sd, SP::UAGI);
- clif_updatestatus(sd, SP::UVIT);
- clif_updatestatus(sd, SP::UINT);
- clif_updatestatus(sd, SP::UDEX);
- clif_updatestatus(sd, SP::ULUK); // End Addition
-
- for (EQUIP i : EQUIPs)
- {
- // unequip items that can't be equipped by base 1 [Valaris]
- IOff0 *idx = &sd->equip_index_maybe[i];
- if ((*idx).ok())
- {
- if (!pc_isequip(sd, *idx))
- {
- pc_unequipitem(sd, *idx, CalcStatus::LATER);
- *idx = IOff0::from(-1);
- }
- }
- }
-
- clif_skillinfoblock(sd);
- pc_calcstatus(sd, 0);
-
- MAP_LOG_STATS(sd, "STATRESET"_fmt);
-
- return 0;
-}
-
-/*==========================================
* /resetstate
*------------------------------------------
*/
@@ -3943,21 +3780,6 @@ int pc_changelook(dumb_ptr<map_session_data> sd, LOOK type, int val)
}
/*==========================================
- * 付属品(鷹,ペコ,カート)設定
- *------------------------------------------
- */
-int pc_setoption(dumb_ptr<map_session_data> sd, Opt0 type)
-{
- nullpo_retz(sd);
-
- sd->status.option = type;
- clif_changeoption(sd);
- pc_calcstatus(sd, 0);
-
- return 0;
-}
-
-/*==========================================
* script用変数の値を読む
*------------------------------------------
*/
diff --git a/src/map/pc.hpp b/src/map/pc.hpp
index 9795443..c889e44 100644
--- a/src/map/pc.hpp
+++ b/src/map/pc.hpp
@@ -77,7 +77,7 @@ int pc_counttargeted(dumb_ptr<map_session_data> sd, dumb_ptr<block_list> src,
int pc_setrestartvalue(dumb_ptr<map_session_data> sd, int type);
void pc_makesavestatus(dumb_ptr<map_session_data>);
int pc_setnewpc(dumb_ptr<map_session_data>, AccountId, CharId, int, uint32_t /*tick_t*/, SEX);
-int pc_authok(AccountId, int, TimeT, short tmw_version, const CharKey *, const CharData *);
+int pc_authok(AccountId, int, short tmw_version, const CharKey *, const CharData *);
int pc_authfail(AccountId accid);
EPOS pc_equippoint(dumb_ptr<map_session_data> sd, IOff0 n);
@@ -87,7 +87,6 @@ IOff0 pc_checkequip(dumb_ptr<map_session_data> sd, EPOS pos);
int pc_walktoxy(dumb_ptr<map_session_data>, int, int);
int pc_stop_walking(dumb_ptr<map_session_data>, int);
-int pc_movepos(dumb_ptr<map_session_data>, int, int);
int pc_setpos(dumb_ptr<map_session_data>, MapName, int, int, BeingRemoveWhy);
void pc_setsavepoint(dumb_ptr<map_session_data>, MapName, int, int);
int pc_randomwarp(dumb_ptr<map_session_data> sd, BeingRemoveWhy type);
@@ -127,7 +126,6 @@ int pc_need_status_point(dumb_ptr<map_session_data>, SP);
int pc_statusup(dumb_ptr<map_session_data>, SP);
int pc_statusup2(dumb_ptr<map_session_data>, SP, int);
int pc_skillup(dumb_ptr<map_session_data>, SkillID);
-int pc_resetlvl(dumb_ptr<map_session_data>, int type);
int pc_resetstate(dumb_ptr<map_session_data>);
int pc_resetskill(dumb_ptr<map_session_data>);
int pc_equipitem(dumb_ptr<map_session_data>, IOff0, EPOS);
@@ -139,7 +137,6 @@ int pc_damage(dumb_ptr<block_list>, dumb_ptr<map_session_data>, int);
int pc_heal(dumb_ptr<map_session_data>, int, int);
int pc_itemheal(dumb_ptr<map_session_data> sd, int hp, int sp);
int pc_percentheal(dumb_ptr<map_session_data> sd, int, int);
-int pc_setoption(dumb_ptr<map_session_data>, Opt0);
int pc_changelook(dumb_ptr<map_session_data>, LOOK, int);
int pc_readparam(dumb_ptr<map_session_data>, SP);
diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp
index a291a11..f9334bc 100644
--- a/src/map/script-fun.cpp
+++ b/src/map/script-fun.cpp
@@ -2574,6 +2574,69 @@ void builtin_npcwarp(ScriptState *st)
}
/*==========================================
+ * npcareawarp [remoitnane] [wushin]
+ * Move NPC to a new area on the same map.
+ *------------------------------------------
+ */
+static
+void builtin_npcareawarp(ScriptState *st)
+{
+ int x0, y0, x1, y1, x, y, max, cb, lx = -1, ly = -1, j = 0;
+ dumb_ptr<npc_data> nd = nullptr;
+
+ NpcName npc = stringish<NpcName>(ZString(conv_str(st, &AARG(5))));
+ nd = npc_name2id(npc);
+
+ x0 = conv_num(st, &AARG(0));
+ y0 = conv_num(st, &AARG(1));
+ x1 = conv_num(st, &AARG(2));
+ y1 = conv_num(st, &AARG(3));
+ cb = conv_num(st, &AARG(4));
+
+ if (!nd)
+ {
+ PRINTF("builtin_npcareawarp: no such npc: %s\n"_fmt, npc);
+ return;
+ }
+
+ max = (y1 - y0 + 1) * (x1 - x0 + 1) * 3;
+ if (max > 1000)
+ max = 1000;
+
+ P<map_local> m = nd->bl_m;
+ if (cb) {
+ do
+ {
+ x = random_::in(x0, x1);
+ y = random_::in(y0, y1);
+ }
+ while (bool(map_getcell(m, x, y) & MapCell::UNWALKABLE)
+ && (++j) < max);
+ if (j >= max)
+ {
+ if (lx >= 0)
+ { // Since reference went wrong, the place which boiled before is used.
+ x = lx;
+ y = ly;
+ }
+ else
+ return; // Since reference of the place which boils first went wrong, it stops.
+ }
+ }
+ else
+ x = random_::in(x0, x1);
+ y = random_::in(y0, y1);
+
+ npc_enable(npc, 0);
+ map_delblock(nd); /* [Freeyorp] */
+ nd->bl_x = x;
+ nd->bl_y = y;
+ map_addblock(nd);
+ npc_enable(npc, 1);
+
+}
+
+/*==========================================
* message [MouseJstr]
*------------------------------------------
*/
@@ -2745,6 +2808,24 @@ void builtin_isin(ScriptState *st)
&& (str == sd->bl_m->name_));
}
+/*==========================================
+ * Check whether the coords are collision
+ *------------------------------------------
+ */
+static
+void builtin_iscollision(ScriptState *st)
+{
+ int x, y;
+ MapName mapname = stringish<MapName>(ZString(conv_str(st, &AARG(0))));
+ P<map_local> m = TRY_UNWRAP(map_mapname2mapid(mapname), return);
+
+ x = conv_num(st, &AARG(1));
+ y = conv_num(st, &AARG(2));
+
+ push_int<ScriptDataInt>(st->stack,
+ bool(map_getcell(m, x, y) & MapCell::UNWALKABLE));
+}
+
// Trigger the shop on a (hopefully) nearby shop NPC
static
void builtin_shop(ScriptState *st)
@@ -2954,12 +3035,14 @@ BuiltinFunction builtin_functions[] =
BUILTIN(unequipbyid, "i"_s, '\0'),
BUILTIN(gmcommand, "s"_s, '\0'),
BUILTIN(npcwarp, "xys"_s, '\0'),
+ BUILTIN(npcareawarp, "xyxyis"_s, '\0'),
BUILTIN(message, "Ps"_s, '\0'),
BUILTIN(npctalk, "s"_s, '\0'),
BUILTIN(getlook, "i"_s, 'i'),
BUILTIN(getsavepoint, "i"_s, '.'),
BUILTIN(areatimer, "MxyxytE"_s, '\0'),
BUILTIN(isin, "Mxyxy"_s, 'i'),
+ BUILTIN(iscollision, "Mxy"_s, 'i'),
BUILTIN(shop, "s"_s, '\0'),
BUILTIN(isdead, ""_s, 'i'),
BUILTIN(fakenpcname, "ssi"_s, '\0'),
diff --git a/src/mmo/skill.t.hpp b/src/mmo/skill.t.hpp
index d0e3926..21e4059 100644
--- a/src/mmo/skill.t.hpp
+++ b/src/mmo/skill.t.hpp
@@ -77,6 +77,9 @@ enum class SkillID : uint16_t
// TODO: Remove these!
NEGATIVE = 0xffff,
ZERO = 0x0000,
+ // this is probably the remains of the 'basic' skill,
+ // which has since been partially split into emote, trade, and party,
+ // but the confusion is caused by the fact that it also covered attacks.
ONE = 0x0001,
// Basic skills.
diff --git a/src/mmo/version.cpp b/src/mmo/version.cpp
index 56e21dc..aec4e73 100644
--- a/src/mmo/version.cpp
+++ b/src/mmo/version.cpp
@@ -77,5 +77,5 @@ bool extract(XString str, Version *vers)
LString VERSION_INFO_HEADER = "This server code consists of Free Software under GPL3&AGPL3"_s;
LString VERSION_INFO_COMMIT = "This is commit " VERSION_HASH ", also known as " VERSION_FULL ""_s;
LString VERSION_INFO_NUMBER = "The version is " VERSION_STRING ""_s;
-LString VERSION_INFO_URL = "For source, see " VENDOR_SOURCE ""_s;
+LString VERSION_INFO_URL = "For source, see [@@" VENDOR_SOURCE "|" VENDOR_SOURCE "@@]"_s;
} // namespace tmwa