抢先预约

《新倩女幽魂》官方论坛

热帖
同人
视频
活动
查看: 67129|回复: 93
打印 上一主题 下一主题

[任务] 倩女幽魂客户端辅助类小程序(附源码):

[复制链接]
跳转到指定楼层
1#
发表于 2017-4-10 12:54:16 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式 来自:四川

马上注册,结交更多好友,享用更多功能,让你轻松玩转新倩女幽魂社区。

您需要 登录 才可以下载或查看,没有帐号?创建论坛帐号

x
本帖最后由 山巔一寺一壺酒 于 2017-6-12 17:19 编辑

使用须知本帖贴出的任何程序(但不包括其他人共享给朋友们的,仅限于本帖下载)都不会访问游戏文件夹、获取游戏进程数据,全部都需要自己手动在程序上面输入,所以不会被拉小黑屋。
由于防止他人恶意修改源程序伪造成楼主发布的共享给他人,楼主对程序作了混淆打包
所以由于混淆打包工具限制,过期不能使用请联系楼主进行帖子更新,重新打包程序:
帖源码(仅限逻辑代码,视图排版代码不贴)是为了懂代码的朋友不放心楼主程序自己复制生成使用
(但是重新生成的程序信息与楼主生成的会有差异,因此楼主以及懂的人可以区分是否是他人恶意修改后的程序)

1.侠侣诗词复制:
程序:
侠侣1-1.zip (560.68 KB, 下载次数: 837)
最新版本下载(移除第三方加密[需要收费,有时间限制,并且增加了程序的大小],采用微软Dotfuscated混淆[无时间限制,可永久使用],降低程序大小): 1_1.zip (5.77 KB, 下载次数: 689)

点击复制后,在答题框使用Ctrl+V粘贴即可
程序截图:

视频示例:


C#源码:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;

  5. namespace _1_1
  6. {
  7.     public partial class Form1 : Form
  8.     {
  9.         private Dictionary<string, string> m_Text;
  10.         private Dictionary<string, Button> m_btn;
  11.         private Timer timer;
  12.         private Dictionary<Button, DateTime> m_time;
  13.         public Form1()
  14.         {
  15.             InitializeComponent();
  16.         }

  17.         private void Form1_Load(object sender, EventArgs e)
  18.         {
  19.             foreach (KeyValuePair<string, string> item in GetText)
  20.             {
  21.                 int index = panC.Controls.Find("key", false).Length;
  22.                 int top = index * 30 + 10;
  23.                 Label lab = new Label();
  24.                 lab.Name = "key";
  25.                 lab.Text = item.Key + ",";
  26.                 lab.Left = 10;
  27.                 lab.Top = top;
  28.                 while (this.Height < (top + 60))
  29.                 {
  30.                     this.Height += 10;
  31.                 }
  32.                 panC.Controls.Add(lab);

  33.                 Label result = new Label();
  34.                 result.Name = "result";
  35.                 result.Text = item.Value;
  36.                 result.Left = lab.Left + lab.Width + 20;
  37.                 result.Top = top;
  38.                 panC.Controls.Add(result);

  39.                 Button btn = new Button();
  40.                 btn.Name = item.Key;
  41.                 btn.Text = "复制";
  42.                 btn.Click += Copy_Click;
  43.                 btn.Left = result.Left + result.Width + 20;
  44.                 btn.Top = top - 6;
  45.                 panC.Controls.Add(btn);
  46.             }
  47.             this.Height += 30;
  48.             Label lText = new Label();
  49.             lText.Left = 10;
  50.             lText.Width = 300;
  51.             lText.Top = panC.Bottom - 30;
  52.             panC.Controls.Add(lText);
  53.             if (timer == null)
  54.             {
  55.                 timer = new Timer();
  56.                 timer.Interval = 100;
  57.                 timer.Tick += Timer_Sender;
  58.                 timer.Start();
  59.             }
  60.         }
  61.         private void Timer_Sender(object sender, EventArgs e)
  62.         {
  63.             if (ResetBtn.Count > 0)
  64.             {
  65.                 Dictionary<Button, DateTime> temp = new Dictionary<Button, DateTime>();
  66.                 foreach (KeyValuePair<Button, DateTime> item in BtnTime)
  67.                 {
  68.                     if ((DateTime.Now - item.Value).Seconds < 3)
  69.                     {
  70.                         temp.Add(item.Key, item.Value);
  71.                     }
  72.                     else
  73.                     {
  74.                         item.Key.Text = "复制";
  75.                         item.Key.ForeColor = Color.Black;
  76.                         ResetBtn.Remove(item.Key.Name);
  77.                     }
  78.                 }
  79.                 m_time = temp;
  80.             }
  81.         }
  82.         private void Copy_Click(object sender, EventArgs e)
  83.         {
  84.             Button btn = sender as Button;
  85.             Clipboard.SetDataObject(GetText[btn.Name]);
  86.             btn.Text = "已复制";
  87.             btn.ForeColor = Color.Red;
  88.             if (!ResetBtn.ContainsKey(btn.Name))
  89.                 ResetBtn.Add(btn.Name, btn);
  90.             if (!BtnTime.ContainsKey(btn))
  91.                 BtnTime.Add(btn, DateTime.Now);
  92.             else
  93.                 BtnTime[btn] = DateTime.Now;
  94.         }
  95.         private Dictionary<Button, DateTime> BtnTime
  96.         {
  97.             get
  98.             {
  99.                 if (m_time == null)
  100.                     m_time = new Dictionary<Button, DateTime>();
  101.                 return m_time;
  102.             }
  103.         }
  104.         private Dictionary<string, Button> ResetBtn
  105.         {
  106.             get
  107.             {
  108.                 if(m_btn==null)
  109.                 {
  110.                     m_btn = new Dictionary<string, Button>();
  111.                 }
  112.                 return m_btn;
  113.             }
  114.         }
  115.         private  Dictionary<string, string> GetText
  116.         {
  117.             get
  118.             {
  119.                 if (m_Text == null)
  120.                 {
  121.                     m_Text = new  Dictionary<string, string>();
  122.                     m_Text.Add("七月七日长生殿", "夜半无人私语时");
  123.                     m_Text.Add("金风雨露一相逢", "便胜却人间无数");
  124.                     m_Text.Add("自是人间一周岁", "何妨天上只黄昏");
  125.                     m_Text.Add("凉风吹玉露", "河汉有幽期");
  126.                     m_Text.Add("妆成应懒织", "今夕渡河归");
  127.                     m_Text.Add("云阶月地一相过", "未抵经年别恨多");
  128.                     m_Text.Add("争将世上无期别", "换得年年一度来");
  129.                     m_Text.Add("几许欢情与离恨", "年年并在此宵中");
  130.                     m_Text.Add("仙裙玉佩空自知", "天上人间不相见");
  131.                     m_Text.Add("河汉清且浅", "相去复几许");
  132.                 }
  133.                 return m_Text;
  134.             }
  135.         }
  136.     }
  137. }
复制代码
2.官府兵器计算器:
程序:
CopyAndComputing.zip (561.96 KB, 下载次数: 585)
最新版本下载(移除第三方加密[需要收费,有时间限制,并且增加了程序的大小],采用微软Dotfuscated混淆[无时间限制,可永久使用],降低程序大小):
CopyAndComputing.zip (7.43 KB, 下载次数: 496)

程序截图:


源码:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Text.RegularExpressions;
  8. using System.Windows.Forms;

  9. namespace CopyAndComputing
  10. {
  11.     public partial class Computing : Form
  12.     {
  13.         public Computing()
  14.         {
  15.             InitializeComponent();
  16.             AddStaticKeyValue();
  17.         }
  18.         private readonly Dictionary<byte, string> m_defaultText = new Dictionary<byte, string>();
  19.         private readonly Dictionary<byte, Dictionary<byte, string>> m_text = new Dictionary<byte, Dictionary<byte, string>>();
  20.         private void AddStaticKeyValue()
  21.         {
  22.             m_defaultText.Add(0, "第一个npc");
  23.             m_defaultText.Add(1, "第二个npc");
  24.             m_defaultText.Add(2, "第三个npc");
  25.         }
  26.         private void textbox_Enter_Click(object sender, EventArgs e)
  27.         {
  28.             TextBox tb = sender as TextBox;
  29.             tb.ReadOnly = false;
  30.             if (m_defaultText.ContainsValue(tb.Text))
  31.                 tb.Text = "";
  32.             else
  33.                 tb.Select(tb.Text.Length, 0);

  34.             if (m_text.Count > 0 && m_text.ContainsKey(0) && m_text[0].ContainsKey(0)
  35.                 && m_text.ContainsKey(1) && m_text[1].ContainsKey(0)
  36.                 && m_text.ContainsKey(2) && m_text[2].ContainsKey(0))
  37.             {
  38.                 panelTwo.Visible = true;
  39.             }
  40.             else
  41.                 panelTwo.Visible = false;

  42.             if (m_text.Count > 0 && m_text.ContainsKey(0) && m_text[0].ContainsKey(1)
  43.                 && m_text.ContainsKey(1) && m_text[1].ContainsKey(1)
  44.                 && m_text.ContainsKey(2) && m_text[2].ContainsKey(1))
  45.             {
  46.                 panelThree.Visible = true;
  47.             }
  48.             else
  49.                 panelThree.Visible = false;
  50.         }
  51.         private bool isDouble_Click_Select = false;
  52.         private void Double_Click(object sender, EventArgs e)
  53.         {
  54.             TextBox tb = sender as TextBox;
  55.             if (!m_defaultText.ContainsValue(tb.Text))
  56.             {
  57.                 tb.Select(0, tb.Text.Length);
  58.                 isDouble_Click_Select = true;
  59.             }
  60.         }
  61.         private void textbox_Levae(object sender, EventArgs e)
  62.         {
  63.             #region
  64.             if (string.IsNullOrEmpty((sender as TextBox).Text))
  65.             {
  66.                 textbox_Enter_Click(sender, e);
  67.                 if ((sender as TextBox).Name.ToLower().EndsWith("one"))
  68.                 {
  69.                     (sender as TextBox).Text = m_defaultText[0];
  70.                 }
  71.                 else if ((sender as TextBox).Name.ToLower().EndsWith("two"))
  72.                 {
  73.                     (sender as TextBox).Text = m_defaultText[1];
  74.                 }
  75.                 else
  76.                     (sender as TextBox).Text = m_defaultText[2];
  77.             }
  78.             #endregion
  79.         }
  80.         private int ComputResult(byte m)
  81.         {
  82.             if (!m_text.ContainsKey(m))
  83.                 return 0;
  84.             int result = 0;
  85.             foreach (KeyValuePair<byte, string> value in m_text[m])
  86.             {
  87.                 int temp = 0;
  88.                 int.TryParse(value.Value, out temp);
  89.                 result += temp;
  90.             }
  91.             return result;
  92.         }
  93.         private void Key_Up(object sender, KeyEventArgs e)
  94.         {
  95.             if (!e.Control)
  96.             {
  97.                 if (!isDouble_Click_Select)
  98.                 {
  99.                     TextBox tb = sender as TextBox;
  100.                     Regex regex = new Regex("\\d*");
  101.                     tb.Text = regex.Match(tb.Text).Value;
  102.                     tb.Select(tb.Text.Length, 0);
  103.                     if (tb.Name.ToLower().StartsWith("txtweapons"))
  104.                     {
  105.                         Update_Texts(0, tb);
  106.                         txtWeaponsResult.Text = ComputResult(0).ToString();
  107.                     }
  108.                     else if (tb.Name.ToLower().StartsWith("txtarmor"))
  109.                     {
  110.                         Update_Texts(1, tb);
  111.                         txtArmorResult.Text = ComputResult(1).ToString();
  112.                     }
  113.                     else
  114.                     {
  115.                         Update_Texts(2, tb);
  116.                         txtHorseResult.Text = ComputResult(2).ToString();
  117.                     }
  118.                     textbox_Enter_Click(sender, null);
  119.                 }
  120.                 else
  121.                     isDouble_Click_Select = false;
  122.             }
  123.         }
  124.         private void Update_Texts(byte m, TextBox tb)
  125.         {
  126.             if (tb.Name.ToLower().EndsWith("one"))
  127.             {
  128.                 Update_Text(m, 0, tb.Text);
  129.             }
  130.             else if (tb.Name.ToLower().EndsWith("two"))
  131.             {
  132.                 Update_Text(m, 1, tb.Text);
  133.             }
  134.             else
  135.                 Update_Text(m, 2, tb.Text);
  136.         }
  137.         private void Update_Text(byte m, byte n, string value)
  138.         {
  139.             if (m_text.ContainsKey(m))
  140.             {
  141.                 if (m_text[m].ContainsKey(n))
  142.                 {
  143.                     if (string.IsNullOrEmpty(value))
  144.                     {
  145.                         m_text[m].Remove(n);
  146.                     }
  147.                     else
  148.                         m_text[m][n] = value;
  149.                 }
  150.                 else if (!string.IsNullOrEmpty(value))
  151.                     m_text[m].Add(n, value);
  152.             }
  153.             else if (!string.IsNullOrEmpty(value))
  154.             {
  155.                 Dictionary<byte, string> m_value = new Dictionary<byte, string>();
  156.                 m_value.Add(n, value);
  157.                 m_text.Add(m, m_value);
  158.             }
  159.         }
  160.     }
  161. }
复制代码




3.侠侣4-2计算器、提示打怪:(开发中、和朋友测怪物十位数的数据中..(有时间的朋友可以帮着测试数据的可以m我,我单独发给你们半成品程序测数据,谢谢).)
程序:
(程序进度:可以提示接下来可以打的怪物(已经优化,按当前场景怪物的分数从高到低排序提示)不会出现混乱,目前需要大量数据测试十位数进行更正确的提示程序版本更换,界面迭代
第一版:(无打怪提示,需要切换窗口点击对应怪物以及开启怪物堆)


第二版:(取消语音输入[因兼容性不是很好],取消怪物堆点击[需要首次点击],增加快捷按钮[alt+1/2/3/4]   增加全局热键  比如不与游戏冲突的Ctrl+F   可以置顶窗口,不需要切换窗口,只需要使用全局热键即可)

十位数已经测试完毕,最后测试场景怪物数量上限后即可完善女方数据(男方已经测试完毕),开始正式游戏通关视频录制,
最终版本已确定,试用中。。。。




4_2计数、推荐打怪、计算砸群:

楼主梅花小魅(符号忘记了):秋殤淚別離景
侠侣4_2龙飞版.zip (20.34 KB, 下载次数: 577)
龙飞(可砸群)版:
侠侣4_2龙飞带砸群版.zip (21.04 KB, 下载次数: 536)
龙飞凤舞(可砸群版): 龙飞凤舞砸群版.zip (21 KB, 下载次数: 638)

在此感谢与我一起测试数据的朋友    梅花:尘梦、花信




















回复

使用道具 举报

94#
发表于 2019-7-1 17:41:27 | 只看该作者 来自:四川
回复 支持 反对

使用道具 举报

93#
发表于 2019-6-26 00:42:30 | 只看该作者 来自:江苏
虽然不知道楼猪在说什么,但是看起来好厉害的样子!
回复 支持 反对

使用道具 举报

92#
发表于 2019-6-25 12:03:28 | 只看该作者 来自:江苏
111111111111111
回复 支持 反对

使用道具 举报

91#
发表于 2019-2-28 08:53:21 | 只看该作者 来自:上海
楼主是新学编程吧,这个动手写程序习惯不错。建议把诗词这种数据写在单独的配置文件里,这样如果内容更新用户可以自行修改,你写在代码里如果要更新只能重新编译
回复 支持 1 反对 0

使用道具 举报

90#
发表于 2019-2-27 16:40:18 | 只看该作者 来自:福建
只要不是钩子就没事。。要不然会封号
回复 支持 反对

使用道具 举报

89#
发表于 2018-12-7 23:10:58 | 只看该作者 来自:河南
一脸懵逼进来一脸茫然出去
回复 支持 反对

使用道具 举报

88#
 楼主| 发表于 2018-12-7 20:29:32 | 只看该作者 来自:四川
靡所厎止 发表于 2018-10-15 16:24
懵逼  这小程序是干嘛用的

计数自己打了多少,该打哪个的
回复 支持 反对

使用道具 举报

87#
 楼主| 发表于 2018-12-7 20:29:11 | 只看该作者 来自:四川
damo 发表于 2018-11-25 16:58
4-3可以搞个坐标控制的脚本通过视频通关记录的坐标节点。火球地方可以半自动。 ...

恩,那会被封的,,
回复 支持 反对

使用道具 举报

86#
 楼主| 发表于 2018-12-7 20:28:56 | 只看该作者 来自:四川

不会操作游戏,不会封号的
回复 支持 反对

使用道具 举报

85#
发表于 2018-11-26 17:43:28 | 只看该作者 来自:江苏
真的是技术贴。。。
回复 支持 反对

使用道具 举报

84#
发表于 2018-11-26 15:09:58 | 只看该作者 来自:山东
回复 支持 反对

使用道具 举报

83#
发表于 2018-11-25 16:58:49 | 只看该作者 来自:江苏
4-3可以搞个坐标控制的脚本通过视频通关记录的坐标节点。火球地方可以半自动。
回复 支持 1 反对 0

使用道具 举报

82#
发表于 2018-10-15 16:24:35 | 只看该作者 来自:河北
懵逼  这小程序是干嘛用的
回复 支持 反对

使用道具 举报

81#
发表于 2018-9-28 18:27:50 | 只看该作者 来自:吉林
没看明白
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 创建论坛帐号

本版积分规则

快速回复 返回顶部 返回列表