From cf533fc234e483be294b665b10db49fa7fba4020 Mon Sep 17 00:00:00 2001 From: driAn Date: Mon, 8 Jan 2007 22:12:31 +0000 Subject: [PATCH] no message git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@789 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/bot/ac_bot.cpp | 5 ++-- source/src/client.cpp | 2 +- source/src/clientgame.cpp | 14 +++++---- source/src/clients2c.cpp | 10 ++----- source/src/physics.cpp | 3 ++ source/src/protos.h | 2 +- source/src/server.cpp | 5 ++-- source/src/weapon.cpp | 58 ++++++++++++++++++++------------------ source/vcpp/cube.suo | Bin 174592 -> 174592 bytes 9 files changed, 50 insertions(+), 49 deletions(-) diff --git a/source/src/bot/ac_bot.cpp b/source/src/bot/ac_bot.cpp index f76bf35a..6434bbd9 100644 --- a/source/src/bot/ac_bot.cpp +++ b/source/src/bot/ac_bot.cpp @@ -24,13 +24,12 @@ extern void spawnstate(playerent *d); void CACBot::Spawn() { // Init all bot variabeles - m_pMyEnt->primary = m_pMyEnt->nextprimary = 2 + rnd(4); + m_pMyEnt->nextprimary = GUN_SUBGUN;//m_pMyEnt->nextprimary = 2 + rnd(4); m_pMyEnt->targetyaw = m_pMyEnt->targetpitch = 0.0f; - equip(this->m_pMyEnt); + equip(m_pMyEnt); m_pMyEnt->armour = 0; m_pMyEnt->pBot = this; - SelectGun(m_pMyEnt->primary); spawnplayer(m_pMyEnt); m_eCurrentBotState = STATE_NORMAL; diff --git a/source/src/client.cpp b/source/src/client.cpp index d60c0448..37490051 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -71,7 +71,7 @@ void changeteam(int team) // force team and respawn c2sinit = false; if(m_ctf) tryflagdrop(); s_strncpy(player1->team, team_string(team), MAXTEAMLEN+1); - playerdeath(player1); + deathstate(player1); }; void newteam(char *name) diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index f710977d..3d6c2c62 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -35,7 +35,7 @@ char *getclientmap() { return clientmap; }; extern bool c2sinit; extern int dblend; -void setskin(playerent *pl, uint skin) +void setskin(playerent *pl, uint skin) { if(!pl) return; if(pl == player1) c2sinit=false; @@ -43,7 +43,9 @@ void setskin(playerent *pl, uint skin) pl->skin = skin % (maxskin[team_int(pl->team)]+1); }; -void playerdeath(playerent *pl) +extern void throw_nade(playerent *d, vec &vel, bounceent *p); + +void deathstate(playerent *pl) { pl->lastaction = lastmillis; pl->lifesequence++; @@ -52,6 +54,9 @@ void playerdeath(playerent *pl) pl->oldpitch = pl->pitch; pl->pitch = 0; pl->roll = 60; + pl->strafe = 0; + dblend = 0; + if(pl == player1 && pl->inhandnade) throw_nade(pl, vec(0,0,0), pl->inhandnade); }; void spawnstate(playerent *d) // reset player state not persistent accross spawns @@ -66,7 +71,6 @@ void spawnstate(playerent *d) // reset player state not persistent }; equip(d); if(m_osok) d->health = 1; - dblend = 0; }; playerent *newplayerent() // create a new blank player @@ -485,8 +489,8 @@ void selfdamage(int damage, int actor, playerent *act, bool gib, playerent *pl) setscope(false); addmsg(gib ? SV_GIBDIED : SV_DIED, "ri", actor); }; - playerdeath(pl); - spawnstate(pl); + deathstate(pl); + //spawnstate(pl); TESTME playsound(S_DIE1+rnd(2), pl!=player1 ? &pl->o : NULL); if(gib) addgib(pl); if(pl!=player1 || act->type==ENT_BOT) act->frags++; diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index f21e8bcc..a09c5d10 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -144,13 +144,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p) case SV_MAPCHANGE: getstring(text, p); changemapserv(text, getint(p)); - if(joining && m_arena) - { - /* TESTME - player1->state = CS_DEAD; - showscores(true);*/ - playerdeath(player1); - }; + if(joining && m_arena) deathstate(player1); mapchanged = true; break; @@ -266,7 +260,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p) if(m_ctf) { flaginfo &flag = flaginfos[team_opposite(team_int(d->team))]; - if(flag.state == CTFF_STOLEN && flag.actor == d) playerdeath(player1); // punish for ctf TK + if(flag.state == CTFF_STOLEN && flag.actor == d) deathstate(player1); // punish for ctf TK }; } else diff --git a/source/src/physics.cpp b/source/src/physics.cpp index ab8472b5..799928c8 100644 --- a/source/src/physics.cpp +++ b/source/src/physics.cpp @@ -165,6 +165,9 @@ VARP(maxroll, 0, 0, 20); // moveres indicated the physics precision (which is lower for monsters and multiplayer prediction) // local is false for multiplayer prediction +//TESTME +VAR(test12, 0, 0, 1); + void moveplayer(physent *pl, int moveres, bool local, int curtime) { const bool water = hdr.waterlevel>pl->o.z-0.5f; diff --git a/source/src/protos.h b/source/src/protos.h index ec17abb6..ead6d820 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -98,7 +98,7 @@ extern void updateworld(int curtime, int lastmillis); extern void startmap(char *name); extern void changemap(char *name); extern void initclient(); -extern void playerdeath(playerent *pl); +extern void deathstate(playerent *pl); extern void spawnplayer(playerent *d); extern void selfdamage(int damage, int actor, playerent *act, bool gib = false, playerent *pl = player1); extern playerent *newplayerent(); diff --git a/source/src/server.cpp b/source/src/server.cpp index 44cc3297..1d3e98a8 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -375,9 +375,8 @@ char *disc_reasons[] = { "normal", "end of packet", "client num", "kicked by mas void disconnect_client(int n, int reason = -1) { if(!clients.inrange(n) || clients[n]->type!=ST_TCPIP) return; - if(m_ctf) - loopi(2) if(ctfflags[i].state==CTFF_STOLEN && ctfflags[i].actor_cn==n) - flagaction(i, SV_FLAGDROP, -1); // TESTME + if(m_ctf) loopi(2) if(ctfflags[i].state==CTFF_STOLEN && ctfflags[i].actor_cn==n) + flagaction(i, SV_FLAGDROP, -1); client &c = *clients[n]; clientscore *sc = findscore(c, true); if(sc) *sc = c.score; diff --git a/source/src/weapon.cpp b/source/src/weapon.cpp index a34f6819..67cde881 100644 --- a/source/src/weapon.cpp +++ b/source/src/weapon.cpp @@ -346,36 +346,41 @@ void moveprojectiles(float time) }; }; -void throw_nade(playerent *d, vec &to, bounceent *p) +void throw_nade(playerent *d, vec &vel, bounceent *p) { if(!p || !d) return; playsound(S_GRENADETHROW); - - p->bouncestate = NADE_THROWED; - p->o = d->o; - p->vel.z = sinf(RAD*d->pitch); - float speed = cosf(RAD*d->pitch); - p->vel.x = sinf(RAD*d->yaw)*speed; - p->vel.y = -cosf(RAD*d->yaw)*speed; - - p->vel.mul(1.7f); - - vec throwdir = p->vel; + vec throwdir(p->vel = vel); throwdir.mul(2*d->radius); + p->o = d->o; p->o.add(throwdir); + p->bouncestate = NADE_THROWED; d->thrownademillis = lastmillis; d->inhandnade = NULL; if(d==player1) { - vec &from = d->o; player1->lastaction = lastmillis; - addmsg(SV_SHOT, "ri8", d->gunselect, (int)(from.x*DMF), (int)(from.y*DMF), (int)(from.z*DMF), (int)(to.x*DMF), (int)(to.y*DMF), (int)(to.z*DMF), lastmillis-p->millis); + addmsg(SV_SHOT, "ri8", d->gunselect, (int)(d->o.x*DMF), (int)(d->o.y*DMF), (int)(d->o.z*DMF), (int)(vel.x*DMF), (int)(vel.y*DMF), (int)(vel.z*DMF), lastmillis-p->millis); }; }; +void throw_nade(playerent *d, bounceent *p) +{ + if(!d || !p) return; + + float speed = cosf(RAD*d->pitch); + vec vel; + vel.z = sinf(RAD*d->pitch); + vel.x = sinf(RAD*d->yaw)*speed; + vel.y = -cosf(RAD*d->yaw)*speed; + vel.mul(1.7f); + + throw_nade(d, vel, p); +}; + bounceent *new_nade(playerent *d, int millis = 0) { bounceent *p = newbounceent(); @@ -393,13 +398,7 @@ bounceent *new_nade(playerent *d, int millis = 0) void explode_nade(bounceent *i) { if(!i) return; - - if(i->bouncestate != NADE_THROWED) - { - vec o = i->owner->o; - o.add(0.1f); - throw_nade(i->owner, o, i); - }; + if(i->bouncestate != NADE_THROWED) throw_nade(i->owner, vec(0,0,0), i); playsound(S_FEXPLODE, &i->o); newprojectile(i->o, i->o, 1, i->owner==player1, i->owner, GUN_GRENADE); }; @@ -421,9 +420,11 @@ void shootv(int gun, vec &from, vec &to, playerent *d, bool local, int nademilli case GUN_PISTOL: case GUN_SUBGUN: case GUN_ASSAULT: + { addshotline(d, from, to); particle_splash(0, 5, 250, to); break; + }; case GUN_GRENADE: { @@ -431,15 +432,17 @@ void shootv(int gun, vec &from, vec &to, playerent *d, bool local, int nademilli { bounceent *p = new_nade(d, nademillis); throw_nade(d, to, p); - } + }; + break; }; - break; - + case GUN_SNIPER: + { addshotline(d, from, to); particle_splash(0, 50, 200, to); particle_trail(1, 500, from, to); break; + }; }; }; @@ -542,6 +545,7 @@ bool hasammo(playerent *d) // bot mod if (d->type==ENT_BOT) playsound(S_NOAMMO, &d->o); else playsoundc(S_NOAMMO); d->gunwait = 250; + d->lastaction = lastmillis; d->lastattackgun = -1; return false; } else return true; @@ -584,10 +588,8 @@ void shoot(playerent *d, vec &targ) d->lastaction = lastmillis; d->lastattackgun = d->gunselect; } - else if(!d->attacking && d->inhandnade && attacktime>grenadepulltime) // throw - { - throw_nade(d, targ, d->inhandnade); - } + else if(!d->attacking && d->inhandnade && attacktime>grenadepulltime) throw_nade(d, d->inhandnade); + return; } else diff --git a/source/vcpp/cube.suo b/source/vcpp/cube.suo index 17b2a8f496bdd542d555f839c15c55c65b92bcf5..449f83533ad63e577f767adf1ecd9077c69f494d 100644 GIT binary patch delta 6615 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 ry!z}iV;bI)vUwcKU-#$Pnln=9=J^us3y