Advertisement
existence_dev92

title system

Mar 20th, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. https://rathena.org/board/topic/112044-achievement-system/
  2. https://rathena.org/board/topic/112044-achievement-system/?do=findComment&comment=329947
  3.  
  4. Counter type achievements work a bit differently; the target counter that you set (in achievement_db.yml) is your actual goal/condition. So first thing first, you want to add it to your achievement definition:
  5.  
  6. - ID: 500001
  7. Group: "AG_BATTLE"
  8. Name: "Name"
  9. Target:
  10. Count: 500
  11. Score: 10
  12.  
  13. What you want to do isn't compatible with counter type achievements (you'd have to create a new group, pass it to AG_CHAT, and set the start value manually, etc). However you can do this easily via scripting instead:
  14.  
  15. OnPCKillNPC:
  16. if (CONQ_KILLNPC < 500) {
  17. CONQ_KILLNPC++;
  18. achievementupdate 500001, ACHIEVEINFO_COUNT1, CONQ_KILLNPC;
  19.  
  20. if (CONQ_KILLNPC == 500) {
  21. achievementcomplete 500001;
  22. }
  23. }
  24.  
  25. end;
  26.  
  27. Hmmm, it appears achievementupdate isn't included...! You can add this script function in your source:
  28.  
  29. //BUILDIN_DEF(achievementupdate,"iii?"),
  30. BUILDIN_FUNC(achievementupdate) {
  31. struct map_session_data *sd;
  32. int i, achievement_id, type, value;
  33.  
  34. achievement_id = script_getnum(st, 2);
  35. type = script_getnum(st, 3);
  36. value = script_getnum(st, 4);
  37.  
  38. if (!script_charid2sd(5, sd)) {
  39. return SCRIPT_CMD_FAILURE;
  40. }
  41.  
  42. if (achievement_search(achievement_id) == NULL) {
  43. ShowWarning("buildin_achievementupdate: Achievement '%d' doesn't exist.\n", achievement_id);
  44. return SCRIPT_CMD_FAILURE;
  45. }
  46.  
  47. ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == achievement_id);
  48. if (i == sd->achievement_data.count)
  49. achievement_add(sd, achievement_id);
  50.  
  51. ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == achievement_id);
  52. if (i == sd->achievement_data.count) {
  53. return SCRIPT_CMD_FAILURE;
  54. }
  55.  
  56. if (type >= ACHIEVEINFO_COUNT1 && type <= ACHIEVEINFO_COUNT10)
  57. sd->achievement_data.achievements[i].count[type - 1] = value;
  58. else if (type == ACHIEVEINFO_COMPLETE)
  59. sd->achievement_data.achievements[i].complete = value ? true : false;
  60. else if (type == ACHIEVEINFO_COMPLETEDATE)
  61. sd->achievement_data.achievements[i].completeDate = value;
  62. else if (type == ACHIEVEINFO_GOTREWARD)
  63. sd->achievement_data.achievements[i].gotReward = value ? true : false;
  64. else {
  65. ShowWarning("buildin_achievementupdate: Unknown type '%d'.\n", type);
  66. return SCRIPT_CMD_FAILURE;
  67. }
  68.  
  69. achievement_update_achievement(sd, achievement_id, false);
  70. return SCRIPT_CMD_SUCCESS;
  71. }
  72.  
  73. Best of luck ~!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement