Created
August 1, 2024 21:55
-
-
Save lcanady/c78d92b634336b6cb9c81f4e342946da to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
============================================================================= | |
===== Dies Irae Language System ============================================ | |
This is the language systtem for Dies Irae. It's a simple system that allows | |
players to set their default language, and their current language. The system | |
is tied into the posing system, so when you pose, it will mask your language | |
skills in your dialogs. | |
There are a few commands to make the system work - but mostly it's tied to | |
the merit system, so when you choose Language(french) it will set you up with | |
the language in code, so you can start using it! Awesome! | |
Staff commands | |
* +language/add <name> = <language> - Set a language on <name> | |
* +language/clear <name> - clear languages from <name>. | |
* +languages <name> - View <names> languages. | |
Player Commands | |
* +speak <language>|clear - Set or clear your spoken language. | |
* +speak/default <language>|clear - set our clear your default language. | |
* +languages - See your language system info. | |
When you set your default language, it will mask all dialogs you produce | |
(including emits). | |
To use spoken language, you can selectively engage language masking by using | |
a tilde '~' before your speech. | |
ex. "~This will totally show up in my masked language! | |
:grins, "~Only a few can read this!" | |
Enjoy! | |
============================================================================= | |
===== Language system setup ================================================= | |
There are a couple of setup stsps that are needed for this system to work: | |
HOOK OBJECT | |
------------ | |
You will need to create a hook object tfor this system to work. | |
@create hook_obj | |
@set hook_obj = safe | |
netrhost.conf | |
-------------- | |
hook_obj 123 | |
============================================================================= | |
*/ | |
if not(isdbref(tag(#hlp))) = { | |
@create +Help System <HLP>; | |
@tag/add hlp = lastcreate(%#, t); | |
@set #hlp = inherit safe; | |
@set #hlp = sidefx; | |
} | |
@Startup #ls= | |
@dolist lattr( %!/ufunc.* )= | |
{@function/preserve [rest( ##, . )]=%!/##}; | |
@dolist lattr( %!/ufunc/privileged.* )= | |
{@function/preserve/privileged [rest( ##, . )]=%!/##} | |
/* | |
============================================================================= | |
A lot of this was taken from the RHOST Color speech system - so I'm going to | |
leave the attributions in place. I've modified it to work with the language | |
system, and added a few new commands to make it work. | |
https://github.com/RhostMUSH/trunk/blob/master/Mushcode/ColoredSpeech | |
============================================================================= | |
*/ | |
&CMD_SAY2 #ls =$"*: | |
@dolist [lcon(%l/connect)]={ | |
@include/localize %!/inc_parse=##,%0, %# | |
} | |
&CMD_POSE #ls = $pose *: | |
@dolist [lcon(%l/connect)]={ | |
@include/localize %!/inc_parse=##,:%0,%# | |
} | |
&CMD_POSE2 #ls =$\:*: | |
@dolist [lcon(%l/connect)]={ | |
@include/localize %!/inc_parse=##,:%0,%# | |
} | |
&CMD_POSE3 #ls=$;*: | |
@dolist [lcon(%l/connect)]={ | |
@include/localize %!/inc_parse=##,\;%0,%# | |
} | |
&CMD_@EMIT2 #ls=$\\\\*: | |
@dolist [lcon(%l/connect)]={ | |
@include/localize %!/inc_parse=##,|%0,%# | |
} | |
&CMD_@EMIT #ls=$@emit *: | |
@dolist [lcon(%l/connect)]={ | |
@include/localize %!/inc_parse=##,|%0,%# | |
} | |
&cmd.languages2 #ls=$+languages *: | |
@assert isstaff(%#) = { | |
@pemit %#=Permission deined. | |
}; | |
@assert isdbref(pmatch(*%0)) = { | |
@pemit %#=No match found. | |
}; | |
@pemit %#= [cname(*%0)] understands the following lanuages: | |
[itemize( iter(sort(default(*%0/_languages, none),,|),%ch[capstr(##)]%cn,|,|),|)].; | |
@pemit %#= [cname(*%0)]'s current language is | |
%ch[capstr(default(*%0/_current_language, None))]%cn. ; | |
@Pemit %#= [cname(*%0)]'s default language is | |
%ch[capstr(default(*%0/_default_language, None))]%cn. | |
&cmd.languages #ls=$+languages: | |
@pemit %#=You know the following languages: | |
[itemize( iter(sort(default(%#/_languages, none),,|),%ch[capstr(##)]%cn,|,|),|)].; | |
@pemit %#=Your Currnent language is %ch[capstr(default(%#/_current_language, None))]%cn. ; | |
@Pemit %#=Your default language is %ch[capstr(default(%#/_default_language, None))]%cn. | |
&cmd.speak #ls=$+speak *: | |
@if strmatch(lcstr(%0), clear) = { | |
@pemit %#=You clear your current language.; | |
&_current_language %#; | |
},{ | |
@if member(get(*%#/_languages), %0, |) = { | |
@pemit %#=You set your current language to [capstr(%0)].; | |
&_current_language %#=%0; | |
},{ | |
@pemit %#=You don't know that language. | |
} | |
} | |
&cmd.speak/default #ls=$+speak/default *: | |
@if strmatch(lcstr(%0), clear) = { | |
@pemit %#=You clear your default language.; | |
&_default_language %#; | |
},{ | |
@if member(get(*%#/_languages), %0, |) = { | |
@pemit %#=You set your default language to [capstr(%0)].; | |
&_default_language %#=%0; | |
},{ | |
@pemit %#=You don't know that language. | |
} | |
} | |
&cmd.language #ls=$+language/add *=*: | |
@assert isstaff(%#) = { | |
@pemit %#=Permission denied. | |
}; | |
@assert isdbref(pmatch(*%0)) = { | |
@pemit %#=No match found. | |
}; | |
@if member(get(*%0/_languages), trim(lcstr(%1)), |) = { | |
@pemit %#=[cname(*%0)] already knows [trim(capstr(%1))]. | |
},{ | |
@pemit %#=[cname(*%0)] now knows [trim(capstr(%1))].; | |
@pemit *%0=[cname(%#)] has taught you [trim(capstr(%1))].; | |
&_languages *%0=[setunion(get(*%0/_languages), trim(lcstr(%1)), |)]; | |
}; | |
&cmd.+language/claer #ls=$+language/clear *: | |
@assert isstaff(%#) = { | |
@pemit %#=Permission denied. | |
}; | |
@assert isdbref(pmatch(*%0)) = { | |
@pemit %#=No match found. | |
}; | |
@if not(hasattr(*%0, _languages)) = { | |
@pemit %#=[cname(*%0)] doesn't know any languages. | |
},{ | |
@pemit %#=[cname(*%0)] no longer knows any languages.; | |
&_languages *%0=; | |
}; | |
&cmd.+langauge/remove #ls=$+language/remove *=*: | |
@assert isstaff(%#) = { | |
@pemit %#=Permission denied. | |
}; | |
@assert isdbref(pmatch(*%0)) = { | |
@pemit %#=No match found. | |
}; | |
@if not(hasattr(*%0, _languages)) = { | |
@pemit %#=[cname(*%0)] doesn't know any languages. | |
},{ | |
@if not(member(get(*%0/_languages), lcstr(%1), |)) = { | |
@pemit %#=[cname(*%0)] doesn't know [capstr(%1)]. | |
},{ | |
@pemit %#=[cname(*%0)] no longer knows [capstr(%1)].; | |
&_languages *%0=[setdiff(get(*%0/_languages), lcstr(%1), |)]; | |
} | |
}; | |
&INC_parse #ls= | |
@pemit %0= [parsestr(%1, say( %0, %1, %#), ",",, %2)] | |
&INC_parse_PREFIX #ls= | |
@pemit %0= %0 | |
[setq(8,if(and(match(%0,%2),not(hastoggle(%2,SAFELOG))),&you,%2))] | |
[parsestr(%1, say(%0, %1, %#) ,",",,%q8,,,,%3)] | |
&fn.translate #ls = | |
[if( | |
hasattr(%2, _default_language), | |
// Process the default language | |
// If the speaker knows the language, use it | |
// If the speaker doesn't know the language, mask it. | |
if( | |
member(get(*[stripansi(%1)]/_languages), get(%2/_default_language), |), | |
%0 << [capstr(get(%2/_default_language))] >>, | |
switch( | |
1, | |
lt(words(%0), 2), << [pickrand(v(list.brief.phrases),|)] [capstr(get(%2/_default_language))]. >>, | |
lt(words(%0), 5), << [pickrand(v(list.few.words.phrases),|)] [capstr(get(%2/_default_language))]. >>, | |
lt(words(%0), 10),<< [pickrand(v(list.short.phrases),|)] [capstr(get(%2/_default_language))]. >>, | |
lt(words(%0), 15),<< [pickrand(v(list.sentence.phrases),|)] [capstr(get(%2/_default_language))]. >>, | |
lt(words(%0), 20),<< [pickrand(v(list.longer.sentence.phrases),|)] [capstr(get(%2/_default_language))]. >>, | |
lt(words(%0), 25),<< [pickrand(v(list.complex.statement.phrases),|)] [capstr(get(%2/_default_language))]. >>, | |
<< [pickrand(v(list.default.phrases),|)] [capstr(get(%2/_default_language))] >>. | |
) | |
), | |
// check for `~` as tthe first charadcter. If found, remove it and use the _current_language. | |
if( and( strmatch(%0,~*), hasattr(%2, _current_language)), | |
if( | |
member(get(*[stripansi(%1)]/_languages), get(%2/_current_language),|), | |
[mid(%0,1,strlen(%0))] << [capstr(get(%2/_current_language))] >>, | |
switch( | |
1, | |
lt(words(%0), 2), << [pickrand(v(list.brief.phrases),|)] [capstr(get(%2/_current_language))]. >>, | |
lt(words(%0), 5), << [pickrand(v(list.few.words.phrases),|)] [capstr(get(%2/_current_language))]. >>, | |
lt(words(%0), 10),<< [pickrand(v(list.short.phrases),|)] [capstr(get(%2/_current_language))]. >>, | |
lt(words(%0), 15),<< [pickrand(v(list.sentence.phrases),|)] [capstr(get(%2/_current_language))]. >>, | |
lt(words(%0), 20),<< [pickrand(v(list.longer.sentence.phrases),|)] [capstr(get(%2/_current_language))]. >>, | |
lt(words(%0), 25),<< [pickrand(v(list.complex.statement.phrases),|)] [capstr(get(%2/_current_language))]. >>, | |
<< [pickrand(v(list.default.phrases),|)] [capstr(get(%#/_current_language))] >>. | |
) | |
), | |
if(strmatch(%0, ~*), [mid(%0,1,strlen(%0))], %0) | |
) | |
)] | |
&ufunc/privileged.say #ls = [ulocal(#ls/fn.translate, %0, %1, %2)] | |
/* | |
============================================================================= | |
===== Filler phrases ======================================================== | |
*/ | |
&list.brief.phrases #ls= | |
Something brief in| | |
A short utterance in| | |
A brief phrase in| | |
A quick remark in| | |
A brief statement in| | |
A succinct phrase in | |
&list.few.words.phrases #ls= | |
A few words in| | |
A short statement in| | |
A couple of words in| | |
A few brief words in| | |
A succinct statement in| | |
A terse phrase in | |
&list.short.phrases #ls= | |
Something in| | |
A short sentence in| | |
A brief remark in| | |
A brief comment in| | |
A short note in| | |
A quick sentence in | |
&list.sentence.phrases #ls= | |
A sentence in| | |
A line in| | |
A sentence spoken in| | |
A statement in| | |
A spoken sentence in| | |
An uttered sentence in | |
&list.longer.sentence.phrases #ls= | |
A longer sentence in| | |
A more detailed sentence in| | |
A longer statement in| | |
An extended sentence in| | |
A more elaborate sentence in| | |
An intricate sentence in | |
&list.complex.statement.phrases #ls= | |
A complex statement in| | |
A detailed sentence in| | |
A complex utterance in| | |
An elaborate statement in| | |
A multifaceted sentence in| | |
A detailed expression in | |
&list.default.phrases #ls= | |
Something in| | |
Words spoken in| | |
A phrase in| | |
Speech in| | |
Verbiage in| | |
A spoken phrase in |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment