summaryrefslogtreecommitdiff
path: root/src/char/pincode.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/char/pincode.c')
-rw-r--r--src/char/pincode.c40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/char/pincode.c b/src/char/pincode.c
index 2b59ec326..8fc4e6c36 100644
--- a/src/char/pincode.c
+++ b/src/char/pincode.c
@@ -95,7 +95,11 @@ void pincode_check(int fd, struct char_session_data* sd)
character->pincode_enable = pincode->charselect * 2;
pincode->loginstate(fd, sd, PINCODE_LOGIN_OK);
} else {
+#if PACKETVER_MAIN_NUM >= 20180124 || PACKETVER_RE_NUM >= 20180124 || PACKETVER_ZERO_NUM >= 20180131
+ pincode->loginstate2(fd, sd, PINCODE_LOGIN_WRONG, PINCODE_LOGIN_FLAG_WRONG);
+#else
pincode->loginstate(fd, sd, PINCODE_LOGIN_WRONG);
+#endif
}
}
@@ -161,12 +165,12 @@ void pincode_change(int fd, struct char_session_data* sd)
if (pincode->check_blacklist && pincode->isBlacklisted(newpin)) {
pincode->editstate(fd, sd, PINCODE_EDIT_RESTRICT_PW);
- } else {
- pincode->update(sd->account_id, newpin);
- safestrncpy(sd->pincode, newpin, sizeof(sd->pincode));
- pincode->editstate(fd, sd, PINCODE_EDIT_SUCCESS);
+ return;
}
+ pincode->update(sd->account_id, newpin);
+ safestrncpy(sd->pincode, newpin, sizeof(sd->pincode));
+ pincode->editstate(fd, sd, PINCODE_EDIT_SUCCESS);
pincode->loginstate(fd, sd, PINCODE_LOGIN_ASK);
}
@@ -190,6 +194,7 @@ void pincode_setnew(int fd, struct char_session_data* sd)
pincode->update(sd->account_id, newpin);
safestrncpy(sd->pincode, newpin, sizeof(sd->pincode));
pincode->makestate(fd, sd, PINCODE_MAKE_SUCCESS);
+ pincode->loginstate(fd, sd, PINCODE_LOGIN_ASK);
}
/**
@@ -249,6 +254,32 @@ void pincode_loginstate(int fd, struct char_session_data* sd, enum pincode_login
WFIFOSET(fd, 12);
}
+// 0 = pin is correct
+// 1 = ask for pin - client sends 0x8b8
+// 2 = create new pin - client sends 0x8ba
+// 3 = pin must be changed - client 0x8be
+// 4 = create new pin ?? - client sends 0x8ba
+// 5 = client shows msgstr(1896)
+// 6 = client shows msgstr(1897) Unable to use your KSSN number
+// 7 = char select window shows a button - client sends 0x8c5
+// 8 = pincode was incorrect
+// [4144] pincode_loginstate2 can replace pincode_loginstate,
+// but kro using pincode_loginstate2 only for send wrong pin error or locked after 3 pins wrong
+void pincode_loginstate2(int fd, struct char_session_data* sd, enum pincode_login_response state, enum pincode_login_response2 flag)
+{
+#if PACKETVER_MAIN_NUM >= 20180124 || PACKETVER_RE_NUM >= 20180124 || PACKETVER_ZERO_NUM >= 20180131
+ nullpo_retv(sd);
+
+ WFIFOHEAD(fd, 13);
+ WFIFOW(fd, 0) = 0xae9;
+ WFIFOL(fd, 2) = sd->pincode_seed = rnd() % 0xFFFF;
+ WFIFOL(fd, 6) = sd->account_id;
+ WFIFOW(fd, 10) = state;
+ WFIFOW(fd, 12) = flag;
+ WFIFOSET(fd, 13);
+#endif
+}
+
void pincode_notifyLoginPinUpdate(int account_id, char* pin)
{
nullpo_retv(pin);
@@ -430,6 +461,7 @@ void pincode_defaults(void)
pincode->makestate = pincode_makestate;
pincode->editstate = pincode_editstate;
pincode->loginstate = pincode_loginstate;
+ pincode->loginstate2 = pincode_loginstate2;
pincode->setnew = pincode_setnew;
pincode->change = pincode_change;
pincode->isBlacklisted = pincode_isBlacklisted;