Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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() <= 10)
- {
- 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 10 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() < 4)
- msg << "That name contains less than (4) characters, please select a longer name.";
- else if(managerString.length() > 25)
- 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(g_config.getBool(ConfigManager::START_CHOOSETOWN))
- {
- talkState[9] = false;
- talkState[13] = true;
- bool firstPart = true;
- for(TownMap::const_iterator it = Towns::getInstance()->getFirstTown(); it != Towns::getInstance()->getLastTown(); ++it)
- {
- if(it->second->getID() < 100)
- {
- if(firstPart)
- {
- msg << "Where do you want to live... " << it->second->getName();
- firstPart = false;
- }
- else if(it->first - 1 != 0)
- msg << ", " << it->second->getName();
- else
- msg << " or " << it->second->getName() << ".";
- }
- }
- }
- 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, managerNumber3))
- 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(g_config.getBool(ConfigManager::START_CHOOSETOWN))
- {
- talkState[12] = false;
- talkState[13] = true;
- bool firstPart = true;
- for(TownMap::const_iterator it = Towns::getInstance()->getFirstTown(); it != Towns::getInstance()->getLastTown(); ++it)
- {
- if(it->second->getID() < 100)
- {
- if(firstPart)
- {
- msg << "Where do you want to live... " << it->second->getName();
- firstPart = false;
- }
- else if(it->first - 1 != 0)
- msg << ", " << it->second->getName();
- else
- msg << " or " << it->second->getName() << ".";
- }
- }
- }
- 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, managerNumber3))
- 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(talkState[13])
- {
- for(TownMap::const_iterator it = Towns::getInstance()->getFirstTown(); it != Towns::getInstance()->getLastTown(); it++)
- {
- std::string tmp = asLowerCaseString(it->second->getName());
- if(checkText(text, tmp) && it != Towns::getInstance()->getLastTown() && it->second->getID() < 100)
- {
- msg << "So do you want to live in " << it->second->getName() << ".. are you sure?";
- managerNumber3 = it->first;
- talkState[13] = false;
- talkState[14] = true;
- }
- }
- if(msg.str().length() == 17)
- msg << "I don't understand where you would like to live... could you please repeat it?";
- }
- else if(checkText(text, "yes") && talkState[14])
- {
- if(!IOLoginData::getInstance()->playerExists(managerString, true))
- {
- talkState[1] = true;
- for(int8_t i = 2; i <= 14; i++)
- talkState[i] = false;
- if(IOLoginData::getInstance()->createCharacter(managerNumber, managerString, managerNumber2, (uint16_t)managerSex, managerNumber3))
- msg << "Your character has been created.";
- else
- msg << "Your character couldn't be created, please try again.";
- }
- else
- {
- talkState[6] = true;
- talkState[9] = false;
- msg << "A player with that name already exists, please choose another name.";
- }
- }
- else if(checkText(text, "no") && talkState[14])
- {
- talkState[13] = true;
- talkState[14] = false;
- msg << "So where do you want to live?";
- }
- 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}.");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement