From: Ondrej H. <tan...@us...> - 2005-05-15 17:34:38
|
Update of /cvsroot/planeshift/planeshift/src/server/bulkobjects In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27193/src/server/bulkobjects Modified Files: servervitals.cpp servervitals.h Log Message: - Fixed that vitals were not adjusted when they were at maximum value. This means that negative rates (e.g. spells) were not always applied. - Fixed that when negative HP rates lowered HP to zero, the character was not killed. Index: servervitals.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/bulkobjects/servervitals.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** servervitals.cpp 13 Mar 2005 12:07:21 -0000 1.6 --- servervitals.cpp 15 May 2005 17:34:27 -0000 1.7 *************** *** 21,29 **** #include "servervitals.h" #include "net/msghandler.h" ! psServerVitals::psServerVitals() { ! statsDirty = 0; } --- 21,31 ---- #include "servervitals.h" + #include "gem.h" + #include "bulkobjects/pscharacter.h" #include "net/msghandler.h" ! psServerVitals::psServerVitals(psCharacter * character) { ! this->character = character; statsDirty = 0; } *************** *** 88,106 **** lastDRUpdate = now; - // iterate over all fields and predict their values based on their recharge rate for ( int x = 0; x < VITAL_COUNT; x++ ) { ! if ( vitals[x].value < vitals[x].max ) ! { ! vitals[x].value += vitals[x].drRate*delta; ! ! if ( vitals[x].value < 0 ) ! vitals[x].value = 0; ! if ( vitals[x].value > vitals[x].max ) ! vitals[x].value = vitals[x].max; ! } } if (drdelta > 10000 || statsDirty) { --- 90,107 ---- lastDRUpdate = now; // iterate over all fields and predict their values based on their recharge rate for ( int x = 0; x < VITAL_COUNT; x++ ) { ! vitals[x].value += vitals[x].drRate*delta; ! ! if ( vitals[x].value < 0 ) ! vitals[x].value = 0; ! if ( vitals[x].value > vitals[x].max ) ! vitals[x].value = vitals[x].max; } + if (vitals[VITAL_HITPOINTS].value==0 && vitals[VITAL_HITPOINTS].drRate<0) + character->GetActor()->Kill(NULL); + if (drdelta > 10000 || statsDirty) { *************** *** 126,129 **** --- 127,131 ---- psCharVital& psServerVitals::DirtyVital( int vitalName, int dirtyFlag ) { + Error2("---dirtyvital %i",vitalName); statsDirty |= dirtyFlag; return GetVital( vitalName ); Index: servervitals.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/bulkobjects/servervitals.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** servervitals.h 13 Mar 2005 12:07:21 -0000 1.2 --- servervitals.h 15 May 2005 17:34:28 -0000 1.3 *************** *** 24,27 **** --- 24,28 ---- class MsgEntry; + class psCharacter; /** Server side of the character vitals manager. Does a lot more accessing *************** *** 34,40 **** /// @see PS_DIRTY_VITALS unsigned int statsDirty; public: ! psServerVitals(); /** Handles new Vital data construction for the server. --- 35,43 ---- /// @see PS_DIRTY_VITALS unsigned int statsDirty; + + psCharacter * character; // the char whose vitals we manage public: ! psServerVitals(psCharacter * character); /** Handles new Vital data construction for the server. |