aboutsummaryrefslogtreecommitdiff
path: root/src/crplayer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/crplayer.cc')
-rw-r--r--src/crplayer.cc72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/crplayer.cc b/src/crplayer.cc
new file mode 100644
index 0000000..3193843
--- /dev/null
+++ b/src/crplayer.cc
@@ -0,0 +1,72 @@
+#include "cr.hh"
+
+#include "stubs.hh"
+
+uint8 TPlayer::GetRealProfession(void){
+ return this->Profession;
+}
+
+uint8 TPlayer::GetEffectiveProfession(void){
+ uint8 Profession = this->Profession;
+ if(Profession >= 10){
+ Profession -= 10;
+ }
+ return Profession;
+}
+
+uint8 TPlayer::GetActiveProfession(void){
+ uint8 Profession;
+ if(CheckRight(this->ID, PREMIUM_ACCOUNT)){
+ Profession = this->Profession;
+ }else{
+ Profession = this->GetEffectiveProfession();
+ }
+ return Profession;
+}
+
+bool TPlayer::GetActivePromotion(void){
+ return CheckRight(this->ID, PREMIUM_ACCOUNT)
+ && this->Profession >= 10;
+}
+
+void TPlayer::CheckState(void){
+ if(this->Connection != NULL){
+ uint8 State = 0;
+
+ if(this->Skills[SKILL_POISON]->TimerValue() > 0){
+ State |= 0x01;
+ }
+
+ if(this->Skills[SKILL_BURNING]->TimerValue() > 0){
+ State |= 0x02;
+ }
+
+ if(this->Skills[SKILL_ENERGY]->TimerValue() > 0){
+ State |= 0x04;
+ }
+
+ // TODO(fusion): Not sure about this one.
+ if(this->Skills[SKILL_DRUNK]->TimerValue() > 0 && this->Skills[SKILL_DRUNK]->Get() == 0){
+ State |= 0x08;
+ }
+
+ if(this->Skills[SKILL_MANASHIELD]->TimerValue() > 0 || this->Skills[SKILL_MANASHIELD]->Get() > 0){
+ State |= 0x10;
+ }
+
+ if(this->Skills[SKILL_GO_STRENGTH]->MDAct < 0){
+ State |= 0x20;
+ }else if(this->Skills[SKILL_GO_STRENGTH]->MDAct > 0){
+ State |= 0x40;
+ }
+
+ if(RoundNr < this->EarliestLogoutRound){
+ State |= 0x80;
+ }
+
+ if(State != this->OldState){
+ SendPlayerState(this->Connection, State);
+ this->OldState = State;
+ }
+ }
+}