MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | #pragma strong_types,save_types |
| 2 | #pragma no_shadow,no_clone |
| 3 | |
| 4 | #include <living/team.h> |
| 5 | #include <wizlevels.h> |
| 6 | #define ME this_object() |
| 7 | #define PO previous_object() |
| 8 | |
| 9 | static mapping team_names; |
| 10 | static mapping team_names_reverse; |
| 11 | |
| 12 | void create() { |
| 13 | |
| 14 | team_names=([]); // Objekt -> Name |
| 15 | team_names_reverse=([]); // Name -> Objekt |
| 16 | } |
| 17 | |
| 18 | static mixed DoRegisterTeam(object ob, string name) { |
| 19 | mixed old; |
| 20 | |
| 21 | old=team_names[ob]; |
| 22 | m_delete(team_names_reverse,old); // Namen Freigeben |
| 23 | if (!name) { // UnRegister |
| 24 | m_delete(team_names,ob); |
| 25 | return name; |
| 26 | } |
| 27 | team_names[ob]=name; |
| 28 | team_names_reverse[name]=ob; |
| 29 | return name; |
| 30 | } |
| 31 | |
| 32 | varargs string RegisterTeam(string name) { |
| 33 | int i,min; |
| 34 | |
| 35 | if (member(inherit_list(PO),TEAM_OBJECT+".c")<0) |
| 36 | return 0; |
| 37 | if (stringp(name)){ |
| 38 | if (!team_names_reverse[name]) // Name noch nicht vergeben |
| 39 | return DoRegisterTeam(PO,name); |
| 40 | return 0; |
| 41 | } |
| 42 | min=sizeof(m_indices(team_names_reverse))+2; |
| 43 | for (i=1;i<min;i++) |
| 44 | if (!team_names_reverse[sprintf("%d",i)]) { |
| 45 | min=i; |
| 46 | break; |
| 47 | } |
| 48 | name=sprintf("%d",i); |
| 49 | return DoRegisterTeam(PO,name); |
| 50 | } |
| 51 | |
| 52 | void UnregisterTeam() { |
| 53 | if (member(inherit_list(PO),TEAM_OBJECT+".c")>=0) |
| 54 | DoRegisterTeam(PO,0); |
| 55 | } |
| 56 | |
| 57 | object *ListTeamObjects() { |
| 58 | return(m_indices(team_names)-({0})); |
| 59 | } |
| 60 | |
| 61 | string *ListTeamNames() { |
| 62 | return(m_indices(team_names_reverse)-({0})); |
| 63 | } |
| 64 | |
| 65 | string *SortedListTeamNames() { |
| 66 | return(sort_array(ListTeamNames(),#'<)); |
| 67 | } |
| 68 | |
| 69 | void ShowTeamInfos() { |
| 70 | object ob; |
| 71 | string *ind; |
| 72 | int i; |
| 73 | |
| 74 | write(" --- Teamliste: ---\n"); |
| 75 | ind=SortedListTeamNames(); |
| 76 | for (i=sizeof(ind)-1;i>=0;i--) |
| 77 | if (objectp(ob=team_names_reverse[ind[i]])) |
| 78 | ob->ShowTeamInfo(); |
| 79 | write(" --- (Ende Teamliste) ---\n"); |
| 80 | } |
| 81 | |
| 82 | varargs int remove(int silent) { |
| 83 | return 0; |
| 84 | } |