Post: [PI] Achievements System
03-10-2015, 01:51 AM #1
Stunz
Former Staff
(adsbygoogle = window.adsbygoogle || []).push({});
Simple achievement system, i almost got a cancer when I saw achievements snippet done like c.crabsKilled > value USE THE GODDAM ARRAYS ~ CREDITS TO FUZENSETH OF RUNELOCUS 4 THIS GUIDE.

    package server.model.players.content.achievement;

import server.model.players.Client;
import server.model.players.plugin.impl.ColoredMessage.Colours;
/**
* @author FUZENSETH
*/
public class Achievement {

private Client player;

private static final int GRAPHICS = 199;

public Achievement(Client player) {
this.player = player;
}

/**
* [MENTION=75098]Para[/MENTION]m player - to player
* [MENTION=75098]Para[/MENTION]m title - title of the achievement
* [MENTION=75098]Para[/MENTION]m achievementIndex - achievement id
* [MENTION=75098]Para[/MENTION]m points - how many points player gets
* [MENTION=75098]Para[/MENTION]m rewardItems items from the achievement
*/
public void append(String title, int achievementIndex, int points,
int slotsNeeded, final int... rewardItems) {
if (player.achievement[achievementIndex] == 0) {
player.achievementPoints += points;
complete(title, achievementIndex);
player.gfx100(GRAPHICS);
if (!(rewardItems[0] == 0) || !(rewardItems[0] == -1)) {
addItemReward(slotsNeeded, rewardItems);
return;
}
}
}

/**
* If the player has finished the achievement and has the given stage.
* [MENTION=75098]Para[/MENTION]m index
* [MENTION=75098]Para[/MENTION]m stage
* [MENTION=184045]return[/MENTION]
*/
public boolean hasFinished(int index, int stage) {
return player.achievement[index] == stage;
}

/**
* Creates the tab
*/
public void doTab() {

}

/**
* Completes a achievement.
* [MENTION=75098]Para[/MENTION]m achievement
* [MENTION=75098]Para[/MENTION]m index index (id)
*/
public void complete(String achievement, int index) {
player.achievement[index] = 1;
player.sendMessage("Congratulations, you have completed "+achievement+" achievement.", Colours.ORANGE);
}

/**
* Adds a item reward.
* [MENTION=75098]Para[/MENTION]m slotsNeeded
* [MENTION=75098]Para[/MENTION]m items...
*/
public void addItemReward(int slotsNeeded, final int... items) {
for (int totalItems = 0; totalItems < items.length; totalItems++) {
if (!(player.getItems().freeSlots() > slotsNeeded - 1))
player.getItems().addItemToBank(items[totalItems], 1);
else
player.getItems().addItem(items[totalItems], 1);
}
if (!(player.getItems().freeSlots() > slotsNeeded - 1))
player.sendMessage("Your achievement reward(s) was added to your bank account.", Colours.RED);
else
player.sendMessage("Your achievement reward(s) has been added to your inventory.", Colours.RED);
}
}



Client.java
    private Achievement achievements = new Achievement(this);


    	public Achievement getAchievements() {
return achievements;
}


AchievementConfiguration.java
    package server.model.players.content.achievement;
/**
* @author FUZENSETH
*/
public class AchievementConfiguration {

//Achievements enabled? true:false
public static final boolean ENABLED = true;

//The total achievements that are in use.
public static final int TOTAL_ACHIEVEMENTS = 50;

}


Player.java
    
public int achievement[] = new int[AchievementConfiguration.TOTAL_ACHIEVEMENTS];



How to complete a achievement?

param1 - client
param2 - name of the achievement
param3 - achievement id
param4 - inventory slots needed
param5 - items... e.g 11694,11732,11696
    
c.getAchievements().append(c, "Lumberjack", 0, 4, 3, 11694,11283,1175Cool Man (aka Tustin);


What you're adding:

You must login or register to view this content.

In this picture I did not have enough inventory slots so my achievement rewards was banked.
You must login or register to view this content.


You have to parse the integer array achievement on playersave
(adsbygoogle = window.adsbygoogle || []).push({});

The following user thanked Stunz for this useful post:

KillManz G
03-19-2015, 02:51 PM #2
KillManz G
Little One
Originally posted by Stunz View Post
Simple achievement system, i almost got a cancer when I saw achievements snippet done like c.crabsKilled > value USE THE GODDAM ARRAYS ~ CREDITS TO FUZENSETH OF RUNELOCUS 4 THIS GUIDE.

    package server.model.players.content.achievement;

import server.model.players.Client;
import server.model.players.plugin.impl.ColoredMessage.Colours;
/**
* @author FUZENSETH
*/
public class Achievement {

private Client player;

private static final int GRAPHICS = 199;

public Achievement(Client player) {
this.player = player;
}

/**
* [MENTION=75098]Para[/MENTION]m player - to player
* [MENTION=75098]Para[/MENTION]m title - title of the achievement
* [MENTION=75098]Para[/MENTION]m achievementIndex - achievement id
* [MENTION=75098]Para[/MENTION]m points - how many points player gets
* [MENTION=75098]Para[/MENTION]m rewardItems items from the achievement
*/
public void append(String title, int achievementIndex, int points,
int slotsNeeded, final int... rewardItems) {
if (player.achievement[achievementIndex] == 0) {
player.achievementPoints += points;
complete(title, achievementIndex);
player.gfx100(GRAPHICS);
if (!(rewardItems[0] == 0) || !(rewardItems[0] == -1)) {
addItemReward(slotsNeeded, rewardItems);
return;
}
}
}

/**
* If the player has finished the achievement and has the given stage.
* [MENTION=75098]Para[/MENTION]m index
* [MENTION=75098]Para[/MENTION]m stage
* [MENTION=184045]return[/MENTION]
*/
public boolean hasFinished(int index, int stage) {
return player.achievement[index] == stage;
}

/**
* Creates the tab
*/
public void doTab() {

}

/**
* Completes a achievement.
* [MENTION=75098]Para[/MENTION]m achievement
* [MENTION=75098]Para[/MENTION]m index index (id)
*/
public void complete(String achievement, int index) {
player.achievement[index] = 1;
player.sendMessage("Congratulations, you have completed "+achievement+" achievement.", Colours.ORANGE);
}

/**
* Adds a item reward.
* [MENTION=75098]Para[/MENTION]m slotsNeeded
* [MENTION=75098]Para[/MENTION]m items...
*/
public void addItemReward(int slotsNeeded, final int... items) {
for (int totalItems = 0; totalItems < items.length; totalItems++) {
if (!(player.getItems().freeSlots() > slotsNeeded - 1))
player.getItems().addItemToBank(items[totalItems], 1);
else
player.getItems().addItem(items[totalItems], 1);
}
if (!(player.getItems().freeSlots() > slotsNeeded - 1))
player.sendMessage("Your achievement reward(s) was added to your bank account.", Colours.RED);
else
player.sendMessage("Your achievement reward(s) has been added to your inventory.", Colours.RED);
}
}



Client.java
    private Achievement achievements = new Achievement(this);


    	public Achievement getAchievements() {
return achievements;
}


AchievementConfiguration.java
    package server.model.players.content.achievement;
/**
* @author FUZENSETH
*/
public class AchievementConfiguration {

//Achievements enabled? true:false
public static final boolean ENABLED = true;

//The total achievements that are in use.
public static final int TOTAL_ACHIEVEMENTS = 50;

}


Player.java
    
public int achievement[] = new int[AchievementConfiguration.TOTAL_ACHIEVEMENTS];



How to complete a achievement?

param1 - client
param2 - name of the achievement
param3 - achievement id
param4 - inventory slots needed
param5 - items... e.g 11694,11732,11696
    
c.getAchievements().append(c, "Lumberjack", 0, 4, 3, 11694,11283,1175Cool Man (aka Tustin);


What you're adding:

You must login or register to view this content.

In this picture I did not have enough inventory slots so my achievement rewards was banked.
You must login or register to view this content.


You have to parse the integer array achievement on playersave
[/QUOTE

Nice bro

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo