diff -u /home/prool/mud/src/act.comm.cpp ./act.comm.cpp --- /home/prool/mud/src/act.comm.cpp 2013-01-20 20:29:55.000000000 +0200 +++ ./act.comm.cpp 2013-02-09 16:11:04.000000000 +0200 @@ -671,7 +671,7 @@ {"Вы не можете орать.\r\n", /* holler */ "орать", "Вы вне видимости канала.", - KIYEL, + KIGRN, // KIYEL, "заорали", "заорал$g", 4, @@ -681,7 +681,7 @@ {"Вам запрещено кричать.\r\n", /* shout */ "кричать", "Вы вне видимости канала.\r\n", - KIYEL, + KIGRN, // KIYEL, "закричали", "закричал$g", 2, @@ -691,10 +691,10 @@ {"Вам недозволено болтать.\r\n", /* gossip */ "болтать", "Вы вне видимости канала.\r\n", - KYEL, + KIGRN, // KYEL, "заметили", "заметил$g", - 3, + 2, 15, PRF_NOGOSS}, diff -u /home/prool/mud/src/act.informative.cpp ./act.informative.cpp --- /home/prool/mud/src/act.informative.cpp 2013-02-04 16:02:32.000000000 +0200 +++ ./act.informative.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -79,6 +79,8 @@ extern int top_imtypes; extern void show_code_date(CHAR_DATA *ch); +extern int total_players; + /* extern functions */ long find_class_bitvector(char arg); int level_exp(CHAR_DATA * ch, int level); @@ -5681,8 +5683,8 @@ if ((opf = fopen(WHOLIST_FILE, "w")) == 0) return; /* or log it ? *shrug* */ - fprintf(opf, "Кто сейчас в Былинах?\n"); - fprintf(opf, "

Кто сейчас живет в Былинах?


\n"); + fprintf(opf, "Кто сейчас в MUD Virtustan-2\n"); + fprintf(opf, "Кто сейчас в MUD Virtustan-2
\n"); sprintf(buf, "БОГИ
\r\n"); imms = str_add(imms, buf); @@ -5710,7 +5712,7 @@ if (morts_num + imms_num == 0) { - sprintf(buf, "Все ушли на фронт!
"); + sprintf(buf, "НИКОГО
"); buffer = str_add(buffer, buf); } else @@ -5737,6 +5739,9 @@ buffer = str_add(buffer, ".\n"); } + + sprintf(buf, "
Всего игроков %d", total_players=imms_num+morts_num); // prool + buffer = str_add(buffer, buf); fprintf(opf, buffer); Только в .: act.informative.cpp.orig diff -u /home/prool/mud/src/act.other.cpp ./act.other.cpp --- /home/prool/mud/src/act.other.cpp 2013-02-07 14:18:05.000000000 +0200 +++ ./act.other.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -48,6 +48,8 @@ #include "room.hpp" #include "objsave.h" +#include "vmud2.h" // prool + using std::ifstream; using std::fstream; using std::map; @@ -163,6 +165,8 @@ } if (!GET_INVIS_LEV(ch)) act("$n покинул$g игру.", TRUE, ch, 0, 0, TO_ROOM | TO_ARENA_LISTEN); + perslog("вышел", GET_NAME(ch)); // prool + printf("%s %s вышел\n", ptime(), GET_NAME(ch)); sprintf(buf, "%s quit the game.", GET_NAME(ch)); mudlog(buf, NRM, MAX(LVL_GOD, GET_INVIS_LEV(ch)), SYSLOG, TRUE); send_to_char("До свидания, странник... Мы ждем тебя снова!\r\n", ch); @@ -2670,22 +2674,22 @@ send_to_char("Вам некуда возвращаться!\r\n", ch); return; } - if (SECT(ch->in_room) != SECT_SECRET && + if (0/*SECT(ch->in_room) != SECT_SECRET && !ROOM_FLAGGED(ch->in_room, ROOM_DEATH) && !ROOM_FLAGGED(ch->in_room, ROOM_TUNNEL) && !ROOM_FLAGGED(ch->in_room, ROOM_NOTELEPORTIN) && !ROOM_FLAGGED(ch->in_room, ROOM_SLOWDEATH) && !ROOM_FLAGGED(ch->in_room, ROOM_ICEDEATH) && (!ROOM_FLAGGED(ch->in_room, ROOM_GODROOM) || IS_IMMORTAL(ch)) && - Clan::MayEnter(ch, ch->in_room, HCE_PORTAL)) + Clan::MayEnter(ch, ch->in_room, HCE_PORTAL)*/) // prool { send_to_char("У вас не получилось вернуться!\r\n", ch); return; } send_to_char("Вам очень захотелось оказаться подальше от этого места!\r\n", ch); - if (((GET_LEVEL(ch) <= FREE_RECALL_LEVEL) - && (world[ch->in_room]->number > 300)) || IS_GOD(ch)) + if (1/*((GET_LEVEL(ch) <= FREE_RECALL_LEVEL) // prool + && (world[ch->in_room]->number > 300)) || IS_GOD(ch)*/) { if (ch->in_room != real_room(GET_LOADROOM(ch))) { diff -u /home/prool/mud/src/act.wizard.cpp ./act.wizard.cpp --- /home/prool/mud/src/act.wizard.cpp 2013-02-07 14:18:05.000000000 +0200 +++ ./act.wizard.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -1,17 +1,10 @@ /* ************************************************************************ -* File: act.wizard.cpp Part of Bylins * +* File: act.wizard.cpp Part of VMUD * * Usage: Player-level god commands and other goodies * -* * -* All rights reserved. See license.doc for complete information. * -* * -* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University * -* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * -* * -* $Author$ * -* $Date$ * -* $Revision$ * ************************************************************************ */ +#define PROOL_MAX_STRLEN 255 + #include #include @@ -175,6 +168,10 @@ // ACMD(do_godtest); +// prool: +ACMD(do_fflush); +ACMD(do_kogda); +ACMD(do_igroki); #define MAX_TIME 0x7fffffff @@ -663,6 +660,8 @@ } } + send_to_char(newpass, ch); // prool + Player t_victim; if ((victim = get_player_vis(ch, name, FIND_CHAR_WORLD))) { @@ -2180,7 +2179,7 @@ if (!str_cmp(arg, "reboot") && times > 0) { - times = MAX(30, times); + times = MAX(1, times); sprintf(buf, "[ПЕРЕЗАГРУЗКА через %d %s]\r\n", times, desc_count(times, WHAT_SEC)); send_to_all(buf); log("(GC) Reboot by %s.", GET_NAME(ch)); @@ -2193,7 +2192,7 @@ } else if (!str_cmp(arg, "die") && times > 0) { - times = MAX(30, times); + times = MAX(1, times); sprintf(buf, "[ОСТАНОВКА через %d %s]\r\n", times, desc_count(times, WHAT_SEC)); send_to_all(buf); log("(GC) Shutdown die by %s.", GET_NAME(ch)); @@ -2206,7 +2205,7 @@ } else if (!str_cmp(arg, "pause") && times > 0) { - times = MAX(30, times); + times = MAX(1, times); sprintf(buf, "[ОСТАНОВКА через %d %s]\r\n", times, desc_count(times, WHAT_SEC)); send_to_all(buf); log("(GC) Shutdown pause by %s.", GET_NAME(ch)); @@ -6145,3 +6144,45 @@ send_to_char("Ничего не найдено.\r\n", ch); } } + + +ACMD(do_fflush) // prool +{ +fflush(NULL); +send_to_char("fflushed\n",ch); +} + +ACMD(do_kogda) // prool +{ +char str[PROOL_MAX_STRLEN]; +FILE *fp; + + system("sh kogda.sh"); + + // читаем файл вывода и транслируем его игроку + fp=fopen("system.txt","r"); + while (fgets(str,PROOL_MAX_STRLEN,fp)!=NULL) + { + send_to_char(str,ch); + send_to_char("\r",ch); + } + fclose(fp); +} + +ACMD(do_igroki) // prool +{ +char str[PROOL_MAX_STRLEN]; +FILE *fp; + + system("sh igroki.sh"); + + // читаем файл вывода и транслируем его игроку + fp=fopen("system.txt","r"); + while (fgets(str,PROOL_MAX_STRLEN,fp)!=NULL) + { + send_to_char(str,ch); + send_to_char("\r",ch); + } + fclose(fp); +} + Только в .: act.wizard.cpp.orig diff -u /home/prool/mud/src/boards.cpp ./boards.cpp --- /home/prool/mud/src/boards.cpp 2013-02-08 16:28:51.000000000 +0200 +++ ./boards.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -40,7 +40,7 @@ // максимальный размер сообщения const int MAX_MESSAGE_LENGTH = 4096; // мин.левел для поста на общих досках -const int MIN_WRITE_LEVEL = 6; +const int MIN_WRITE_LEVEL = 2; // prool // максимальное кол-во сообщений на одной доске const unsigned int MAX_BOARD_MESSAGES = 200; // максимальное кол-во сообщений в опечатках/ошибках diff -u /home/prool/mud/src/class.cpp ./class.cpp --- /home/prool/mud/src/class.cpp 2013-02-05 14:41:56.000000000 +0200 +++ ./class.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -2002,10 +2002,12 @@ for (std::vector::iterator it = ItemList.begin();it != ItemList.end();++it) { obj = read_object((*it), VIRTUAL); +#if 0 // prool: почему-то вызывает креш if (!OBJ_FLAGGED(obj, ITEM_NOSELL)) SET_BIT(GET_OBJ_EXTRA(obj, ITEM_NOSELL), ITEM_NOSELL); if (!OBJ_FLAGGED(obj, ITEM_DECAY)) SET_BIT(GET_OBJ_EXTRA(obj, ITEM_DECAY), ITEM_DECAY); +#endif if (obj) obj_to_char(obj, ch); }; @@ -3041,7 +3043,7 @@ { log("Ошибка при чтении файла %s: дублирование параметров для %d ремортов", LIB_MISC "grouping", remorts); - return 2; + return 0; // prool: было 2 } if (remorts > MAX_REMORT || remorts < 0) { Только в .: class.cpp.orig diff -u /home/prool/mud/src/comm.cpp ./comm.cpp --- /home/prool/mud/src/comm.cpp 2013-02-08 16:28:51.000000000 +0200 +++ ./comm.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -68,6 +68,8 @@ #include "sets_drop.hpp" #include "fight.h" +#include "vmud2.h" + #ifdef CIRCLE_MACINTOSH /* Includes for the Macintosh */ # define SIGPIPE 13 # define SIGALRM 14 @@ -124,7 +126,6 @@ extern int circle_restrict; extern int mini_mud; extern FILE *player_fl; -extern ush_int DFLT_PORT; extern const char *DFLT_DIR; extern const char *DFLT_IP; extern const char *LOGNAME; @@ -134,6 +135,15 @@ extern int autosave_time; /* see config.cpp */ extern int mana[]; +// prool: +#if 1 +extern int statistic_zones; +extern int statistic_rooms; +extern int statistic_mobs; +extern int statistic_objs; +int total_players; +#endif + extern char *help; extern struct zone_data *zone_table; extern const char *save_info_msg[]; /* In olc.cpp */ @@ -183,6 +193,11 @@ {NULL, "log/imlog.txt", "ИНГРЕДИЕНТНАЯ МАГИЯ"} }; +// prool: +/* Port options ( These need to be altered in order to add more ports.) */ +int ports[10] = {8888,3000,3001,-1,-1,-1,-1,-1,-1,-1}; +socket_t mother_descs[10] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + char src_path[4096]; /* functions in this file */ @@ -195,9 +210,9 @@ void sanity_check(void); void circle_sleep(struct timeval *timeout); int get_from_q(struct txt_q *queue, char *dest, int *aliased); -void init_game(ush_int port); +void init_game(int ports[]); // prool void signal_setup(void); -void game_loop(socket_t mother_desc); +void game_loop(); socket_t init_socket(ush_int port); int new_descriptor(socket_t s); @@ -218,7 +233,7 @@ int set_sendbuf(socket_t s); void setup_logs(void); int open_logfile(log_info * li, FILE * stderr_fp); -//void make_who2html(); +void make_who2html(); #if defined(POSIX) sigfunc *my_signal(int signo, sigfunc * func); @@ -271,7 +286,14 @@ #define FD_CLR(x, y) #endif -#if defined(HAVE_ZLIB) +#define TELOPT_COMPRESS 85 +#define TELOPT_COMPRESS2 86 + +void mssp_start(DESCRIPTOR_DATA * t); + +const char mssp_will[] = {IAC, WILL, MSSP, '\0'}; + +#if 1 // defined(HAVE_ZLIB) // prool:оно никому не мешает и при отсутствии ZLIB /* * MUD Client for Linux and mcclient compression support. * "The COMPRESS option (unofficial and completely arbitary) is @@ -291,8 +313,6 @@ int mccp_start(DESCRIPTOR_DATA * t, int ver); int mccp_end(DESCRIPTOR_DATA * t, int ver); -#define TELOPT_COMPRESS 85 -#define TELOPT_COMPRESS2 86 const char compress_will[] = { IAC, WILL, TELOPT_COMPRESS2, IAC, WILL, TELOPT_COMPRESS, '\0' }; @@ -346,7 +366,7 @@ malloc_options = "A"; #endif - ush_int port; +extern int ports[10]; // prool int pos = 1; const char *dir; @@ -356,6 +376,8 @@ plant_magic(buf2); plant_magic(arg); +total_players=0; + #ifdef CIRCLE_MACINTOSH /* * ccommand() calls the command line/io redirection dialog box from @@ -366,7 +388,6 @@ GUSIDefaultSetup(); #endif - port = DFLT_PORT; dir = DFLT_DIR; while ((pos < argc) && (*(argv[pos]) == '-')) @@ -437,9 +458,9 @@ printf("Usage: %s [-c] [-m] [-q] [-r] [-s] [-d pathname] [port #]\n", argv[0]); exit(1); } - else if ((port = atoi(argv[pos])) <= 1024) + else if ((ports[0] = atoi(argv[pos])) <= 1024) { - printf("SYSERR: Illegal port number %d.\n", port); + printf("SYSERR: Illegal port number %d.\n", ports[0]); exit(1); } } @@ -468,14 +489,14 @@ } else { - log("Running game on port %d.", port); + log("Running game on port %d.", ports[0]); // стль и буст юзаются уже немало где, а про их экспешены никто не думает // пока хотя бы стльные ловить и просто логировать факт того, что мы вышли // по эксепшену для удобства отладки и штатного сброса сислога в файл, т.к. в коре будет фиг try { - init_game(port); + init_game(ports); } catch (std::exception &e) { @@ -493,9 +514,9 @@ /* Init sockets, run game, and cleanup sockets */ -void init_game(ush_int port) +void init_game(int ports[]) { - socket_t mother_desc; + int i; // We don't want to restart if we crash before we get up. touch(KILLSCRIPT_FILE); @@ -504,8 +525,12 @@ log("Finding player limit."); max_players = get_max_players(); - log("Opening mother connection."); - mother_desc = init_socket(port); + log("Binding interface to ports:"); + for (i = 0; ports[i] != -1;i++) { + log( " Opening port %d ...", ports[i]); + mother_descs[i] = init_socket(ports[i]); + } + //python_off scripting::init(); boot_db(); @@ -519,7 +544,7 @@ log("Entering game loop."); - game_loop(mother_desc); + game_loop(); flush_player_index(); @@ -562,7 +587,10 @@ // должно идти после дисконекта плееров FileCRC::save(true); - CLOSE_SOCKET(mother_desc); + for (i = 0; ports[i] != -1;i++) { + CLOSE_SOCKET(mother_descs[i]); + } + if (circle_reboot != 2 && olc_save_list) // Don't save zones. { struct olc_save_info *entry, *next_entry; @@ -886,23 +914,27 @@ chdir(cwd); } -inline void process_io(fd_set input_set, fd_set output_set, fd_set exc_set, fd_set null_set, - socket_t mother_desc, int maxdesc) +inline void process_io(fd_set input_set, fd_set output_set, fd_set exc_set, fd_set null_set, int maxdesc) { DESCRIPTOR_DATA *d, *next_d; char comm[MAX_INPUT_LENGTH]; - int aliased; + int i, aliased; /* Poll (without blocking) for new input, output, and exceptions */ if (select(maxdesc + 1, &input_set, &output_set, &exc_set, &null_time) < 0) { - perror("SYSERR: Select poll"); + log("SYSERR: Select poll /prool"); // prool + //perror("SYSERR: Select poll"); // prool + //printf("%s SYSERR: Select poll\n", ptime()); // prool return; } /* If there are new connections waiting, accept them. */ - if (FD_ISSET(mother_desc, &input_set)) - new_descriptor(mother_desc); + + for (i = 0; mother_descs[i] != -1;i++) { + if (FD_ISSET(mother_descs[i], &input_set)) + new_descriptor(mother_descs[i]); + } /* Kick out the freaky folks in the exception set and marked for close */ for (d = descriptor_list; d; d = next_d) @@ -1050,13 +1082,13 @@ * output and sending it out to players, and calling "heartbeat" functions * such as mobile_activity(). */ -void game_loop(socket_t mother_desc) +void game_loop() { fd_set input_set, output_set, exc_set, null_set; struct timeval last_time, opt_time, process_time, temp_time; struct timeval before_sleep, now, timeout; DESCRIPTOR_DATA *d; - int missed_pulses = 0, maxdesc; + int i, missed_pulses = 0, maxdesc; /* initialize various time values */ null_time.tv_sec = 0; @@ -1074,27 +1106,42 @@ if (descriptor_list == NULL) { log("No connections. Going to sleep."); - //make_who2html(); + make_who2html(); FD_ZERO(&input_set); - FD_SET(mother_desc, &input_set); - if (select(mother_desc + 1, &input_set, (fd_set *) 0, (fd_set *) 0, NULL) < 0) - { - if (errno == EINTR) - log("Waking up to process signal."); - else - perror("SYSERR: Select coma"); - } - else - log("New connection. Waking up."); +#if 1 // 1 - prool + for (i = 0;mother_descs[i] != -1;i++) + FD_SET(mother_descs[i], &input_set); + + if (select(mother_descs[i-1] + 1, &input_set, (fd_set *) 0, (fd_set *) 0, NULL) < 0) { + + if (errno == EINTR) + { + log("Waking up to process signal"); + //printf("Waking up to process signal\n"); //prool + } + else + perror("SYSERR: Select coma"); + } else { + //printf("%s New connection. Waking up\n", ptime()); //prool + log("New connection. Waking up"); + } +#endif gettimeofday(&last_time, (struct timezone *) 0); } /* Set up the input, output, and exception sets for select(). */ FD_ZERO(&input_set); FD_ZERO(&output_set); FD_ZERO(&exc_set); - FD_SET(mother_desc, &input_set); - maxdesc = mother_desc; + maxdesc = -1; + /* add all mother sockets */ + for (i = 0; mother_descs[i] != -1;i++) { + FD_SET(mother_descs[i], &input_set); + if (mother_descs[i] > maxdesc) + maxdesc = mother_descs[i]; + } + + for (d = descriptor_list; d; d = d->next) { #ifndef CIRCLE_WINDOWS @@ -1174,7 +1221,7 @@ /* Now execute the heartbeat functions */ while (missed_pulses--) { - process_io(input_set, output_set, exc_set, null_set, mother_desc, maxdesc); + process_io(input_set, output_set, exc_set, null_set, maxdesc); heartbeat(missed_pulses); } @@ -1280,7 +1327,7 @@ if (!(pulse % (30 * PASSES_PER_SEC))) { - //make_who2html(); + make_who2html(); if (uptime_minutes >= (reboot_uptime - 30) && shutdown_time == 0) { //reboot after 30 minutes minimum. Auto reboot cannot run earlier. @@ -2334,6 +2381,7 @@ "Select one : ", newd); #endif + write_to_descriptor(newd->descriptor, mssp_will, strlen(mssp_will)); #if defined(HAVE_ZLIB) // write_to_descriptor(newd->descriptor, will_sig, strlen(will_sig)); write_to_descriptor(newd->descriptor, compress_will, strlen(compress_will)); @@ -2351,19 +2399,19 @@ if ((cd = iconv_open("UTF-8","KOI8-R")) == (iconv_t) - 1) { - printf("koi_to_utf8: iconv_open error\n"); + printf("%s koi_to_utf8: iconv_open error\n", ptime()); return; } len_i = strlen(str_i); if ((i = iconv(cd, &str_i, &len_i, &str_o, &len_o)) == (size_t) - 1) { - printf("koi_to_utf8: iconv error\n"); + printf("%s koi_to_utf8: iconv error\n", ptime()); return; } *str_o = 0; if (iconv_close(cd) == -1) { - printf("koi_to_utf8: iconv_close error\n"); + printf("%s koi_to_utf8: iconv_close error\n", ptime()); return; } } @@ -2376,18 +2424,18 @@ if ((cd = iconv_open("KOI8-R", "UTF-8")) == (iconv_t) - 1) { - printf("utf8_to_koi: iconv_open error\n"); + printf("%s utf8_to_koi: iconv_open error\n", ptime()); return; } len_i = strlen(str_i); if ((i=iconv(cd, &str_i, &len_i, &str_o, &len_o)) == (size_t) - 1) { - printf("utf8_to_koi: iconv error\n"); + printf("%s utf8_to_koi: iconv error\n", ptime()); // return; } if (iconv_close(cd) == -1) { - printf("utf8_to_koi: iconv_close error\n"); + printf("%s utf8_to_koi: iconv_close error\n", ptime()); return; } } @@ -2818,7 +2866,7 @@ * We don't know what happened, cut them off. This qualifies for * a SYSERR because we have no idea what happened at this point. */ - perror("SYSERR: perform_socket_read: about to lose connection"); + //perror("SYSERR: perform_socket_read: about to lose connection"); // prool return (-1); } @@ -2860,7 +2908,7 @@ read_point[bytes_read] = '\0'; /* terminate the string */ -#if defined(HAVE_ZLIB) +#if 1 // defined(HAVE_ZLIB) // prool:этот блок уже не только занимается сжатием, но и MSSP /* Search for an "Interpret As Command" marker. */ for (ptr = read_point; *ptr; ptr++) { @@ -2880,6 +2928,13 @@ mccp_start(t, 1); else if (ptr[2] == (char) TELOPT_COMPRESS2) mccp_start(t, 2); + else if (ptr[2] == (char) MSSP) // prool + {char buf0[100]; + mssp_start(t); + // printf("%s MSSP start %s. Online %i\n", ptime(), t->host, total_players); + sprintf(buf0,"MSSP start %s. Online %i", t->host, total_players); + log(buf0); + } else continue; memmove(ptr, ptr + 3, bytes_read - (ptr - read_point) - 3 + 1); @@ -3307,6 +3362,8 @@ check_light(d->character, LIGHT_NO, LIGHT_NO, LIGHT_NO, LIGHT_NO, -1); Crash_ldsave(d->character); sprintf(buf, "Closing link to: %s.", GET_NAME(d->character)); + perslog("потерял связь", GET_NAME(d->character)); // prool + printf("%s %s потерял связь\n", ptime(), GET_NAME(d->character)); // prool mudlog(buf, NRM, MAX(LVL_GOD, GET_INVIS_LEV(d->character)), SYSLOG, TRUE); } d->character->desc = NULL; @@ -3314,6 +3371,7 @@ else { sprintf(buf, "Losing player: %s %s.", GET_NAME(d->character) ? GET_NAME(d->character) : "", STATE(d) > CON_CLOSE && STATE(d) < CON_DISCONNECT ? d->host : ""); + // printf("Losing player: %s %s\n", GET_NAME(d->character) ? GET_NAME(d->character) : "", STATE(d) > CON_CLOSE && STATE(d) < CON_DISCONNECT ? d->host : ""); // prool mudlog(buf, LGH, MAX(LVL_GOD, GET_INVIS_LEV(d->character)), SYSLOG, TRUE); if (!any_other_ch(d->character)) Depot::exit_char(d->character); @@ -3375,7 +3433,7 @@ next_d = d->next; if (STATE(d) != CON_PASSWORD && STATE(d) != CON_GET_NAME && STATE(d) != CON_GET_KEYTABLE) continue; - if (!d->idle_tics) + if (d->idle_tics<3) // prool: timeout in ticks { d->idle_tics++; continue; @@ -4251,7 +4309,7 @@ if (li->logfile) { - printf("Using log file '%s'%s.\n", li->filename, stderr_fp ? " with redirection" : ""); + //printf("Using log file '%s'%s.\n", li->filename, stderr_fp ? " with redirection" : ""); return (TRUE); } Только в .: comm.cpp.orig diff -u /home/prool/mud/src/config.cpp ./config.cpp --- /home/prool/mud/src/config.cpp 2013-01-20 20:29:55.000000000 +0200 +++ ./config.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -111,6 +111,8 @@ { if ((GET_LEVEL(ch) < 15) && (GET_REMORT(ch) == 0)) return (0); + else if (GET_LEVEL(ch)==LVL_IMPL) // prool + return 0; else return ((GET_LEVEL(ch) + 30 * GET_REMORT(ch)) * 2); } @@ -189,18 +191,18 @@ /* ROOM NUMBERS */ /* virtual number of room that mortals should enter at */ -room_vnum mortal_start_room = 4056; /* tavern in village */ +room_vnum mortal_start_room = 9900; // 4056 tavern in village /* virtual number of room that immorts should enter at by default */ room_vnum immort_start_room = 100; /* place in castle */ /* virtual number of room that frozen players should enter at */ -room_vnum frozen_start_room = 101; /* something in castle */ +room_vnum frozen_start_room = 102; /* something in castle */ /* virtual number of room that helled players should enter at */ -room_vnum helled_start_room = 101; /* something in castle */ -room_vnum named_start_room = 105; -room_vnum unreg_start_room = 103; +room_vnum helled_start_room = 102; /* something in castle */ +room_vnum named_start_room = 102; +room_vnum unreg_start_room = 102; /****************************************************************************/ /****************************************************************************/ @@ -209,15 +211,6 @@ /* GAME OPERATION OPTIONS */ /* - * This is the default port on which the game should run if no port is - * given on the command-line. NOTE WELL: If you're using the - * 'autorun' script, the port number there will override this setting. - * Change the PORT= line in autorun instead of (or in addition to) - * changing this. - */ -ush_int DFLT_PORT = 4000; - -/* * IP address to which the MUD should bind. This is only useful if * you're running Circle on a host that host more than one IP interface, * and you only want to bind to *one* of them instead of all of them. diff -u /home/prool/mud/src/constants.cpp ./constants.cpp --- /home/prool/mud/src/constants.cpp 2013-02-05 14:41:56.000000000 +0200 +++ ./constants.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -23,22 +23,22 @@ const char *circlemud_version = "CircleMUD, version 3.00 beta patchlevel 16"; -int HORSE_VNUM = 4014; +int HORSE_VNUM = 2008; int HORSE_COST = 100; -int START_SWORD = 112; -int START_CLUB = 121; -int START_KNIFE = 122; -int START_SCROLL = 115; -int START_BREAD = 125; -int CREATE_LIGHT = 126; -int START_LIGHT = 127; -int START_ARMOR = 113; -int START_BOTTLE = 114; -int START_BOW = 109; -int START_WRUNE = 693; -int START_ERUNE = 692; -int START_ARUNE = 695; -int START_FRUNE = 694; +int START_SWORD = 9909; +int START_CLUB = 2024; +int START_KNIFE = 9908; +int START_SCROLL = 9970; +int START_BREAD = 9902; +int CREATE_LIGHT = 9908; +int START_LIGHT = 9907; +int START_ARMOR = 9924; +int START_BOTTLE = 9905; +int START_BOW = 9974; +int START_WRUNE = 223; +int START_ERUNE = 222; +int START_ARUNE = 225; +int START_FRUNE = 224; /*Experience multiplication coefficients*/ double exp_coefficients[] = @@ -2291,7 +2291,7 @@ }; //-Polud -const char *places_of_birth[] = { "Киев", +const char *places_of_birth[] = { "Харьков", "Новгород", "\n" }; Только в .: constants.cpp.orig diff -u /home/prool/mud/src/db.cpp ./db.cpp --- /home/prool/mud/src/db.cpp 2013-02-04 16:02:32.000000000 +0200 +++ ./db.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -7,11 +7,10 @@ * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University * * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * * * -* $Author$ * -* $Date$ * -* $Revision$ * ************************************************************************ */ +//#define DEBUG // by prool + #define __DB_C__ #include @@ -73,8 +72,15 @@ #include "sets_drop.hpp" #include "fight.h" +#include "vmud2.h" + #define TEST_OBJECT_TIMER 30 +// prool: +#define DEFAULT_MAX_MOB_IN_WORLD 100 +#define DEFAULT_MAX_MOB_IN_ROOM 2 +#define DEFAULT_MAX_OBJ_IN_WORLD 100 + /************************************************************************** * declarations of global containers and objects * **************************************************************************/ @@ -1762,12 +1768,21 @@ exit(1); log("Booting specials assigment"); +#ifdef DEBUG + puts("Booting specials assigment"); +#endif init_spec_procs(); log("Booting guilds"); +#ifdef DEBUG + puts("Booting guilds"); // prool +#endif init_guilds(); log("Booting portals for 'town portal' spell"); +#ifdef DEBUG + puts("Booting portals for 'town portal' spell"); // prool +#endif portals_list = NULL; init_portals(); @@ -1868,6 +1883,7 @@ ObjSystem::init_item_levels(); boot_time = time(0); + perslog("MUD перезапущен", " "); // prool log("Boot db -- DONE."); } @@ -2217,14 +2233,15 @@ } rewind(index); - fscanf(index, "%s\n", buf1); - while (*buf1 != '$') + while (1) { + fscanf(index, "%s\n", buf1); + if (*buf1=='$') break; // prool sprintf(buf2, "%s%s", prefix, buf1); if (!(db_file = fopen(buf2, "r"))) { log("SYSERR: %s: %s", buf2, strerror(errno)); - exit(1); + continue; // exit(1); // prool: отсутствие файла просто игнорируем, это не критично } switch (mode) { @@ -2254,7 +2271,6 @@ if (mode == DB_BOOT_WLD) parse_room(db_file, 0, TRUE); fclose(db_file); - fscanf(index, "%s\n", buf1); } fclose(index); // Create virtual room for zone @@ -5204,6 +5220,17 @@ switch (ZCMD.command) { case 'M': + + // by prool: Если ZCMD.arg2 (максимальное кол-во мобов в мире, как я понял) = 0 или -1 + // (то есть, при создании моба в редакторе это поле забыли прописать), то присваиваем + // ему значение DEFAULT_MAX_MOB_IN_WORLD + if ((ZCMD.arg2==0) || (ZCMD.arg2==-1)) ZCMD.arg2=DEFAULT_MAX_MOB_IN_WORLD; + + // by prool: Если ZCMD.arg4 (максимальное кол-во мобов в комнате, как я понял) = 0 + // (то есть, при создании моба в редакторе это поле забыли прописать), то присваиваем + // ему значение DEFAULT_MAX_MOB_IN_ROOM + if (ZCMD.arg4==0) ZCMD.arg4=DEFAULT_MAX_MOB_IN_ROOM; + /* read a mobile */ // 'M' mob = NULL; //Добавлено Ладником @@ -5263,6 +5290,16 @@ case 'O': /* read an object */ // 'O' + + // by prool: Если ZCMD.arg2 (максимальное кол-во объектов в мире, как я понял) = 0 или -1 + // (то есть, при создании объекта в редакторе это поле забыли прописать), то присваиваем + // ему значение DEFAULT_MAX_OBJ_IN_WORLD + if ((ZCMD.arg2==0) || (ZCMD.arg2==-1)) ZCMD.arg2=DEFAULT_MAX_OBJ_IN_WORLD; + +#ifdef DEBUG +printf("load obj. lbl 1\n"); +#endif + /* Проверка - сколько всего таких же обьектов надо на эту клетку */ for (cmd_tmp = 0, obj_in_room_max = 0; ZCMD_CMD(cmd_tmp).command != 'S'; cmd_tmp++) if ((ZCMD_CMD(cmd_tmp).command == 'O') @@ -5277,7 +5314,7 @@ obj_in_room++; /* Теперь грузим обьект если надо */ if ((obj_index[ZCMD.arg1].number + obj_index[ZCMD.arg1].stored < - GET_OBJ_MIW(obj_proto[ZCMD.arg1]) || GET_OBJ_MIW(obj_proto[ZCMD.arg1]) == -1) && + GET_OBJ_MIW(obj_proto[ZCMD.arg1]) || GET_OBJ_MIW(obj_proto[ZCMD.arg1])<=0) && (ZCMD.arg4 <= 0 || number(1, 100) <= ZCMD.arg4) && (obj_in_room < obj_in_room_max)) { @@ -5288,8 +5325,17 @@ if (!obj_to_room(obj, ZCMD.arg3)) { extract_obj(obj); +#ifdef DEBUG +printf("load obj. lbl NO\n"); +#endif break; } + else + { +#ifdef DEBUG +printf("load obj. lbl OK\n"); +#endif + } load_otrigger(obj); } else @@ -5307,6 +5353,9 @@ } } tmob = NULL; +#ifdef DEBUG +printf("load obj. lbl z\n"); +#endif break; case 'P': diff -u /home/prool/mud/src/db.h ./db.h --- /home/prool/mud/src/db.h 2012-11-21 23:43:02.000000000 +0200 +++ ./db.h 2013-02-08 16:28:51.000000000 +0200 @@ -166,7 +166,8 @@ #define BAN_FILE LIB_ETC"badsites" /* for the siteban system */ #define PROXY_BAN_FILE LIB_ETC"badproxy" /* for the siteban system */ -#define WHOLIST_FILE LIB_STAT"wholist.html" /* for the stat system */ +// #define WHOLIST_FILE LIB_STAT"wholist.html" /* for the stat system */ +#define WHOLIST_FILE "/var/www/mudstat/vmud2.html" // by prool /*Dead load (dl_load) options*/ #define DL_ORDINARY 0 diff -u /home/prool/mud/src/.depend ./.depend --- /home/prool/mud/src/.depend 2013-01-19 23:12:48.000000000 +0200 +++ ./.depend 2013-02-08 16:33:00.000000000 +0200 @@ -5,11 +5,11 @@ house.h house_exp.hpp room.hpp spam.hpp act.informative.o: act.informative.cpp conf.h sysdep.h structs.h utils.h \ features.hpp obj.hpp pugixml.hpp pugiconfig.hpp comm.h interpreter.h \ - handler.h db.h spells.h skills.h fight.h screen.h constants.h pk.h \ - dg_scripts.h mail.h im.h house.h house_exp.hpp char.hpp player_i.hpp \ - morph.hpp remember.hpp description.h privilege.hpp depot.hpp glory.hpp \ - random.hpp char_player.hpp quested.hpp mobmax.hpp dps.hpp parcel.hpp \ - liquid.hpp modify.h room.hpp glory_const.hpp player_races.hpp corpse.hpp \ + handler.h db.h spells.h skills.h fight.h char.hpp player_i.hpp morph.hpp \ + screen.h constants.h pk.h dg_scripts.h mail.h im.h house.h house_exp.hpp \ + remember.hpp description.h privilege.hpp depot.hpp glory.hpp random.hpp \ + char_player.hpp quested.hpp mobmax.hpp dps.hpp parcel.hpp liquid.hpp \ + modify.h room.hpp glory_const.hpp player_races.hpp corpse.hpp \ sets_drop.hpp act.item.o: act.item.cpp conf.h sysdep.h structs.h utils.h features.hpp \ obj.hpp pugixml.hpp pugiconfig.hpp comm.h interpreter.h handler.h db.h \ @@ -31,7 +31,7 @@ spells.h skills.h screen.h house.h house_exp.hpp char.hpp player_i.hpp \ morph.hpp remember.hpp constants.h dg_scripts.h pk.h fight.h magic.h \ depot.hpp privilege.hpp random.hpp char_player.hpp quested.hpp \ - mobmax.hpp dps.hpp room.hpp objsave.h + mobmax.hpp dps.hpp room.hpp objsave.h vmud2.h act.social.o: act.social.cpp conf.h sysdep.h structs.h utils.h \ features.hpp obj.hpp pugixml.hpp pugiconfig.hpp comm.h interpreter.h \ handler.h db.h spells.h char.hpp player_i.hpp morph.hpp room.hpp @@ -42,9 +42,9 @@ pk.h im.h top.h ban.hpp diskio.h description.h title.hpp password.hpp \ privilege.hpp depot.hpp glory.hpp genchar.h file_crc.hpp char_player.hpp \ quested.hpp mobmax.hpp dps.hpp parcel.hpp liquid.hpp modify.h room.hpp \ - glory_misc.hpp glory_const.hpp shop_ext.hpp celebrates.hpp \ - player_races.hpp birth_places.hpp corpse.hpp sets_drop.hpp \ - fight.h + glory_misc.hpp glory_const.hpp shop_ext.hpp dictionary.hpp \ + celebrates.hpp player_races.hpp birth_places.hpp corpse.hpp \ + sets_drop.hpp fight.h alias.o: alias.cpp conf.h sysdep.h structs.h utils.h features.hpp obj.hpp \ pugixml.hpp pugiconfig.hpp interpreter.h db.h char.hpp player_i.hpp \ morph.hpp comm.h @@ -68,7 +68,7 @@ deathtrap.hpp title.hpp depot.hpp glory.hpp file_crc.hpp char_player.hpp \ quested.hpp mobmax.hpp dps.hpp parcel.hpp pk.h spells.h skills.h \ corpse.hpp room.hpp glory_misc.hpp glory_const.hpp celebrates.hpp \ - shop_ext.hpp sets_drop.hpp fight.h + shop_ext.hpp dictionary.hpp sets_drop.hpp fight.h vmud2.h config.o: config.cpp conf.h sysdep.h structs.h interpreter.h utils.h \ features.hpp obj.hpp pugixml.hpp pugiconfig.hpp constants.h char.hpp \ player_i.hpp morph.hpp comm.h birth_places.hpp @@ -89,11 +89,11 @@ genchar.h random.hpp file_crc.hpp skills.h char_player.hpp quested.hpp \ mobmax.hpp dps.hpp parcel.hpp liquid.hpp corpse.hpp name_list.hpp \ modify.h room.hpp glory_const.hpp glory_misc.hpp shop_ext.hpp \ - named_stuff.hpp celebrates.hpp player_races.hpp birth_places.hpp \ - sets_drop.hpp fight.h + dictionary.hpp named_stuff.hpp celebrates.hpp player_races.hpp \ + birth_places.hpp sets_drop.hpp fight.h vmud2.h fight.o: fight.cpp fight.h conf.h sysdep.h structs.h utils.h features.hpp \ - obj.hpp pugixml.hpp pugiconfig.hpp fight_local.hpp AffectHandler.hpp \ - char.hpp player_i.hpp morph.hpp comm.h handler.h interpreter.h db.h \ + obj.hpp pugixml.hpp pugiconfig.hpp char.hpp player_i.hpp morph.hpp \ + comm.h fight_local.hpp AffectHandler.hpp handler.h interpreter.h db.h \ spells.h screen.h constants.h dg_scripts.h im.h skills.h random.hpp \ char_player.hpp quested.hpp mobmax.hpp remember.hpp dps.hpp magic.h \ room.hpp genchar.h sets_drop.hpp olc.h @@ -122,7 +122,7 @@ top.h title.hpp password.hpp privilege.hpp depot.hpp glory.hpp \ char_player.hpp quested.hpp mobmax.hpp dps.hpp parcel.hpp liquid.hpp \ name_list.hpp modify.h room.hpp glory_const.hpp glory_misc.hpp \ - named_stuff.hpp player_races.hpp birth_places.hpp + named_stuff.hpp player_races.hpp birth_places.hpp vmud2.h limits.o: limits.cpp conf.h sysdep.h structs.h utils.h features.hpp \ obj.hpp pugixml.hpp pugiconfig.hpp spells.h skills.h comm.h db.h \ handler.h screen.h interpreter.h constants.h dg_scripts.h house.h \ @@ -133,7 +133,7 @@ magic.o: magic.cpp conf.h sysdep.h structs.h utils.h features.hpp obj.hpp \ pugixml.hpp pugiconfig.hpp comm.h spells.h skills.h handler.h db.h \ interpreter.h screen.h constants.h dg_scripts.h pk.h magic.h fight.h \ - deathtrap.hpp random.hpp char.hpp player_i.hpp morph.hpp poison.hpp \ + char.hpp player_i.hpp morph.hpp deathtrap.hpp random.hpp poison.hpp \ modify.h room.hpp AffectHandler.hpp mail.o: mail.cpp conf.h sysdep.h structs.h utils.h features.hpp obj.hpp \ pugixml.hpp pugiconfig.hpp comm.h db.h interpreter.h handler.h mail.h \ @@ -143,7 +143,7 @@ obj.hpp pugixml.hpp pugiconfig.hpp db.h comm.h interpreter.h handler.h \ spells.h skills.h constants.h pk.h random.hpp char.hpp player_i.hpp \ morph.hpp house.h house_exp.hpp remember.hpp room.hpp shop_ext.hpp \ - fight.h + dictionary.hpp fight.h modify.o: modify.cpp conf.h sysdep.h structs.h utils.h features.hpp \ obj.hpp pugixml.hpp pugiconfig.hpp interpreter.h handler.h db.h comm.h \ spells.h mail.h boards.h screen.h olc.h house.h house_exp.hpp char.hpp \ @@ -151,17 +151,18 @@ objsave.o: objsave.cpp conf.h sysdep.h structs.h comm.h handler.h db.h \ pugixml.hpp pugiconfig.hpp interpreter.h utils.h features.hpp obj.hpp \ spells.h screen.h house.h house_exp.hpp char.hpp player_i.hpp morph.hpp \ - remember.hpp im.h depot.hpp liquid.hpp file_crc.hpp room.hpp mail.h \ - dg_scripts.h objsave.h + remember.hpp im.h depot.hpp liquid.hpp file_crc.hpp named_stuff.hpp \ + room.hpp mail.h dg_scripts.h objsave.h vmud2.h olc.o: olc.cpp conf.h sysdep.h structs.h interpreter.h utils.h \ features.hpp obj.hpp pugixml.hpp pugiconfig.hpp comm.h db.h olc.h \ dg_olc.h dg_scripts.h screen.h item.creation.hpp im.h privilege.hpp \ char.hpp player_i.hpp morph.hpp room.hpp -random.o: random.cpp conf.h random.hpp sysdep.h +random.o: random.cpp conf.h random.hpp sysdep.h utils.h features.hpp \ + obj.hpp structs.h pugixml.hpp pugiconfig.hpp shop.o: shop.cpp conf.h sysdep.h structs.h comm.h handler.h db.h \ pugixml.hpp pugiconfig.hpp interpreter.h utils.h features.hpp obj.hpp \ - shop.h dg_scripts.h constants.h char.hpp player_i.hpp morph.hpp modify.h \ - room.hpp pk.h + shop.h dg_scripts.h constants.h named_stuff.hpp char.hpp player_i.hpp \ + morph.hpp modify.h room.hpp pk.h spec_assign.o: spec_assign.cpp conf.h sysdep.h structs.h db.h pugixml.hpp \ pugiconfig.hpp constants.h interpreter.h utils.h features.hpp obj.hpp \ house.h house_exp.hpp char.hpp player_i.hpp morph.hpp comm.h \ @@ -201,8 +202,8 @@ features.hpp obj.hpp pugixml.hpp pugiconfig.hpp db.h shop.h olc.h \ dg_olc.h dg_scripts.h im.h depot.hpp char.hpp player_i.hpp morph.hpp \ house.h interpreter.h house_exp.hpp remember.hpp skills.h parcel.hpp \ - liquid.hpp name_list.hpp corpse.hpp shop_ext.hpp constants.h \ - sets_drop.hpp + liquid.hpp name_list.hpp corpse.hpp shop_ext.hpp dictionary.hpp \ + constants.h sets_drop.hpp zedit.o: zedit.cpp conf.h sysdep.h structs.h comm.h utils.h features.hpp \ obj.hpp pugixml.hpp pugiconfig.hpp db.h olc.h dg_scripts.h char.hpp \ player_i.hpp morph.hpp room.hpp @@ -277,7 +278,7 @@ auction.o: auction.cpp conf.h sysdep.h structs.h screen.h utils.h \ features.hpp obj.hpp pugixml.hpp pugiconfig.hpp comm.h interpreter.h \ handler.h db.h auction.h constants.h char.hpp player_i.hpp morph.hpp \ - room.hpp pk.h + room.hpp named_stuff.hpp pk.h item.creation.o: item.creation.cpp conf.h sysdep.h structs.h screen.h \ spells.h skills.h pugixml.hpp pugiconfig.hpp constants.h utils.h \ features.hpp obj.hpp comm.h interpreter.h handler.h db.h olc.h im.h \ @@ -291,7 +292,7 @@ obj.hpp pugixml.hpp pugiconfig.hpp comm.h interpreter.h handler.h db.h \ screen.h exchange.h im.h constants.h skills.h char.hpp player_i.hpp \ morph.hpp char_player.hpp quested.hpp mobmax.hpp remember.hpp dps.hpp \ - modify.h room.hpp mail.h objsave.h pk.h + named_stuff.hpp modify.h room.hpp mail.h objsave.h pk.h top.o: top.cpp conf.h sysdep.h structs.h utils.h features.hpp obj.hpp \ pugixml.hpp pugiconfig.hpp interpreter.h comm.h screen.h top.h glory.hpp \ char.hpp player_i.hpp morph.hpp @@ -402,10 +403,11 @@ comm.h db.h screen.h char_player.hpp quested.hpp mobmax.hpp remember.hpp \ dps.hpp modify.h shop_ext.o: shop_ext.cpp pugixml.hpp pugiconfig.hpp shop_ext.hpp conf.h \ - sysdep.h interpreter.h utils.h features.hpp obj.hpp structs.h char.hpp \ - player_i.hpp morph.hpp comm.h db.h shop.h handler.h constants.h \ - dg_scripts.h room.hpp glory.hpp glory_const.hpp screen.h house.h \ - house_exp.hpp remember.hpp modify.h liquid.hpp + sysdep.h interpreter.h utils.h features.hpp obj.hpp structs.h \ + dictionary.hpp char.hpp player_i.hpp morph.hpp comm.h db.h shop.h \ + handler.h constants.h dg_scripts.h room.hpp glory.hpp glory_const.hpp \ + named_stuff.hpp screen.h house.h house_exp.hpp remember.hpp modify.h \ + liquid.hpp named_stuff.o: named_stuff.cpp pugixml.hpp pugiconfig.hpp named_stuff.hpp \ conf.h sysdep.h interpreter.h utils.h features.hpp obj.hpp structs.h \ screen.h char.hpp player_i.hpp morph.hpp comm.h db.h handler.h house.h \ @@ -427,19 +429,25 @@ player_i.hpp morph.hpp comm.h handler.h dg_scripts.h im.h room.hpp \ modify.h house.h interpreter.h house_exp.hpp remember.hpp screen.h fight_hit.o: fight_hit.cpp fight.h conf.h sysdep.h structs.h utils.h \ - features.hpp obj.hpp pugixml.hpp pugiconfig.hpp fight_local.hpp \ - AffectHandler.hpp char.hpp player_i.hpp morph.hpp comm.h skills.h \ - constants.h spells.h handler.h db.h room.hpp screen.h interpreter.h \ - dg_scripts.h pk.h dps.hpp house_exp.hpp poison.hpp + features.hpp obj.hpp pugixml.hpp pugiconfig.hpp char.hpp player_i.hpp \ + morph.hpp comm.h fight_local.hpp AffectHandler.hpp skills.h constants.h \ + spells.h handler.h db.h room.hpp screen.h interpreter.h dg_scripts.h \ + pk.h dps.hpp house_exp.hpp poison.hpp fight_stuff.o: fight_stuff.cpp fight.h conf.h sysdep.h structs.h utils.h \ - features.hpp obj.hpp pugixml.hpp pugiconfig.hpp fight_local.hpp \ - AffectHandler.hpp char.hpp player_i.hpp morph.hpp comm.h skills.h \ - handler.h db.h room.hpp spells.h dg_scripts.h corpse.hpp house.h \ - interpreter.h house_exp.hpp remember.hpp pk.h stuff.hpp double_map.hpp \ - sets_drop.hpp top.h constants.h screen.h magic.h + features.hpp obj.hpp pugixml.hpp pugiconfig.hpp char.hpp player_i.hpp \ + morph.hpp comm.h fight_local.hpp AffectHandler.hpp skills.h handler.h \ + db.h room.hpp spells.h dg_scripts.h corpse.hpp house.h interpreter.h \ + house_exp.hpp remember.hpp pk.h stuff.hpp double_map.hpp sets_drop.hpp \ + top.h constants.h screen.h magic.h version.o: version.cpp conf.h sysdep.h structs.h comm.h utils.h \ features.hpp obj.hpp pugixml.hpp pugiconfig.hpp objsave_ext.o: objsave_ext.cpp objsave.h conf.h sysdep.h structs.h \ house.h utils.h features.hpp obj.hpp pugixml.hpp pugiconfig.hpp db.h \ interpreter.h house_exp.hpp char.hpp player_i.hpp morph.hpp comm.h \ remember.hpp depot.hpp parcel.hpp +dictionary.o: dictionary.cpp dictionary.hpp shop_ext.hpp conf.h sysdep.h \ + interpreter.h utils.h features.hpp obj.hpp structs.h pugixml.hpp \ + pugiconfig.hpp +vmud2.o: vmud2.cpp interpreter.h conf.h utils.h features.hpp obj.hpp \ + sysdep.h structs.h pugixml.hpp pugiconfig.hpp comm.h db.h handler.h \ + dg_scripts.h char.hpp player_i.hpp morph.hpp telnet.h vmud2.h diff -u /home/prool/mud/src/interpreter.cpp ./interpreter.cpp --- /home/prool/mud/src/interpreter.cpp 2013-02-08 16:28:51.000000000 +0200 +++ ./interpreter.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -57,6 +57,8 @@ #include "player_races.hpp" #include "birth_places.hpp" +#include "vmud2.h" + extern room_rnum r_mortal_start_room; extern room_rnum r_immort_start_room; extern room_rnum r_frozen_start_room; @@ -405,6 +407,11 @@ //python_off ACMD(do_console); ACMD(do_shops_list); +// prool: +ACMD(do_fflush); +ACMD(do_kogda); +ACMD(do_igroki); + /* This is the Master Command List(tm). * You can put new commands in, take commands out, change the order @@ -506,6 +513,7 @@ {"дрновости", POS_DEAD, DoBoard, 1, CLANNEWS_BOARD, -1}, {"дрвече", POS_DEAD, DoBoard, 1, CLAN_BOARD, -1}, {"дрлист", POS_DEAD, DoClanPkList, 0, 1, 0}, + {"духмада", POS_DEAD, do_duhmada, 0, 1, 0}, // prool {"есть", POS_RESTING, do_eat, 0, SCMD_EAT, 500}, @@ -537,6 +545,7 @@ {"инвентарь", POS_SLEEPING, do_inventory, 0, 0, 0}, {"игнорировать", POS_DEAD, do_ignore, 0, 0, 0}, + {"игроки", POS_DEAD, do_igroki, 0, 0, 0}, {"идеи", POS_DEAD, DoBoard, 1, IDEA_BOARD, 0}, {"идея", POS_DEAD, do_gen_write, 0, SCMD_IDEA, 0}, {"изгнать нежить", POS_RESTING, do_turn_undead, 0, 0, -1}, @@ -549,6 +558,7 @@ {"казна", POS_RESTING, do_not_here, 1, 0, 0}, {"клан", POS_RESTING, DoHouse, 0, 0, 0}, {"клич", POS_FIGHTING, do_warcry, 1, 0, -1}, + {"когда", POS_DEAD, do_kogda, 0, 0, 0}, {"кодер", POS_DEAD, DoBoard, 1, GODCODE_BOARD, -1}, {"команды", POS_DEAD, do_commands, 0, SCMD_COMMANDS, 0}, {"коне", POS_SLEEPING, do_quit, 0, 0, 0}, @@ -816,6 +826,7 @@ {"exits", POS_RESTING, do_exits, 0, 0, 500}, {"featset", POS_SLEEPING, do_featset, LVL_IMPL, 0, 0}, {"features", POS_SLEEPING, do_features, 0, 0, 0}, + {"fflush", POS_DEAD, do_fflush, LVL_GRGOD, 0, 0}, {"fill", POS_STANDING, do_pour, 0, SCMD_FILL, 500}, {"fit", POS_RESTING, do_fit, 0, SCMD_DO_ADAPT, 500}, {"flee", POS_FIGHTING, do_flee, 1, 0, -1}, @@ -1940,6 +1951,8 @@ check_light(d->character, LIGHT_NO, LIGHT_NO, LIGHT_NO, LIGHT_NO, 1); act("$n восстановил$g связь.", TRUE, d->character, 0, 0, TO_ROOM); sprintf(buf, "%s [%s] has reconnected.", GET_NAME(d->character), d->host); + printf("%s %s [%s] has reconnected\n", ptime(), GET_NAME(d->character), d->host); // prool + perslog("пересоединился", GET_NAME(d->character)); // prool mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(d->character)), SYSLOG, TRUE); login_change_invoice(d->character); break; @@ -2051,7 +2064,7 @@ continue; if (IS_NPC(ch)) continue; - if (ch && !IS_IMMORTAL(ch) && (!str_cmp(GET_EMAIL(ch), GET_EMAIL(d->character)))) + if (0/*ch && !IS_IMMORTAL(ch) && (!str_cmp(GET_EMAIL(ch), GET_EMAIL(d->character)))*/) { sprintf(buf, "Вы не можете войти одновременно с %s!\r\n" "Одинаковый email адрес!\r\n", GET_PAD(ch, 4)); @@ -2342,6 +2355,10 @@ ("Воспользуйтесь командой НОВИЧОК для получения вводной информации игроку.\r\n", d->character); } sprintf(buf, "%s вошел в игру.", GET_NAME(d->character)); + if (strcmp(GET_NAME(d->character),"Пруль")) + send_email("VMUD", "proolix@gmail.com", "User logon", (char *) GET_NAME(d->character)); + printf("%s %s вошел в игру [%s]\n", ptime(), GET_NAME(d->character), d->host); + perslog("вошел", GET_NAME(d->character)); // prool mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(d->character)), SYSLOG, TRUE); look_at_room(d->character, 0); d->has_prompt = 0; @@ -2536,12 +2553,12 @@ if (parse_exist_name(pwd_name, tmp_name) || (player_i = load_char(tmp_name, d->character)) < 0) { - SEND_TO_Q("Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); + SEND_TO_Q("Ошибка 1. Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); return; } if (PLR_FLAGGED(d->character, PLR_DELETED) || !Password::compare_password(d->character, pwd_pwd)) { - SEND_TO_Q("Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); + SEND_TO_Q("Ошибка 2. Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); if (!PLR_FLAGGED(d->character, PLR_DELETED)) { sprintf(buf, "Bad PW: %s [%s]", GET_NAME(d->character), d->host); @@ -2565,7 +2582,7 @@ strlen(tmp_name) > MAX_NAME_LENGTH || !Is_Valid_Name(tmp_name) || fill_word(tmp_name) || reserved_word(tmp_name)) { - SEND_TO_Q("Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); + SEND_TO_Q("Ошибка 3. Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); return; } else if (!Is_Valid_Dc(tmp_name)) @@ -2585,7 +2602,7 @@ /* Check for multiple creations... */ if (!Valid_Name(tmp_name) || _parse_name(tmp_name, tmp_name)) { - SEND_TO_Q("Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); + SEND_TO_Q("Ошибка 4. Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); return; } CreateChar(d); @@ -2614,7 +2631,7 @@ /* Check for multiple creations of a character. */ if (!Valid_Name(tmp_name) || _parse_name(tmp_name, tmp_name)) { - SEND_TO_Q("Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); + SEND_TO_Q("Ошибка 5. Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); return; } if (cmp_ptable_by_name(tmp_name, MIN_NAME_LENGTH + 1) >= 0) @@ -2663,7 +2680,7 @@ { case 0: // Auto - agree sprintf(buf, - "Введите пароль для %s (не вводите пароли типа '123' или 'qwe', иначе ваших персонажев могут украсть) : ", + "Введите пароль для %s : ", GET_PAD(d->character, 1)); SEND_TO_Q(buf, d); STATE(d) = CON_NEWPASSWD; @@ -2703,7 +2720,7 @@ strlen(tmp_name) > MAX_NAME_LENGTH || !Is_Valid_Name(tmp_name) || fill_word(tmp_name) || reserved_word(tmp_name)) { - SEND_TO_Q("Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); + SEND_TO_Q("Ошибка 6. Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); return; } player_i = load_char(tmp_name, d->character); @@ -2725,7 +2742,7 @@ } if (!Valid_Name(tmp_name)) { - SEND_TO_Q("Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); + SEND_TO_Q("Ошибка 7. Некорректное имя. Повторите, пожалуйста.\r\n" "Имя : ", d); return; } if (cmp_ptable_by_name(tmp_name, MIN_NAME_LENGTH + 1) >= 0) @@ -2761,7 +2778,7 @@ { case 0: // Auto - agree sprintf(buf, - "Введите пароль для %s (не вводите пароли типа '123' или 'qwe', иначе ваших персонажев могут украсть) : ", + "Введите пароль для %s : ", GET_PAD(d->character, 1)); SEND_TO_Q(buf, d); STATE(d) = CON_NEWPASSWD; @@ -3206,7 +3223,7 @@ { case '0': - SEND_TO_Q("\r\nДо встречи на земле Киевской.\r\n", d); + SEND_TO_Q("\r\nДо встречи на земле Харьковской.\r\n", d); if (GET_REMORT(d->character) == 0 && GET_LEVEL(d->character) <= 25 && !IS_SET(PLR_FLAGS(d->character, PLR_NODELETE), PLR_NODELETE)) @@ -3461,7 +3478,7 @@ CREATE(GET_PAD(d->character, 5), char, strlen(tmp_name) + 1); strcpy(GET_PAD(d->character, 5), CAP(tmp_name)); sprintf(buf, - "Введите пароль для %s (не вводите пароли типа '123' или 'qwe', иначе ваших персонажев могут украсть) : ", + "Введите пароль для %s : ", GET_PAD(d->character, 1)); SEND_TO_Q(buf, d); STATE(d) = CON_NEWPASSWD; Только в .: interpreter.cpp.orig diff -u /home/prool/mud/src/mail.cpp ./mail.cpp --- /home/prool/mud/src/mail.cpp 2013-02-05 14:41:56.000000000 +0200 +++ ./mail.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -672,7 +672,7 @@ GET_OBJ_WEIGHT(obj) = 1; GET_OBJ_COST(obj) = 30; GET_OBJ_RENT(obj) = 10; - obj->set_timer(24 * 60); + obj->set_timer(24 * 60 * 10); // prool: увеличил время жизни писем в 10 раз obj->action_description = read_delete(GET_IDNUM(ch)); if (obj->action_description == NULL) Только в .: mail.cpp.orig diff -u /home/prool/mud/src/mail.h ./mail.h --- /home/prool/mud/src/mail.h 2012-11-21 23:43:03.000000000 +0200 +++ ./mail.h 2013-02-08 16:28:51.000000000 +0200 @@ -27,7 +27,7 @@ #define MIN_MAIL_LEVEL 2 /* # of gold coins required to send mail */ -#define STAMP_PRICE 50 +#define STAMP_PRICE 1 // 50 /* Maximum size of mail in bytes (arbitrary) */ #define MAX_MAIL_SIZE 4096 diff -u /home/prool/mud/src/Makefile ./Makefile --- /home/prool/mud/src/Makefile 2013-02-05 14:41:56.000000000 +0200 +++ ./Makefile 2013-02-08 16:28:51.000000000 +0200 @@ -40,7 +40,8 @@ corpse.o house_exp.o remember.o name_list.o dps.o obj.spell.o obj.o room.o \ spam.o AffectHandler.o glory_const.o pugixml.o morph.o glory_misc.o \ shop_ext.o named_stuff.o birth_places.o player_races.o celebrates.o cache.o \ - sets_drop.o fight_hit.o fight_stuff.o objsave_ext.o dictionary.o version.o + sets_drop.o fight_hit.o fight_stuff.o objsave_ext.o dictionary.o \ + vmud2.o version.o CXREF_FILES = act.comm.cpp act.informative.cpp act.item.cpp act.movement.cpp \ @@ -60,9 +61,10 @@ name_list.cpp dps.cpp obj.spell.cpp obj.cpp room.cpp spam.cpp AffectHandler.cpp \ glory_const.cpp pugixml.cpp glory_misc.cpp shop_ext.cpp named_stuff.cpp \ celebrates.cpp birth_places.cpp player_races.cpp morph.cpp cache.cpp \ - sets_drop.cpp fight_hit.cpp fight_stuff.cpp version.cpp objsave_ext.cpp dictionary.cpp + sets_drop.cpp fight_hit.cpp fight_stuff.cpp version.cpp objsave_ext.cpp dictionary.cpp \ + vmud2.cpp -default: circle +default: vmud2 #all: .accepted # $(MAKE) $(BINDIR)/circle @@ -70,12 +72,12 @@ #accepted: # @./licheck less -circle: - $(MAKE) $(BINDIR)/circle +vmud2: + $(MAKE) $(BINDIR)/vmud2 -$(BINDIR)/circle : $(OBJFILES) +$(BINDIR)/vmud2 : $(OBJFILES) $(MKDIR) $(BINDIR) - $(CC) -o $(BINDIR)/circle $(OBJFILES) $(LIBS) + $(CC) -o $(BINDIR)/vmud2 $(OBJFILES) $(LIBS) rm -f version.o @echo "Done building Bylins." @@ -91,13 +93,13 @@ @echo "Done building dependencies." test: - $(MAKE) CFLAGS="$(TESTCFLAGS)" CC="$(TESTCC)" $(BINDIR)/circle + $(MAKE) CFLAGS="$(TESTCFLAGS)" CC="$(TESTCC)" $(BINDIR)/vmud2 debug: - $(MAKE) CFLAGS="$(TESTCFLAGS) $(DEBUGFLAGS)" CC="$(TESTCC)" $(BINDIR)/circle + $(MAKE) CFLAGS="$(TESTCFLAGS) $(DEBUGFLAGS)" CC="$(TESTCC)" $(BINDIR)/vmud2 fasttest: - $(MAKE) CFLAGS="$(FASTTEST)" CC="$(TESTCC)" $(BINDIR)/circle + $(MAKE) CFLAGS="$(FASTTEST)" CC="$(TESTCC)" $(BINDIR)/vmud2 # Dependencies for the object files (automagically generated with # gcc -MM) diff -u /home/prool/mud/src/objsave.cpp ./objsave.cpp --- /home/prool/mud/src/objsave.cpp 2013-02-01 12:37:41.000000000 +0200 +++ ./objsave.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -37,6 +37,8 @@ #include "features.hpp" #include "objsave.h" +#include "vmud2.h" // prool + #define LOC_INVENTORY 0 #define MAX_BAG_ROWS 5 #define ITEM_DESTROYED 100 @@ -2927,6 +2929,9 @@ Crash_rentsave(ch, cost); sprintf(buf, "%s has rented (%d/day, %ld tot.)", GET_NAME(ch), cost, ch->get_gold() + ch->get_bank()); + printf("%s %s has rented (%d/day, %ld tot.)\n", ptime(), // prool + GET_NAME(ch), cost, ch->get_gold() + ch->get_bank()); + perslog("ушел на ренту", GET_NAME(ch)); // prool } else /* cryo */ { Только в .: objsave.cpp.orig diff -u /home/prool/mud/src/spec_assign.cpp ./spec_assign.cpp --- /home/prool/mud/src/spec_assign.cpp 2012-12-19 22:37:15.000000000 +0200 +++ ./spec_assign.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -188,6 +188,8 @@ { log("Bad format for special string!\r\n" "Format : "); + printf("Bad format for special string!\r\n"); // prool + fflush(NULL); // prool _exit(1); } log("<%s>-%d-[%s]", line1, i, line2); @@ -229,7 +231,9 @@ else { log("Error in specials file!\r\n" "May be : mob, obj or room..."); - _exit(1); + printf("Error in specials file!\r\n" "May be : mob, obj or room...\n\n"); // prool + fflush(NULL); // prool + _exit(1); // prool } } fclose(magic); diff -u /home/prool/mud/src/spec_procs.cpp ./spec_procs.cpp --- /home/prool/mud/src/spec_procs.cpp 2013-01-20 20:29:55.000000000 +0200 +++ ./spec_procs.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -12,6 +12,8 @@ * $Revision$ * ************************************************************************ */ +// #define DEBUG // prool + #include "conf.h" #include "sysdep.h" #include "structs.h" @@ -598,6 +600,7 @@ if (lines < 5) { log("Bad format for monoguild header, #s #s #s #s #s need..."); + puts("Bad format for monoguild header, #s #s #s #s #s need..."); // prool _exit(1); } mono_guild.learn_info = NULL; @@ -631,14 +634,18 @@ { if ((num = atoi(line1)) == 0 || real_mobile(num) < 0) { - log("Cann't assign master %s in guilds.lst", line1); - _exit(1); + log("Can't assign master %s in guilds.lst", line1); +#ifdef DEBUG + printf("Can't assign master %s in guilds.lst\n", line1); // prool +#endif + // _exit(1); // prool } if (!((type == 1 || type == 11) && mono_guild.learn_info) && !((type == 2 || type == 12) && poly_guild)) { log("Cann't define guild info for master %s", line1); + printf("Cann't define guild info for master %s\n", line1); // prool _exit(1); } if (type == 1 || type == 11) @@ -692,6 +699,7 @@ if (lines < 3) { log("You need use 3 arguments for monoguild"); + puts("You need use 3 arguments for monoguild"); // prool _exit(1); } if ((spellnum = atoi(line)) == 0 || spellnum > MAX_SPELLS) @@ -717,11 +725,13 @@ if (skillnum <= 0 && spellnum <= 0 && featnum <= 0) { log("Unknown skill, spell or feat for monoguild"); + puts("Unknown skill, spell or feat for monoguild"); // prool _exit(1); } if ((level = atoi(line2)) == 0 || level >= LVL_IMMORT) { log("Use 1-%d level for guilds", LVL_IMMORT); + printf("Use 1-%d level for guilds\n", LVL_IMMORT); // prool _exit(1); } if (!mono_guild.learn_info) @@ -740,6 +750,7 @@ if (lines < 7) { log("You need use 7 arguments for poluguild"); + puts("You need use 7 arguments for poluguild"); // prool _exit(1); } if (!poly_guild) @@ -787,11 +798,13 @@ if (skillnum <= 0 && spellnum <= 0 && featnum <= 0) { log("Unknown skill, spell or feat for polyguild"); + puts("Unknown skill, spell or feat for polyguild"); // prool _exit(1); } if ((level = atoi(line6)) == 0 || level >= LVL_IMMORT) { log("Use 1-%d level for guilds", LVL_IMMORT); + printf("Use 1-%d level for guilds\n", LVL_IMMORT); // prool _exit(1); } (poly_guild + pgcount)->spell_no = MAX(0, spellnum); diff -u /home/prool/mud/src/spell_parser.cpp ./spell_parser.cpp --- /home/prool/mud/src/spell_parser.cpp 2013-02-05 14:41:56.000000000 +0200 +++ ./spell_parser.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -5190,7 +5190,7 @@ skillo(SKILL_WARCRY, "боевой клич", 100); skillo(SKILL_TURN_UNDEAD, "изгнать нежить", 100); skillo(SKILL_IRON_WIND, "железный ветер", 150); - skillo(SKILL_STRANGLE, "удавить", 200); + skillo(SKILL_STRANGLE, "удавить", 150); } Только в .: spell_parser.cpp.orig diff -u /home/prool/mud/src/structs.h ./structs.h --- /home/prool/mud/src/structs.h 2013-02-07 14:18:05.000000000 +0200 +++ ./structs.h 2013-02-08 16:28:51.000000000 +0200 @@ -1129,7 +1129,7 @@ #define MAX_RAW_INPUT_LENGTH 512 /* Max size of *raw* input */ #define MAX_MESSAGES 600 #define MAX_NAME_LENGTH 20 -#define MIN_NAME_LENGTH 4 +#define MIN_NAME_LENGTH 3 // prool #define HOST_LENGTH 30 #define EXDSCR_LENGTH 512 #define MAX_SPELLS 350 Только в .: structs.h.orig diff -u /home/prool/mud/src/version.cpp ./version.cpp --- /home/prool/mud/src/version.cpp 2012-11-21 23:43:03.000000000 +0200 +++ ./version.cpp 2013-02-08 16:28:51.000000000 +0200 @@ -14,7 +14,7 @@ void show_code_date(CHAR_DATA *ch) { - send_to_char(ch, "МПМ Былины, версия от %s %s\r\n", __DATE__, __TIME__); + send_to_char(ch, "Virtustan-2, after wipe; compile by %s %s\r\n", __DATE__, __TIME__); } void log_code_date() Только в .: vmud2.cpp Только в .: vmud2.h