mud/lib/lib/language.c
2020-09-06 05:43:07 -07:00

122 lines
3.1 KiB
C

/* /lib/languages.c
* from the Dead Souls LPC Library
* language module for linguistic people
* created by Descartes of Borg 950412
*/
#include <function.h>
int Polyglot = 0;
private mapping Languages = ([]);
private string DefaultLanguage = "";
// abstract methods
int GetHeartRate();
int GetStatLevel(string stat);
string GetNativeLanguage();
// end abstract methods
int GetNextLevel(string lang, int curr_level);
varargs void SetLanguage(string lang, int level, int native){
string key;
if(!lang || !sizeof(lang)) return;
key = convert_name(lang);
if( !Languages[key] ) Languages[key] = ([]);
Languages[key] = ([ "name" : lang, "points" : 0, "level" : level,
"native" : native ]);
}
mapping RemoveLanguage(string lang){
if(lang && sizeof(lang)) lang = convert_name(lang);
else return copy(Languages);
map_delete(Languages, lang);
return copy(Languages);
}
mapping SetNativeLanguage(string lang){
string old_lang = GetNativeLanguage();
RemoveLanguage(old_lang);
SetLanguage(old_lang, 100);
SetLanguage(lang, 100, 1);
return copy(Languages);
}
mixed SetDefaultLanguage(string str){
if(!str || str == "") return DefaultLanguage = GetNativeLanguage();
if(member_array(lower_case(str),keys(Languages)) != -1 ||
member_array(capitalize(lower_case(str)),keys(Languages)) != -1)
return DefaultLanguage = capitalize(lower_case(str));
else return DefaultLanguage = GetNativeLanguage();
}
string GetDefaultLanguage(){
if(sizeof(DefaultLanguage)) return DefaultLanguage;
else return GetNativeLanguage();
}
int GetLanguageLevel(string lang){
if(Polyglot) return 100;
lang = convert_name(lang);
if( !Languages[lang] ) return 0;
else return Languages[lang]["level"];
}
string GetLanguageName(string lang){
lang = convert_name(lang);
if( !Languages[lang] ) return 0;
else return Languages[lang]["name"];
}
int AddLanguagePoints(string lang, int points){
string key;
key = convert_name(lang);
if( !Languages[key] ) SetLanguage(key, 0, 0);
Languages[key]["points"] += points;
Languages[key]["level"] = Languages[key]["points"];
if(Languages[key]["level"] > 100) Languages[key]["level"] = 100;
return Languages[key]["points"];
}
int GetLanguagePoints(string lang){
lang = convert_name(lang);
if( !Languages[lang] ) return 0;
else return Languages[lang]["points"];
}
string array GetLanguages(){
return map(keys(Languages), (: Languages[$1]["name"] :));
}
int GetNextLevel(string lang, int curr_level){
int y;
lang = lower_case(lang);
if( !Languages[lang] ) return 0;
y = (1 + Languages[lang]["native"]) * GetStatLevel("intelligence");
y = (2000 * curr_level) / y;
return y;
}
int GetStatLevel(string stat){ return 0; }
string GetNativeLanguage(){
mapping val;
string lang;
foreach(lang, val in Languages)
if( val["native"] ) return Languages[lang]["name"];
}
int SetPolyglot(int i){
if(!i) Polyglot = 0;
else Polyglot = 1;
return Polyglot;
}
int GetPolyglot(){
return Polyglot;
}