Jump to content
  • 0

Achievement AG_GOAL_ACHIEVE


Zeiyan

Question


  • Group:  Members
  • Topic Count:  49
  • Topics Per Day:  0.01
  • Content Count:  275
  • Reputation:   23
  • Joined:  01/06/13
  • Last Seen:  

Good day,

I'm customizing my achievement system and here are my codes:

Achievement_db.yml


  - ID: 240001
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 1"

  - ID: 240002
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 2"
    Dependent:
      - Id: 240001

  - ID: 240003
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 3"
    Dependent:
      - Id: 240002

  - ID: 240004
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 4"
    Dependent:
      - Id: 240003

  - ID: 240005
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 5"
    Dependent:
      - Id: 240004

  - ID: 240006
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 6"
    Dependent:
      - Id: 240005

  - ID: 240007
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 7"
    Dependent:
      - Id: 240006

  - ID: 240008
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 8"
    Dependent:
      - Id: 240007

  - ID: 240009
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 9"
    Dependent:
      - Id: 240008

  - ID: 240010
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 10"
    Condition: " AchievementLevel >= 10 "
    Dependent:
      - Id: 240009

  - ID: 240011
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 11"
    Dependent:
      - Id: 240010

  - ID: 240012
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 12"
    Dependent:
      - Id: 240011

  - ID: 240013
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 13"
    Dependent:
      - Id: 240012

  - ID: 240014
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 14"
    Dependent:
      - Id: 240013

  - ID: 240015
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 15"
    Dependent:
      - Id: 240014

  - ID: 240016
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 16"
    Dependent:
      - Id: 240015

  - ID: 240017
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 17"
    Dependent:
      - Id: 240016

  - ID: 240018
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 18"

    Dependent:
      - Id: 240017

  - ID: 240019
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 19"
    Dependent:
      - Id: 240018

  - ID: 240020
    Group: "AG_GOAL_ACHIEVE"
    Name: "Reaching Level 20"
    Dependent:
      - Id: 240019

 

Problem is i am not getting any achievements when getting to the next achievement level. I looked around in source and it looks good to me.

This one below should be the one awarding the achievement level correct?

 

int *achievement_level(struct map_session_data *sd, bool flag)
{
	nullpo_retr(nullptr, sd);

	sd->achievement_data.total_score = 0;

	for (int i = 0; i < sd->achievement_data.count; i++) { // Recount total score
		if (sd->achievement_data.achievements[i].completed > 0)
			sd->achievement_data.total_score += sd->achievement_data.achievements[i].score;
	}

	int left_score, right_score, old_level = sd->achievement_data.level;

	for( sd->achievement_data.level = 0; /* Break condition's inside the loop */; sd->achievement_data.level++ ){
		std::shared_ptr<s_achievement_level> level = achievement_level_db.find( sd->achievement_data.level );

		if( sd->achievement_data.total_score > level->points ){
			std::shared_ptr<s_achievement_level> next_level = achievement_level_db.find( sd->achievement_data.level + 1 );

			// Check if there is another level
			if( next_level == nullptr ){
				std::shared_ptr<s_achievement_level> level = achievement_level_db.find( sd->achievement_data.level );

				left_score = sd->achievement_data.total_score - level->points;
				right_score = 0;

				// Increase the level for client side display
				sd->achievement_data.level++;
				break;
			}else{
				// Enough points for this level, check the next one
				continue;
			}
		}

		if( sd->achievement_data.level == 0 ){
			left_score = sd->achievement_data.total_score;
			right_score = level->points;
			break;
		}else{
			std::shared_ptr<s_achievement_level> previous_level = achievement_level_db.find( sd->achievement_data.level - 1 );

			left_score = sd->achievement_data.total_score - previous_level->points;
			right_score = level->points - previous_level->points;
			break;
		}
	}

	static int info[2];

	info[0] = left_score; // Left number
	info[1] = right_score; // Right number

	if (flag && old_level != sd->achievement_data.level) { // Give AG_GOAL_ACHIEVE
		achievement_update_objective( sd, AG_GOAL_ACHIEVE, 0 );
	}

	return info;

Is there a database / table or any way we can save achievement "experience/scores" and also current achievement level?

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  49
  • Topics Per Day:  0.01
  • Content Count:  275
  • Reputation:   23
  • Joined:  01/06/13
  • Last Seen:  

Is this a bug or working as intended?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...