Ladders explained

Refesh page (F5) if image in not adjusted to page's size.

Ladders are the way you can allow some of your players to manage permission groups (inheritance) of other players.

Ladder is exist when at least one group or one player is placed on it. In the other words ladder is exist when there is at least one row with it's name in database table. Any group can be placed on zero or more ladders and any player can too. Look at the figure:

http://public.voxile.ru/simsonic/ladders_explained.png

There is no default ladder. You can do a ladder with name "Default" but it will be the same ladder as each other. In this case promotion/demotion process can be done only with explicit ladder name.

Ladders are abstract like permissions but something here is going harder to understand. Abstract permission (plugin.node.?) is a template to place real permission at runtime when the player is assigned to be in a special group (in form of group.prototype). Ladders works in the same way — they also can not be or can be a template but they rules the group prototypes. Next example should make it clear:

Example

Ladder template for some abstract city:

permissions table

entitypermissionvalue
Banditsrscp.promotable.*true
Citizensrscp.promotable.*false
Citizensrscp.promotable.?true
Sheriffsrscp.promote.?true

inheritance table

entityparentinheritance_type
BanditsDefault0 (group inherits group)
CitizensBandits0 (group inherits group)
SheriffsCitizens0 (group inherits group)
Cordell_WalkerSheriffs.western1 (user in group)
BonnyCitizens.western1 (user in group)
ClydeCitizens.western1 (user in group)

ladders table

climberclimber_typeladderrank
Bandits0 (group)city0
Citizens0 (group)city.?100
Sheriffs0 (group)city.?200
Bonny1 (player)city.western100
Clyde1 (player)city.western100
Cordell_Walker1 (player)city.western200

In this example, Cordell_Walker is a sheriff of city Western, Bonny and Clyde are simple citizens of the same city. When sheriff will find out that they are robbers, he can demote them and kick out of the city by entering /demote Bonny city.western (and Clyde too). In background, Cordell_Walker belongs to group Sheriffs.western and group Sheriffs has permission rscp.promote.?, so Cordell_Walker has rscp.promote.western permission. Demotion process will remove all groups of this ladder from Bonny and Clyde and find the nearest bottom group with lower rank (it will be Bandits). Bandits, in future, can become Citizens of any other city so group Bandits have permission rscp.promotable.* set to true. If you want to make any player to be citizen of only one city, just give Citizens this permissions: rscp.promotable.* set to false and rscp.promotable.? set to true.

When you /promote user on some ladder his rank becomes equal to the rank of nearest upper group. When you /demote user on some ladder his rank becomes equal to the rank of nearest lower group. You can set any rank to user between the lowest group rank and infinity - in any case user will be assigned to the nearest bottom group.

To give promotion power to one player you should assing rscp.promote.<ladder> permission to him. This will give him the power to promote/demote players on ladder <ladder> but only if they have rscp.promotable.<ladder> permission. For example, you can give to Fraction Leader possibility to move citizens between different social groups like Unverified, Verified, Sheriff, City Head. Permission node rscp.promote.* gives ability to promote others on any ladder (with respect to their rscp.promotable.<ladder> permissions). Permission node rscp.promotable.* means that player with such permission can be moved on any ladder (by corresponding promoters). Do not confuse rscp.promote.* and rscp.admin.promote rights — the second one is for server administrators/moderators and it isn't respect rscp.promotable.<ladder> nodes.

Remember that being of groups on a ladder doesn't means inheritance. For simplicity of your configuration you should use directly inheritance feature.

Other explanation draft

All rows in ladders table are divided into two groups: when climber_type equals to zero, these rows togather are ladders structure. When climber_type is equal to 1, such rows are player's positions on concrete ladders.
For the ladders structure rows you can:

  • Set ladder column to simple ladder name, or
  • Set ladder column in form Ladder.?, where Ladder is the name of the abstract ladder, and players will have to enter Instance to promote others on the concrete ladder variant: /promote <user> <ladder>.<instance>.
  • Set climber to NULL and inheritance at current player's rank on this lader will not inherit any group.
  • Climber (group) can also be prototyped: group.instance.

Full permissions list for ladders

rscp.promotable.<ladder>
rscp.promotable.<ladder>.*
Players with these permissions can be moved up on a ladder <ladder> itself and on any of it's instances.
rscp.promotable.<ladder>.<instance>
Players with these permissions can be moved up on an instance <instance> of a ladder <ladder>.

rscp.demotable.<ladder>
rscp.demotable.<ladder>.*
Players with these permissions can be moved down on a ladder <ladder> itself and on any of it's instances.
rscp.demotable.<ladder>.<instance>
Players with these permissions can be moved down on an instance <instance> of a ladder <ladder>.

rscp.promote.<ladder>
rscp.promote.<ladder>.*
Players with these permissions can move up others on a ladder <ladder> itself and on any of it's instances.
rscp.promote.<ladder>.<instance>
Players with these permissions can move up others on an instance <instance> of a ladder <ladder>.

rscp.demote.<ladder>
rscp.demote.<ladder>.*
Players with these permissions can move down others on a ladder <ladder> itself and on any of it's instances.
rscp.demote.<ladder>.<instance>
Players with these permissions can move down others on an instance <instance> of a ladder <ladder>.

Another set of permissions to allow player promote/demote only himself:
rscp.promote-self.*
rscp.promote-self.<ladder>
rscp.promote-self.<ladder>.*
rscp.promote-self.<ladder>.<instance>
rscp.demote-self.*
rscp.demote-self.<ladder>
rscp.demote-self.<ladder>.*
rscp.demote-self.<ladder>.<instance>

rscp.admin.promote
These players have administrative rights to move anybody everywhere.