Beispiel #1
0
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();
}