#include "functions.c" void SendHelp(ServerUserRec *user) { if (user) { UserMessage(user,"; Usage: `logit "); UserMessage(user,"; `logit help - display this message."); UserMessage(user,"; `logit on - enable logit."); UserMessage(user,"; `logit on - disable logit."); } } CommandResult cmdLogIt(ServerUserRec *user, int argc, char *argv[]) { if (!user) { return 0; } switch(argc) { case 0: { SendHelp(user); return 0; }break; case 1: { FILE *File; if (strcmp(argv[0],"help")==0) { SendHelp(user); return 0; } if (strcmp(argv[0],"on")==0) { P_CONF.LogIt = 1; UserMessage(user,"Logit Enabled"); File = fopen("psdata/logit","w"); if (!File) { return 0; } fprintf(File,"1"); fclose(File); return 0; } if (strcmp(argv[0],"off")==0) { P_CONF.LogIt = 0; UserMessage(user,"Logit Disabled"); File = fopen("psdata/logit","w"); if (!File) { return 0; } fprintf(File,"0"); fclose(File); return 0; } SendHelp(user); }break; default: SendHelp(user); return 0; break; } return 0; } AnyType initializeServerPlugin(PluginID pluginID, int argc, char *argv[]) { FILE *File; int chr; FormattedLogMessage(NULL, PLUGIN_NAME, "%s Version %s, %s.", PLUGIN_NAME, PLUGIN_VERSION, COPY_RIGHT_INFO); if (argv[1] && strlen(argv[1])>3) strcpy(P_CONF.log_path,argv[1]); else strcpy(P_CONF.log_path,LOG_PATH); pluginRegisterCommand("logit/", " ", 0, 2, cmdLogIt, 3, "exteneded chat log.\n" "`logit help - display this message.\n" "`logit on - enable logit.\n" "`logit off - disable logit."); File = fopen("psdata/logit","r"); if (!File) { P_CONF.LogIt = 1; FormattedLogMessage(NULL, PLUGIN_NAME, "%s Logit is Enabled.", PLUGIN_NAME); }else{ chr = fgetc(File); if (chr=='1') { P_CONF.LogIt = 1; FormattedLogMessage(NULL, PLUGIN_NAME, "%s Logit is Enabled.", PLUGIN_NAME); } if (chr=='0') { P_CONF.LogIt = 0; FormattedLogMessage(NULL, PLUGIN_NAME, "%s Logit is Disabled.", PLUGIN_NAME); } fclose(File); } return (AnyType)pluginID; } /* this is called when a client sends a msg to the server! */ ClientMsg *handleMessage(ServerState *state, AnyType pluginDat, ClientMsg *msg) { char buf[256] = {0}; if (!state || !msg) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for server msg."); return msg; } switch (msg->eventType) { case MSG_LOGON: { char ipstr[256]; char reghash[256]; ServerUserRec *user = (ServerUserRec*)state->currentUser; ClientMsg_logon *logon = (ClientMsg_logon*)&msg->msg; if ((msg->length < sizeof(ClientMsg_altLogonReply)) || (!logon) || (!user)) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for logon msg."); return msg; } /* Get Reg Hash */ user->crc = logon->rec.crc; user->counter = logon->rec.counter; /* get user ip, name and reghash */ getUserIP(ipstr, user); SeedToWizKey(user, reghash, TRUE); sprintf(buf,"%s %s", reghash, ipstr); Log_Data("LogOn", PtoCstring(logon->rec.userName), buf); }break; case MSG_USERNAME: { ServerUserRec *user = (ServerUserRec*)state->currentUser; ClientMsg_userName *name = (ClientMsg_userName*)&msg->msg; if ((msg->length < sizeof(ClientMsg_userName)) || (!user) || (!name)) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for user name msg."); return msg; } sprintf(buf,"-> \"%s\"",PtoCstring(name->name)); Log_Data("Name Change", PtoCstring(user->user.name), buf); }break; case MSG_XTALK: { ServerUserRec *user = (ServerUserRec*)state->currentUser; ClientMsg_xTalk *xmsg = (ClientMsg_xTalk*)&msg->msg; //- xtalk receive msg char chtstr[256]; if (msg->length < sizeof(uint16) || (!xmsg) || *(uint16 *)(xmsg->text) - 3 > 255 || (!user)) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for xtlk msg."); return msg; } DecryptCString((StringPtr) xmsg->text + 2, chtstr, *(uint16 *)(xmsg->text) - 3, FALSE); sprintf(buf,": %s",chtstr); Log_Data("User Talk", PtoCstring(user->user.name), buf); }break; case MSG_TALK: { ServerUserRec *user = (ServerUserRec*)state->currentUser; ClientMsg_talk *talk = (ClientMsg_talk*)&msg->msg; //- xtalk receive msg if (msg->length < sizeof(ClientMsg_talk) || (!user) || (!talk)) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for talk msg."); return msg; } sprintf(buf,": %s",talk->text); Log_Data("User Talk", PtoCstring(user->user.name), buf); }break; case MSG_XWHISPER: { ServerUserRec *user = (ServerUserRec*)state->currentUser; ClientMsg_xWhisper_request *xwis = (ClientMsg_xWhisper_request*)&msg->msg; ServerUserRec *targ; char chtstr[256]; if (msg->length < sizeof(uint16) || *(uint16 *)(xwis->text) > 252 || (!xwis) || (!user)) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for whisper msg."); return msg; } if (!GetServerUser(xwis->target)) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for whisper msg."); return msg; } targ = GetServerUser(xwis->target); if (!targ) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for whisper msg."); return msg; } DecryptCString((StringPtr) xwis->text + 2, chtstr, *(uint16 *)(xwis->text) - 3, FALSE); sprintf(buf,"-> %s: %s", PtoCstring(targ->user.name),chtstr); Log_Data("User Whisper", PtoCstring(user->user.name), buf); }break; case MSG_PROPDEL: { ServerUserRec *user = (ServerUserRec*)state->currentUser; ClientMsg_propDel *prop = (ClientMsg_propDel*)&msg->msg; if (!user || msg->length < sizeof(ClientMsg_propDel)) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for prop delete msg."); return msg; } if (prop->propNum <= -1) Log_Data("Props Clean", PtoCstring(user->user.name), " "); else Log_Data("Prop Delete", PtoCstring(user->user.name), " "); } case MSG_PROPMOVE: { ServerUserRec *user = (ServerUserRec*)state->currentUser; if (!user) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for whisper msg."); return msg; } Log_Data("Prop Move", PtoCstring(user->user.name), " "); } } return msg; } void noteUserDeletion(ServerState *state, AnyType pluginDat, ServerUserRec *user) { if (!state || !user) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for user deletion."); return; } Log_Data("LogOff", PtoCstring(user->user.name), " "); } void noteUserRoomEntry(ServerState *state, AnyType pluginDat, ServerUserRec *user, ServerRoomRec *room) { char buf[256]; if (!state || !user) { FormattedLogMessage(NULL,PLUGIN_NAME, "error initializing data for user room entry."); return; } sprintf(buf,"%d \"%s\"", room->room.roomID, PtoCstring(room->varBuf+room->room.roomNameOfst)); Log_Data("Room Change", PtoCstring(user->user.name), buf); }