including points related to flags

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@5118 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Rafael Barreto
2010-05-31 00:25:26 +00:00
parent bf9de072ed
commit f9bd611532
3 changed files with 54 additions and 8 deletions
+2 -1
View File
@@ -847,7 +847,7 @@ void flagaction(int flag, int action, int actor)
client *c = clients[actor];
c->state.flagscore += score;
sendf(-1, 1, "riii", SV_FLAGCNT, actor, c->state.flagscore);
// if (m_teammode) computeteamwork(c->team, c->clientnum); WIP
if (m_teammode) computeteamwork(c->team, c->clientnum); /** WIP */
}
if(valid_client(actor))
{
@@ -877,6 +877,7 @@ void flagaction(int flag, int action, int actor)
logline(ACLOG_INFO, "flagaction %d, actor %d, flag %d, message %d", action, actor, flag, message);
break;
}
flagpoints (&c, message);
}
else
{
+2 -2
View File
@@ -201,7 +201,7 @@ struct medals
int combohits, combo, combofrags, combotime, combodamage, ncombos;
int ask, askmillis, linked, linkmillis, linkreason, upmillis;
bool updated, combosend;
vec pos;
vec pos, flagpos;
void reset()
{
dpt = lasthit = lastgun = ncovers = nhs = 0;
@@ -209,7 +209,7 @@ struct medals
askmillis = linkmillis = upmillis = 0;
linkreason = linked = ask = -1;
updated = combosend = false;
pos = vec(-1e10f, -1e10f, -1e10f);
pos = flagpos = vec(-1e10f, -1e10f, -1e10f);
}
};
+50 -5
View File
@@ -89,6 +89,50 @@ inline void addpt(client *c, int points) {
c->md.upmillis = gamemillis + 240; // about 2 AR shots
}
void flagpoints (client *c, int message)
{
float distance = 0;
int value = clientnumber < 13 ? clientnumber : 12;
switch (message)
{
case FM_PICKUP:
c->md.flagpos.x = c->state.o.x;
c->md.flagpos.y = c->state.o.y;
if (m_ctf) addpt(c, value-1);
break;
case FM_DROP:
if (m_ctf) addpt(c, -1 * value);
break;
case FM_LOST:
if (m_htf) addpt(c, -2 * value);
else if (m_ctf) {
distance = sqrt(POW2XY(c->state.o,c->md.flagpos));
if (distance > 200) distance = 200;
addpt(c, value * distance / 200);
}
break;
case FM_RETURN:
addpt(c, value);
break;
case FM_SCORE:
if (m_ctf) {
distance = sqrt(POW2XY(c->state.o,c->md.flagpos));
if (distance > 200) distance = 200;
addpt(c, value * distance / 50);
} else addpt(c, 2 * value);
break;
case FM_KTFSCORE:
addpt(c, value-1);
break;
case FM_SCOREFAIL:
break;
default:
break;
}
}
inline int minhits2combo(int gun)
{
switch (gun)
@@ -179,18 +223,18 @@ void checkteamplay(int s, int sender)
if ( actor->state.state != CS_ALIVE ) return;
switch(s){
case S_IMONDEFENSE:
case S_IMONDEFENSE: // informs
if ( actor->md.linkmillis + 10000 < gamemillis ) addpt(actor,1);
actor->md.linkmillis = gamemillis + 20000;
actor->md.linkreason = s;
break;
case S_COVERME:
case S_COVERME: // demands
case S_STAYTOGETHER:
case S_STAYHERE:
actor->md.ask = s;
if ( actor->md.askmillis + 10000 < gamemillis ) addpt(actor,1);
actor->md.askmillis = gamemillis + 5000;
break;
case S_AFFIRMATIVE:
case S_AFFIRMATIVE: // replies
case S_ALLRIGHTSIR:
case S_YES:
{
@@ -202,9 +246,10 @@ void checkteamplay(int s, int sender)
actor->md.linkmillis = gamemillis + 30000;
actor->md.linkreason = sgt->md.ask;
sendf(actor->clientnum, 1, "ri2", SV_HUDEXTRAS, HE_NUM+id);
switch( actor->md.linkreason ) {
switch( actor->md.linkreason ) { // check demands
case S_STAYHERE:
actor->md.pos = sgt->state.o;
addpt(sgt,1);
break;
}
}