Odrazu zaznaczam ze poradnik nie moj !
W tym temacie przedstawię krok po kroku jak dodać nową klasę postaci (profesję).
Jako nazwę dla swojej profesji wybrałem Barbarzyńcę, wy możecie nazwać ją jak sobie chcecie.
Zaczniemy od modyfikowania player.cpp:
Już na początku pliku znajdujemy:
Kod:
const int Player::gainManaVector[5][2] = {{6,1},{3,1},{3,1},{4,1},{6,1}};
const int Player::gainHealthVector[5][2] = {{6,1},{6,1},{6,1},{4,1},{3,1}};
Kod:
Kod:
const int Player::gainManaVector[6][2] = {{6,1},{3,1},{3,1},{4,1},{6,1},{12,1}};
const int Player::gainHealthVector[6][2] = {{6,1},{6,1},{6,1},{4,1},{3,1},{1,1}};
nie, zamiast [5] mamy teraz [6], mówi to serwerowi, że teraz jest 6 profesji,a nie 5. na końcu każdego wiersza zostały też dodane pewne liczby. {12,1} mówi serwerowi, że co 12 sekund mana tej profesji ma rosnąć o 1 punkt. {1,1} mówi zaś, że co 1 sekunde życie tej profesji ma rosnąć o 1 punkt.
Czemu takie liczby, a nie inne? Otóż z góry sobie ustalilem, że mój barbarzyńca będzie posiadał najszybszą regenerację życia i najwolniejszą regenerację many ze wszystkich innych klas. Wy wklepcie sobie liczby jakie wolicie. :P
Troche niżej w player.cpp widzimy:
Kod:
const int Player::CapGain[5] = {10, 10, 10, 20, 25};
const int Player::ManaGain[5] = {5, 30, 30, 15, 5};
const int Player::HPGain[5] = {5, 5, 5, 10, 15};
zmieniamy to na:
Kod:
const int Player::CapGain[6] = {10, 10, 10, 20, 25, 35};
const int Player::ManaGain[6] = {5, 30, 30, 15, 5, 5};
const int Player::HPGain[6] = {5, 5, 5, 10, 15, 20};
Liczby nowo dodane, czyli 35, 5 i 20 mówią o ile będzie wzarstał udźwig, mana i życie podczas levelowania. Wszystko jasne? Idziemy dalej.
W player.cpp odnajdujemy funkcję Player::getReqSkillTries i zmieniamy:
Kod:
float SkillMultipliers[7][5] = {
{1.5f, 1.5f, 1.5f, 1.2f, 1.1f}, // Fist
{2.0f, 2.0f, 1.8f, 1.2f, 1.1f}, // Club
{2.0f, 2.0f, 1.8f, 1.2f, 1.1f}, // Sword
{2.0f, 2.0f, 1.8f, 1.2f, 1.1f}, // Axe
{2.0f, 2.0f, 1.8f, 1.1f, 1.4f}, // Distance
{1.5f, 1.5f, 1.5f, 1.1f, 1.1f}, // Shielding
{1.1f, 1.1f, 1.1f, 1.1f, 1.1f} // Fishing
};
Kod:
float SkillMultipliers[7][6] = {
{1.5f, 1.5f, 1.5f, 1.2f, 1.1f, 1.1f}, // Fist
{2.0f, 2.0f, 1.8f, 1.2f, 1.1f, 1.0f}, // Club
{2.0f, 2.0f, 1.8f, 1.2f, 1.1f, 1.8f}, // Sword
{2.0f, 2.0f, 1.8f, 1.2f, 1.1f, 1.0f}, // Axe
{2.0f, 2.0f, 1.8f, 1.1f, 1.4f, 1.8f}, // Distance
{1.5f, 1.5f, 1.5f, 1.1f, 1.1f, 1.5f}, // Shielding
{1.1f, 1.1f, 1.1f, 1.1f, 1.1f, 1.1f} // Fishing
};
Mój barbarzyńca najlepiej zna sie na obsłudze toporów i broni obuchowych, a najsłabiej na shieldingu i mieczach.
Przechodzimy teraz do funkcji Player::getReqMana i odnajdujemy w niej wiersz:
Kod:
float ManaMultiplier[5] = { 1.0f, 1.1f, 1.1f, 1.4f, 3};
Kod:
float ManaMultiplier[6] = { 1.0f, 1.1f, 1.1f, 1.4f, 3, 6};
Mój barbarzyńca będzie musiał się sporo natrudzić by wskoczyć na 1 mlvl. ;-)
Preskakujemy teraz do funkcji Player::gainManaTick() i zmieniamy w niej:
Kod:
if(vocation >= 0 && vocation < 5)
Kod:
if(vocation >= 0 && vocation < 6)
Teraz przenosimy sie do player.h gdzie zmieniamy:
Kod:
static const int CapGain[5]; //for level advances
static const int ManaGain[5];
static const int HPGain[5];
static const int gainManaVector[5][2];
static const int gainHealthVector[5][2];
Kod:
static const int CapGain[6]; //for level advances
static const int ManaGain[6];
static const int HPGain[6];
static const int gainManaVector[6][2];
static const int gainHealthVector[6][2];
Kod:
enum playervoc_t {
VOCATION_NONE = 0,
VOCATION_SORCERER = 1,
VOCATION_DRUID = 2,
VOCATION_PALADIN = 3,
VOCATION_KNIGHT = 4,
};
Kod:
enum playervoc_t {
VOCATION_NONE = 0,
VOCATION_SORCERER = 1,
VOCATION_DRUID = 2,
VOCATION_PALADIN = 3,
VOCATION_KNIGHT = 4,
VOCATION_BARBARIAN = 5
};
Teraz muszę podzielić poradnik na dwie części, dla osób posiadających najnowszy CVS pod 7.72 i dla ludzi korzystających ze starych OTS'ów typu YurOts 0.9.4.
Zaczne od nowszego CVS gdyż mam już to zrobione. :mrgreen:
W configmanager.cpp znajdujemy:
Kod:
for(int i=0; i<4; ++i)
m_confVocationString[i] = getGlobalStringField(L, "vocations", i+1, "unknown");
Kod:
for(int i=0; i<5; ++i)
m_confVocationString[i] = getGlobalStringField(L, "vocations", i+1, "unknown");
W configmanager.h odszukujemy:
Kod:
std::string m_confVocationString[4];
Kod:
std::string m_confVocationString[5];
A teraz część dla osób korzystających z YurOtsa lub innych serwerów pod 7.6.
W luascript.cpp odnajdujemy:
Kod:
VOCATIONS[VOCATION_DRUID] = getGlobalStringField("vocations",VOCATION_DRUID);
Kod:
VOCATIONS[VOCATION_BARBARIAN] = getGlobalStringField("vocations",VOCATION_BARBARIAN);
W luascript.h znajdujemy:
Kod:
std::string VOCATIONS[5];
Kod:
std::string VOCATIONS[6];
UWAGA! Jeśli korzystasz z systemu premium i promocji zrobionego przez Yureza musisz:
W luascript.cpp odszukać:
Kod:
PROMOTED_VOCATIONS[VOCATION_DRUID] = getGlobalStringField("promoted_vocations",VOCATION_DRUID);
Kod:
PROMOTED_VOCATIONS[VOCATION_BARBARIAN] = getGlobalStringField("promoted_vocations",VOCATION_BARBARIAN);
W luascript.h znaleźć:
Kod:
std::string PROMOTED_VOCATIONS[5];
Kod:
std::string PROMOTED_VOCATIONS[6];
W player.cpp zmienić:
Kod:
const int Player::promotedGainManaVector[5][2] = {{5,1},{1,1},{1,1},{3,1},{3,1}};
const int Player::promotedGainHealthVector[5][2] = {{5,1},{5,1},{5,1},{3,1},{1,1}};
Kod:
const int Player::promotedGainManaVector[6][2] = {{5,1},{1,1},{1,1},{3,1},{3,1},{10,1}};
const int Player::promotedGainHealthVector[6][2] = {{5,1},{5,1},{5,1},{3,1},{1,1},{1,1}};
Ostatnią rzeczą którą musicie zrobić to w config.lua dodać nazwę nowej profesji:
Kod:
vocations = {"a sorcerer", "a druid", "a paladin", "a knight", "a paladin", "a barbarian"}
oraz jeśli używacie systemu premium i promocji Yureza:
Kod:
promoted_vocations = {"a master sorcerer", "an elder druid", "a royal paladin", "an elite knight", "a berserker"}
To chyba wszystko. W obu przypadkach, 7.72 i 7.6 trzeba użyć opcji Rebuild All w Dev-Cpp, aby zminimalizować ilość crashów serwera.
Jeśli coś wam nie wychodzi, to podawajcie tu swoje błędy kompilacji, a ja postaram sie zaradzić waszym problemom. :-)
Teraz przeskakujemy do speels.xml
Kod:
<spells maxVoc="4">
Kod:
<spells maxVoc="5">
Kod:
<vocation id="5" />
Zakładki