我正在为带有自定义库的游戏编写聊天助手工具。
我想在玩家发送消息时更改特定变量。
这是我的代码
¯\_(ツ)_/¯
正如你所看到的那样,我试图从#as; asciis"中获取文本。并将它们转换为" converteds" (按顺序)。
每当我输入不在" asciis"列出它完美的工作。但每当我输入耸肩时,它会打印◕_◕
+ ◕_◕
+ current_user();
function current_user()
{
global $current_user,$user_ID;
if(is_user_logged_in())
{
echo 'User Logged in '.$user_ID;
}
else {
echo 'No user is logged in< br/>';
custom_login();
}
}
function custom_login() {
$creds = array('user_login' => '<USERNAME>', 'user_password' => '<USERPASSWORD>', 'remember' => true );
$user = wp_signon( $creds, false );
wp_set_current_user($user->ID);
wp_set_auth_cookie($user->ID, true, false );
do_action( 'wp_login', '<USERNAME>' );
if ( is_wp_error($user) )
echo $user->get_error_message();
}
}
(它会打印omg 2次)。同样在 omg 中也是如此。
你可能知道我真的是初学者。我真的不明白这段代码有什么问题......
答案 0 :(得分:1)
似乎您的两个列表具有相同的长度(就所包含的元素而言),并且一个列表中的每个元素在另一个列表中的相同位置具有替换。
然后你可以将两个列表视为两个数组,并使用不同的方式搜索输入术语并用替换文本替换它
private static void Game_OnInput(GameInputEventArgs args)
{
newtext = args.Input;
for(int x = 0; x < ascii.Count; x++)
if (args.Input.Contains(ascii[x]))
{
newtext = args.Input.Replace(ascii[x], converted[x]);
Game.Say(newtext);
}
}
虽然我认为没有很大改进,但你也可以用字典实现相同的
static Dictionary<string, string> converter = new Dictionary<string, string>()
{
{"shrug", @"¯\_(ツ)_/¯"},
{"omg", @"◕_◕"}
};
private static void Game_OnInput(GameInputEventArgs args)
{
newtext = args.Input;
foreach(KeyValuePair<string, string> kvp in converter)
if (args.Input.Contains(kvp.Key))
{
newtext = args.Input.Replace(kvp.Key, kvp.Value);
Game.Say(newtext);
}
}
嗯,可能更具可读性,但我们仍然需要逐个遍历字典键。
答案 1 :(得分:0)
丹尼尔在评论中指出,这是词典的一个很好的用例。
使用字典将要替换的文本映射到要替换的内容:
Dictionary<string, string> dict = new Dictionary<string, string>
{
{"shrug", @"¯\_(ツ)_/¯" },
{"omg", "◕_◕" }
}; // etc
然后从字典中找到所有出现的键,并用相应的值替换它们。
另外,为什么使用static
方法和字段?我可能错了,但我希望大多数,如果不是所有其他方法和字段都是static
。我强烈建议不要习惯它们。尝试更多地了解OOP。
答案 2 :(得分:0)
你的主要问题是你总是替换args.Input,但每次都将结果存储在newtext中,覆盖以前的替换。您的下一个问题是,您在每次替换尝试后输出结果,这就是为什么您会得到多个奇怪的输出结果。
我还建议使用字典,因为根据定义,它是一个事物到另一个事物的映射。另外,请注意下面的更改,我已经将循环之外的Game.Say调用移动并更改了#34; args.Input.Replace&#34; to&#34; newtext.Replace&#34;
Dictionary<string, string> dictionary = new Dictionary<string, string>
{
{"shrug", @"¯\_(ツ)_/¯" },
{"omg", "◕_◕" }
};
private static void Game_OnInput(GameInputEventArgs args)
{
string newtext = args.Input;
foreach(string key in dictionary.Keys){
newtext = newtext.Replace(key,dictionary[key]);
}
Game.Say(newtext);
}