| www.ClassicTW.com https://mail.black-squirrel.com/ |
|
| GetVar from QuickStats https://mail.black-squirrel.com/viewtopic.php?f=15&t=20231 |
Page 1 of 2 |
| Author: | NjoY [ Sun Jan 13, 2008 2:58 pm ] |
| Post subject: | GetVar from QuickStats |
I'm a bit stuck.... I've been trying to take a value (Number of holds) from the QuickStats. But i'm not having much luck. I've looked through loads of scripts but that just confused me more... Is it formatted differently than "normal" or i thought i could be picking up some ansi code as well?? I can get the number of holds after sending "I" np but not the QuickStats. Thanx in advance. NjoY |
|
| Author: | Promethius [ Sun Jan 13, 2008 4:14 pm ] |
| Post subject: | Re: GetVar from QuickStats |
There was a bit of a scripting challenge on this subject: http://www.classictw.com/viewtopic.php?f=15&t=19424&hilit=quickstats The quickstats line poses problems for various reasons - info showing up on different lines due to length of line changes (ship assets, experience and alignment may cause this), and not having a consistent ending text being two of them. If I remember correctly you may also have some information not show because your ship doesn't have that particular item - could be wrong on this part as it has been a while since I worked with quickstats - I have something that works and I'm not messing with it I think Singularity has worked with this a lot and may be able to shed more light for you and/or correct what I think are the problems. |
|
| Author: | Singularity [ Sun Jan 13, 2008 4:48 pm ] |
| Post subject: | Re: GetVar from QuickStats |
Yah, mostly it's just PHOT and CORP that don't appear if photons are disabled or you aren't on a corp. Check that thread out. |
|
| Author: | LoneStar [ Sun Jan 13, 2008 6:37 pm ] |
| Post subject: | Re: GetVar from QuickStats |
You can try: Code: send "/" waitfor (#179 & "Hlds") getText CURRENTLINE $TOTAL_HOLDS (#179 & "Hlds") #179 stripText $TOTAL_HOLDS " " if that's all your wanting to get from the qss I would strongly suggest using MindDagger's variation on Sing's QuikStats routine. I use it in all my scripts |
|
| Author: | Zarkahn [ Mon Jan 14, 2008 8:14 am ] |
| Post subject: | Re: GetVar from QuickStats |
personally, I use one of Sing's in most my scripts... Keeps all the vars the same script to script. Its not the one they were playing with for shorter code, but I was already using it and it works fine no need to change it... I just call it as a gosub and added a return to the end of it. I won't post it though, because its not my code to post. |
|
| Author: | Singularity [ Mon Jan 14, 2008 9:15 am ] |
| Post subject: | Re: GetVar from QuickStats |
If it's the one in my scripts, it's public domain and can be found on my sigsite. |
|
| Author: | LoneStar [ Mon Jan 14, 2008 12:44 pm ] |
| Post subject: | Re: GetVar from QuickStats |
Mind Dagger posted his a while back: viewtopic.php?f=15&t=18338&p=161745&hilit=quikstat#p161745 Here it is again (as posted by MD), in case the link above doesn't work: Code: #Author: Mind Dagger #Gets player stats from the hitting the / key. Also grabs the current prompt that you are at. #The only prompt this will stall on is in the middle of chatting #gotStats routine by Dynarri/Singularity # ============================ START QUIKSTAT VARIABLES ========================== setVar $CURRENT_PROMPT "Undefined" setVar $PSYCHIC_PROBE "NO" setVar $PLANET_SCANNER "NO" setVar $SCAN_TYPE "NONE" setVar $CURRENT_SECTOR 0 setVar $TURNS 0 setVar $CREDITS 0 setVar $FIGHTERS 0 setVar $SHIELDS 0 setVar $TOTAL_HOLDS 0 setVar $ORE_HOLDS 0 setVar $ORGANIC_HOLDS 0 setVar $EQUIPMENT_HOLDS 0 setVar $COLONIST_HOLDS 0 setVar $PHOTONS 0 setVar $ARMIDS 0 setVar $LIMPETS 0 setVar $GENESIS 0 setVar $TWARP_TYPE 0 setVar $CLOAKS 0 setVar $BEACONS 0 setVar $ATOMIC 0 setVar $CORBO 0 setVar $EPROBES 0 setVar $MINE_DISRUPTORS 0 setVar $ALIGNMENT 0 setVar $EXPERIENCE 0 setVar $CORP 0 setVar $SHIP_NUMBER 0 setVar $TURNS_PER_WARP 0 setVar $COMMAND_PROMPT "Command" setVar $COMPUTER_PROMPT "Computer" setVar $CITADEL_PROMPT "Citadel" setVar $PLANET_PROMPT "Planet" setVar $CORPORATE_PROMPT "Corporate" setVar $STARDOCK_PROMPT "<Stardock>" setVar $HARDWARE_PROMPT "<Hardware" setVar $SHIPYARD_PROMPT "<Shipyard>" setVar $TERRA_PROMPT "Terra" # ============================ END QUIKSTAT VARIABLES ========================== :quikstats setVar $CURRENT_PROMPT "Undefined" killtrigger noprompt killtrigger prompt1 killtrigger prompt2 killtrigger prompt3 killtrigger prompt4 killtrigger statlinetrig killtrigger getLine2 setTextTrigger prompt1 :primaryPrompts "(?=" setTextLineTrigger prompt2 :secondaryPrompts "(?)" setTextLineTrigger statlinetrig :statStart #179 setTextTrigger prompt3 :terraPrompts "Do you wish to (L)eave or (T)ake Colonists?" setTextTrigger prompt4 :terraPrompts "How many groups of Colonists do you want to take (" send "^Q/" pause :PrimaryPrompts getWord currentansiline $checkPrompt 1 getWord currentline $tempPrompt 1 getWordPos $checkPrompt $pos #27&"[35m" if ($pos > 0) setVar $CURRENT_PROMPT $tempPrompt end setTextLineTrigger prompt1 :PrimaryPrompts "(?=" pause :secondaryPrompts getWord currentansiline $checkPrompt 1 getWord currentline $tempPrompt 1 getWordPos $checkPrompt $pos #27&"[35m" if ($pos > 0) setVar $CURRENT_PROMPT $tempPrompt end setTextLineTrigger prompt2 :secondaryPrompts "(?)" pause :terraPrompts killtrigger prompt3 killtrigger prompt4 getWord currentansiline $checkPrompt 1 getWordPos $checkPrompt $pos #27&"[35m" if ($pos > 0) setVar $CURRENT_PROMPT "Terra" end setTextTrigger prompt3 :terraPrompts "Do you wish to (L)eave or (T)ake Colonists?" setTextTrigger prompt4 :terraPrompts "How many groups of Colonists do you want to take (" pause :statStart killtrigger prompt1 killtrigger prompt2 killtrigger prompt3 killtrigger prompt4 killtrigger noprompt setVar $stats "" setVar $wordy "" :statsline killtrigger statlinetrig killtrigger getLine2 setVar $line2 CURRENTLINE replacetext $line2 #179 " " striptext $line2 "," setVar $stats $stats & $line2 getWordPos $line2 $pos "Ship" if ($pos > 0) goto :gotStats else setTextLineTrigger getLine2 :statsline pause end :gotStats setVar $stats $stats & " @@@" setVar $current_word 0 while ($wordy <> "@@@") if ($wordy = "Sect") getWord $stats $CURRENT_SECTOR ($current_word + 1) elseif ($wordy = "Turns") getWord $stats $TURNS ($current_word + 1) elseif ($wordy = "Creds") getWord $stats $CREDITS ($current_word + 1) elseif ($wordy = "Figs") getWord $stats $FIGHTERS ($current_word + 1) elseif ($wordy = "Shlds") getWord $stats $SHIELDS ($current_word + 1) elseif ($wordy = "Hlds") getWord $stats $TOTAL_HOLDS ($current_word + 1) elseif ($wordy = "Ore") getWord $stats $ORE_HOLDS ($current_word + 1) elseif ($wordy = "Org") getWord $stats $ORGANIC_HOLDS ($current_word + 1) elseif ($wordy = "Equ") getWord $stats $EQUIPMENT_HOLDS ($current_word + 1) elseif ($wordy = "Col") getWord $stats $COLONIST_HOLDS ($current_word + 1) elseif ($wordy = "Phot") getWord $stats $PHOTONS ($current_word + 1) elseif ($wordy = "Armd") getWord $stats $ARMIDS ($current_word + 1) elseif ($wordy = "Lmpt") getWord $stats $LIMPETS ($current_word + 1) elseif ($wordy = "GTorp") getWord $stats $GENESIS ($current_word + 1) elseif ($wordy = "TWarp") getWord $stats $TWARP_TYPE ($current_word + 1) elseif ($wordy = "Clks") getWord $stats $CLOAKS ($current_word + 1) elseif ($wordy = "Beacns") getWord $stats $BEACONS ($current_word + 1) elseif ($wordy = "AtmDt") getWord $stats $ATOMIC ($current_word + 1) elseif ($wordy = "Corbo") getWord $stats $CORBO ($current_word + 1) elseif ($wordy = "EPrb") getWord $stats $EPROBES ($current_word + 1) elseif ($wordy = "MDis") getWord $stats $MINE_DISRUPTORS ($current_word + 1) elseif ($wordy = "PsPrb") getWord $stats $PSYCHIC_PROBE ($current_word + 1) elseif ($wordy = "PlScn") getWord $stats $PLANET_SCANNER ($current_word + 1) elseif ($wordy = "LRS") getWord $stats $SCAN_TYPE ($current_word + 1) elseif ($wordy = "Aln") getWord $stats $ALIGNMENT ($current_word + 1) elseif ($wordy = "Exp") getWord $stats $EXPERIENCE ($current_word + 1) elseif ($wordy = "Corp") getWord $stats $CORP ($current_word + 1) elseif ($wordy = "Ship") getWord $stats $SHIP_NUMBER ($current_word + 1) end add $current_word 1 getWord $stats $wordy $current_word end :DoneQuikstats killtrigger prompt1 killtrigger prompt2 killtrigger prompt3 killtrigger prompt4 killtrigger statlinetrig killtrigger getLine2 return # ============================== END QUICKSTATS SUB============================== Edited to remove those pesky '&nps;' thingys |
|
| Author: | ElderProphet [ Mon Jan 14, 2008 1:06 pm ] |
| Post subject: | Re: GetVar from QuickStats |
Wow, that was my favorite thread of all time. An 11 line quickstat... who'd have thunk it? So why would you recommend that 200 line routine above? +EP+ |
|
| Author: | LoneStar [ Mon Jan 14, 2008 1:22 pm ] |
| Post subject: | Re: GetVar from QuickStats |
It handles prompts, and assigns Common variable names to quickstat results. If I had to choose between: if ($somearray[$i] <> "..whatever") ... & ... if ($CURRENT_PROMPT <> "..whatever") I'd choose the latter; alot easier to rememeber than indicies in an array; imho. In terms of Speed, if I need a current-sector, or some other snippet of qss, I try not to use a quikstat routine anyways (something like what I originally suggested at the top of this thread. Disclaimer: These are the opinions of a weekend warrior 'scripter'. Handle with care |
|
| Author: | Mind Dagger [ Mon Jan 14, 2008 1:37 pm ] |
| Post subject: | Re: GetVar from QuickStats |
Here is the newest version I have, that grabs the current prompt with the built in way Lonestar found in the old twgs documentation. I like it better, but the old prompt code does have the advantage that it works in older twgs games (like ones in BBS's or so I hear) The advantage is it handles all prompts instead of needing to check which one it is like the older one: Code: #This is essentially Sing's code with the added prompt put in :quikstats setVar $CURRENT_PROMPT "Undefined" killtrigger noprompt killtrigger prompt killtrigger statlinetrig killtrigger getLine2 setTextLineTrigger prompt :allPrompts #145 & #8 setTextLineTrigger statlinetrig :statStart #179 send #145&"/" pause :allPrompts getWord CURRENTLINE $CURRENT_PROMPT 1 "Undefined" stripText $CURRENT_PROMPT #145 stripText $CURRENT_PROMPT #8 setTextLineTrigger prompt :allPrompts #145 & #8 pause :statStart killtrigger prompt setVar $stats "" setVar $wordy "" :statsline killtrigger statlinetrig killtrigger getLine2 setVar $line2 CURRENTLINE replacetext $line2 #179 " " striptext $line2 "," setVar $stats $stats & $line2 getWordPos $line2 $pos "Ship" if ($pos > 0) goto :gotStats else setTextLineTrigger getLine2 :statsline pause end :gotStats setVar $stats $stats & " @@@" setVar $current_word 0 while ($wordy <> "@@@") if ($wordy = "Sect") getWord $stats $CURRENT_SECTOR ($current_word + 1) elseif ($wordy = "Turns") getWord $stats $TURNS ($current_word + 1) elseif ($wordy = "Creds") getWord $stats $CREDITS ($current_word + 1) elseif ($wordy = "Figs") getWord $stats $FIGHTERS ($current_word + 1) elseif ($wordy = "Shlds") getWord $stats $SHIELDS ($current_word + 1) elseif ($wordy = "Hlds") getWord $stats $TOTAL_HOLDS ($current_word + 1) elseif ($wordy = "Ore") getWord $stats $ORE_HOLDS ($current_word + 1) elseif ($wordy = "Org") getWord $stats $ORGANIC_HOLDS ($current_word + 1) elseif ($wordy = "Equ") getWord $stats $EQUIPMENT_HOLDS ($current_word + 1) elseif ($wordy = "Col") getWord $stats $COLONIST_HOLDS ($current_word + 1) elseif ($wordy = "Phot") getWord $stats $PHOTONS ($current_word + 1) elseif ($wordy = "Armd") getWord $stats $ARMIDS ($current_word + 1) elseif ($wordy = "Lmpt") getWord $stats $LIMPETS ($current_word + 1) elseif ($wordy = "GTorp") getWord $stats $GENESIS ($current_word + 1) elseif ($wordy = "TWarp") getWord $stats $TWARP_TYPE ($current_word + 1) elseif ($wordy = "Clks") getWord $stats $CLOAKS ($current_word + 1) elseif ($wordy = "Beacns") getWord $stats $BEACONS ($current_word + 1) elseif ($wordy = "AtmDt") getWord $stats $ATOMIC ($current_word + 1) elseif ($wordy = "Corbo") getWord $stats $CORBO ($current_word + 1) elseif ($wordy = "EPrb") getWord $stats $EPROBES ($current_word + 1) elseif ($wordy = "MDis") getWord $stats $MINE_DISRUPTORS ($current_word + 1) elseif ($wordy = "PsPrb") getWord $stats $PSYCHIC_PROBE ($current_word + 1) elseif ($wordy = "PlScn") getWord $stats $PLANET_SCANNER ($current_word + 1) elseif ($wordy = "LRS") getWord $stats $SCAN_TYPE ($current_word + 1) elseif ($wordy = "Aln") getWord $stats $ALIGNMENT ($current_word + 1) elseif ($wordy = "Exp") getWord $stats $EXPERIENCE ($current_word + 1) elseif ($wordy = "Corp") getWord $stats $CORP ($current_word + 1) elseif ($wordy = "Ship") getWord $stats $SHIP_NUMBER ($current_word + 1) end add $current_word 1 getWord $stats $wordy $current_word end :doneQuikstats killtrigger statlinetrig killtrigger getLine2 return I also do not enjoy grabbing stats from an array. I like to have the variables be clear and consistent in the code. Using strings to access the array would be another way to handle it, but I wanted the array to be static. I used to use global variables like: setVar $CURRENT_SECTOR 1 setVar $ARMID_MINES 2 etc.. And then call the stats like: $quikstats[$CURRENT_SECTOR] But I ended up just putting them in their own variables for simplicity's sake. I suppose it's all just a matter of taste. Oh, that quikstats routine thread was the best time I have ever had on this forum. Was great fun. MD |
|
| Author: | LoneStar [ Mon Jan 14, 2008 3:14 pm ] |
| Post subject: | Re: GetVar from QuickStats |
Mind Dagger wrote: Here is the newest version I have, that grabs the current prompt with the built in way Lonestar found in the old twgs documentation. I like it better, but the old prompt code does have the advantage that it works in older twgs games (like ones in BBS's or so I hear) Ack! ...you took out the Terra Prompt Check. |
|
| Author: | Mind Dagger [ Mon Jan 14, 2008 6:05 pm ] |
| Post subject: | Re: GetVar from QuickStats |
LoneStar wrote: Ack! ...you took out the Terra Prompt Check. Well currently I check for "How" or "Do" for the Terra prompts. It's not perfect, but it's worked for me so far. Just for additional fun, here's the subroutine I made for the bot that checks if you are in the correct prompt. This is for the mow command: Code: gosub :quikstats setVar $validPrompts "Command <Underground> Do How Corporate Citadel Planet Computer <StarDock> <FedPolice> <Tavern> <Libram <Galactic <Hardware <Shipyards>" gosub :checkStartingPrompt :checkStartingPrompt setVar $startingLocation $CURRENT_PROMPT getWordPos " "&$validPrompts&" " $pos $startingLocation if ($pos <= 0) setVar $message "Invalid starting prompt: ["&$CURRENT_PROMPT&"]. Valid prompt(s) for this command: ["&$validPrompts&"]*" echo $message halt end return MD |
|
| Author: | NjoY [ Tue Jan 15, 2008 1:37 pm ] |
| Post subject: | Re: GetVar from QuickStats |
LoneStar wrote: You can try: Code: send "/" waitfor (#179 & "Hlds") getText CURRENTLINE $TOTAL_HOLDS (#179 & "Hlds") #179 stripText $TOTAL_HOLDS " " if that's all your wanting to get from the qss I would strongly suggest using MindDagger's variation on Sing's QuikStats routine. I use it in all my scripts Many thanx LS for the code. To be honest, i never used the code, i went for your suggestion about using MD's and Sings Quickstats Subroutine. Its awesome... then i upgraded to Md's newest version. Thanx MD. Thanks guys!! I came looking for help with a few lines of code and ended up learning a lot more. The "challenge" link was a good read. I enjoyed that thread. As for array's and pointers.... They make my brain hurt.... I prefer the simple things in life like women... and variables lol Take care ya'll and thanx again. |
|
| Author: | Zarkahn [ Tue Jan 15, 2008 8:37 pm ] |
| Post subject: | Re: GetVar from QuickStats |
so EP enlighten us too lazy to look for it, what was the shortest lines for a quickstats rotinue? I thought ya'll had one down to under 20 lines? |
|
| Author: | ElderProphet [ Tue Jan 15, 2008 8:45 pm ] |
| Post subject: | Re: GetVar from QuickStats |
1255. That is how many ifs the :gotStats routine in that revised code (no pun Res) has to execute w/ Corp and Phot present. You say you hate arrays, and I respect that. But they are efficient. Does it take TWX long to iterate over 1161 or 1255 if comparisons for a quickstat routine? No. But I don't think that is any reason not to write efficient code. With 2 or 3 minor changes, you can cut it down to 28 iterations, maintaining the exact same results, without arrays. Do you see why this is, and what the minor changes should be? +EP+ (P.S. Nice trigger-driven code at the beginning. |
|
| Page 1 of 2 | All times are UTC - 5 hours |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|