Wszystko o OTS
 
Szukanie zaawansowane
   
 
Home Rejestracja FAQ Użytkownicy Grupy Galerie  
 
 

Forum Wszystko o OTS Strona Główna Poradnik Jak zrobic wlasnom profesje mojom nazwalem barbarzynca ;]]
Wyświetl posty z ostatnich:   
       
Napisz nowy temat  Odpowiedz do tematu

Wto 11:22, 16 Sty 2007
Autor Wiadomość
cyklop nieche mi sie log
Gość






Temat postu: Jak zrobic wlasnom profesje mojom nazwalem barbarzynca ;]]

Witam wszystkich zainteresowanych.
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. Rolling Eyes

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}};

zmieniamy to na:


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}};

Jak zauważyliście lub
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. Razz

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
};
na:


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
};
Wartości przedstawione powyżej informują nas jak długo trzeba trenować, aby awansować w danym skillu. Im większa liczba, tym dłużej trzeba trenować.
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};
i zmieniamy go na:


Kod:

float ManaMultiplier[6] = { 1.0f, 1.1f, 1.1f, 1.4f, 3, 6};
Tutaj liczby mówią nam jak długo trzeba rzucać czary, aby awansować w mlvl. Im większa liczba, tym więcej czarów trzeba rzucić.
Mój barbarzyńca będzie musiał się sporo natrudzić by wskoczyć na 1 mlvl. Wink

Preskakujemy teraz do funkcji Player::gainManaTick() i zmieniamy w niej:


Kod:

if(vocation >= 0 && vocation < 5)
na:


Kod:

if(vocation >= 0 && vocation < 6)
To samo robimy w funkcji Player::gainHealthTick()

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];
na:


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];

Odszukujemy również:


Kod:

enum playervoc_t {
VOCATION_NONE = 0,
VOCATION_SORCERER = 1,
VOCATION_DRUID = 2,
VOCATION_PALADIN = 3,
VOCATION_KNIGHT = 4,
};
i zmieniamy na:


Kod:

enum playervoc_t {
VOCATION_NONE = 0,
VOCATION_SORCERER = 1,
VOCATION_DRUID = 2,
VOCATION_PALADIN = 3,
VOCATION_KNIGHT = 4,
VOCATION_BARBARIAN = 5
};
To tyle jeśli chodzi o zmiany w player.cpp i player.h

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. Mr. Green

W configmanager.cpp znajdujemy:


Kod:

for(int i=0; i<4; ++i)
m_confVocationString[i] = getGlobalStringField(L, "vocations", i+1, "unknown");
i zmieniamy na:


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];
i zmieniamy na:


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);
i pod tym dodajemy:


Kod:

VOCATIONS[VOCATION_BARBARIAN] = getGlobalStringField("vocations",VOCATION_BARBARIAN);

W luascript.h znajdujemy:


Kod:

std::string VOCATIONS[5];
i zmieniamy na:


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);
i dodać pod tym:


Kod:

PROMOTED_VOCATIONS[VOCATION_BARBARIAN] = getGlobalStringField("promoted_vocations",VOCATION_BARBARIAN);

W luascript.h znaleźć:


Kod:

std::string PROMOTED_VOCATIONS[5];
i zmienić na:


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}};
na:


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}};

Liczby {10,1} i {1,1} zostaly ustalone przeze mnie. Wy ustawcie sobie tak, jak wam odpowiada.


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. Smile

Dodane przez darex11:
tak tak, ale mogl bys napisac by zmienic w spells.xml


Kod:

<spells maxVoc="4">
na:


Kod:

<spells maxVoc="5">
oraz dodawac w czarze, ktory moze byc uzywany przez nowa prof:


Kod:

<vocation id="5" />
 
      Do góry  
Napisz nowy temat  Odpowiedz do tematu

 
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


      Do góry  

Strona 1 z 1
Skocz do:  
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
Avalanche style by What Is Real © 2004
             
Regulamin