From f9bd611532204c9936cd78f2b9f447dc1f25a2f9 Mon Sep 17 00:00:00 2001 From: Rafael Barreto Date: Mon, 31 May 2010 00:25:26 +0000 Subject: [PATCH] including points related to flags git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@5118 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/server.cpp | 3 ++- source/src/server.h | 4 +-- source/src/serverchecks.h | 55 +++++++++++++++++++++++++++++++++++---- 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/source/src/server.cpp b/source/src/server.cpp index 009abedd..299ec560 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -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 { diff --git a/source/src/server.h b/source/src/server.h index 5161a768..e3abbef6 100644 --- a/source/src/server.h +++ b/source/src/server.h @@ -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); } }; diff --git a/source/src/serverchecks.h b/source/src/serverchecks.h index 48f33b0f..d8ec8482 100644 --- a/source/src/serverchecks.h +++ b/source/src/serverchecks.h @@ -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; } }