Skip to content

Commit

Permalink
You can only curse your own family members, not people from other lines.
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonrohrer committed Apr 22, 2019
1 parent b126de6 commit 3744524
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 13 deletions.
2 changes: 2 additions & 0 deletions documentation/changeLog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ Server Fixes:
--You can no longer curses someone by name after they've been dead for 60
seconds.

--You can only curse your own family members, not people from other lines.




Expand Down
23 changes: 18 additions & 5 deletions server/curses.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ typedef struct PlayerNameRecord {
char *name;
char *email;
double timeCreated;
int lineageEveID;
} PlayerNameRecord;


Expand Down Expand Up @@ -453,7 +454,8 @@ void cursesLogDeath( char *inEmail, double inAge ) {


// can return NULL if name not found
static CurseRecord *findCurseRecordByName( char *inName ) {
static CurseRecord *findCurseRecordByName( char *inName,
int *outLineageEveID ) {

char *email = NULL;

Expand All @@ -462,6 +464,7 @@ static CurseRecord *findCurseRecordByName( char *inName ) {

if( strcmp( r->name, inName ) == 0 ) {
email = r->email;
*outLineageEveID = r->lineageEveID;
break;
}
}
Expand Down Expand Up @@ -513,16 +516,24 @@ void getNewCurseTokenHolders( SimpleVector<char*> *inEmailList ) {



char cursePlayer( int inGiverID, char *inGiverEmail,
char cursePlayer( int inGiverID, int inGiverLineageEveID, char *inGiverEmail,
char *inReceiverName ) {
stepCurses();

CurseRecord *receiverRecord = findCurseRecordByName( inReceiverName );
int receiverLineageEveID = 0;

CurseRecord *receiverRecord =
findCurseRecordByName( inReceiverName, &receiverLineageEveID );

if( receiverRecord == NULL ) {
return false;
}

if( receiverLineageEveID != inGiverLineageEveID ) {
// not in the same family, can't curse
return false;
}

if( !useCurseServer && receiverRecord->bornCursed ) {
// already getting born cursed, from local curses,
// leave them alone for now
Expand Down Expand Up @@ -580,11 +591,13 @@ char cursePlayer( int inGiverID, char *inGiverEmail,



void logPlayerNameForCurses( char *inPlayerEmail, char *inPlayerName ) {
void logPlayerNameForCurses( char *inPlayerEmail, char *inPlayerName,
int inLineageEveID ) {
// structure to track names per player
PlayerNameRecord r = { stringDuplicate( inPlayerName ),
stringDuplicate( inPlayerEmail ),
Time::getCurrentTime() };
Time::getCurrentTime(),
inLineageEveID };

playerNames.push_back( r );
}
Expand Down
6 changes: 4 additions & 2 deletions server/curses.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@ void getNewCurseTokenHolders( SimpleVector<char*> *inEmailList );


// returns true of curse effective
char cursePlayer( int inGiverID, char *inGiverEmail, char *inReceiverName );
char cursePlayer( int inGiverID, int inGiverLineageEveID,
char *inGiverEmail, char *inReceiverName );

void logPlayerNameForCurses( char *inPlayerEmail, char *inPlayerName );
void logPlayerNameForCurses( char *inPlayerEmail, char *inPlayerName,
int inLineageEveID );



Expand Down
5 changes: 3 additions & 2 deletions server/lifeLog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,12 @@ void logDeath( int inPlayerID, char *inPlayerEmail,



void logName( int inPlayerID, char *inEmail, char *inName ) {
void logName( int inPlayerID, char *inEmail, char *inName,
int inLineageEveID ) {
if( nameLogFile != NULL ) {
fprintf( nameLogFile, "%d %s\n", inPlayerID, inName );
}
logPlayerNameForCurses( inEmail, inName );
logPlayerNameForCurses( inEmail, inName, inLineageEveID );
}


Expand Down
2 changes: 1 addition & 1 deletion server/lifeLog.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,5 @@ void logDeath( int inPlayerID, char *inPlayerEmail,
char *inKillerEmail = NULL );


void logName( int inPlayerID, char *inEmail, char *inName );
void logName( int inPlayerID, char *inEmail, char *inName, int inLineageEveID );

10 changes: 7 additions & 3 deletions server/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3769,6 +3769,7 @@ static void makePlayerSay( LiveObject *inPlayer, char *inToSay ) {
strcmp( cursedName, "" ) != 0 ) {

isCurse = cursePlayer( inPlayer->id,
inPlayer->lineageEveID,
inPlayer->email,
cursedName );

Expand Down Expand Up @@ -10304,7 +10305,8 @@ int main() {

logName( nextPlayer->id,
nextPlayer->email,
nextPlayer->name );
nextPlayer->name,
nextPlayer->lineageEveID );
playerIndicesToSendNamesAbout.push_back( i );
}
}
Expand Down Expand Up @@ -10402,7 +10404,8 @@ int main() {

logName( babyO->id,
babyO->email,
babyO->name );
babyO->name,
babyO->lineageEveID );

playerIndicesToSendNamesAbout.push_back(
getLiveObjectIndex( babyO->id ) );
Expand Down Expand Up @@ -10436,7 +10439,8 @@ int main() {

logName( closestOther->id,
closestOther->email,
closestOther->name );
closestOther->name,
closestOther->lineageEveID );

playerIndicesToSendNamesAbout.push_back(
getLiveObjectIndex(
Expand Down

0 comments on commit 3744524

Please sign in to comment.