Freeciv21
Develop your civilization from humble roots to a global empire
achievements.h
Go to the documentation of this file.
1 /*__ ___ ***************************************
2 / \ / \ Copyright (c) 1996-2020 Freeciv21 and Freeciv
3 \_ \ / __/ contributors. This file is part of Freeciv21.
4  _\ \ / /__ Freeciv21 is free software: you can redistribute it
5  \___ \____/ __/ and/or modify it under the terms of the GNU General
6  \_ _/ Public License as published by the Free Software
7  | @ @ \_ Foundation, either version 3 of the License,
8  | or (at your option) any later version.
9  _/ /\ You should have received a copy of the GNU
10  /o) (o/\ \_ General Public License along with Freeciv21.
11  \_____/ / If not, see https://www.gnu.org/licenses/.
12  \____/ ********************************************************/
13 #pragma once
14 
15 // common
16 #include "fc_types.h"
17 #include "name_translation.h"
18 #include "player.h"
19 
20 struct achievement {
21  int id;
22  struct name_translation name;
24  enum achievement_type type;
25  int value;
26  bool unique;
27  int culture;
28  struct player *first;
29  bv_player achievers;
30 
31  // Messages at server side only
32  char *first_msg;
33  char *cons_msg;
34 };
35 
36 void achievements_init();
37 void achievements_free();
38 
39 int achievement_index(const struct achievement *pach);
40 int achievement_number(const struct achievement *pach);
41 struct achievement *achievement_by_number(int id);
42 
43 const char *achievement_name_translation(struct achievement *pach);
44 const char *achievement_rule_name(struct achievement *pach);
45 struct achievement *achievement_by_rule_name(const char *name);
46 
47 struct player *achievement_plr(struct achievement *ach,
48  struct player_list *achievers);
49 bool achievement_check(struct achievement *ach, struct player *pplayer);
50 
51 const char *achievement_first_msg(struct achievement *pach);
52 const char *achievement_later_msg(struct achievement *pach);
53 
54 bool achievement_player_has(const struct achievement *pach,
55  const struct player *pplayer);
56 bool achievement_claimed(const struct achievement *pach);
57 
58 #define achievements_iterate(_ach_) \
59  { \
60  int _i_; \
61  for (_i_ = 0; _i_ < game.control.num_achievement_types; _i_++) { \
62  struct achievement *_ach_ = achievement_by_number(_i_);
63 
64 #define achievements_iterate_end \
65  } \
66  }
67 
68 #define achievements_re_active_iterate(_p) \
69  achievements_iterate(_p) \
70  { \
71  if (!_p->ruledit_disabled) {
72 
73 #define achievements_re_active_iterate_end \
74  } \
75  } \
76  achievements_iterate_end;
77 
78 int get_literacy(const struct player *pplayer);
bool achievement_check(struct achievement *ach, struct player *pplayer)
Check if player has now achieved the achievement.
void achievements_init()
Initialize achievements.
bool achievement_player_has(const struct achievement *pach, const struct player *pplayer)
Has the given player got the achievement?
const char * achievement_first_msg(struct achievement *pach)
Return message to send to first player gaining the achievement.
const char * achievement_later_msg(struct achievement *pach)
Return message to send to other players gaining the achievement.
int achievement_index(const struct achievement *pach)
Return the achievement index.
struct player * achievement_plr(struct achievement *ach, struct player_list *achievers)
Check if some player has now achieved the achievement and return the player in question.
int get_literacy(const struct player *pplayer)
Literacy score calculated one way.
int achievement_number(const struct achievement *pach)
Return the achievement id.
const char * achievement_rule_name(struct achievement *pach)
Return untranslated name of this achievement type.
void achievements_free()
Free the memory associated with achievements.
struct achievement * achievement_by_number(int id)
Return achievements of given id.
struct achievement * achievement_by_rule_name(const char *name)
Returns achievement matching rule name or nullptr if there is no achievement with such name.
bool achievement_claimed(const struct achievement *pach)
Has anybody got the achievement?
const char * achievement_name_translation(struct achievement *pach)
Return translated name of this achievement type.
const char * name
Definition: inputfile.cpp:118
char * first_msg
Definition: achievements.h:32
enum achievement_type type
Definition: achievements.h:24
struct player * first
Definition: achievements.h:28
bv_player achievers
Definition: achievements.h:29
char * cons_msg
Definition: achievements.h:33
struct name_translation name
Definition: achievements.h:22
bool ruledit_disabled
Definition: achievements.h:23
Definition: player.h:231