T_void SMCLogoffSaveCharacterEnter( T_stateMachineHandle handle, T_word32 extraData) { T_SMCLogoffData *p_data ; T_characterBlock *p_charBlock ; T_void *p_stats ; T_word32 size ; T_word16 slot ; DebugRoutine("SMCLogoffSaveCharacterEnter") ; p_data = (T_SMCLogoffData *)StateMachineGetExtraData(G_smHandle) ; DebugCheck(p_data != NULL) ; SMCLogoffSetFlag( SMCLOGOFF_FLAG_SAVE_COMPLETE, FALSE) ; SMCLogoffSetFlag( SMCLOGOFF_FLAG_TIMEOUT, FALSE) ; SMCLogoffSetFlag( SMCLOGOFF_FLAG_SAVE_ERROR, FALSE) ; /* No matter what type of server we are on, save this one. */ StatsSaveCharacter(StatsGetActive()) ; if (ClientIsServerBased()) { // if (CommCheckClientAndServerExist() == FALSE) { /* Send the character up to the server. */ p_stats = StatsGetAsDataBlock(&size) ; p_charBlock = MemAlloc(sizeof(T_characterBlock) + size) ; slot = p_charBlock->slot = StatsGetActive() ; StatsGetPassword(slot, p_charBlock->password) ; p_charBlock->size = size ; memcpy(p_charBlock->charData, p_stats, size) ; MemFree(p_stats) ; MemoryTransfer( p_charBlock, size + sizeof(T_characterBlock), ISaveUploadComplete, MEMORY_BLOCK_CHARACTER_DATA) ; } //ClientLogoff() ; DebugEnd() ; }
/* button callback to rent a space at the inn */ static T_void InnUIRent(T_buttonID buttonID) { T_word32 whichRoom; T_word16 newhealth; T_word16 newmana; DebugRoutine("InnUIRent"); DebugCheck(buttonID != NULL); /* figure out which room we want to rent */ whichRoom = ButtonGetData(buttonID); switch (whichRoom) { case INN_ROOM_COMMONS: MessageAdd("^004Good night!"); switch (rand() % 3) { case 0: PromptDisplayMessage("You enjoy an uncomfortable night on the floor."); break; case 1: PromptDisplayMessage("The only warmth here is from the next body over."); break; case 2: PromptDisplayMessage("I think I got fleas now."); break; } /* Go back to character selection screen */ StatsSaveCharacter(StatsGetActive()); ClientSetNextPlace(0, 0); break; case INN_ROOM_SMALL: /* deduct 12 silver */ if (StatsGetPlayerTotalCarriedWealth() >= 200) { StatsChangePlayerTotalCarriedWealth(-200); /* Give player 25% Health, 25% Mana, 50% food and Water */ StatsChangePlayerFood(1000); StatsChangePlayerWater(1000); newhealth = StatsGetPlayerHealth(); newhealth += StatsGetPlayerMaxHealth() / 4; if (newhealth > StatsGetPlayerMaxHealth()) newhealth = StatsGetPlayerMaxHealth(); newmana = StatsGetPlayerMana(); newmana += StatsGetPlayerMaxMana() / 4; if (newmana > StatsGetPlayerMaxMana()) newmana = StatsGetPlayerMaxMana(); StatsSetPlayerHealth(newhealth); StatsSetPlayerMana(newmana); MessageAdd("^00425% Health/Mana + 50% Food/Water"); switch (rand() % 3) { case 0: PromptDisplayMessage("A tight fit in a small room, but it'll do."); break; case 1: PromptDisplayMessage("Don't let the bedbugs bite!"); break; case 2: PromptDisplayMessage("The only thing smaller than this room ... is the bed."); break; } /* Go back to character selection screen */ StatsSaveCharacter(StatsGetActive()); ClientSetNextPlace(0, 0); } else { MessageAdd("^005Gotta have the money first, pal."); } break; case INN_ROOM_LARGE: /* deduct 2 gold */ if (StatsGetPlayerTotalCarriedWealth() >= 1000) { StatsChangePlayerTotalCarriedWealth(-1000); /* Give player 33% health, 33% mana, 100% food and water */ StatsChangePlayerFood(2000); StatsChangePlayerWater(2000); newhealth = StatsGetPlayerHealth(); newhealth += StatsGetPlayerMaxHealth() / 3; if (newhealth > StatsGetPlayerMaxHealth()) newhealth = StatsGetPlayerMaxHealth(); newmana = StatsGetPlayerMana(); newmana += StatsGetPlayerMaxMana() / 3; if (newmana > StatsGetPlayerMaxMana()) newmana = StatsGetPlayerMaxMana(); StatsSetPlayerHealth(newhealth); StatsSetPlayerMana(newmana); /* Halve Poison */ StatsSetPlayerPoisonLevel(StatsGetPlayerPoisonLevel()/2); MessageAdd("^00433% H/M + 100% F/W - 50% Poison"); switch (rand() % 3) { case 0: PromptDisplayMessage("Bigger is better!"); break; case 1: PromptDisplayMessage("Make my bed a double!"); break; case 2: PromptDisplayMessage("Nothing like enjoying some time off!"); break; } /* Go back to character selection screen */ StatsSaveCharacter(StatsGetActive()); ClientSetNextPlace(0, 0); } else { MessageAdd("^005You don't look like you can afford it."); } break; case INN_ROOM_SUITE: /* deduct 1 platinum */ if (StatsGetPlayerTotalCarriedWealth() >= 2000) { StatsChangePlayerTotalCarriedWealth(-2000); /* Give player 100% health, 100% mana, 100% food, 100% water */ StatsChangePlayerFood(2000); StatsChangePlayerWater(2000); newhealth = StatsGetPlayerMaxHealth(); newmana = StatsGetPlayerMaxMana(); StatsSetPlayerHealth(newhealth); StatsSetPlayerMana(newmana); /* Cure poison */ StatsSetPlayerPoisonLevel(0); MessageAdd("^004100% H/M + 100% F/W - 100% Poision"); switch (rand() % 3) { case 0: PromptDisplayMessage("Now this is living the life!"); break; case 1: PromptDisplayMessage("I always wanted to live rich. Now I am."); break; case 2: PromptDisplayMessage("Oh yeah! I feel MUCH better now."); break; } /* Go back to character selection screen */ StatsSaveCharacter(StatsGetActive()); ClientSetNextPlace(0, 0); } else { MessageAdd("^005What, are you kidding??"); } break; default: /* fail! */ DebugCheck(0); } DebugEnd(); }