抢先预约

《新倩女幽魂》官方论坛

热帖
同人
    视频
    活动
    查看: 67113|回复: 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, 下载次数: 584)
    最新版本下载(移除第三方加密[需要收费,有时间限制,并且增加了程序的大小],采用微软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 | 只看该作者 来自:吉林
    没看明白
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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