handle character deletion

This commit is contained in:
wish
2022-07-17 08:59:01 +10:00
parent 052a69f77b
commit c62ec14e07
3 changed files with 32 additions and 7 deletions

View File

@@ -162,7 +162,7 @@ func (s *Server) getGuildmatesForCharacters(chars []character) ([]members) {
charGuildmates[i].CID = char.ID
}
guildmates = append(guildmates, charGuildmates...)
}
}
}
if len(guildmates) > 255 { // Uint8
guildmates = guildmates[:255]
@@ -176,7 +176,13 @@ func (s *Server) deleteCharacter(cid int, token string) error {
if err != nil {
return err // Invalid token
}
_, err = s.db.Exec("UPDATE characters SET deleted = true WHERE id = $1", cid)
var isNew bool
err = s.db.QueryRow("SELECT is_new_character FROM characters WHERE id = $1", cid).Scan(&isNew)
if isNew {
_, err = s.db.Exec("DELETE FROM characters WHERE id = $1", cid)
} else {
_, err = s.db.Exec("UPDATE characters SET deleted = true WHERE id = $1", cid)
}
if err != nil {
return err
}

View File

@@ -63,6 +63,10 @@ func (s *Session) handlePacket(pkt []byte) error {
characterID := int(bf.ReadUint32())
s.server.deleteCharacter(characterID, loginTokenString)
sugar.Infof("Deleted character ID: %v\n", characterID)
err := s.cryptConn.SendPacket([]byte{0x01}) // DEL_SUCCESS
if err != nil {
return nil
}
default:
sugar.Infof("Got unknown request type %s, data:\n%s\n", reqType, hex.Dump(bf.DataFromCurrent()))
}

View File

@@ -305,6 +305,18 @@ function checkAuth() {
document.getElementById('processing').style.display = 'none';
}
function checkDelete() {
let deleteResult = window.external.getLastAuthResult();
if (deleteResult == 'DEL_PROGRESS') {
setTimeout(checkDelete, 10);
return;
} else if (deleteResult == 'DEL_SUCCESS') {
doLogin(0);
switchPrompt();
toggleModal(0);
}
}
function launch() {
document.getElementById('game_starting').style.display = 'block';
try {
@@ -326,6 +338,11 @@ function launch() {
}, 3000);
}
function deleteCharacter(id) {
window.external.deleteCharacter(id);
checkDelete();
}
function autoWarning() {
let autoBox = document.getElementById('auto_box');
if (autoBox.checked) {
@@ -404,18 +421,16 @@ function setModalContent(preset, url) {
<br>it will be gone forever. \
</span> \
';
modal.querySelector('.dialog .btns').innerHTML = ' \
modal.querySelector(".dialog .btns").innerHTML = ' \
<ul> \
<li> \
<div onmouseover="soundSel()" onclick="soundOk(); addLog(\'Not yet implemented.\', \'error\'); toggleModal(0)">Yes</div> \
<div onmouseover="soundSel();" onclick="soundOk(); deleteCharacter(\''+selectedUid+'\')">Yes</div> \
</li> \
<li> \
<div onmouseover="soundSel()" onclick="soundOk(); toggleModal(0)">Cancel</div> \
<div onmouseover="soundSel();" onclick="soundOk(); toggleModal(0)">Cancel</div> \
</li> \
</ul> \
';
// Uses the launcher delete
// modal.querySelector(".dialog .btns").innerHTML = "<ul><li><div unselectable=\"on\" onselectstart=\"return false;\" onmouseover=\"soundSel();\" onclick=\"soundOk(); window.external.deleteCharacter('"+selectedUid+"'); toggleModal(0);\" style=\"opacity: 1;\">Yes</div></li><li><div onmouseover=\"soundSel();\" onclick=\"soundOk(); toggleModal(0);\" unselectable=\"on\" onselectstart=\"return false;\" class=\"\">Cancel</div></li></ul>";
break;
case 'addCharNew':
modal.querySelector('.dialog p').innerHTML = ' \