Dom_152 Posted August 13, 2006 Posted August 13, 2006 I have Clan Chat in my Mod but at the moment the only way to use it is to write /say_clan Your Message. Is terhe any way of making it so that messagemode4 is my clan chat. So /bind u messagemode4 would allow people to press U type their message and send it just like normal chat. How can i do it? I've looked for ages and I can't work it out.
ensiform Posted August 13, 2006 Posted August 13, 2006 4 is already taken. ofc you could write a way in cmd_say_f to intercept something like /clan from messagemode. add this above cmd_say_f: /* ================== Cmd_Clan_f ================== */ void Cmd_Clan_f(gentity_t *ent) { char cmd[12]; char *msg; int skipargs = 0; Q_SayArgv(0, cmd, sizeof(cmd)); if(!Q_stricmp(cmd, "say") || !Q_stricmp(cmd, "say_team")) { skipargs = 1; Q_SayArgv(1, cmd, sizeof(cmd)); } if(Q_SayArgc() < 3+skipargs) { SP(va2("Usage: %s [name|slot#] [message]\n\"", cmd)); return; } Q_SayArgv(1+skipargs, name, sizeof(name)); msg = Q_SayConcatArgs(2+skipargs); G_Say(ent, NULL, SAY_CLAN, msg); } replace the old cmd_say_f with this: /* ================== Cmd_Say_f ================== */ void Cmd_Say_f( gentity_t *ent, int mode, qboolean arg0 ) { char *args; // char *msg; if(trap_Argc() < 2 && !arg0) return; args = Q_SayConcatArgs(0); if (!Q_stricmpn(args, "say /clan ", 8) || !Q_stricmpn(args, "say_team /clan ", 13)) { Cmd_Clan_f( ent ); } else { G_Say(ent, NULL, mode, ConcatArgs(((arg0) ? 0 : 1))); } } make sure these are defined below ConcatArgs, and then add them to g_local.h somewhere so you can use them above and elsewhere. // replaces all occurances of "\n" with '\n' char *Q_AddCR(char *s) { char *copy, *place, *start; if(!*s) return s; start = s; while(*s) { if(*s == '\\') { copy = s; place = s; *s++; if(*s && *s == 'n') { *copy = '\n'; while(*++s) { *++copy = *s; } *++copy = '\0'; s = place; continue; } } *s++; } return start; } // A replacement for trap_Argc() that can correctly handle // say "!cmd arg0 arg1" // as well as // say !cmd arg0 arg1 // The client uses the latter for messages typed in the console // and the former when the message is typed in the chat popup int Q_SayArgc(void) { int c = 1; char *s; s = ConcatArgs(0); if(!*s) return 0; while(*s) { if(*s == ' ') { *s++; if(*s != ' ') { c++; continue; } while(*s && *s == ' ') *s++; c++; } *s++; } return c; } // A replacement for trap_Argv() that can correctly handle // say "!cmd arg0 arg1" // as well as // say !cmd arg0 arg1 // The client uses the latter for messages typed in the console // and the former when the message is typed in the chat popup qboolean Q_SayArgv(int n, char *buffer, int bufferLength) { int bc = 1; int c = 0; char *s; if(bufferLength < 1) return qfalse; if(n < 0) return qfalse; *buffer = '\0'; s = ConcatArgs(0); while(*s) { if(c == n) { while(*s && (bc < bufferLength)) { if(*s == ' ') { *buffer = '\0'; return qtrue; } *buffer = *s; *buffer++; *s++; bc++; } *buffer = '\0'; return qtrue; } if(*s == ' ') { *s++; if(*s != ' ') { c++; continue; } while(*s && *s == ' ') *s++; c++; } *s++; } return qfalse; } Now, all you have to do is maybe add password support to cmd_clan_f and make sure msgs checks 3+skiparg, then just do the rest of the checking in g_say and g_sayto. the only way you can make a new messagemode is to write a client hack to load a menu that has a textbox and allows you to press enter and close the menu and send your /say cmd. which imo is very difficult.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.