Please use the Question Tags to state the name and full version number of the Story Format you are using, as it helps with filtering & searching. Adding this information to the Question Title is of little benefit.
You didn't supply an example of how you are initialising your current player variable nor how you place to track their dexterity, and there are a number of different ways this could be done (distinct variables for each attribute; a single Data-Map containing all the attributes, etc...). I'm guessing you may be using the second option so I have used that in my solution.
1. Initialise your player related attributes within your protect's startup tagged special passage.
(set: $player to (dm:
"Name", "Abcde",
"Race", "Uknown",
"Dexterity", 0
))
2. Add TwineScript like the following to the Passage containing the Race selection. It displays the current values of each of the player's attributes and then uses a (link:) macro to allow the Reader to select which race the player is (1).
I have also included an example of how to use a (replace:) macro combined with a named hook to refresh the currently displayed attributes information.
<u>Player</u>
Name: (print: $player's "Name")
Race: [(print: $player's "Race")]<race|
Dexterity: [(print: $player's "Dexterity")]<dexterity|
Select a race for the player: {
(link: "Elf")[
(set: $player's "Race" to "Elf")
(set: $player's "Dexterity" to it + 2)
(replace: ?race)[(print: $player's "Race")]
(replace: ?dexterity)[(print: $player's "Dexterity")]
]
}
(1) I have only implemented the "Elf" link but you should be able to use it as a guide you adding other races to the selection.