[dismiss]
This wiki is a copy of the original Oblivion CS wiki created and maintained by the UESP.net. See CSwiki:Copy Notice for more info.
Difference between revisions of "Text Input With TSFC"
Jump to navigation
Jump to search
Reworked script to use MBoxes
imported>Speedo m (→Limitations) |
imported>Speedo (Reworked script to use MBoxes) |
||
Line 1: | Line 1: | ||
This code will accept text input from the player, storing the data in a [[:Category: TSFC|TSFC]] string. All regular keyboard characters are supported except tilde(~). Shift and Backspace may be used normally, | This code will accept text input from the player, storing the data in a [[:Category: TSFC|TSFC]] string. All regular keyboard characters are supported except tilde(~). Shift and Backspace may be used normally. Text is show as typed via [[StrMessageBox|MessageBoxes]], which also have buttons for the player to end their input or clear all input. | ||
==Requirements== | ==Requirements== | ||
Line 8: | Line 8: | ||
==Setup== | ==Setup== | ||
As presented, this script is intended to run as a [[quest script]] and will use the player's input to rename an item. It could however | As presented, this script is intended to run as a [[quest script]] and will use the player's input to rename an item. It could however be modified to use the input in a different way, or to run in an object's script. | ||
After creating a quest for the script to run on, find the line "'''StopQuest TextInput'''" and replace "'''TextInput'''" with the name of your quest. | After creating a quest for the script to run on, find the line "'''StopQuest TextInput'''" and replace "'''TextInput'''" with the name of your quest. | ||
Line 23: | Line 23: | ||
*Caps Lock is ignored, since most players will use it to toggle run. It would be possible to add support for it, but it's not recommended. | *Caps Lock is ignored, since most players will use it to toggle run. It would be possible to add support for it, but it's not recommended. | ||
* | *While the script can respond quickly, allowing the player to type at a fairly normal pace, if multiple keys are pressed at the same time only one of them will be recognized. | ||
* | *If the typed text overflows to multiple lines on the [[StrMessageBox|MessageBox]], a dash(-) will be shown at the end of each line (per normal grammar rules). This is a function of the game engine, and the actual text is not modified. | ||
==Functions & Scripting Concepts Used== | ==Functions & Scripting Concepts Used== | ||
*[[fQuestDelayTime]] | *[[fQuestDelayTime]] | ||
*[[GameMode]] | *[[GameMode]] | ||
*[[GetButtonPressed]] | |||
*[[GetKeyPress]] | *[[GetKeyPress]] | ||
*[[GetNumKeysPressed]] | *[[GetNumKeysPressed]] | ||
*[[isKeyPressed2]] | *[[isKeyPressed2]] | ||
*[[ | *[[MenuMode]] | ||
*[[StopQuest]] | *[[StopQuest]] | ||
*[[ | *[[StrAppend]] | ||
*[[StrClear]] | |||
*[[StrClearLast]] | *[[StrClearLast]] | ||
*[[ | *[[StrDeleteAll]] | ||
*[[StrMessageBox]] | |||
*[[StrNew]] | *[[StrNew]] | ||
*[[ | *[[StrSet]] | ||
*[[StrSetName]] | *[[StrSetName]] | ||
Line 54: | Line 54: | ||
float fQuestDelayTime | float fQuestDelayTime | ||
short control | short control | ||
short button | |||
short console | |||
long key | long key | ||
long shift | long shift | ||
long name | |||
long prompt | |||
long clear | |||
long done | |||
begin menumode 1001 | |||
if ((isKeyPressed2 key) && (key != 42) && (key != 54)) | if ((isKeyPressed2 key) && (key != 42) && (key != 54)) | ||
return | return | ||
else | else | ||
set key to GetKeyPress 0 | set key to GetKeyPress 0 | ||
if (GetNumKeysPressed > 1) | if (GetNumKeysPressed > 1) | ||
set shift to GetKeyPress 1 | set shift to GetKeyPress 1 | ||
if ((key == 42) || (key == 54)) | if ((key == 42) || (key == 54)) | ||
set key to shift | set key to shift | ||
set shift to 1 | set shift to 1 | ||
elseif ((shift == 42) || (shift == 54)) | elseif ((shift == 42) || (shift == 54)) | ||
set shift to 1 | set shift to 1 | ||
else | else | ||
set shift to 0 | set shift to 0 | ||
endif | endif | ||
else | else | ||
set shift to 0 | set shift to 0 | ||
endif | endif | ||
endif | endif | ||
if ((key == 1) || (key == 42) || (key == 54) || (key > 57)) | |||
if (key == 1 || key == | ; | ||
elseif (key == 41) ; Open console | |||
elseif (key == | if (console) | ||
set | set console to 0 | ||
else | |||
set console to 1 | |||
endif | |||
elseif (console) | |||
; | |||
elseif (key == 14) ; Backspace | elseif (key == 14) ; Backspace | ||
StrClearLast name | StrClearLast name | ||
StrSet prompt "Name: " | |||
StrAppend prompt name | |||
StrMessageBox prompt clear done | |||
elseif (key) | elseif (key) | ||
StrAppendCharCode name key shift | StrAppendCharCode name key shift | ||
StrSet prompt "Name: " | |||
StrAppend prompt name | |||
StrMessageBox prompt clear done | |||
endif | endif | ||
end | end | ||
begin gamemode | |||
set fquestdelaytime to 0.01 | |||
== | |||
if (control) | |||
set button to getbuttonpressed | |||
if (button == 0) | |||
== | StrClear name | ||
StrSet prompt "Name:" | |||
StrMessageBox prompt clear done | |||
elseif (button == 1) | |||
StrSetName name item | |||
StrDeleteAll | |||
set control to 0 | |||
stopquest TextInput | |||
endif | |||
set | elseif (control == 0) | ||
set | set name to StrNew | ||
StrClear name | |||
set prompt to StrNew "Name:" | |||
set | set clear to StrNew "Clear All" | ||
set done to StrNew "Finish Input" | |||
StrMessageBox prompt clear done | |||
set control to 1 | |||
set | |||
endif | endif | ||
end | end | ||
Line 161: | Line 137: | ||
==Notes== | ==Notes== | ||
*The keys Enter, Tab, Alt, and Ctrl will add the text of their key name if pressed. | |||
*If you need to save the input string, you can use [http://www.tesnexus.com/downloads/file.php?id=15390 PlugStr] to save it in a [[:Category: Pluggy|Pluggy]] array. | *If you need to save the input string, you can use [http://www.tesnexus.com/downloads/file.php?id=15390 PlugStr] to save it in a [[:Category: Pluggy|Pluggy]] array. |