Mercurial > ~darius > hgwebdir.cgi > paradise_server
comparison src/death.c @ 2:2719a89505ba
First entry of Paradise Server 2.9 patch 10 Beta
author | darius |
---|---|
date | Sat, 06 Dec 1997 04:37:01 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1:4d6502ffaa5e | 2:2719a89505ba |
---|---|
1 /*-------------------------------------------------------------------------- | |
2 NETREK II -- Paradise | |
3 | |
4 Permission to use, copy, modify, and distribute this software and its | |
5 documentation, or any derivative works thereof, for any NON-COMMERCIAL | |
6 purpose and without fee is hereby granted, provided that this copyright | |
7 notice appear in all copies. No representations are made about the | |
8 suitability of this software for any purpose. This software is provided | |
9 "as is" without express or implied warranty. | |
10 | |
11 Xtrek Copyright 1986 Chris Guthrie | |
12 Netrek (Xtrek II) Copyright 1989 Kevin P. Smith | |
13 Scott Silvey | |
14 Paradise II (Netrek II) Copyright 1993 Larry Denys | |
15 Kurt Olsen | |
16 Brandon Gillespie | |
17 --------------------------------------------------------------------------*/ | |
18 | |
19 #include "config.h" | |
20 #include <stdio.h> | |
21 #include <signal.h> | |
22 #include <setjmp.h> | |
23 #include <sys/types.h> | |
24 #include <sys/time.h> | |
25 | |
26 #include "defs.h" | |
27 #include "struct.h" | |
28 #include "data.h" | |
29 #include "shmem.h" | |
30 | |
31 #if 0 | |
32 extern jmp_buf env; | |
33 #endif | |
34 | |
35 | |
36 /* Figure out ratings for player p. Computed ratings are filled into r */ | |
37 void | |
38 compute_ratings(p, r) | |
39 struct player *p; | |
40 struct rating *r; | |
41 { | |
42 struct stats *s; | |
43 float t, t2; | |
44 | |
45 s = &p->p_stats; | |
46 | |
47 r->ratio = (s->st_tlosses != 0) ? (float) s->st_tkills / | |
48 (float) s->st_tlosses : s->st_tkills; | |
49 | |
50 if (status->timeprod == 0) | |
51 status->timeprod = 1; | |
52 | |
53 t = (float) s->st_tticks / (float) status->timeprod; /* hour ratio */ | |
54 if (t == 0.0) | |
55 t = 1.0; | |
56 | |
57 t2 = t * (float) status->kills; /* get expected kills */ | |
58 t2 /= 2; /* lower expectation */ | |
59 printf("ticks %f timeprod %u %f %f %d\n", (float) s->st_tticks, status->timeprod, t2, t, status->kills); | |
60 r->offrat = s->st_tkills / t2;/* calc offense rating */ | |
61 | |
62 t2 = t * (float) status->dooshes; /* expected armies dooshed */ | |
63 r->dooshrat = (float) s->st_tdooshes / t2; /* doosh rating */ | |
64 | |
65 r->battle = r->offrat + r->dooshrat; /* get battle rating */ | |
66 | |
67 t2 = t * (float) status->armsbomb; /* expected armies bombed */ | |
68 r->bombrat = (float) s->st_tarmsbomb / t2; /* bomb rating */ | |
69 | |
70 t2 = t * (float) status->resbomb; /* expected resources bombed */ | |
71 r->resrat = (float) s->st_tresbomb / t2; /* resource bombed rating */ | |
72 | |
73 t2 = t * (float) status->planets; /* expected planets */ | |
74 r->planetrat = (float) s->st_tplanets / t2; /* get planet rating */ | |
75 | |
76 printf("planetrat %f tplanets %f t2 %f\n", (float) r->planetrat, (float) s->st_tplanets, (float) t2); | |
77 | |
78 r->strategy = r->bombrat + r->resrat + r->planetrat; /* strategy rating */ | |
79 | |
80 t2 = (float) status->sbkills / (float) status->sblosses; | |
81 if (s->st_sblosses == 0) | |
82 r->sbrat = (float) s->st_sbkills / t2; | |
83 else | |
84 r->sbrat = ((float) s->st_sbkills / (float) s->st_sblosses) / t2; | |
85 | |
86 t2 = (float) status->wbkills / (float) status->wblosses; | |
87 if (s->st_wblosses == 0) | |
88 r->wbrat = (float) s->st_wbkills / t2; | |
89 else | |
90 r->wbrat = ((float) s->st_wbkills / (float) s->st_wblosses) / t2; | |
91 | |
92 t = (float) s->st_jsticks / (float) status->jstime; | |
93 t2 = t * (float) status->jsplanets; /* get expected js planets */ | |
94 if (t2 == 0.0) | |
95 r->jsrat = 0.0; | |
96 else | |
97 r->jsrat = (float) s->st_jsplanets / t2; /* js rating */ | |
98 | |
99 r->special = r->sbrat + r->wbrat + r->jsrat; /* get special ship rating */ | |
100 } | |
101 | |
102 | |
103 /*-----------------------------------DEATH---------------------------------*/ | |
104 /* | |
105 * This function is called when the player dies. It checks to see if the | |
106 * player has been promoted. | |
107 */ | |
108 | |
109 | |
110 extern int savestats(); | |
111 | |
112 void | |
113 death() | |
114 { | |
115 struct stats *s; /* to point to player's stats */ | |
116 struct rating r; /* filled in by compute_ratings() */ | |
117 int genocides; /* player's genocides */ | |
118 float di; /* player's di */ | |
119 | |
120 #if 0 | |
121 stop_interruptor(); | |
122 #endif | |
123 me->p_status = POUTFIT; /* Stop the ghost buster */ | |
124 switch (me->p_whydead) | |
125 { /* determine whether the player */ | |
126 case KTORP: /* should be forced out of the */ | |
127 case KPLASMA: /* game or not */ | |
128 case KPHASER: | |
129 case KPLANET: | |
130 case KSHIP: | |
131 case KGENOCIDE: | |
132 case KGHOST: | |
133 case KPROVIDENCE: | |
134 case KASTEROID: | |
135 default: | |
136 break; | |
137 case KQUIT: | |
138 case KDAEMON: | |
139 case KWINNER: | |
140 mustexit = 1; /* set global var to force player out */ | |
141 break; | |
142 } | |
143 me->p_flags &= ~(PFWAR | PFREFITTING); /* turn off most flags */ | |
144 if (me->p_stats.st_rank < NUMRANKS - 1) | |
145 { /* should we try to promote */ | |
146 s = &(me->p_stats); /* get player's stat struct */ | |
147 genocides = s->st_genocides;/* get # genocides */ | |
148 di = s->st_di; /* get player's DI */ | |
149 | |
150 compute_ratings(me, &r); | |
151 | |
152 /*--[ check for promotion ]--*/ | |
153 if (configvals->bronco_ranks) | |
154 { | |
155 if ((di >= ranks[s->st_rank + 1].di) | |
156 && (r.battle >= ranks[s->st_rank + 1].battle) | |
157 && (r.strategy * 3 / 2 >= ranks[s->st_rank + 1].strategy) | |
158 && (r.special * 3 >= ranks[s->st_rank + 1].specship)) | |
159 s->st_rank++; /* we have a promotion */ | |
160 } | |
161 else | |
162 { | |
163 if ((genocides >= ranks[s->st_rank + 1].genocides) | |
164 && (di >= ranks[s->st_rank + 1].di) | |
165 && (r.battle >= ranks[s->st_rank + 1].battle) | |
166 && (r.strategy >= ranks[s->st_rank + 1].strategy) | |
167 && (r.special >= ranks[s->st_rank + 1].specship)) | |
168 s->st_rank++; /* we have a promotion */ | |
169 } | |
170 } | |
171 updateClient(); /* update the client */ | |
172 savestats(); /* save players stats */ | |
173 #if 0 | |
174 longjmp(env, 0); /* jump to start of ntserv */ | |
175 #endif | |
176 } | |
177 | |
178 /*-------------------------------------------------------------------------*/ | |
179 | |
180 | |
181 /*----END OF FILE-----*/ |