Postado Outubro 14, 2015 10 anos Account Manager? Se sim, desativa. Se for em site, voce pode desativar caracteres como " ', ç, ´ ~ ^ ". Discord: vankk #7765 Precisando de ajuda? Entre em contato comigo via Discord. Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.
Postado Outubro 14, 2015 10 anos Vai nas sources, abre player.cpp e procura por: void Player::manageAccount Posta aqui.
Postado Outubro 14, 2015 10 anos Autor void Player::manageAccount(const std::string &text) { std::stringstream msg; bool noSwap = true; switch(accountManager) { case MANAGER_NAMELOCK: { if(!talkState[1]) { managerString = text; trimString(managerString); if(managerString.length() < 3) msg << "The name is too short, please select a longer one."; else if(managerString.length() > 30) msg << "The name is too long, please select a shorter one."; else if(!isValidName(managerString)) msg << "Your name seems to contain invalid symbols, please choose another one."; else if(IOLoginData::getInstance()->playerExists(managerString, true)) msg << "Player with that name already exists, please choose another one."; else { std::string tmp = asLowerCaseString(managerString); if(tmp.substr(0, 4) != "god " && tmp.substr(0, 3) != "cm " && tmp.substr(0, 3) != "gm ") { talkState[1] = talkState[2] = true; msg << "{" << managerString << "}, are you sure? {yes} or {no}?"; } else msg << "Your character is not a staff member, please choose another name."; } } else if(checkText(text, "no") && talkState[2]) { talkState[1] = talkState[2] = false; msg << "What new name would you like have then?"; } else if(checkText(text, "yes") && talkState[2]) { if(!IOLoginData::getInstance()->playerExists(managerString, true)) { uint32_t tmp; if(IOLoginData::getInstance()->getGuidByName(tmp, managerString2) && IOLoginData::getInstance()->changeName(tmp, managerString, managerString2) && IOBan::getInstance()->removePlayerBanishment(tmp, PLAYERBAN_LOCK)) { msg << "Your character {" << managerString << "} has been successfully renamed to {" << managerString2 << "}, you should be able to login now."; if(House* house = Houses::getInstance()->getHouseByPlayerId(tmp)) house->updateDoorDescription(managerString); talkState[1] = true; talkState[2] = false; } else { talkState[1] = talkState[2] = false; msg << "Failed to change your name, please contact with staff."; } } else { talkState[1] = talkState[2] = false; msg << "Player with that name already exists, please choose another one."; } } else msg << "Sorry, but I can't understand you, please try to repeat."; break; } case MANAGER_ACCOUNT: { Account account = IOLoginData::getInstance()->loadAccount(managerNumber); if(checkText(text, "cancel") || (checkText(text, "account") && !talkState[1])) { talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; msg << "Do you want to change your {password}, generate a {recovery key}, create a {character}, or {delete} an existing character?"; } else if(checkText(text, "delete") && talkState[1]) { talkState[1] = false; talkState[2] = true; msg << "Which character would you like to delete?"; } else if(talkState[2]) { std::string tmp = text; trimString(tmp); if(!isValidName(tmp, false)) msg << "That name to contain invalid symbols, please try again."; else { talkState[2] = false; talkState[3] = true; managerString = tmp; msg << "Do you really want to delete the character {" << managerString << "}? {yes} or {no}"; } } else if(checkText(text, "yes") && talkState[3]) { switch(IOLoginData::getInstance()->deleteCharacter(managerNumber, managerString)) { case DELETE_INTERNAL: msg << "An error occured while deleting your character. Either the character does not belong to you or it doesn't exist."; break; case DELETE_SUCCESS: msg << "Your character has been deleted."; break; case DELETE_HOUSE: msg << "Your character owns a house. You have to login and leave the house or pass it to someone else to complete."; break; case DELETE_LEADER: msg << "Your character is leader of a guild. You have to disband the guild or pass the leadership to someone else to complete."; break; case DELETE_ONLINE: msg << "Character with that name is currently online, to delete a character it has to be offline."; break; } talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; } else if(checkText(text, "no") && talkState[3]) { talkState[1] = true; talkState[3] = false; msg << "Which character would you like to delete then?"; } else if(checkText(text, "password") && talkState[1]) { talkState[1] = false; talkState[4] = true; msg << "What would you like your password to be?"; } else if(talkState[4]) { std::string tmp = text; trimString(tmp); if(tmp.length() < 6) msg << "That password is too short, please select a longer one."; else if(!isValidPassword(tmp)) msg << "Your password seems to contain invalid symbols, please choose another one."; else { talkState[4] = false; talkState[5] = true; managerString = tmp; msg << "{" << managerString << "} is it? {yes} or {no}?"; } } else if(checkText(text, "yes") && talkState[5]) { talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; IOLoginData::getInstance()->setPassword(managerNumber, managerString); msg << "Your password has been changed."; } else if(checkText(text, "no") && talkState[5]) { talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; msg << "Ok, then not."; } else if(checkText(text, "character") && talkState[1]) { if(account.charList.size() <= 15) { talkState[1] = false; talkState[6] = true; msg << "What would you like as your character name?"; } else { talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; msg << "Your account has reached the limit of 15 characters, you should {delete} a character if you want to create a new one."; } } else if(talkState[6]) { managerString = text; trimString(managerString); if(managerString.length() < 3) msg << "That name is too short, please select a longer one."; else if(managerString.length() > 30) msg << "That name is too long, please select a shorter one."; else if(!isValidName(managerString)) msg << "Your name seems to contain invalid symbols, please choose another one."; else if(IOLoginData::getInstance()->playerExists(managerString, true)) msg << "Player with that name already exists, please choose another one."; else { std::string tmp = asLowerCaseString(managerString); if(tmp.substr(0, 4) != "god " && tmp.substr(0, 3) != "cm " && tmp.substr(0, 3) != "gm ") { talkState[6] = false; talkState[7] = true; msg << "{" << managerString << "}, are you sure? {yes} or {no}"; } else msg << "Your character is not a staff member, please choose another name."; } } else if(checkText(text, "no") && talkState[7]) { talkState[6] = true; talkState[7] = false; msg << "What would you like your character name to be then?"; } else if(checkText(text, "yes") && talkState[7]) { talkState[7] = false; talkState[8] = true; msg << "Would you like to be a {male} or a {female}."; } else if(talkState[8] && (checkText(text, "female") || checkText(text, "male"))) { talkState[8] = false; talkState[9] = true; if(checkText(text, "female")) { msg << "A female, are you sure? {yes} or {no}"; managerSex = PLAYERSEX_FEMALE; } else { msg << "A male, are you sure? {yes} or {no}"; managerSex = PLAYERSEX_MALE; } } else if(checkText(text, "no") && talkState[9]) { talkState[8] = true; talkState[9] = false; msg << "Tell me then, would you like to be a {male} or a {female}?"; } else if(checkText(text, "yes") && talkState[9]) { if(g_config.getBool(ConfigManager::START_CHOOSEVOC)) { talkState[9] = false; talkState[11] = true; std::vector<std::string> vocations; for(VocationsMap::iterator it = Vocations::getInstance()->getFirstVocation(); it != Vocations::getInstance()->getLastVocation(); ++it) { if(it->first == it->second->getFromVocation() && it->first != 0) vocations.push_back(it->second->getName()); } msg << "What would you like to be... "; for(std::vector<std::string>::const_iterator it = vocations.begin(); it != vocations.end(); ++it) { if(it == vocations.begin()) msg << "{" << *it << "}"; else if(*it == *(vocations.rbegin())) msg << " or {" << *it << "}."; else msg << ", {" << *it << "}"; } } else if(!IOLoginData::getInstance()->playerExists(managerString, true)) { talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; if(IOLoginData::getInstance()->createCharacter(managerNumber, managerString, managerNumber2, (uint16_t)managerSex)) msg << "Your character {" << managerString << "} has been created."; else msg << "Your character couldn't be created, please contact with staff."; } else { talkState[6] = true; talkState[9] = false; msg << "Player with that name already exists, please choose another one."; } } else if(talkState[11]) { for(VocationsMap::iterator it = Vocations::getInstance()->getFirstVocation(); it != Vocations::getInstance()->getLastVocation(); ++it) { if(checkText(text, asLowerCaseString(it->second->getName())) && it->first == it->second->getFromVocation() && it->first != 0) { msg << "So you would like to be " << it->second->getDescription() << ", {yes} or {no}?"; managerNumber2 = it->first; talkState[11] = false; talkState[12] = true; } } if(msg.str().length() == 17) msg << "I don't understand what vocation you would like to be... could you please repeat it?"; } else if(checkText(text, "yes") && talkState[12]) { if(!IOLoginData::getInstance()->playerExists(managerString, true)) { talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; if(IOLoginData::getInstance()->createCharacter(managerNumber, managerString, managerNumber2, (uint16_t)managerSex)) msg << "Your character {" << managerString << "} has been created."; else msg << "Your character couldn't be created, please contact with staff."; } else { talkState[6] = true; talkState[9] = false; msg << "Player with that name already exists, please choose another one."; } } else if(checkText(text, "no") && talkState[12]) { talkState[11] = true; talkState[12] = false; msg << "What would you like to be then?"; } else if(checkText(text, "recovery key") && talkState[1]) { talkState[1] = false; talkState[10] = true; msg << "Would you like to generate a recovery key? {yes} or {no}"; } else if(checkText(text, "yes") && talkState[10]) { if(account.recoveryKey != "0") msg << "Sorry, but you already have a recovery key. For security reasons I may not generate for you you a new one."; else { managerString = generateRecoveryKey(4, 4); IOLoginData::getInstance()->setRecoveryKey(managerNumber, managerString); msg << "Your recovery key is {" << managerString << "}."; } talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; } else if(checkText(text, "no") && talkState[10]) { msg << "Ok, then not."; talkState[1] = true; for(int8_t i = 2; i <= 12; ++i) talkState[i] = false; } else msg << "Sorry, but I can't understand you, please try to repeat."; break; } case MANAGER_NEW: { if(checkText(text, "account") && !talkState[1]) { msg << "What would you like your password to be?"; talkState[1] = true; talkState[2] = true; } else if(talkState[2]) { std::string tmp = text; trimString(tmp); if(tmp.length() < 6) msg << "That password is too short, please select a longer one."; else if(!isValidPassword(tmp)) msg << "Your password seems to contain invalid symbols, please choose another one."; else { talkState[3] = true; talkState[2] = false; managerString = tmp; msg << "{" << managerString << "} is it? {yes} or {no}?"; } } else if(checkText(text, "yes") && talkState[3]) { if(g_config.getBool(ConfigManager::GENERATE_ACCOUNT_NUMBER)) { do sprintf(managerChar, "%d%d%d%d%d%d%d", random_range(2, 9), random_range(2, 9), random_range(2, 9), random_range(2, 9), random_range(2, 9), random_range(2, 9), random_range(2, 9)); while(IOLoginData::getInstance()->accountNameExists(managerChar)); uint32_t id = (uint32_t)IOLoginData::getInstance()->createAccount(managerChar, managerString); if(id) { accountManager = MANAGER_ACCOUNT; managerNumber = id; noSwap = talkState[1] = false; msg << "Your account has been created, you may manage it now, but please remember your account name {" << managerChar << "} and password {" << managerString << "}!"; } else msg << "Your account could not be created, please contact with staff."; for(int8_t i = 2; i <= 5; ++i) talkState[i] = false; } else { msg << "What would you like your account name to be?"; talkState[3] = false; talkState[4] = true; } } else if(checkText(text, "no") && talkState[3]) { talkState[2] = true; talkState[3] = false; msg << "What would you like your password to be then?"; } else if(talkState[4]) { std::string tmp = text; trimString(tmp); if(tmp.length() < 3) msg << "That account name is too short, please select a longer one."; else if(tmp.length() > 32) msg << "That account name is too long, please select a shorter one."; else if(!isValidAccountName(tmp)) msg << "Your account name seems to contain invalid symbols, please choose another one."; else if(asLowerCaseString(tmp) == asLowerCaseString(managerString)) msg << "Your account name cannot be same as password, please choose another one."; else { sprintf(managerChar, "%s", tmp.c_str()); msg << "{" << managerChar << "}, is it? {yes} or {no}?"; talkState[4] = false; talkState[5] = true; } } else if(checkText(text, "yes") && talkState[5]) { if(!IOLoginData::getInstance()->accountNameExists(managerChar)) { uint32_t id = (uint32_t)IOLoginData::getInstance()->createAccount(managerChar, managerString); if(id) { accountManager = MANAGER_ACCOUNT; managerNumber = id; noSwap = talkState[1] = false; msg << "Your account has been created, you may manage it now, but please remember your account name {" << managerChar << "} and password {" << managerString << "}!"; } else msg << "Your account could not be created, please contact with staff."; for(int8_t i = 2; i <= 5; ++i) talkState[i] = false; } else { msg << "Account with that name already exists, please choose another one."; talkState[4] = true; talkState[5] = false; } } else if(checkText(text, "no") && talkState[5]) { talkState[5] = false; talkState[4] = true; msg << "What would you like your account name to be then?"; } else if(checkText(text, "recover") && !talkState[6]) { talkState[6] = true; talkState[7] = true; msg << "What was your account name?"; } else if(talkState[7]) { managerString = text; if(IOLoginData::getInstance()->getAccountId(managerString, (uint32_t&)managerNumber)) { talkState[7] = false; talkState[8] = true; msg << "What was your recovery key?"; } else { msg << "Sorry, but account with name {" << managerString << "} does not exists."; talkState[6] = talkState[7] = false; } } else if(talkState[8]) { managerString2 = text; if(IOLoginData::getInstance()->validRecoveryKey(managerNumber, managerString2) && managerString2 != "0") { sprintf(managerChar, "%s%d", g_config.getString(ConfigManager::SERVER_NAME).c_str(), random_range(100, 999)); IOLoginData::getInstance()->setPassword(managerNumber, managerChar); msg << "Correct! Your new password is {" << managerChar << "}."; } else msg << "Sorry, but this key does not match to specified account."; talkState[7] = talkState[8] = false; } else msg << "Sorry, but I can't understand you, please try to repeat."; break; } default: return; break; } sendCreatureSay(this, MSG_NPC_FROM, msg.str()); if(!noSwap) sendCreatureSay(this, MSG_NPC_FROM, "Hint: Type {account} to manage your account and if you want to start over then type {cancel}."); } Editado Outubro 14, 2015 10 anos por RuanSantos (veja o histórico de edições)
Postado Outubro 14, 2015 10 anos Se voce tem website, voce nao precisa de account manager. E inutil. Leia por si proprio o que o Mark fala sobre account manager, REMOVIDO! Editado Outubro 14, 2015 10 anos por Snowsz É proibido links de outros fóruns, leia as regras gerais! (veja o histórico de edições) Discord: vankk #7765 Precisando de ajuda? Entre em contato comigo via Discord. Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.
Postado Outubro 14, 2015 10 anos Autor Sim brother mais meu servidor usam os dois só que de uma maneira mais eficiente não é tipo "GLOBAL" que depende só do site pra criar as contas (..)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.