LucasForums

LucasForums (http://www.lucasforums.com/index.php)
-   JA Coding (http://www.lucasforums.com/forumdisplay.php?f=539)
-   -   Q3 Engine Game Bugs / JA bugs (http://www.lucasforums.com/showthread.php?t=140104)

ensiform 11-13-2004 12:53 PM

Q3 Engine Game Bugs / JA bugs
 
1. (g_cmds.c) cmd_where_f should use
vtos( ent->r.currentOrigin ) in the print too show current location.
2. bot_minplayers removerandom bot bug where it kicks spectators watching them instead of the bot:

change the following in g_bot.c:

trap_SendConsoleCommand( EXEC_INSERT, va("kick \"%s\"\n", netname) );

to

trap_SendConsoleCommand( EXEC_INSERT, va("clientkick \"%d\"\n", cl->ps.clientNum));

3. Something i found in ET mod-source so credit them and me...

in g_client.c below the check for invaild pw put:

// Gordon: porting q3f flag bug fix
// If a player reconnects quickly after a disconnect, the client disconnect may never be called, thus flag can get lost in the ether
if( ent->inuse ) {
G_LogPrintf( "Forcing disconnect on active client: %i\n", ent-g_entities );
// so lets just fix up anything that should happen on a disconnect
ClientDisconnect( ent-g_entities );
}

4. bug in password checking if statement also in g_client.c:

SVF_BOT isnt set till below so change it to !isBot

5. remapShader in cg_servercmds.c is bugged, just comment out old and replace with the following if u plan on having a client also:

if ( Q_strncmp (cmd, "remapShader", 11) == 0 ) {
if (trap_Argc() == 4) {
char shader1[MAX_QPATH];
char shader2[MAX_QPATH];
Q_strncpyz(shader1, CG_Argv(1), sizeof(shader1));
Q_strncpyz(shader2, CG_Argv(2), sizeof(shader2));
trap_R_RemapShader(shader1, shader2, CG_Argv(3));
return;
}
}

6. for now from my other post Tinny showed me how too fix player sliding:
in bg_pmove.c u will find:

// If on a client then there is no friction
else if ( pm->ps->groundEntityNum < MAX_CLIENTS )
{
drop = 0;
}

comment that out and compile cgame and game i think for this too work.

Finally, if you would like me too share my /dropflag cmd drop me a pm. it should be pretty much exploit proof. i have trace in it so that if u toss it next to a wall it does not go out of level.

i also did fix the connection screen bug but i feel that i didnt need to show this now :)

also i may suggest disabling the debug cmds in g_cmds.c or u could fix em up and disable use of -1 for setsabermove :) and make a cvar too allow/disallow them.

(debugThrow, debugDropSaber, debugSetSaberMove, debugKnockMeDown, debugSetBodyAnim, debugDismemberment, and debugSaberSwitch)

razorace 11-13-2004 06:08 PM

Just compiling your code with the "Final" Compile configuration removes the issue with the debug commands being availible to players.

ensiform 11-13-2004 06:32 PM

exactly but my mod allows them with a cvar but some mods dont notice the ifndef final_build around them.

Tinny 11-14-2004 02:41 PM

Thanks a lot for those Ensiform, btw what exactly is /dropflag?

ensiform 11-15-2004 04:09 AM

heh its to toss the flag in ctf :)

ensiform 11-15-2004 12:31 PM

Anybody know how to fix the warning that comes up from this line of code in cg_players.c:

const unsigned char savRGBA[3] = {legs.shaderRGBA[0],legs.shaderRGBA[1],legs.shaderRGBA[2]};

The warning is: warning C4204: nonstandard extension used : non-constant aggregate initializer

um ppl feel free too post your bugfixes here :). can we get this to be an announcement or sticky ?

razorace 11-15-2004 09:12 PM

The error is due to C not liking you initizing your vec3_ts and similar data thingys when you define them. Do the following to fix this:

cg_players.c, CG_Player()
Quote:

const unsigned char savRGBA[3] = {legs.shaderRGBA[0],legs.shaderRGBA[1],legs.shaderRGBA[2]};
=>
Quote:

unsigned char savRGBA[3];
savRGBA[0] = legs.shaderRGBA[0];
savRGBA[1] = legs.shaderRGBA[1];
savRGBA[2] = legs.shaderRGBA[2];

ensiform 11-16-2004 02:55 PM

that code gives this :(


warning C4132: 'savRGBA' : const object should be initialized
error C2166: l-value specifies const object
error C2166: l-value specifies const object
error C2166: l-value specifies const object

razorace 11-16-2004 03:29 PM

My bad. Remove the "const" from the define.

EDIT: The code in the above post has been fixed to remove that problem.

ensiform 11-17-2004 11:01 AM

ah, ty ;) trying to fix all the bugs and warnings to have a bug-free JA for RS :)

ensiform 11-17-2004 02:27 PM

Here are some sound bugfixes:

when you use meditate/bow and saber is not out, usually with staff or dual sabers the saber off sound still plays fix:

meditate:

where it says

{//turn off second saber
just above the G_Sound add

if (ent->client->ps.weapon == WP_SABER)

same for {//turn off first
if (ent->client->ps.weapon == WP_SABER)

do the same with bow.

in g_cmds.c find the Cmd_SaberAttackCycle_f command

and look for the G_Sound 's in it and just add above them:
if (ent->client->ps.weapon == WP_SABER)

i suppose you could just have a return towards the top of the function like:

if (ent->client->ps.weapon == WP_SABER) {
return;
}

hope that helps :)

ensiform 11-20-2004 05:37 AM

CopyToBodyQue has a bug where your custom rgb is used even when in team game. to fix:

Code:

                body->s.customRGBA[0] = ent->client->ps.customRGBA[0];
                body->s.customRGBA[1] = ent->client->ps.customRGBA[1];
                body->s.customRGBA[2] = ent->client->ps.customRGBA[2];
                body->s.customRGBA[3] = ent->client->ps.customRGBA[3];

should be:

Code:

        if (g_gametype.integer >= GT_TEAM) {
                switch(ent->client->sess.sessionTeam)
                {
                case TEAM_RED:
                        body->s.customRGBA[0] = 255;
                        body->s.customRGBA[1] = 50;
                        body->s.customRGBA[2] = 50;
                        break;
                case TEAM_BLUE:
                        body->s.customRGBA[0] = 75;
                        body->s.customRGBA[1] = 75;
                        body->s.customRGBA[2] = 255;
                        break;
                default:
                        body->s.customRGBA[0] = ent->client->ps.customRGBA[0];
                        body->s.customRGBA[1] = ent->client->ps.customRGBA[1];
                        body->s.customRGBA[2] = ent->client->ps.customRGBA[2];
                        body->s.customRGBA[3] = ent->client->ps.customRGBA[3];
                        break;
                }
        } else {
                body->s.customRGBA[0] = ent->client->ps.customRGBA[0];
                body->s.customRGBA[1] = ent->client->ps.customRGBA[1];
                body->s.customRGBA[2] = ent->client->ps.customRGBA[2];
                body->s.customRGBA[3] = ent->client->ps.customRGBA[3];
        }


razorace 11-20-2004 07:33 AM

Ahh, I've actually noticed that bug. Thanks for the fix!

ensiform 11-20-2004 08:38 AM

hehe, i doubt im gonna get a reply from masterhex about the sound tracker thing though.

razorace 11-20-2004 05:50 PM

Exactly what was the sound tracker problem again? I thought the solution was to use SoundOnEnt instead of G_Sound.

ensiform 11-20-2004 06:25 PM

um according too hex's original post it's in CG_UpdateSoundTrackers which is in cg_view.c.

razorace 11-20-2004 07:08 PM

What's the symptoms of the bug again?

ensiform 11-21-2004 12:20 PM

um the sounds do not always play when flag taken/return/captures some other sounds too i believe. set your thread cutoff too show all and look back at hex's old thread.

ensiform 11-23-2004 07:19 PM

has anyone fixed ICARUS with NPC's for MP like SP ? so that u can use scripts with npc's too be smart :) ?

razorace 11-23-2004 09:06 PM

I have. I'm working on getting the SP maps to run as well as possible in MP. I've made great progress so far.

ensiform 11-24-2004 05:11 AM

care too share this fixed code ? :D

razorace 11-24-2004 09:49 AM

It's all availible on the OJP repository. The various fixes require a lot of code addtions/changes thruout the SDK so I can't just post the changes.

ensiform 11-24-2004 10:03 AM

got a link to the ojp sdk ?

Tinny 11-27-2004 08:58 AM

You have to use TortoiseCVS, check out How to access the OJP source in the OJP forum which is located in the Hosted forums.

ensiform 11-27-2004 07:16 PM

did but it aint working right.

razorace 11-27-2004 09:51 PM

Well, our repository server was down yesterday. I suggest you try again today.

ensiform 12-05-2004 11:57 AM

dang thats too much work just too get the sdk for ojp :(

razorace 12-05-2004 12:07 PM

You only have to do it once and after that updates are a two click process. OJP's SDK changes about daily.

ASk 12-15-2004 08:04 AM

Quote:

The warning is: warning C4204: nonstandard extension used : non-constant aggregate initializer
Just a little clarification - you may only initialize a const with a constant expression (i.e a number). The reason for this is simple - when the compiler compiles your code, the const variable is replaced by its value everywhere it appears. Initializing it with the value of another variable can't be resolved until run-time, therefore it's not an acceptable behavior.

Since the const variable must be resolved during compile time and not run-time, you get that error.

ensiform 12-17-2004 04:00 PM

yes but that was a lucas/raven bug not one of mine :)

GangsterAngel 12-19-2004 01:15 PM

not sure if this is a 'bug' ,
but vehicles do not open shields,

FIX:
Code:

void ShieldTouch(gentity_t *self, gentity_t *other, trace_t *trace)
{

        gentity_t *owner;
        owner=self->parent;
               
        //Vehicle open shield's too! - GA
        if(other->s.NPC_class == CLASS_VEHICLE) {
if(other->m_pVehicle->GA_LastRider==NULL)return;
else {
other = other->m_pVehicle->GA_LastRider;
if(!other->inuse || !other->client)return;
}
        }

        if (g_gametype.integer >= GT_TEAM)
        { // let teammates through
                // compare the parent's team to the "other's" team
                if (self->parent && ( self->parent->client) && (other->client))
                {
                        if (OnSameTeam(self->parent, other))
                        {
                                ShieldGoNotSolid(self);
                        }
                }
        }
        else
        {//let the person who dropped the shield through
                if (self->parent && self->parent->s.number == other->s.number)
                {
                        ShieldGoNotSolid(self);
                }
                else if(InSameGang(owner,other)) ShieldGoNotSolid(self);
                else if(self->genericValue13!=0 && self->genericValue13 <= other->client->pers.ShieldRank)ShieldGoNotSolid(self);//Rank based shiels
        }
//NPC's who leader owns the shield

if (other && other->inuse && other->s.eType==ET_NPC){
//if(other->client->leader==owner)ShieldGoNotSolid(self);
///Not going to use the above way ,, just going to call ShieldTouch on the owner
ShieldTouch(self,other->client->leader,NULL);

        }
}


GangsterAngel 12-19-2004 01:18 PM

forgot to add. that function has GA_Lastrider in it ,
witch is a value set when someone gets on a vehicle.
so the vehicle remembers the last person on it,

also. it has my "Rank shields" in it , that have to be removed,

( Basicly u just need the top bit added too yours )

razorace 12-19-2004 04:45 PM

By shields you mean the deployable shield item?

GangsterAngel 12-19-2004 04:48 PM

yes i do.

razorace 03-01-2005 02:00 PM

(Bump Question) Say, what does "remapShader" do anyway?

Wudan 03-04-2005 12:13 PM

If I recall it tells the engine and replace all instances of shader 'a' with shader 'b', and gets cleared when a map is loaded.

razorace 03-04-2005 02:05 PM

so, what uses it?

ensiform 07-08-2005 08:28 PM

the actual fix for #4 of mine at the top should be:

Code:

        if ( !isBot && g_needpass.integer && (strcmp(Info_ValueForKey ( userinfo, "ip" ), "localhost") != 0)) {

ensiform 07-08-2005 08:29 PM

gloat really should only work when saber is out because it shows sparks even when weapon is not saber...

Code:

                        if ( ent->client->ps.weapon == WP_SABER )
                        {
                                if ( ent->client->saber[0].gloatAnim != -1 )
                                {
                                        anim = ent->client->saber[0].gloatAnim;
                                }
                                else if ( ent->client->saber[1].model
                                                && ent->client->saber[1].model[0]
                                                && ent->client->saber[1].gloatAnim != -1 )
                                {
                                        anim = ent->client->saber[1].gloatAnim;
                                }
                                else
                                {
                                        switch ( ent->client->ps.fd.saberAnimLevel )
                                        {
                                        case SS_FAST:
                                        case SS_TAVION:
                                                anim = BOTH_VICTORY_FAST;
                                                break;
                                        case SS_MEDIUM:
                                                anim = BOTH_VICTORY_MEDIUM;
                                                break;
                                        case SS_STRONG:
                                        case SS_DESANN:
                                                if ( ent->client->ps.saberHolstered )
                                                {//turn on first
                                                        G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn );
                                                }
                                                ent->client->ps.saberHolstered = 0;
                                                anim = BOTH_VICTORY_STRONG;
                                                break;
                                        case SS_DUAL:
                                                if ( ent->client->ps.saberHolstered == 1
                                                        && ent->client->saber[1].model
                                                        && ent->client->saber[1].model[0] )
                                                {//turn on second saber
                                                        G_Sound( ent, CHAN_WEAPON, ent->client->saber[1].soundOn );
                                                }
                                                else if ( ent->client->ps.saberHolstered == 2 )
                                                {//turn on first
                                                        G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn );
                                                }
                                                ent->client->ps.saberHolstered = 0;
                                                anim = BOTH_VICTORY_DUAL;
                                                break;
                                        case SS_STAFF:
                                                if ( ent->client->ps.saberHolstered )
                                                {//turn on first
                                                        G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn );
                                                }
                                                ent->client->ps.saberHolstered = 0;
                                                anim = BOTH_VICTORY_STAFF;
                                                break;
                                        }
                                }
                                break;
                        }
                }


razorace 07-09-2005 01:48 AM

While on the subject, has anyone else noticed bots wearing the wrong teams in team games?

Also, I have finally fixed the Hoth Bridge exploit if anyone is interested.


All times are GMT -4. The time now is 06:59 PM.

Powered by vBulletin®
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LFNetwork, LLC ©2002-2011 - All rights reserved.