|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Wed May 25, 2011 2:15 pm
Equal Spacing |
I'm trying to make a custom scorecard for myself, but only for combat statistics.
The default scorecard on the MUD I play looks like this:
Code: |
Player Information for: Perrin Goldeneyes
Hours Played: 1,140 Age: 14 years (Born 9/14/1440)
Class Level: 60 Total Level: 180
Race: half-elf Gender: male
Class: priest Alignment: -744 (+demonic)
Hit Points: 1709/1709 Practices: 0
Spell Points: 1342/1342 Quest Points: 20,078 (458 quests, 464 failed)
Stamina: 1553/1553 Reputation: 100 (Saint)
Strength: 22/22 Vitality: 19/19
Knowledge: 18/19 Luck: 17/19
Wisdom: 21/21 Courage: 16/20
Agility: 22/22 Sanity: 20/20
Personality: 12/19
|
I cut off the unnecessary parts. Anyway, here's what I have now on mine:
Code: |
Combat Information for all sessions starting:
Defensive Statistics:
. Dodge:0 Acrobatics:0
. Shield Block:0 Parry:0
. Magical Fade:0
*You have used a proficiency-based defense 0 times and been hit 0 times, with a defense rate of 0%.
*You have evaded 0 attacks.
Offensive Statistics:
. Pierce:0 Bash:0
. Slash:0 Exotic:0
*You have landed 0 pierce attacks and missed 0 times with an accuracy of 0%.
*You have landed 0 bash attacks and missed 0 times with an accuracy of 0%.
*You have landed 0 slash attacks and missed 0 times with an accuracy of 0%.
*You have landed 0 exotic attacks and missed 0 times with an accuracy of 0%.
*You have landed 0 backstabs and missed with0 backstabs, with a success rate of 0%.
*You have landed 0 total attacks and missed a total of 0 times with an overall accuracy of 0%.
|
I'd like to be able to take the periods away, for one, that come before Dodge, Shield Block, Magical Fade, Pierce, and Slash while maintaining the spacing on them.
Also, I'd like Dodge and Acrobatics, Parry and Shield Block, Pierce and Bash, and Slash and Exotic to be equidistant from one another regardless of their values. Like the official/default MM scorecard has with the statistics. So regardless of whether Parry has a value of 10 and dodge has a value of 1000, I want them to be able to line up.
Is this possible? And if it is, how? :x
Btw, everything is a 0 because I haven't done that part yet. :D Don't need help with it, just the spacing issue. |
|
|
|
charneus Wizard
Joined: 19 Jun 2005 Posts: 1876 Location: California
|
Posted: Wed May 25, 2011 2:38 pm |
If the period is part of the captured element, you should be able to do a %replace with it and replace it with a space.
If it's something you add there to get the spacing you want, take a look at %format instead. You can format spaces before and after your strings. |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Wed May 25, 2011 3:03 pm |
It's something I put there for spacing, because just using spaces doesn't work. How would I use %format for that purpose? I'm rather dense.
Also, do you have any idea how to achieve the spacing I'm looking for with the others? Like, if you look at the first score card, the spacing between Hitpoints and Practices remains the same regardless of whether Hitpoints is 50/50(and thus 5 characters total) or 1700/1700(and 9 characters). For instance, "Practices" is always 32 spaces from the beginning of the line, no matter what's in frnt of it. Know what I mean? |
|
|
|
charneus Wizard
Joined: 19 Jun 2005 Posts: 1876 Location: California
|
Posted: Wed May 25, 2011 5:03 pm |
Well, to be honest, I should have mentioned %repeat first, since you can do %repeat(" ", 15) to start something 15 spaces in.
However, %format is very useful for setting it up like your score card. I'll give a brief tutorial on how to do it.
Let's say that your columns are 50 characters long, and you want all text to be left-justified. You would then use:
Code: |
%format("&-50s", "string of text you want here") |
What that will do is ensure that no matter how long the string of text is, the trailing spaces will keep the column width at 50. An example:
Code: |
#say {| %format("&-50s","This is a long string of text.")|}
#say {| %format("&-50s","This is an even longer string of text.")|} |
will return:
Code: |
| This is a long string of text. |
| This is an even longer string of text. | |
To get even more advanced (making things into two columns:
Code: |
#say {| %format("&-50s | &-50s","This would be the first column.","This would be the second column.")|} |
will return:
Code: |
| This would be the first column. | This would be the second column. | |
Play around with it, see what you can come up with. If you need more help, I'll try to help you out. |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Wed May 25, 2011 6:32 pm |
Did you mean to use code instead of quote? :x I think you might have and it took your spaces away. I'll try the formatting. repeat worked great to replace the periods, though. :) Thanks.
Edit: You fixed it. That's what happened when you don't reload a page for 2 hours. -_- |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Wed May 25, 2011 6:40 pm |
Code: |
Location Accuracy:
Head:3 Torso:48
Arms:0 Legs:3
Tail:9 Wings:0
*You are currently aiming for your opponents' torso.
|
^This is what it's looking like for me right now.
Code: |
Location Accuracy:
Head: 3 Torso: 48
Arms: 0 Legs: 3
Tail: 9 Wings: 0
*You are currently aiming for your opponents' torso.
|
^This is what I want it to look like. Notice how the columns line up and so do the numbers.
Code: |
#echo %repeat(" ",2)%ansi(bright,blue)Head:%ansi(white)@headhit %ansi(bright,blue)Torso:%ansi(white)@torsohit
#echo %repeat(" ",2)%ansi(bright,blue)Arms:%ansi(white)@armhit %ansi(bright,blue)Legs:%ansi(white)@leghit
#echo %repeat(" ",2)%ansi(bright,blue)Tail:%ansi(white)@tailhit %ansi(bright,blue)Wings:%ansi(white)@winghit
#echo %ansi(yellow)*%ansi(bright,blue)You are currently aiming for your opponents' %ansi(white)@comaim%ansi(bright,blue).
|
That's my current script.
I don't meeaaan to make you do it for me, but using %format, how would I achieve this?
Edit: Uhh, hold on. Might have it. Didn't even think about using a space.
Edit2: Nvm, I dunno wtf I'm doing. Lol. |
|
|
|
charneus Wizard
Joined: 19 Jun 2005 Posts: 1876 Location: California
|
Posted: Wed May 25, 2011 7:58 pm |
Code: |
#say {%repeat(" ",2)%format("&25s &25s",%concat(%ansi(bright, blue),"Head:", %ansi(white),%format("&5s",@headhit)),%concat(%ansi(bright, blue),"Torso:", %ansi(white),%format("&5s",@torsohit)))} |
That'll probably give you more what you want. You can mess around with the numerical aspects of it, but you will probably get the hang of it shortly. |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Wed May 25, 2011 10:11 pm |
That works great. I modified it a little though because the values for torsohit and all of those weren't showing up for some reason. Here's what I have:
Code: |
#echo {%format("&35s &35s",%concat(%ansi(bright, blue),"Head:", %ansi(white),%repeat(" ",5)@headhit),%concat(%ansi(bright, blue),"Torso:",%ansi(white),%repeat(" ",4)@torsohit))}
#echo {%format("&35s &34s",%concat(%ansi(bright, blue),"Arms:", %ansi(white),%repeat(" ",5)@armhit),%concat(%ansi(bright, blue),"Legs:",%ansi(white),%repeat(" ",4)@leghit))}
#echo {%format("&35s &34s",%concat(%ansi(bright, blue),"Tail:", %ansi(white),%repeat(" ",5)@tailhit),%concat(%ansi(bright, blue),"Wings:",%ansi(white),%repeat(" ",4)@winghit))}
|
The spacing is perfect with those settings, BUT. When one of them gorws to have another digit, the spacing is thrown off. Observe:
Code: |
Location Accuracy:
Head: 0 Torso: 0
Arms: 0 Legs: 0
Tail: 0 Wings: 0
*You are currently aiming for your opponents' torso.
|
Perfect, no? And now....
Code: |
Location Accuracy:
Head: 0 Torso: 14
Arms: 0 Legs: 0
Tail: 1 Wings: 1
*You are currently aiming for your opponents' torso.
|
Notice "Torso:" got bumped back one because the value went to the double digits. As you would logically assume, the same happens when you get into the 100's and 1000's. Any idea how I can fix that?
Edit: Maybe it has to do with needing to be left aligned? Seems like it should already be, though. >.> I'll check. If I can remember how.
Edit2: Once again, I have no idea wtf I'm doing. That didn't work at all.
Edit3: Ok. Changed it.
Script:
Code: |
#echo %ansi(bright,blue)Location Accuracy:
#echo {%repeat(" ",5)%format("&-35s &35s",%concat(%ansi(bright, blue),"Head:", %ansi(white),%repeat(" ",5)@headhit),%concat(%ansi(bright, blue),"Torso:",%ansi(white),%format("&6s",%concat(@torsohit))))}
#echo {%repeat(" ",5)%format("&-35s &35s",%concat(%ansi(bright, blue),"Arms:", %ansi(white),%repeat(" ",5)@armhit),%concat(%ansi(bright, blue),"Legs:",%ansi(white),%format("&6s",%concat(@leghit))))}
#echo {%repeat(" ",5)%format("&-35s &35s",%concat(%ansi(bright, blue),"Tail:", %ansi(white),%repeat(" ",5)@tailhit),%concat(%ansi(bright, blue),"Wings:",%ansi(white),%format("&6s",%concat(@winghit))))}
#echo %ansi(yellow)*%ansi(bright,blue)You are currently aiming for your opponents' %ansi(white)@comaim%ansi(bright,blue).
|
Which gets me:
Code: |
Location Accuracy:
Head: 0 Torso:
Arms: 0 Legs:
Tail: 1 Wings:
*You are currently aiming for your opponents' torso.
|
HOLY CRAP MORE EDIT:
Moved the final "%format" to the left of "%ansi(white)" and the numbers show up. Still not aligned where I want them, though. |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Thu May 26, 2011 12:01 am |
Ok. Here's my current script:
Code: |
#echo %ansi(bright,blue)Location Accuracy:
#echo {%repeat(" ",2)%format("&-35s &30s &-5s",%concat(%ansi(bright, blue),"Head:", %ansi(white),%repeat(" ",9)@headhit),%concat(%ansi(bright, blue),"Torso:"),%repeat(" ",3)%concat(%ansi(white),@torsohit))}
#echo {%repeat(" ",2)%format("&-35s &30s &-5s",%concat(%ansi(bright, blue),"Arms:", %ansi(white),%repeat(" ",9)@armhit),%concat(%ansi(bright, blue),"Legs:"),%repeat(" ",3)%concat(%ansi(white),@leghit))}
#echo {%repeat(" ",2)%format("&-35s &30s &-5s",%concat(%ansi(bright, blue),"Tail:", %ansi(white),%repeat(" ",9)@tailhit),%concat(%ansi(bright, blue),"Wings:"),%repeat(" ",3)%concat(%ansi(white),@winghit))}
#echo %ansi(yellow)*%ansi(bright,blue)You are aiming at your opponents' %ansi(white)@comaim%ansi(bright,blue).
|
That's working the best right now. The only problem at this point is the values of Head, Arms, and Tail. They're bumping Torso, Legs, and Wings one space to the right every extra digit.
Code: |
Location Accuracy:
Head: 0 Torso: 1000
Arms: 1000 Legs: 1000
Tail: 1000 Wings: 0
*You are aiming at your opponents' head.
|
You'll notice that Torso now stays where it should, but, as mentioned, Legs and Wings get bumped right by the values of Arms and Tail. I'd like that to not happen. :( |
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4690 Location: Pensacola, FL, USA
|
Posted: Thu May 26, 2011 5:58 am |
Have you tried using multiple format functions on the line instead of trying to concat it all to fit the one format string? it allows you to better fine tune the spacing of each section... also, MXP color might make it easier to read the code.
Code: |
#SAY {%repeat(" ",2)<color cadetblue>%format("&5s", "Head:")</color>%repeat(" ", 9)<color white>%format("&6.0n", @headHit)</color>} |
and so on |
|
_________________ Discord: Shalimarwildcat |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Thu May 26, 2011 5:16 pm |
I didn't use your code exactly, but it works great now. Thanks Shalimar and Charneus. :D Sorry for being a noob at this.
Next up: An even newbier question. |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Fri May 27, 2011 1:05 am |
Am I annoying you guys? I'm annoying myself quite badly.
Changed it up to simplify it and it's not very simple for me.
New script:
Code: |
#echo {%repeat(" ",2)%ansi(bright,blue)%format("&5s", "Head:")%repeat(" ",3)%ansi(white)%format("&10.0n",@headhit)%ansi(bright,blue)"("%ansi(white)%eval(@headhit*100/@weaphits)"%"%ansi(bright,blue)")"%ansi(bright,blue)%format("&18s", "Torso:")%repeat(" ",3)%ansi(white)%format("&10.0n",@torsohit)%ansi(bright,blue)"("%ansi(white)%eval(@torsohit*100/@weaphits)"%"%ansi(bright,blue)")"}
#echo {%repeat(" ",2)%ansi(bright,blue)%format("&5s", "Arms:")%repeat(" ",3)%ansi(white)%format("&10.0n",@armhit)%ansi(bright,blue)"("%ansi(white)%eval(@armhit*100/@weaphits)"%"%ansi(bright,blue)")"%ansi(bright,blue)%format("&18s", "Legs:")%repeat(" ",3)%ansi(white)%format("&10.0n",@leghit)%ansi(bright,blue)"("%ansi(white)%eval(@leghit*100/@weaphits)"%"%ansi(bright,blue)")"}
#echo {%repeat(" ",2)%ansi(bright,blue)%format("&5s", "Tail:")%repeat(" ",3)%ansi(white)%format("&10.0n",@tailhit)%ansi(bright,blue)"("%ansi(white)%eval(@tailhit*100/@weaphits)"%"%ansi(bright,blue)")"%ansi(bright,blue)%format("&18s", "Wings:")%repeat(" ",3)%ansi(white)%format("&10.0n",@winghit)%ansi(bright,blue)"("%ansi(white)%eval(@winghit*100/@weaphits)"%"%ansi(bright,blue)")"} |
Returns:
Code: |
Head: 2(16%) Torso: 10(83%)
Arms: 0(0%) Legs: 0(0%)
Tail: 0(0%) Wings: 0(0%)
|
The percentages increasing in digit count pushes the right column over. Same old problem. 'Cept I tried the earlier solution and tried t apply it to this issue and I failed. :( I feel dumb, but I can't help it. |
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4690 Location: Pensacola, FL, USA
|
Posted: Fri May 27, 2011 2:25 am |
are you sure all the variables have a value that is not 0?
0*100/x=0
also, you might want to use 100.0 to force it to do float math instead of integer math |
|
_________________ Discord: Shalimarwildcat |
|
|
|
charneus Wizard
Joined: 19 Jun 2005 Posts: 1876 Location: California
|
Posted: Fri May 27, 2011 10:05 am |
The reason why it's giving off-alignment columns is because you're padding "Torso" in the front. The padding of spaces begins at the position of the last character, so as the first column grows larger, the further to the right the second column will be.
The way to fix this is not use %format("&18s", "Torso:"), but instead, use the format off the %eval.
Code: |
%format("&-18s",%concat(%ansi(bright,blue),"(",%ansi(white),%eval(@headhit*100/@weaphits),"%",%ansi(bright,blue),")") |
The - sign says 'Put the x amount of spaces behind me, accounting for my length first.' If you change them all to that, then you'll find the second column always lines up perfectly. |
|
|
|
Nethran Novice
Joined: 25 Apr 2011 Posts: 32
|
Posted: Fri May 27, 2011 2:47 pm |
Woot. Took me a sec, but apparently I also wasn't spacing the percentages far enough from the values of the hit locations, so it wasn't allowing the formatting to work right. Trew in two extra spacs to allow for up to 100% and it's working perfect again. :) Thanks again, guys.
|
|
|
|
|
|
|
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
|
|