Dan Egli wrote:
>
> I recently downloaded the language patch for circle, but it's not quite
> what I'm looking for. I wonder if someone out there could help?
>
> The problem is this: Unless everyone in the room is fluent in that
> language, and they are set to speak in that language, then the system
> garbels the text. I could see that if they were not fluent in the
> language, but really... If someone actually knows a language, should it
> really matter if they are speaking in it? Just because I'm speaking englih
> doesn't mean I couldn't understand another language I knew if I heard
> someone speak it. How would you accompilsh that? Here's the do_say routine
> as I have hacked it to work:
-->snip
here is my lang stuff..i use the lang snippet but its just slightly
modified...
you should be able to make sense of it no prob tho.
#define SPEAKING(ch) ((ch)->player_specials->saved.speaking)
#define GET_LANG(ch, i) ((ch)->player_specials->saved.langs[i])
//for stock circle i think you would want something like..
#define GET_LANG(ch, i) ((ch)->player_specials->saved.spells[i +
lang_offset])
//or something like that.
PCOMM(do_lang_say)
{
extern char *pc_lang_types[];
char ibuf[MAX_INPUT_LENGTH];
char obuf[MAX_INPUT_LENGTH];
int dir;
CHAR *tch, *lch, *lch_next;
if(!CAN_PERFORM_CMD(ch, cmd_number, PRIV_MORTAL)) {
send_to_char("Sorry, you do not have permission to use this
command.\n\r", ch);
return; }
skip_spaces(&argument);
MOBTrigger = FALSE;
if(!*argument) {
send_to_char("Say what?\r\n", ch);
return; }
if(IS_NPC(ch) || (IS_IMMORTAL(ch))) {
sprintf(buf, "$n says, '%s'", argument);
act(buf, FALSE, ch, 0, 0, TO_ROOM);
if(BIT_FLAGGED(ch, BIT_NOREPEAT))
send_to_char(OK, ch);
else {
sprintf(buf, "You say, \"%s\"\n\r", argument);
delete_doubledollar(buf);
send_to_char(buf, ch);
}
MOBTrigger = TRUE;
mprog_speech_trigger(argument, ch);
} else {
strcpy(ibuf, argument);
garble_text(ibuf, GET_LANG(ch, SPEAKING(ch)));
for (tch = world[ch->in_room].people; tch; tch =
tch->next_in_room) {
if (tch != ch && AWAKE(tch) && tch->desc) {
strcpy(obuf, ibuf);
garble_text(obuf, GET_LANG(tch, SPEAKING(ch)));
//we garble it twice for more confusion. :)
if (IS_NPC(tch) || IS_IMMORTAL(tch))
sprintf(buf, "$n says, '%s'\n\r", argument);
else if ((GET_LANG(tch, SPEAKING(ch)) <= 33) || //33 is an
arbitrary number which
(GET_LANG(ch, SPEAKING(ch)) <= 33)) //seemed to
make the most sense
sprintf(buf, "$n says, '%s'\n\r", obuf);
else
sprintf(buf, "$n says in %s, '%s'\n\r",
pc_lang_types[(SPEAKING(ch))], ibuf); //ibuf is less
garbled than obuf
act(buf, TRUE, ch, 0, tch, TO_VICT);
}
}
if (BIT_FLAGGED(ch, BIT_NOREPEAT))
send_to_char(OK, ch);
else {
sprintf(buf, "You %ssay in %s, '%s'\n\r",
GET_LANG(ch, SPEAKING(ch) > 33) ? "" : "attempt to ",
pc_lang_types[(SPEAKING(ch))],
ibuf);
delete_doubledollar(buf);
send_to_char(buf, ch);}
MOBTrigger = TRUE;
mprog_speech_trigger(argument, ch);
}
// let people in other rooms hear voices from this room
// if the room is small enough.
if(ROOM_SIZE(ch->in_room) <= RSIZE_SMALL) {
for(dir=0;dir <NUM_OF_DIRS; dir++)
if(CAN_GO(ch,dir) || CAN_HEAR(ch,dir))
for(lch=world[EXIT(ch, dir)->to_room].people; lch;
lch=lch_next){
lch_next = lch->next_in_room;
send_to_charf(lch, "You hear voices coming from %s%s.\n\r",
((dir==8) ? "above" :
(dir==9) ? "below" : "the "),
((dir==8 || dir==9) ? "" : dir_types[dir].l_dir));
}
}
}
void garble_text(char *string, int percent)
{
char letters[] = "abcdefghijklmnopqrstuvwxyz";
int i;
for (i = 0; i < strlen(string); ++i)
if (isalpha(string[i]) && number(1, 100) > percent)
string[i] = letters[number(0, 25)];
}
--
Weather forecast for today: Sunny & Mild
Weather forecast for tomorrow : Sunny & Mild
www.giftsgalore.com : www.longboys.net
telnet://undying.longboys.net:4000 http://undying.longboys.net
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST