All pastes #452072 Raw Edit

Something

public text v1 · immutable
·published 2007-04-22 01:07 UTC
rendered paste body
bool ChatHandler::HandleLearnCommand(const char* args)
{
    uint16 maxconfskill = sWorld.GetConfigMaxSkillValue();

    if (!*args)
        return false;

    if (!strcmp(args, "all"))
    {
        int loop = 0;

        PSendSysMessage(LANG_LEARNING_GM_SKILLS, m_session->GetPlayer()->GetName());

        while (strcmp(gmSpellList[loop], "0"))
        {
            uint32 spell = atol((char*)gmSpellList[loop]);

            if (m_session->GetPlayer()->HasSpell(spell))
            {
                loop++;
                continue;
            }
            m_session->GetPlayer()->learnSpell((uint16)spell);

            loop++;
        }

        return true;
    }

    if (!strcmp(args, "all_myclass"))
    {
        PSendSysMessage("%s - Learning all spells/skills for its class.", m_session->GetPlayer()->GetName());

        uint32 family = 0;
        switch(m_session->GetPlayer()->getClass())
        {
            case CLASS_WARRIOR: family = SPELLFAMILY_WARRIOR; break;
            case CLASS_PALADIN: family = SPELLFAMILY_PALADIN; break;
            case CLASS_HUNTER: family = SPELLFAMILY_HUNTER; break;
            case CLASS_ROGUE: family = SPELLFAMILY_ROGUE; break;
            case CLASS_PRIEST: family = SPELLFAMILY_PRIEST; break;
            case CLASS_SHAMAN: family = SPELLFAMILY_SHAMAN; break;
            case CLASS_MAGE: family = SPELLFAMILY_MAGE; break;
            case CLASS_WARLOCK: family = SPELLFAMILY_WARLOCK; break;
            case CLASS_DRUID: family = SPELLFAMILY_DRUID; break;
            default: return true;
        }

        for (uint32 i = 0; i < sSpellStore.GetNumRows(); i++)
        {
            SpellEntry const *spellInfo = sSpellStore.LookupEntry(i);
            SkillLineAbilityEntry const *skillLine = sSkillLineAbilityStore.LookupEntry(i);
            if (skillLine && spellInfo && spellInfo->SpellFamilyName == family && !m_session->GetPlayer()->HasSpell(i))
                m_session->GetPlayer()->learnSpell((uint16)i);
        }

        return true;
    }

    if (!strcmp(args, "all_lang"))
    {
        PSendSysMessage("%s - Learning all languages.", m_session->GetPlayer()->GetName());

        // skiping UNIVERSAL language (0)
        for(int i = 1; i < LANGUAGES_COUNT; ++i)
            m_session->GetPlayer()->learnSpell(lang_description[i].spell_id);
        return true;
    }

    Player* target = getSelectedPlayer();
    if(!target)
    {
        PSendSysMessage(LANG_NO_CHAR_SELECTED);
        return true;
    }

    uint32 spell = atol((char*)args);

    if (target->HasSpell(spell))
    {
        SendSysMessage(LANG_KNOWN_SPELL);
        return true;
    }

    target->learnSpell((uint16)spell);

    return true;
}