攻撃力・防御力・機動力どれに優れているとも言い難いが、敵にバッドステータスを与えることを得意としている。その魔法に掛けられた者が窮地に追いやられるほど、どの職業にもない強力な魔法である。
属性魔法を使用し、序盤から範囲攻撃が可能であるため最も早くから頭角を現す職業である。しかし目を見張るほどの火力の反面、防御力・機動力に大きな不安を持っているため敵に近づかれる前に屠るか無理せず逃げるという戦い方になるであろう。レベルが上がるにつれ不安だった箇所も少しずつ補うことのできるようになり、重要なダメージソースの役割を果たすことになる。
魔法攻撃、物理攻撃、補助魔法を使いこなすオールマイティーな兵士。盾が装備可能なため、仲間を支援する職業の中では最大の防御力を持っている。支援だけではなく鈍器を使った強力な攻撃、スキルで底上げされた防御力で前線を維持ことが可能である。
杖を使用し、魔法や召喚されたユニットを使用して戦闘する。味方を祝福し、傷を癒し戦闘力を上げる補助の役割をする。レベルを上げ成長することで自らの体に戦乙女を宿し直接攻撃のできる職業である。
剣と盾、重い鎧を装備した歩兵と同じバトルスタイルをとる。しかし歩兵にはない魔法に対する耐久性があり、水属性の魔法攻撃が可能。水竜を召喚する魔法も覚え「魔法戦士」と呼ばれるにふさわしい職業である。
最高の機動力、槍を使用した高い攻撃力を備えた職業。高い攻撃力機動力を上げるパッシブスキル、敵を気絶することのできる範囲攻撃スキルなど攻撃に特化した職業といえる。その反面打たれ弱く持ち味の「ヒットアンドアウェイ」を生かして戦うことになる。
騎馬にまたがり、槍を武器として戦う。攻撃力は最高ランクを誇り、敵を一撃必殺でねじ伏せることが可能。基本は近接攻撃だがレベルを上げ成長することによって雷系の魔法を使用し中距離の攻撃をすることも可能。
全体的にバランスが取れた職業であり、槍を使用するため攻撃射程が長くなっており、剣や鈍器よりも攻撃力が高い。敵を困惑するスキルも覚えオールラウンドで戦うことが可能。成長すると敵の武具を破壊するスキルも覚え、敵を窮地に陥れることもある。
他の職業にはない長距離射程の攻撃を得意とする。成長すると矢に魔力を込めた攻撃ができるようになったり、罠を使用し敵を足止めしたりと弱点を的確に突く攻撃ができるようになる。
スキップの方法を洗練させるのではなく、ラビン-カープ法ではハッシュ関数を使って現在見ているテキストとパターンが同じかどうかのチェックを高速化する。ハッシュ関数は文字列を数値に変換する関数であり、その数値を「ハッシュ値」と呼ぶ。例えば、"hello" のハッシュ値は 5 などとなる。ラビン-カープ法では、文字列が等しいならハッシュ値も等しいという事実を利用する。従って、ここですべきことはサブ文字列のハッシュ値を計算し、同じハッシュ値を持つサブ文字列を見つけることである。しかし、これには2つの問題がある。第一に文字列は様々なので、ハッシュ値を（16ビットとか32ビットとか）小さくしている限り、必ず同じハッシュ値を持つ異なった文字列が出現する。これはつまり、ハッシュ値が一致しても文字列が一致しない可能性があることを意味する。従って、文字列そのものの比較もしなければならず、文字列が長くなればなるほど時間がかかることになる。幸いハッシュ関数が妥当であれば通常の入力に対してこのような状況は滅多に発生せず、平均検索時間は小さく保たれる。アルゴリズムは以下のようになる: 1 function RabinKarp(string s[1..n], string sub[1..m]) 2     hsub := hash(sub[1..m]) 3     hs := hash(s[1..m]) 4     for i from 1 to n 5         if hs = hsub 6             if s[i..i+m-1] = sub 7                 return i 8         hs := hash(s[i+1..i+m]) 9     return not found2行目、3行目、6行目、8行目は、Ω(m)の時間がかかる。しかし、2行目と3行目は1度しか実行されず、6行目はハッシュ値が一致したときだけ実行され何度も実行される性質のものではない。5行目は n 回実行されるが、定数時間しか要しない。従って問題となるのは8行目のみである。もし単純にハッシュ値をサブ文字列 s[i+1..i+m] から計算したら、Ω(m)の時間を要し、これはループの繰り返しのたびに実行されるので、このアルゴリズムは Ω(mn) を要することになり、単純な検索アルゴリズムと何ら変わりない。これを解決する技法は、変数 hs が既に s[i..i+m-1] のハッシュ値を保持しているという点にある。これを使って次のハッシュ値を定数時間で計算できれば問題は解決する。ここでは、いわゆる「ローリングハッシュ」を使用する。ローリングハッシュはこのような場合のために設計された特殊なハッシュ関数である。単純な例として、文字列を構成する全文字の値を加算するなどが考えられる。その場合、次のハッシュ値を計算する計算式は以下のようになり、定数時間で実行可能である: s[i+1..i+m] = s[i..i+m-1] - s[i] + s[i+m]この単純な関数でも十分使えるが、6行目の実行回数が増える可能性がある。それを低減させるには次節で解説する洗練されたローリングハッシュ関数を利用しなければならない。運が悪い場合やハッシュ関数が不適切な場合、6行目はほとんど n回実行されることもある。6行目の実行には Ω(m) の時間がかかるので、アルゴリズム全体として最悪の場合で Ω(mn) の時間を要することになる。