|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Mon May 30, 2011 4:56 pm
Variable In Script By Alias Command |
Hi again. :) Imma take over the first page of these forums eventually.
So I finished that script, and it's awesome and a bunch of people like it(I posted it on the MUD I play's main forums). I even got a thank you from the game's creator/owner, which is awesome.
Since people like it and all, I decided to make it better. Right now it displayes a whole slew of stats that it gathers over time. Now I'm making three of these displays so you can keep your main stats running and have like.. a micro-sampling or two of stats running beside it, in case you wanted to check/test something. And that's easy enough to handle. And I have 5 "copy" displays you can copy your stats to and keep them there/switch them back to your main(and updatable) display. You know, in case you wanted to stop gathering stats because you're switching characters, etc. and then switch them back because you got on the original character again.
The problem is the display itself. I'm running at 20+ variables per display, which is a lot but not *super* important(though I feel there may be a way to consolidate all the like variables), and each display is just.. a behemoth amount of script. Having 8 of them is.. beastly.
I was wondering if, say, for the copy displays, you could type 'copyview 1' or, as I have it now, 'copyview1' and have it show the only copy display coded(instead of me having to do all 5 individually with the specified variables) along with all the variables for copy displays ending in the number 1. Is there a way to use an alias to alter the variables displayed based on the command input without resorting to a rather large if statement for each instance of a variable in the script?
As a newbish side note, using spaces in alias names doesn't seem to be working for me unless the thing after the space is, in the script, %-1. Any way around that? I mean so I can use 'copyview 1' instead of 'copyview1'. |
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4690 Location: Pensacola, FL, USA
|
Posted: Mon May 30, 2011 7:37 pm |
you could use the argument you are passing to the alias (in this case '1') determine which section of code is copied with a #SWITCH command
Code: |
#SWITCH (%1)
(1) {copy this section}
(2) {copy that section}
{copy all sections} |
oh right... zMUD... not sure if #SWITCH exits for you, but the same think could be done with a series of #IF statements |
|
_________________ Discord: Shalimarwildcat |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Mon May 30, 2011 8:07 pm |
I don't think zMUD does support Switches. I was hoping to avoid the possibility of a series of ifs. Hmm. Even were I to use them, how would I get it to add the 1 or oher number to the end of the variable name? Like @kills1/@kills2/@kills3, etc.
|
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4690 Location: Pensacola, FL, USA
|
Posted: Mon May 30, 2011 8:33 pm |
@{kills1} works in CMUD, nos sure if it does in zMUD
If not maybe you can fool around with the below to get it to reference your variable
#LOOP 5 {#EXEC {#SAY %concat("@kill",%i)}} |
|
_________________ Discord: Shalimarwildcat |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Mon May 30, 2011 10:18 pm |
Awesome sauce. I'm using:
%exec(%concat(@,kills,%1)).
Works great. :)
So say in my script I have:
Code: |
#ALIAS {copyview}
{
#IF (%1=1 OR %1=2 OR %1=3 OR %1=4 OR %1=5)
{
#echo You have %exec(%concat(@,kills,%1)) kills.
}
{
#echo %ansi(bright,red)That Copy Info board does not exist.
}
}
|
Prollem is, though, that it's allowing me to type 'copyview' without a number after it and is still showing the script. Is there a way to adjust for if no %1 is being used in the command and display 'That Copy Info board does not exist.'? |
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4690 Location: Pensacola, FL, USA
|
Posted: Mon May 30, 2011 10:39 pm |
try this
#IF (%1>0 AND %1<6)
P.S. aliasname does not need to be in braces |
|
_________________ Discord: Shalimarwildcat |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Mon May 30, 2011 10:56 pm |
I had what you have first, but still copyview all by itself was allowing the script to work. If it works like that, then it will display the stats without applicable variables(all the variables have been canged to have numbers after them, so if there's no number in the alias command, then there will be no values for the stats displayed).
|
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Mon May 30, 2011 11:17 pm |
And another problem:
Code: |
%exec(%concat(@,copystats,%1,"."ckills,%1)) = @kills
|
I have an alias to do this, to test. Anyway, it's not working.
I've tried it without the @, and I've tried it with
Code: |
#VAR %exec(%concat(@,copystats,%1,"."ckills,%1)) {@kills}
|
None work.
I also have:
Code: |
#echo %exec(%concat(@,copystats,%1,"."ckills,%1))
|
And that works fine.
Any suggestions? |
|
|
|
DraxDrax Apprentice
Joined: 22 Mar 2009 Posts: 149
|
Posted: Mon May 30, 2011 11:22 pm |
Try using the #EXEC command instead of beginning the line with an %exec() function.
|
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Mon May 30, 2011 11:27 pm |
That, of course, worked. Thank you sir.
Still this, though:
Nethran wrote: |
I had what you have first, but still copyview all by itself was allowing the script to work. If it works like that, then it will display the stats without applicable variables(all the variables have been canged to have numbers after them, so if there's no number in the alias command, then there will be no values for the stats displayed). |
|
|
|
|
Taz GURU
Joined: 28 Sep 2000 Posts: 1395 Location: United Kingdom
|
Posted: Tue May 31, 2011 5:50 pm |
#if (%1=%null) {#say no go} {#say ya ya}
|
|
_________________ Taz :) |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Tue May 31, 2011 7:56 pm |
Ahh, sweet. Thanks, man.
|
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Wed Jun 08, 2011 10:36 pm |
Been tweaking some stuff. If I wanted %1 to default to 1 if it in fact is equal to %null... How would I do that? I have some code saying:
Code: |
#ALIAS cinfo {#IF (%1=%null) {%1=1};#IF (%1>0 AND %1<4) {combat info;#SAY %repeat(" ",2);#SAY %ansi(bright,blue)Combat Information for sessions starting: %ansi(white)%exec(%concat(@,comstats,%1,".",comtime));#SAY %ansi(bright,blue)Defensive Statistics:;#SAY %repeat(" ",2)%ansi(bright,blue)%format("&5s", "Dodge:")%repeat(" ",2)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",dodges)))%ansi(bright,blue)%format("&24s", "Acro:")%repeat(" ",3)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",acros)));#SAY %repeat(" ",2)%ansi(bright,blue)%format("&5s", "SBlock:")%repeat(" ",1)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",sblocks)))%ansi(bright,blue)%format("&24s", "Parry:")%repeat(" ",3)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",parries)));#SAY %repeat(" ",2)%ansi(bright,blue)%format("&5s", "MFade:")%repeat(" ",2)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",mfades)));#SAY %ansi(yellow)* %ansi(bright,blue)You are currently using %ansi(white)%exec(%concat(@,comstats,%1,".",comdefense)) %ansi(bright,blue)to defend yourself.;#SAY %ansi(yellow)* %ansi(bright,blue)You have used a proficiency-based defense %ansi(white)%exec(%concat(@,comstats,%1,".",totaldefs)) %ansi(bright,blue)times and have been hit %ansi(white)%exec(%concat(@,comstats,%1,".",hitstaken)) %ansi(bright,blue)times, with a defense rate of %ansi(white)%format("&.0n",%eval(%exec(%concat(@,comstats,%1,".",totaldefs))*100/(%exec(%concat(@,comstats,%1,".",totaldefs))+%exec(%concat(@,comstats,%1,".",hitstaken)))).%mod(%exec(%concat(%,comstats,%1,".",totaldefs))*1000/(%exec(%concat(@,comstats,%1,".",totaldefs))+%exec(%concat(@,comstats,%1,".",hitstaken))),10))"%"%ansi(bright,blue).;#SAY %ansi(yellow)* %ansi(bright,blue)Evade is %ansi(white)%exec(%concat(@,comstats,%1,".",isevade))%ansi(bright,blue) and you have evaded %ansi(white)%exec(%concat(@,comstats,%1,".",evades)) %ansi(bright,blue)attacks.;#SAY %ansi(bright,blue)Offensive Statistics:;#SAY %repeat(" ",2)%ansi(bright,blue)Damage Types Dealt:;#SAY %repeat(" ",2)%ansi(bright,blue)%format("&5s", "Pierce:")%repeat(" ",1)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",pierces)))%ansi(bright,blue)%format("&24s", "Bash:")%repeat(" ",3)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",bashes)));#SAY %repeat(" ",2)%ansi(bright,blue)%format("&5s", "Slash:")%repeat(" ",2)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",slashes)))%ansi(bright,blue)%format("&24s", "Exotic:")%repeat(" ",3)%ansi(white)%format("&10.0n", %exec(%concat(@,comstats,%1,".",exotics)));#SAY %repeat(" ",2)%ansi(bright,blue)Location Accuracy:;#SAY %repeat(" ",2)%ansi(bright,blue)%format("&5s", "Head:")%repeat(" ",3)%ansi(white)%format("&10.0n",%exec(%concat(@,comstats,%1,".",headhit)))%format("&36s",%concat(%ansi(bright,blue),"(",%ansi(white),%eval(%exec(%concat(@,comstats,%1,".",headhit))*100/%exec(%concat(@,comstats,%1,".",weaphits))),"%",%ansi(bright,blue),")"))%ansi(bright,blue)%format("&18s", "Torso:")%repeat(" ",3)%ansi(white)%format("&10.0n",%exec(%concat(@,comstats,%1,".",torsohit)))%format("&36s",%concat(%ansi(bright,blue),"(",%ansi(white),%eval(%exec(%concat(@,comstats,%1,".",torsohit))*100/%exec(%concat(@,comstats,%1,".",weaphits))),"%",%ansi(bright,blue),")"));#SAY %repeat(" ",2)%ansi(bright,blue)%format("&5s", "Arms:")%repeat(" ",3)%ansi(white)%format("&10.0n",%exec(%concat(@,comstats,%1,".",armhit)))%format("&36s",%concat(%ansi(bright,blue),"(",%ansi(white),%eval(%exec(%concat(@,comstats,%1,".",armhit))*100/%exec(%concat(@,comstats,%1,".",weaphits))),"%",%ansi(bright,blue),")"))%ansi(bright,blue)%format("&18s", "Legs:")%repeat(" ",3)%ansi(white)%format("&10.0n",%exec(%concat(@,comstats,%1,".",leghit)))%format("&36s",%concat(%ansi(bright,blue),"(",%ansi(white),%eval(%exec(%concat(@,comstats,%1,".",leghit))*100/%exec(%concat(@,comstats,%1,".",weaphits))),"%",%ansi(bright,blue),")"));#SAY %repeat(" ",2)%ansi(bright,blue)%format("&5s", "Tail:")%repeat(" ",3)%ansi(white)%format("&10.0n",%exec(%concat(@,comstats,%1,".",tailhit)))%format("&36s",%concat(%ansi(bright,blue),"(",%ansi(white),%eval(%exec(%concat(@,comstats,%1,".",tailhit))*100/%exec(%concat(@,comstats,%1,".",weaphits))),"%",%ansi(bright,blue),")"))%ansi(bright,blue)%format("&18s", "Wings:")%repeat(" ",3)%ansi(white)%format("&10.0n",%exec(%concat(@,comstats,%1,".",winghit)))%format("&36s",%concat(%ansi(bright,blue),"(",%ansi(white),%eval(%exec(%concat(@,comstats,%1,".",winghit))*100/%exec(%concat(@,comstats,%1,".",weaphits))),"%",%ansi(bright,blue),")"));#SAY %ansi(yellow)* %ansi(bright,blue)You are currently aiming for your opponents' %ansi(white)%exec(%concat(@,comstats,%1,".",comaim))%ansi(bright,blue).;#SAY %ansi(yellow)* %ansi(bright,blue)You have killed %ansi(white)%exec(%concat(@,comstats,%1,".",perskills)) %ansi(bright,blue)creatures have been involved in %ansi(white)%exec(%concat(@,comstats,%1,".",kills)) %ansi(bright,blue)total kills with a last-hit rate of %ansi(white)%format("&.0n",%eval(%exec(%concat(@,comstats,%1,".",perskills))*100/%exec(%concat(@,comstats,%1,".",kills))).%mod(%exec(%concat(%,comstats,%1,".",perskills))*1000/%exec(%concat(@,comstats,%1,".",kills)),10))"%"%ansi(bright,blue).;#SAY %ansi(yellow)* %ansi(bright,blue)You have landed %ansi(white)%exec(%concat(@,comstats,%1,".",weaphits)) %ansi(bright,blue)total attacks and missed a total of %ansi(white)%exec(%concat(@,comstats,%1,".",weapmisses)) %ansi(bright,blue)times with an overall accuracy of %ansi(white)%format("&.0n",%eval(%exec(%concat(@,comstats,%1,".",weaphits))*100/(%exec(%concat(@,comstats,%1,".",weapmisses))+%exec(%concat(@,comstats,%1,".",weaphits)))).%mod(%exec(%concat(%,comstats,%1,".",weaphits))*1000/(%exec(%concat(@,comstats,%1,".",weapmisses))+%exec(%concat(@,comstats,%1,".",weaphits))),10))"%"%ansi(bright,blue).;#SAY %ansi(yellow)* %ansi(bright,blue)You have landed %ansi(white)%exec(%concat(@,comstats,%1,".",backstabs)) %ansi(bright,blue)backstabs and missed with %ansi(white)%exec(%concat(@,comstats,%1,".",backstabmiss)) %ansi(bright,blue)backstabs, with a success rate of %ansi(white)%format("&.0n",%eval(%exec(%concat(@,comstats,%1,".",backstabs))*100/(%exec(%concat(@,comstats,%1,".",backstabmiss))+%exec(%concat(@,comstats,%1,".",backstabs)))).%mod(%exec(%concat(%,comstats,%1,".",backstabs))*1000/(%exec(%concat(@,comstats,%1,".",backstabmiss))+%exec(%concat(@,comstats,%1,".",backstabs))),10))"%"%ansi(bright,blue).;#SAY %ansi(yellow)* %ansi(bright,blue)You have landed %ansi(white)%exec(%concat(@,comstats,%1,".",bashhit)) %ansi(bright,blue)bashes and missed with %ansi(white)%exec(%concat(@,comstats,%1,".",bashmiss)) %ansi(bright,blue)bashes, with a success rate of %ansi(white)%format("&.0n",%eval(%exec(%concat(@,comstats,%1,".",bashhit))*100/(%exec(%concat(@,comstats,%1,".",bashhit))+%exec(%concat(@,comstats,%1,".",bashmiss)))).%mod(%exec(%concat(%,comstats,%1,".",bashhit))*1000/(%exec(%concat(@,comstats,%1,".",bashmiss))+%exec(%concat(@,comstats,%1,".",bashhit))),10))"%"%ansi(bright,blue).;#SAY %ansi(yellow)* %ansi(bright,blue)You have landed %ansi(white)%exec(%concat(@,comstats,%1,".",kickhit)) %ansi(bright,blue)kicks and missed with %ansi(white)%exec(%concat(@,comstats,%1,".",kickmiss)) %ansi(bright,blue)kicks, with a success rate of %ansi(white)%format("&.0n",%eval(%exec(%concat(@,comstats,%1,".",kickhit))*100/(%exec(%concat(@,comstats,%1,".",kickhit))+%exec(%concat(@,comstats,%1,".",kickmiss)))).%mod(%exec(%concat(%,comstats,%1,".",weaphits))*1000/(%exec(%concat(@,comstats,%1,".",weapmisses))+%exec(%concat(@,comstats,%1,".",weaphits))),10))"%"%ansi(bright,blue).;#SAY %ansi(yellow)* %ansi(bright,blue)Your combat mode is set to %ansi(white)%exec(%concat(@,comstats,%1,".",commode))%ansi(bright,blue).;#SAY %ansi(yellow)* %ansi(bright,blue)You are %ansi(white)%exec(%concat(@,comstats,%1,".",handed))%ansi(bright,blue)-handed.;#SAY %ansi(yellow)* %ansi(bright,red)You are viewing Combat Info board %ansi(white)%1%ansi(bright,red).;#SAY {%ansi(yellow)* %ansi(bright,red)To view additional commands, type '%ansi(white)ccom%ansi(bright,red)'.}} {#SAY %repeat(" ",2);#SAY %ansi(bright,red)That Combat Info board does not exist. Please specify 1, 2, or 3.;#EXEC " "} {#SAY %repeat(" ",2);#SAY %ansi(bright,red)That Combat Info board does not exist. Please specify 1, 2, or 3.;#EXEC " "}}
|
I know that's a big-ass block of code. What's important about it is that:
A: The value of %1 is paramount. Equalling nothing is not an option, and I'd like to be able to type cinfo all by itself to activate cinfo 1 and the variables that would match with %1 being equal to 1.
B: The if statement trying to establish a value for %1 at the very beginning of the script doesn't work.
Is this possible? |
|
|
|
DraxDrax Apprentice
Joined: 22 Mar 2009 Posts: 149
|
Posted: Thu Jun 09, 2011 12:50 am |
%1 can't be defined within the alias. Its value has to be passed to the alias. The simplest fix for this code would be to use two aliases, such that the first alias is calling the second.
To accomplish that, change your current 'cinfo' alias to instead be called 'do_cinfo' and then make a new cinfo alias like so:
Code: |
#ALIAS cinfo {#IF %null(%1) {do_cinfo 1} {do_cinfo %1}} |
With that, you should be able to use the cinfo alias and have it behave as desired. There are tidier ways to accomplish the same thing, but I think this solution will require the fewest changes to your code. |
|
|
|
Taz GURU
Joined: 28 Sep 2000 Posts: 1395 Location: United Kingdom
|
Posted: Thu Jun 09, 2011 1:50 pm |
Alternatively change this part #IF (%1=%null) {%1=1};#IF (%1>0 AND %1<4)
to
#IF (%1=%null) {cinum=1} {cinum=%1};#IF (@cinum>0 AND @cinum<4)
that way you don't need an extra calling alias.
Feel free to also change (%1=%null) to %null(%1) they're the same but some people would say the second is more correct from a programming point of view. |
|
_________________ Taz :) |
|
|
|
DraxDrax Apprentice
Joined: 22 Mar 2009 Posts: 149
|
Posted: Thu Jun 09, 2011 2:39 pm |
Nethran references %1 in a few dozen places throughout that alias, Taz, not just the #IF in the first line. For your solution to work, all those instances of %1 would need to be replaced with @cinum.
|
|
|
|
Taz GURU
Joined: 28 Sep 2000 Posts: 1395 Location: United Kingdom
|
Posted: Thu Jun 09, 2011 7:35 pm |
*slaps wrists* I really should have read past the first little bit of the alias.
Nethran unless you really, really only want the one alias I suggest using DraxDrax's approach, otherwise search and replace %1 with @cinum except for those first two instances. |
|
_________________ Taz :) |
|
|
|
Daern Sorcerer
Joined: 15 Apr 2011 Posts: 809
|
Posted: Sun Jun 12, 2011 12:47 am |
I think the easiest way would actually be to make the alias call itself, similar to DraxDrax's solution but not requiring a second alias. It would look something like this:
Code: |
#ALIAS cinfo {#IF %null(%1) {cinfo 1} {the rest of your code here}} |
This way you only need to make one small change to the first line of your alias. |
|
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|