Powoli pisze sobie gierke w konsoli. Mam problem przy nakładaniu przedmiotów (na postać). Przedmioty są podzielone na kilka klas typu zbroja, helm itd. Wszystkie dziedziczą z jednej klasy wirtualnej, zalozmy Cloth.
Ekwipunek jest wektorem wskaźników Cloth. Poniżej funkcje klasy postaci odpowiedzialne za nakładanie/zdejmowanie przedmiotów (dla broni funkcja jest przeciążona z widocznych powodów) :
template <class T>
void cloth_on(T* w)
{
if(this->hlvl>=w->lvl){
this->def+=w->def;
if(w->bid!=0){
if(w->bid==1) this->maxhp+= w->b_pow;
else if(w->bid==2) this->def+= w->b_pow;
else if(w->bid==3) this->rzuty+= w->b_pow;
else if(w->bid==4) this->dmg+= w->b_pow;
else if(w->bid==5) this->crt+= w->b_pow;
}
w->on=true;
}
}
void cloth_on(Miecz* w)
{
if(this->hlvl>=w->lvl)
{
w->on=true;
rzuty+=w->rzuty;
dmg+=w->dmg;
crt+=w->crt;
if(w->bid!=0){
if(w->bid==1) this->maxhp+= w->b_pow;
else if(w->bid==2) this->def+= w->b_pow;
else if(w->bid==3) this->rzuty+= w->b_pow;
else if(w->bid==4) this->dmg+= w->b_pow;
else if(w->bid==5) this->crt+= w->b_pow;
}
}
}
template <class U>
void cloth_off(U* w)
{
this->def-=w->def;
if(w->bid!=0){
if(w->bid==1) this->maxhp-= w->b_pow;
else if(w->bid==2) this->def-= w->b_pow;
else if(w->bid==3) this->rzuty-= w->b_pow;
else if(w->bid==4) this->dmg-= w->b_pow;
else if(w->bid==5) this->crt-= w->b_pow;
}
w->on=false;
}
void cloth_off(Miecz* w)
{
w->on=false;
rzuty-=w->rzuty;
dmg-=w->dmg;
crt-=w->crt;
if(w->bid!=0){
if(w->bid==1) this->maxhp-= w->b_pow;
else if(w->bid==2) this->def-= w->b_pow;
else if(w->bid==3) this->rzuty-= w->b_pow;
else if(w->bid==4) this->dmg-= w->b_pow;
else if(w->bid==5) this->crt-= w->b_pow;
}
}
Konkretnie chodzi o to, że postać dostaje kompletnie randomowe wartości obrony, dmg itd. W przypadku obrony są to czesto liczby olbrzymie, ale czasami też zero. Wspominam o tym, bo w przypadku innych statystyk są to liczby znacznie bliżej tej właściwej. Dmg i rzuty są czasami nawet dodawane poprawnie :D . Przy zdejmowaniu jest odejmowana ta sama wartość która została dodana przy założeniu.
Wywołania wyglądają tak:
h.cloth_off(v[choice]);
h.cloth_on(v[choice]);
hero - obiekt klasy postaci, v- wektor ekwipunku