PDA

View Full Version : Make public class distribution?


stormlord
03-29-2010, 07:04 AM
I thought about making this a poll but decided against it since I already made a poll and don't want to saturate the use of it. That and this is something that would have to be moderated or sanctioned probably, in my estimation. The point of the question I'm asking is, do you think that publicly making available the popularity of certain classes in comparison to others might help to fill in holes so people can form solid groups?

For example, what if there're not enough people playing clerics? Or warriors? Or dps? Should we as players know that so we can make an educated choice about which alt to actively play at any given point?

What I'm thinking of is a list of all classes with a % of the population next to each one, and a preferred % attached to it to represent the optimal % for solid groups across the server as a whole. This could further be organized by level: 1-10, 11-20, 21-30, 31-40, 41-50. There could also be an activity field added which would represent the % of people in that level range that're actively playing.

---------Overall: Current %/Active %/Optimal % | Lvl 1-10: Current %/Active %/Optimal % ......
Cleric..............................[x]/[x]/[x]............................................[x]/[x]/[x]
Ranger............................[x]/[x]/[x]............................................[x]/[x]/[x]
Druid......
Wizard......
......

This is of course not classic. It's just something I was wondering about. For example, lets say you got a level 26 cleric that you rarely play. You go to the website and see that there's a shortage of active clerics 21-30 and 31-40. Using this knowledge, you decide to play the cleric after all.

Or do you think this is too much information? Or not relevant? Remind you of population control? Should we control it by default, or only control it in certain circumstances, or just let nature do its job?

Thanks in advance.

Audacious93c
03-30-2010, 01:59 AM
Druid 40%
Magi 25%
Necro 25%
Ranger .01%
Paladin .01%
All others :p

Hasbinbad
03-30-2010, 10:32 AM
I see something like this being welcomed in a WoW community.

Murferoo
03-30-2010, 11:47 AM
You're trying to describe this:

See Aion: http://na.aiononline.com/livestatus/server/

FatMagic
03-30-2010, 11:48 AM
I think this would be a pretty cool idea - but not sure how the community would receive it. In light of keeping everything classic, this probably wouldn't fly. But you never know... Great idea though!

And as to my opinion on Class Distribution... tanks are needed. I've been monk tanking all week (which isn't bad with a cleric by your side). And I have yet to group with a warrior (they are more rare than a Ranger, which I've grouped with!)!

karsten
03-30-2010, 03:03 PM
i wouldn't think anyone would try to keep this secret -- it just seems like a pita to compile all the data

Ferok
03-30-2010, 03:17 PM
i wouldn't think anyone would try to keep this secret -- it just seems like a pita to compile all the data

select class, count(distinct player) from players group by class

Rabkorik
03-30-2010, 03:24 PM
select class, count(distinct player) from players group by class

This is a very complex sql statement!

karsten
03-30-2010, 03:30 PM
so, it'd be easy to do? wouldn't it be skewed data though due to peoples' playtimes not being represented, just character levels? also, wouldn't the data be skewed towards level 1s? if good data were easy to get i'd say let's go for it

Ferok
03-30-2010, 03:44 PM
so, it'd be easy to do? wouldn't it be skewed data though due to peoples' playtimes not being represented, just character levels? also, wouldn't the data be skewed towards level 1s? if good data were easy to get i'd say let's go for it

That's the rub.

You could certainly do something like the following:
select class, count(distinct player) from players where level > 5 group by class

Furthermore, you could (I assume) filter based on last login:
select p.class, count(distinct p.player)
from players p
left outer join accounts a on p.account_id == a.account_id
where p.level > 5 and now() < adddate(a.last_login, interval 7 day)
group by p.class

which would give you (minus some syntax and obviously the fact that I'm taking a shot in the dark at the schema) players over level 5 whose accounts have been active in the past week.

This is all based on data I would expect to be available. There's probably a better way of representing someone's "activity" level, but without knowing the schema it's pretty hard to speculate on.

Cilraaz
03-30-2010, 04:15 PM
Assuming that P99's character table isn't much different from the default PEQ character table, the SQL would just be something like:

SELECT class, count(distinct id) FROM character_ WHERE timelaston > (UNIX_TIMESTAMP() - 604800) AND level > '5' GROUP BY class;

Replace 5 with whatever level you want to check for. That will check for individual characters (not accounts) that have been logged on in the past 7 days, so it would eliminate some mules and unplayed alts from the list. You could even use this to show representation within brackets (ie. "level > '5 AND level < '11'" would give you the 5-10 bracket, etc).

Edit:

Assuming that it wouldn't put too much strain on the SQL server, you could create a PHP script that would display the different brackets. You'd just need to decide what brackets you wanted it chopped by, but it could pull and display say 1-9, 10-19, 20-29, 30-39, 40-49, and 50.

SELECT class, count(distinct id) FROM character_ WHERE timelaston > (UNIX_TIMESTAMP() - 604800) AND level > '0' AND level < '10' GROUP BY class;
SELECT class, count(distinct id) FROM character_ WHERE timelaston > (UNIX_TIMESTAMP() - 604800) AND level > '9' AND level < '20' GROUP BY class;
SELECT class, count(distinct id) FROM character_ WHERE timelaston > (UNIX_TIMESTAMP() - 604800) AND level > '19' AND level < '30' GROUP BY class;
SELECT class, count(distinct id) FROM character_ WHERE timelaston > (UNIX_TIMESTAMP() - 604800) AND level > '29' AND level < '40' GROUP BY class;
SELECT class, count(distinct id) FROM character_ WHERE timelaston > (UNIX_TIMESTAMP() - 604800) AND level > '39' AND level < '50' GROUP BY class;
SELECT class, count(distinct id) FROM character_ WHERE timelaston > (UNIX_TIMESTAMP() - 604800) AND level = '50' GROUP BY class;

Ferok
03-30-2010, 04:20 PM
No count?

Cilraaz
03-30-2010, 04:29 PM
Yeah, I missed the count and the group by. Trying to get a quick post in during work and guess I went too quick.

Ferok
03-30-2010, 04:35 PM
Yeah, I missed the count and the group by. Trying to get a quick post in during work and guess I went too quick.

Still fails because you have terms in your select that aren't in your group by, but I know what you mean. This is probably what you meant:

SELECT class, count(distinct id) FROM character_ WHERE timelaston > (UNIX_TIMESTAMP() - 604800) AND level = '50' GROUP BY class;

Fortunately I'm doing SQL migrations this week so looking up syntax looks an awful lot like work!

Cilraaz
03-30-2010, 04:41 PM
http://www.thetimekillers.com/eqemu/test.php

Works fine for me with a limited database to work with. I'll create multiple characters just to fuddle with when I get home tonight.

Took another look at it. Yeah, I don't need the timelaston or level in the select. Drop those and it's a more efficient statement.

Ferok
03-30-2010, 04:47 PM
http://www.thetimekillers.com/eqemu/test.php

Works fine for me with a limited database to work with. I'll create multiple characters just to fuddle with when I get home tonight.

Guess it just ignores them, since it doesn't make sense to return them.

I'm a little more familiar with MS-SQL, which I'm pretty sure would throw an error there.

Either way, I'm betting that data like this would be done as a nightly / hourly load to the message board db, rather than an on demand directly from the game db. It's not really very important that it's up-to-the-second information. This kind of aggregation isn't overly costly, but more costly than I'm sure it needs to be.

Yiblaan
03-31-2010, 12:10 PM
Thank Prexus I am not a math major

FatMagic
03-31-2010, 12:19 PM
I'd like to see if you guys can get this worked out... it would be cool to see the class distribution on the server.

Cilraaz
03-31-2010, 12:21 PM
I'd like to see if you guys can get this worked out... it would be cool to see the class distribution on the server.

It would actually be pretty simple to do. It's more a matter of whether the admins want to publicize that information.

BornOfAshes
03-31-2010, 12:37 PM
assuming that the database is MS SQL... I don't think it is though.

but yeah, you should be able to generate a logdump of the active players and then sort them like Ferok suggested above.

I for one would enjoy seeing the results of the queries, it's kind of neat to see trends

Rabkorik
03-31-2010, 12:47 PM
Thank Prexus I am not a math major

Math...?

Ferok
03-31-2010, 12:52 PM
assuming that the database is MS SQL... I don't think it is though.

but yeah, you should be able to generate a logdump of the active players and then sort them like Ferok suggested above.

I for one would enjoy seeing the results of the queries, it's kind of neat to see trends

Most of my pseudo code I tried to write for MySQL (which is what I presume the DB is in) but it's possible I got something wrong here or there. They all look the same after a while.

Anyway, there's a way of doing it regardless of what database you use(okay, there's exceptions here.. but lets remain in the realm of possibility). Nothing discussed above is terribly database specific.

stormlord
04-01-2010, 10:15 AM
Thanks for the feedback.

I wonder if the devs here have thought of this or did Verant or SOE ever consider it?

What could be the drawbacks of a fully functional implementation? (how could this hurt project1999)

How could it help?

And what is your assessment of the benefits and drawbacks of this? (Aye or Nay?)

Do you think this belongs in classic eq when it's obvious this was never offered in 1999?

I ask mostly questions here because I'm trying to ignite discussion not to become the focus of discussion :)

Crone
04-01-2010, 10:25 AM
WoW had a website that did this. It was an addon that just simply went through the game and did /who all 1-9 , 10-19, etc and recorded the information.

It's been so long, but if I remember correctly you couldn't go /anon in WoW, so when you had a few hundred people on a server doing this at all different times you were able to get a pretty solid count of what was on your server. Was useful information.

grindle
04-01-2010, 10:49 AM
I would love to see something like this implemented . I have been playing around with different classes and over the years have played most class pretty often and would like to start a class that is needed by the community. This would be a great tool in deciding that.

stormlord
04-02-2010, 01:33 AM
I would love to see something like this implemented . I have been playing around with different classes and over the years have played most class pretty often and would like to start a class that is needed by the community. This would be a great tool in deciding that.

As a general rule, clerics can't go wrong. I can't imagine a situation where they can't find a group. Although, it's more effective to have a full group (max exp bonus), as opposed to a small group. If there were 3 groups with 1 cleric each and 3 extra clerics, then those 3 clerics wouldn't be able to find a group. On the other hand, if the 3 groups broke up into 7 groups of 3 each then every cleric would have a group. So, if the server had too many clerics than they might not be able to easily find groups if those groups are min/maxing.

But every single class can reach saturation and be less valuable. So...

I agree.

Maybe it would be better only to report large deficits rather showing minor ones? Why do I say this? Because if you saw that clerics were 20% and 19% was optimal, then you might decide not to play that cleric. But that doesn't mean that that cleric isn't needed. A 1% different between the two is not significant. Also, the optimal % is just an estimate and isn't perfect. It's impossible to know perfectly what the class distribution should be. You might give players the wrong impression if you suggest to them what should and shouldn't be. Thus, maybe it's wiser to only show big deficits as opposed to the small ones that might be within the margin of uncertainty.

Tallenn
04-02-2010, 04:24 PM
Actually, you'd be surprised. I played a cleric up to PoP era, and often had trouble finding a group. Probably not as often as many other classes, but often enough. I noticed the same with enchanters too. The only ones I ever saw that never (or extremely rarely) had a problem getting a group were tanks.

Every group needs a cleric (in that era, anyway), but no group needs two.