From ba59e334a8e0ef6b966e345db3b38bdb3662557e Mon Sep 17 00:00:00 2001 From: Christian Schlittchen Date: Sun, 20 May 2001 10:02:23 +0000 Subject: [PATCH] - Regionsbotschaften parteigezogen. Nicht wirklich getestet. --- src/common/gamecode/creport.c | 60 ++++++++++++++++++----------------- src/common/gamecode/report.c | 3 +- src/common/kernel/message.c | 6 ++-- src/common/util/message.c | 7 ++-- src/common/util/message.h | 5 +-- src/res/de/messages.xml | 2 +- 6 files changed, 44 insertions(+), 39 deletions(-) diff --git a/src/common/gamecode/creport.c b/src/common/gamecode/creport.c index a328d9a69..b5f7fd09a 100644 --- a/src/common/gamecode/creport.c +++ b/src/common/gamecode/creport.c @@ -379,37 +379,39 @@ render_messages(FILE * F, faction * f, message_list *msgs) { struct mlist* m = msgs->begin; while (m) { - char crbuffer[1024*32]; /* gross, wegen spionage-messages :-( */ - boolean printed = false; - const struct message_type * mtype = m->msg->type; - unsigned int hash = hashstring(mtype->name); + if(m->msg->receiver == NULL || m->msg->receiver == f) { + char crbuffer[1024*32]; /* gross, wegen spionage-messages :-( */ + boolean printed = false; + const struct message_type * mtype = m->msg->type; + unsigned int hash = hashstring(mtype->name); #if RENDER_CRMESSAGES - char nrbuffer[1024*32]; - nrbuffer[0] = '\0'; - if (nr_render(m->msg, f->locale, nrbuffer, f)==0 && nrbuffer[0]) { - fprintf(F, "MESSAGE %d\n", ++msgno); - fprintf(F, "%d;type\n", hash); - fputs("\"", F); - fputs(nrbuffer, F); - fputs("\";rendered\n", F); - printed = true; - } + char nrbuffer[1024*32]; + nrbuffer[0] = '\0'; + if (nr_render(m->msg, f->locale, nrbuffer, f)==0 && nrbuffer[0]) { + fprintf(F, "MESSAGE %d\n", ++msgno); + fprintf(F, "%d;type\n", hash); + fputs("\"", F); + fputs(nrbuffer, F); + fputs("\";rendered\n", F); + printed = true; + } #endif - crbuffer[0] = '\0'; - if (cr_render(m->msg, crbuffer, (const void*)f)==0 && crbuffer[0]) { - if (!printed) fprintf(F, "MESSAGE %d\n", ++msgno); - fputs(crbuffer, F); - } - else log_error(("could not render cr-message %p\n", m->msg)); - if (printed) { - unsigned int ihash = hash % MTMAXHASH; - struct known_mtype * kmt = mtypehash[ihash]; - while (kmt && kmt->mtype != mtype) kmt = kmt->nexthash; - if (kmt==NULL) { - kmt = (struct known_mtype*)malloc(sizeof(struct known_mtype)); - kmt->nexthash = mtypehash[ihash]; - kmt->mtype = mtype; - mtypehash[ihash] = kmt; + crbuffer[0] = '\0'; + if (cr_render(m->msg, crbuffer, (const void*)f)==0 && crbuffer[0]) { + if (!printed) fprintf(F, "MESSAGE %d\n", ++msgno); + fputs(crbuffer, F); + } + else log_error(("could not render cr-message %p\n", m->msg)); + if (printed) { + unsigned int ihash = hash % MTMAXHASH; + struct known_mtype * kmt = mtypehash[ihash]; + while (kmt && kmt->mtype != mtype) kmt = kmt->nexthash; + if (kmt==NULL) { + kmt = (struct known_mtype*)malloc(sizeof(struct known_mtype)); + kmt->nexthash = mtypehash[ihash]; + kmt->mtype = mtype; + mtypehash[ihash] = kmt; + } } } m = m->next; diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index 6d9efb44b..4147e9ccb 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -752,7 +752,8 @@ rp_messages(FILE * F, message_list * msgs, faction * viewer, int indent, boolean if (!debug && get_msglevel(viewer->warnings, viewer->msglevels, m->type) < m->level) continue; #endif /* messagetype * mt = m->type; */ - if (strcmp(nr_section(m->msg), category->name)==0) + if (strcmp(nr_section(m->msg), category->name)==0 + && (m->msg->receiver == NULL || m->msg->receiver == viewer)) { char buf[4096], *s = buf; nr_render(m->msg, viewer->locale, s, viewer); diff --git a/src/common/kernel/message.c b/src/common/kernel/message.c index ac588644f..dd3a9062c 100644 --- a/src/common/kernel/message.c +++ b/src/common/kernel/message.c @@ -291,7 +291,7 @@ msg_error(const struct unit * u, const char * cmd, const char * name, const char } va_end(marker); - return msg_create(mtype, (void**)args); + return msg_create(mtype, u->faction, (void**)args); } message * @@ -322,7 +322,7 @@ msg_message(const char * name, const char* sig, ...) } va_end(marker); - return msg_create(mtype, (void**)args); + return msg_create(mtype, NULL, (void**)args); } message * @@ -423,7 +423,7 @@ new_message(struct faction * receiver, const char* sig, ...) } } va_end(marker); - return msg_create(mtype, (void**)args); + return msg_create(mtype, receiver, (void**)args); } static void diff --git a/src/common/util/message.c b/src/common/util/message.c index c70bf4958..fb876b5ab 100644 --- a/src/common/util/message.c +++ b/src/common/util/message.c @@ -73,10 +73,11 @@ mt_new_va(const char * name, ...) } message * -msg_create(const struct message_type * type, void * args[]) +msg_create(const struct message_type * type, struct faction *receiver, void * args[]) { int i; message * msg = (message *)malloc(sizeof(message)); + msg->receiver = receiver; msg->type = type; msg->parameters = calloc(sizeof(void*), type->nparameters); for (i=0;i!=type->nparameters;++i) { @@ -86,7 +87,7 @@ msg_create(const struct message_type * type, void * args[]) } message * -msg_create_va(const struct message_type * type, ...) +msg_create_va(const struct message_type * type, struct faction *receiver, ...) /* sets a messages parameters */ { void * args[16]; @@ -97,7 +98,7 @@ msg_create_va(const struct message_type * type, ...) args[i] = va_arg(marker, void*); } va_end(marker); - return msg_create(type, args); + return msg_create(type, receiver, args); } typedef struct messagetype_list { diff --git a/src/common/util/message.h b/src/common/util/message.h index 5802d9597..7ef693d3a 100644 --- a/src/common/util/message.h +++ b/src/common/util/message.h @@ -20,6 +20,7 @@ typedef struct message_type { } message_type; typedef struct message { + struct faction *receiver; const struct message_type * type; const void ** parameters; } message; @@ -29,8 +30,8 @@ extern struct message_type * mt_new_va(const char * name, ...); /* mt_new("simple_sentence", "subject:string", "predicate:string", * "object:string", "lang:locale", NULL); */ -extern struct message * msg_create(const struct message_type * type, void * args[]); -extern struct message * msg_create_va(const struct message_type * type, ...); +extern struct message * msg_create(const struct message_type * type, struct faction *receiver, void * args[]); +extern struct message * msg_create_va(const struct message_type * type, struct faction *receiver, ...); /* msg_create(&mt_simplesentence, "enno", "eats", "chocolate", &locale_de); * parameters must be in the same order as they were for mt_new! */ extern void msg_free(struct message *m); diff --git a/src/res/de/messages.xml b/src/res/de/messages.xml index 2b2b158aa..f94b2c3b8 100644 --- a/src/res/de/messages.xml +++ b/src/res/de/messages.xml @@ -4107,7 +4107,7 @@ - + "$faction($from) donates $int($amount) silver to $faction($to)."