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)
Just compiling your code with the "Final" Compile configuration removes the issue with the debug commands being availible to players.
exactly but my mod allows them with a cvar but some mods dont notice the ifndef final_build around them.
Thanks a lot for those Ensiform, btw what exactly is /dropflag?
heh its to toss the flag in ctf :)
Anybody know how to fix the warning that comes up from this line of code in cg_players.c:
const unsigned char savRGBA[3] = ;
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 ?
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()
const unsigned char savRGBA[3] = ;
=>
unsigned char savRGBA[3];
savRGBA[0] = legs.shaderRGBA[0];
savRGBA[1] = legs.shaderRGBA[1];
savRGBA[2] = legs.shaderRGBA[2];
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
My bad. Remove the "const" from the define.
EDIT: The code in the above post has been fixed to remove that problem.
ah, ty ;) trying to fix all the bugs and warnings to have a bug-free JA for RS :)
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 :)
CopyToBodyQue has a bug where your custom rgb is used even when in team game. to fix:
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:
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];
}
Ahh, I've actually noticed that bug. Thanks for the fix!
hehe, i doubt im gonna get a reply from masterhex about the sound tracker thing though.
Exactly what was the sound tracker problem again? I thought the solution was to use SoundOnEnt instead of G_Sound.
um according too hex's original post it's in CG_UpdateSoundTrackers which is in cg_view.c.
What's the symptoms of the bug again?
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.
has anyone fixed ICARUS with NPC's for MP like SP ? so that u can use scripts with npc's too be smart :) ?
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.
care too share this fixed code ? :D
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.
got a link to the ojp sdk ?
You have to use TortoiseCVS, check out How to access the OJP source in the OJP forum which is located in the Hosted forums.
did but it aint working right.
Well, our repository server was down yesterday. I suggest you try again today.
dang thats too much work just too get the sdk for ojp :(
You only have to do it once and after that updates are a two click process. OJP's SDK changes about daily.
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.
yes but that was a lucas/raven bug not one of mine :)
not sure if this is a 'bug' ,
but vehicles do not open shields,
FIX:
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);
}
}
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 )
By shields you mean the deployable shield item?
(Bump Question) Say, what does "remapShader" do anyway?
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.
the actual fix for #4 of mine at the top should be:
if ( !isBot && g_needpass.integer && (strcmp(Info_ValueForKey ( userinfo, "ip" ), "localhost") != 0)) {
gloat really should only work when saber is out because it shows sparks even when weapon is not saber...
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;
}
}
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.
Originally posted by razorace
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.
never noticed wrong team colors...
i would like that but siege doesnt work for rs or my basejka :/
no, siege gives max cvars error...
actually base works for me now, for some reason all my rs cvars n **** were in base's config...
but i found a bug in cmd_kill_f with siege...
if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) {
return;
}
shouldnt it be this, i was playing around and when i was specing when i could move, and pressed kill and i actually died again...
if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR || ent->client->tempSpectate > level.time ) {
return;
}
Well, it probably means that RS has simply added too much cvars to the game. I've heard once that it's possible to increase the limit but I've never confirmed that.
not without the engine :/ whats weird is even when i dont make any of them stored in the config either, usually that is what causes it. i suppose u could probably get away with creating another cvartable...
havent been able to fix this yet but:
bot_nochat doesnt really work. ima look into it but im not sure if it is even fixable in mod.
Edit: no i really dont think it is possible without making my own cvar.
Couldn't you just alter the bot chat function so it just disables if the cvar is set.
maybe but the cvar doesnt exist in the game code. i got it working using bot_nochat2.
in ai_util.c find the function BotDoChat
just below the gentity_t *cobject; line add:
if (bot_nochat2.integer)
{
return 0;
}
you will of course need to make the cvar in g_local.h and g_main.c.
Why not just use the original bot_nochat cvar?
cause it doesnt exist and it may do something else in the engine and i dont want to **** it up.