Ranker
Usage and Scalability
Ranker can automatically run commands to give players rewards/permissions based on their performance/stat (pvp, pve, time, and wealth) that satisfy requirements defined by server Ops/Admins. With absolutely no configuration, Ranker works as a light-weight and simple stats tracker. Ranker's features and functions depends on the data in config.yml. Unlock as much or as little features and functions as you wish. Add Vault.jar and Ranker will use your server's economy currency as a stat. Define requirements, rewards, custom messages and commands and ranker works automatically. Set commands to do anything including grant players permissions, powers, items, and/or other rewards. Ops/Admins can control Ranker completely from within the game using commands. Commands can also provide feedback of current values in config.yml. Players and Console can display both online and offline player stats as well as modify them.
Ranker config.yml
Ranker's typical config.yml is organized into the following root sections:
- autorank - contains the ranks, requirements, rewards, messages, and commands
- stats - contains the appearance of of /ranker stats
- chatformat - contains the appearance of each rank title
- general - ranker chat mode, debug mode, How Ranker affect operators
- mysql - MySQL support for synchronizing player stats to database
Simple Config.yml Example
autorank: world: Peon: rankupcommand1: server:/perm player setgroup {PLAYER} {RANK} requirement: money=10 Citizen: rankupcommand1: server:/perm player setgroup {PLAYER} {RANK} requirement: money=20 stats: line2: ' &3{RANK} &2{PLAYER}' chatformat: Peon: '&a{RANK} {PLAYER}&3: &9' Citizen: '&a{RANK} {PLAYER}&3: &9' general: debug: false chat: false operator: false mysql: enable: false ip: 127.0.0.1 username: root password: password port: 3306 database: minecraft table: ranker update: 45 keepalive: true
Extended Config.yml Example
general: chat: false debug: false operator: false mysql: enable: false ip: 127.0.0.1 username: root password: password port: 3306 database: minecraft table: ranker update: 45 keepalive: true autorank: world: Peon: rankupmessage1: '&8--------------------------------------------' rankupmessage2: ' You earned Peon rank!' rankupmessage3: '&8--------------------------------------------' rankdownmessage1: '&8--------------------------------------------' rankdownmessage2: ' You ranked down to Peon rank!' rankdownmessage3: '&8--------------------------------------------' rankupcommand1: server:/perm player setgroup {PLAYER} {RANK} rankupcommand2: server:/perm reload rankupcommand3: server:/give {PLAYER} wood 100 rankupcommand4: server:/give {PLAYER} dirt 100 rankdowncommand1: server:/perm player setgroup {PLAYER} {RANK} rankdowncommand2: server:/perm reload rankdowncommand3: server:/give {PLAYER} wood 1 rankdowncommand4: server:/give {PLAYER} dirt 1 rewardinfo: '100 stacks of wood, dirt, and some new commands!' requirement: money=0 Citizen: rankupcommand1: server:/perm player setgroup {PLAYER} {RANK} rankupcommand2: server:/perm reload rankupcommand3: server:/give {PLAYER} wood 100 rankupcommand4: server:/give {PLAYER} stone 100 rankupmessage1: '&8--------------------------------------------' rankupmessage2: ' You earned Citizen rank!' rankupmessage3: '&8--------------------------------------------' rankdownmessage1: '&8--------------------------------------------' rankdownmessage2: ' You ranked down to Citizen rank!' rankdownmessage3: '&8--------------------------------------------' rankdowncommand1: server:/perm player setgroup {PLAYER} {RANK} rankdowncommand2: server:/perm reload rankdowncommand3: server:/give {PLAYER} wood 1 rankdowncommand4: server:/give {PLAYER} dirt 1 requirement: money=1000 Recruit: requirement: money=2000 rankupcommand1: server:/perm player setgroup {PLAYER} {RANK} rankupcommand2: server:/perm reload rankupcommand3: server:/give {PLAYER} wood 100 rankupcommand4: server:/give {PLAYER} stone 100 rankupcommand5: server:/give {PLAYER} stonesword 1 rankupmessage1: '&8--------------------------------------------' rankupmessage2: ' You earned Recruit rank!' rankupmessage3: '&8--------------------------------------------' rankdownmessage1: '&8--------------------------------------------' rankdownmessage2: ' You ranked down to Recruit rank!' rankdownmessage3: '&8--------------------------------------------' rankdowncommand1: server:/perm player setgroup {PLAYER} {RANK} rankdowncommand2: server:/perm reload rankdowncommand3: server:/give {PLAYER} wood 1 rankdowncommand4: server:/give {PLAYER} dirt 1 world_the_end: Peon: rankupmessage1: '&8--------------------------------------------' rankupmessage2: ' You earned Peon rank!' rankupmessage3: '&8--------------------------------------------' rankdownmessage1: '&8--------------------------------------------' rankdownmessage2: ' You ranked down to Peon rank!' rankdownmessage3: '&8--------------------------------------------' rankupcommand1: server:/perm player setgroup {PLAYER} {RANK} rankupcommand2: server:/perm reload rankupcommand3: server:/give {PLAYER} wood 100 rankupcommand4: server:/give {PLAYER} dirt 100 rankdowncommand1: server:/perm player setgroup {PLAYER} {RANK} rankdowncommand2: server:/perm reload rankdowncommand3: server:/give {PLAYER} wood 1 rankdowncommand4: server:/give {PLAYER} dirt 1 rewardinfo: '100 stacks of wood, dirt, and some new commands!' requirement: money=0 Citizen: rankupcommand1: server:/perm player setgroup {PLAYER} {RANK} rankupcommand2: server:/perm reload rankupcommand3: server:/give {PLAYER} wood 100 rankupcommand4: server:/give {PLAYER} stone 100 rankupmessage1: '&8--------------------------------------------' rankupmessage2: ' You earned Citizen rank!' rankupmessage3: '&8--------------------------------------------' rankdownmessage1: '&8--------------------------------------------' rankdownmessage2: ' You ranked down to Citizen rank!' rankdownmessage3: '&8--------------------------------------------' rankdowncommand1: server:/perm player setgroup {PLAYER} {RANK} rankdowncommand2: server:/perm reload rankdowncommand3: server:/give {PLAYER} wood 1 rankdowncommand4: server:/give {PLAYER} dirt 1 requirement: money=1000 King: requirement: money=2000 rankupcommand1: server:/perm player setgroup {PLAYER} {RANK} rankupcommand2: server:/perm reload rankupcommand3: server:/give {PLAYER} wood 100 rankupcommand4: server:/give {PLAYER} stone 100 rankupcommand5: server:/give {PLAYER} stonesword 1 rankupmessage1: '&8--------------------------------------------' rankupmessage2: ' You earned King rank!' rankupmessage3: '&8--------------------------------------------' rankdownmessage1: '&8--------------------------------------------' rankdownmessage2: ' You ranked down to King rank!' rankdownmessage3: '&8--------------------------------------------' rankdowncommand1: server:/perm player setgroup {PLAYER} {RANK} rankdowncommand2: server:/perm reload rankdowncommand3: server:/give {PLAYER} wood 50 rankdowncommand4: server:/give {PLAYER} dirt 50 stats: line1: '&8--------------------------------------------' line2: ' &3{RANK} &2{PLAYER}' line3: '&6 {PVP} &aplayers killed!' line4: ' &6{PVE} &amonsters/animals killed.' line5: ' &6{TIME} &aminutes played.' line6: ' &6${MONEY} &ain wealth.' line7: '&8--------------------------------------------' chatformat: Peon: '&a{RANK} {PLAYER}&3: &9'
Ranker Commands allows Complete Control over config.yml
The following are 2 examples of defining requirement(s) for the Peon rank
- description: (player must have atleast $1000 AND a pvp score of 4)
- command: /ranker worldName.Peon.requirement money=1000+pvp=4
- description: (player must have atleast $1000 AND a pvp score of 4) OR (have playtime of atleast 120 minutes) OR (have killed atleast 50 monsters) OR (have killed atleast 30 players)
- command: /ranker worldName.Peon.requirement money=1000+pvp=4;time=120;pve=50;pvp=30
More on how to Modify config.yml by Commands
Command parameter corresponds directly to the format within the config.yml file. The following demonstrates a sequence of changes to the config.yml with each command used. Also Note Below: Ranker displays the current value of the config node if no value parameters are included!
- permission node: ranker.* (default: op)
- command: /ranker autorank.world.Peon.rankupcommand1 server:/give {PLAYER} wood 100
autorank: world: Peon: rankupcommand1: server:/give {PLAYER} wood 100
- command: /ranker autorank.world.Peon.rankupmessage2 ' You earned Peon rank!'
autorank: world: Peon: rankupcommand1: server:/give {PLAYER} wood 100 rankupmessage2: ' You earned Peon rank!'
- command: /ranker autorank.world.Peon.requirement time=0
autorank: world: Peon: rankupcommand1: server:/give {PLAYER} wood 100 rankupmessage2: ' You earned Peon rank!' requirement: time=0
- command: /ranker autorank.world.Peon.requirement
- displays: (existing) time=0
- command: /ranker autorank.world.Peon.requirement remove
autorank: world: Peon: rankupcommand1: server:/give {PLAYER} wood 100 rankupmessage2: ' You earned Peon rank!'
Commands
/ranker list description: list all ranks, requirements, and rewards within a world. /ranker stats description: show stats /ranker stats <player> description: show stats of <player> /ranker autorank.<worldName>.<rankName>.<options> <values> description: edit autorank data in config.yml /ranker chatformat.<rankName> <values> description: edit chatformat in config.yml /ranker stats.line<1-8> <values> description: edit stats format in config.yml /ranker save-all description: saves all player's stats to server before a /reload /ranker general.chat <true|false> description: turn Ranker chat mode on/off. /ranker general.debug <true|false> description: turn Ranker debug mode on/off. /ranker general.operator <true|false> description: include/exclude operators from calling Ranker's messages/commands, (false prevents operators from getting downranked) /ranker reset <player> rank description: reset player rankName /ranker reset <player> <pvp|pve|time> <value> description: reset player stats to specified value. /ranker give <player> <pvp|pve|time> <value> description: add value to specified player stats. /ranker import autorank description: imports autorank player's time into Ranker playerData
Permissions
ranker.*: description: Allow use of op commands. default: op children: ranker.stats.self: true ranker.stats.other: true ranker.list: true ranker.save.all: true ranker.stats.self: description: Show my stats. ranker.stats.other: description: Show other player's stats. ranker.list: description: List the ranks, requirements, and rewards within a world. ranker.command.rankup: description: Call rank commands when rank up to that rank. ranker.command.rankdown: description: Call rank commands when rank down to that rank ranker.message.rankup: description: Call rank messages when rank up to that rank. ranker.message.rankdown: description: Call rank messages when rank down to that rank. ranker.rankup: description: Change your rank when you rank up. Setting this to false will disable both message and command. ranker.rankdown: description: Change your rank when you rank down. Setting this to false will disable both message and command. ranker.save.all: description: Allow player to save all player's stats to server.
Player and Server Command Example
- command: /ranker autorank.world.Peon.rankupcommand1 server:/give {PLAYER} wood 100
- description: console server will send the command
- command: /ranker autorank.world.Peon.rankupcommand2 player:/me just ranked!
- description: the player will send the command
Mechanics with Permissions
- permission node: ranker.command.rankup (default: op)
- description: Call rank commands when rank up to that rank.
- permission node: ranker.command.rankdown (default: op)
- description: Call rank commands when rank down to that rank
- permission node: ranker.message.rankup (default: op)
- description: Call rank messages when rank up to that rank.
- permission node: ranker.message.rankdown (default: op)
- description: Call rank messages when rank down to that rank.
http://dev.bukkit.org/server-mods/commandrank-permissionsbukkit/ - next best thing I could find.
I have grown tired of waiting for an update to this plugin, so I've been in touch with another developer to make a new version. I will have to pay for the job, anyone interested in helping to pay and get the new version out please PM me.
Has anyone got this to work on 1.5.1, specifically
version
13:07:09 [INFO] This server is running CraftBukkit version git-Bukkit-1.5.1-R0.2 -6-g1baccb2-b2762jnks (MC: 1.5.1) (Implementing API version 1.5.1-R0.3-SNAPSHOT)
jar wont load with the error below in the log...
13:01:50 [SEVERE] Could not load 'plugins\Ranker.jar' in folder 'plugins' org.bukkit.plugin.InvalidPluginException: java.lang.UnsupportedClassVersionError : com/goldftw/chaos350z/ranker/Ranker : Unsupported major.minor version 51.0 at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j ava:184) at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager. java:305) at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager .java:230) at org.bukkit.craftbukkit.v1_5_R2.CraftServer.loadPlugins(CraftServer.ja va:239) at org.bukkit.craftbukkit.v1_5_R2.CraftServer.reload(CraftServer.java:60 3) at org.bukkit.Bukkit.reload(Bukkit.java:185)
@Kongolan I'm not the author so I can't do that. I find those messages annoying as well, tbh. goldftwcom seems to be MIA.
@LEOcab
Thanks for the reply. You was right, but I'm still troubled with the console output on every join and leave. Can you add a config option to prevent it spamming the console? Or is it already in the config and just not working for me? debug, chat, and operator is on false...
I have tried to get in touch with the author for the last 4 weeks, but no sucess. This project seems to be abandoned, i just hope someone else could take over ...
I wonder?
Is it counting the archievements separately, or sequentally?
For example the ranks and requirements are these:
Peon 5hours of play Jedi: 2000 money
Then the player have to collect 5hs of playtime to be a Peon, then amass 2000 money, or whichever of the two is fulfilled, comes first? (it seems wichever comes first now - that is good)
Also is the time in minutes? (yes it seems so)
Thanx!
Edit: I really can't depitcher what permissions should be given to a player to use only list and stats, and the rankups/downs would be made on them! I tried all these permissions (in pex) but till now I only can set up ranker.* with everything works or nothing. :(
More edit: This seems to work for a player, but doesn't shows message, and executes rankup/rankdown commands: - ranker.rankup - ranker.rankdown - ranker.stats.self - ranker.list
I have an issue, sometimes when player log out Ranker wrote "Invalid requirements in config.xml or player.yml" and when it next login players money are reseted to 0 ? Where is the problem? I am not getting any error in console.
@Kongolan
Nah. I did some timings tests not long ago and Ranker didn't rank high. You should do the same to tell which plugin is causing your TPS drops.
Is this plugin lightweight enough? I'm experiencing a lot of CPU drops when a player joins and the files going to be searched for. Same problem when I point to a sql database which blocks every other query while the connection answer isn't send back. Anyone of you had the same problems? I think its one of the causes which lets my server crash on some times.
The plugin isn't really working, man. I have five ranks:
1. Nooblet (new players) 2. Survivor (2 hours) 3. Explorer (10 hours) 4. Regular (24 hours) 5. Resident (72 hours) 6. Citizen (168 hours)
Sometimes the plugin works correctly, but sometimes it doesn't and people get stuck. What I've noticed is when I do /ranker stats on brand new players, they show up as anywhere between nooblet and regular even though they just joined, and they don't get auto-ranked until they reach, for example, Regular in the case that they are initially cast as Explorer, or Explorer if they are initially cast as Survivor. In any case they remain in the Nooblet group until then.
Seeing how the rank they are initially given by Ranker is completely random, I have to bet this is a bug. Could you please look into it? My config is as follows: http://pastebin.com/08WnVFq0
I've found a issue with multi-server setup.
These Servers has Ranker installed and pointing to the same database to collect player stats.
Survival
Hardcore
1. User logon to Hardcore and plays for 30 minutes.
2. User does /ranker stats - it shows 30 minutes
3. User goes to Survival Server
4. User does /ranker stats - it shows 0 minutes
5. Looking in MySQL it shows 0 minutes. (in seconds) DB has been reset.
6. User goes back to Hardcore Server
7. User does /ranker stats - it shows 30 minutes
8. Looking in MYSQL it shows 30 minutes (in seconds)
It looks like. Ranker checks, is there a player.flatfile then read that info, and populate SQL database. Use SQL Database while the player is logged on, then dump the info to the flatfile again.
Could you please change the behaviour to something like;
- SQL is the primary storage area for the stats. Don't reset that information, just add to it.
- If needed, keep the Flatfile to know in which worlds the player has been promoted, preferably store that info also in SQL.
- Make it possible to have a "Global" requirements list and World-lists that can override the Global.
Do you have a version for minecraft 1.2.5 or a version that would work with tekkit? and or, will the newest version work with tekkit/1.2.5???
I have a question: Can you list another rank as a requirement? Here's what I'd like to do: I would like to manually promote members for a small server up until they reach a certain rank, then after they reach that rank begin auto promoting them based on a wealth value. (all inheriting the last) Rank1 Rank2 Rank3 -Rank3a (example: money=0) -Rank3b (money=500) -Rank3c (money=1000)
I am using GroupManager and I know that /manpromote will only promote or demote users in the same track or inheritance tree. It seems that Ranker wouldn't know the difference between Rank1,2 or 3 at $0 vs Rank3a,3b,3c. . .
So would a set up like this be better?
Rank1 Rank2 (inherits 1) Rank3 (inherits 2)
RankA (money=0) RankB (money=500) (Inherits A) RankC (money=1000) (Inherits B)
Now, if the requirement for RankA is $0, and I specify to run /manpromote/demote {player} {rankA} will it throw a fit if say someone in Rank1 or Rank2 has $0? If Ranker is checking constantly for a specific money amount and always trying to run /manpromote {rank} then I would think that it would cause lag, with Groupmanager always saying "Can't promote person without inheritance" ect. . .
Am I making sense?
@goldftwcom
What permissions plugin are you using? I am using PEX
@Welite
Ranker v1.2.4? Please update to the latest.
I had this error, but plugins works well:
27.03 18:35:37 [Server] INFO at org.bukkit.craftbukkit.v1_5_R1.scheduler.CraftTask.run(CraftTask.java:53)
27.03 18:35:37 [Server] INFO at com.goldftw.chaos350z.ranker.RankProcessor$1.run(Ranker.java:562)
27.03 18:35:37 [Server] INFO at com.goldftw.chaos350z.ranker.RankProcessor.calculatePlayerRankUpdateMemoryAll(Ranker.java:882)
27.03 18:35:37 [Server] INFO at com.goldftw.chaos350z.ranker.RankProcessor.calculatePlayerRankUpdateMemory(Ranker.java:890)
27.03 18:35:37 [Server] INFO Caused by: java.lang.NullPointerException
27.03 18:35:37 [Server] INFO at java.lang.Thread.run(Thread.java:722)
27.03 18:35:37 [Server] INFO at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
27.03 18:35:37 [Server] INFO at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
27.03 18:35:37 [Server] INFO at org.bukkit.craftbukkit.v1_5_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56)
27.03 18:35:37 [Server] SEVERE org.apache.commons.lang.UnhandledException: Plugin Ranker v1.2.4 generated an exception while executing task 34
@l121ptv
Reload the server, does Ranker connect successfully? When does this error occur? What operating system are you using to host bukkit?
@ballisticknife0
You have permissions problem. Ranker works fine for me under your config.yml with the appropriate permissions.
@goldftwcom
https://www.dropbox.com/s/i4dr0ralj4v7jj1/lptvrankerconfig.txt
There bro :3 thanks for being helpful.