设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
123
返回列表 发新帖
楼主: 玻璃柿子
打印 上一主题 下一主题

[原创发布] RMXP魔改计划及发布贴

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
21
 楼主| 发表于 2023-4-15 18:56:14 | 显示全部楼层
玻璃柿子 发表于 2023-4-15 17:58
链接:https://pan.baidu.com/s/1mCFgb0vjd-Vk0cWVRuop3w
提取码:rcbd
--来自百度网盘超级会员V1的分 ...

目前这些修改方案,都是基于二进制的,只是改这个更麻烦一些,用的是一个自己才研究出来,没有试过的办法。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
22
 楼主| 发表于 2023-4-16 20:46:16 | 显示全部楼层
本帖最后由 玻璃柿子 于 2023-4-16 20:49 编辑
SailCat 发表于 2023-4-16 18:37
刚下载了,结果被报Trojan:Win32/Spursint.F!cl……
没办法用……唉


因为xp不开源,所有的修改都是采用非正常方案,就是对文件直接修改二进制内存,所以容易被杀毒软件判定是病毒。
在信任的情况下,可以这样操作:
1.在任意位置新建一个文件夹,然后把软件放进去
2.在杀毒软件中设置免杀目录,将刚刚新建的文件夹添加到免杀目录中
3.解压到当前目录,并运行


点评

感谢感谢,我试一下哈,还得先让WD先不要在下载环节就给我删掉  发表于 2023-4-16 21:22
突然之间发现,我都好久没玩毒奶粉了。 那是自己改的一个台服版本  发表于 2023-4-16 20:53
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
23
 楼主| 发表于 2023-4-19 20:20:42 | 显示全部楼层
最近研究一些编辑器内部的原理,五一节前先不上新版本了,五一后会出一个较大的更新。

点评

发表于 2023-4-20 10:42
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
24
 楼主| 发表于 2023-4-24 21:16:52 | 显示全部楼层
soulsaga 发表于 2023-4-21 22:55
关於插件,希望可以附上数个范例參考,
空白一片要重头写多困难
谁都可以,不一定要作者 ...

好的,在考虑,最近在闭关中
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
25
 楼主| 发表于 2023-5-4 20:33:48 | 显示全部楼层
五一假期啥都没干,就知道玩…………

点评

玩就对了o(* ̄▽ ̄*)ブ  发表于 2023-5-4 23:11
玩玩挺好的,用爱发电不应有负罪感~~~  发表于 2023-5-4 20:43
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
26
 楼主| 发表于 2023-5-5 20:46:43 | 显示全部楼层
lcx666s 发表于 2023-4-30 22:11
作者能不能把地图上限从999改成9999?

地图上限是吧,可以哦
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
27
 楼主| 发表于 2023-5-5 22:14:28 | 显示全部楼层
class Rlib
        attr_reader :WM_COMMAND
        attr_reader :WM_SHOWWINDOW
        attr_reader :WS_POPUP
        attr_reader :WS_BORDER
        attr_reader :WS_SYSMENU
        attr_reader :WS_CAPTION
        attr_reader :WS_CHILD
        attr_reader :WS_VISIBLE
        attr_reader :DS_MODALFRAME
        attr_reader :BS_DEFPUSHBUTTON
        attr_reader :IDOK
        attr_reader :IDCANCEL
        attr_reader :DG_BUTTON
        attr_reader :DG_EDIT
        attr_reader :DG_STATIC
        attr_reader :DG_LIST
        attr_reader :DG_SCROLL
        attr_reader :DG_COMBO
        attr_reader :TCM_GETCURFOCUS
       
        def initialize
                # 导入win32 api
                @utf8_MessageBox = Win32API.new('washduck', 'utf8_MessageBox', ['l','p','p','l'], 'l')
                @GetSubMenu = Win32API.new('user32', 'GetSubMenu', ['l','l'], 'l')
                @utf8_AppendMenu = Win32API.new('washduck', 'utf8_AppendMenu', ['l','l','l','p'], 'l')
                @utf8_CreateDialog = Win32API.new('washduck', 'utf8_CreateDialog', ['l','l','l','l','l','p'], 'l')
                @utf8_AppendDialogItem = Win32API.new('washduck', 'utf8_AppendDialogItem', ['l','l','l','l','l','l','l','l','p'], 'l')
                @ShowDialog = Win32API.new('washduck', 'ShowDialog', 'l', 'l')
                @DestoryDialog = Win32API.new('washduck', 'DestoryDialog', 'l', 'l')
                @GetWindowTitle = Win32API.new('washduck', 'GetWindowTitle', 'l', 'p')
                @EndDialog = Win32API.new('user32', 'EndDialog', ['l','l'], 'l')
                @GetDlgItem = Win32API.new('user32', 'GetDlgItem', ['l','l'], 'l')
                @GetDlgCtrlID = Win32API.new('user32', 'GetDlgCtrlID', 'l', 'l')
                @SendMessageA = Win32API.new('user32', 'SendMessageA', ['l','l','l','l'], 'l')
                @GetMemVal = Win32API.new('washduck', 'GetMemVal', 'l', 'l')
                @SetMemVal = Win32API.new('washduck', 'SetMemVal', ['l','l'], 'l')
               
                # 窗口消息
                @WM_COMMAND = 0x0111
                @WM_SHOWWINDOW = 0x0018

                # 窗口样式
                @WS_POPUP = 0x80000000
                @WS_BORDER = 0x00800000
                @WS_SYSMENU = 0x00080000
                @WS_CAPTION = 0x00C00000
                @WS_CHILD = 0x40000000
                @WS_VISIBLE = 0x10000000

                # 对话框样式
                @DS_MODALFRAME = 0x80

                # 按钮样式
                @BS_DEFPUSHBUTTON = 0x00000001

                # 控件消息
                @IDOK = 1
                @IDCANCEL = 2

                # 对话框元素
                @DG_BUTTON = 0x0080
                @DG_EDIT = 0x0081
                @DG_STATIC = 0x0082
                @DG_LIST = 0x0083
                @DG_SCROLL = 0x0084
                @DG_COMBO = 0x0085

                # 选项卡操作
                @TCM_GETCURFOCUS = 0x1300 + 47
        end
       
        def MessageBox(hwnd, text, lpCapition, uType)
                return @utf8_MessageBox.call(hwnd, text, lpCapition, uType)
        end
       
        def GetSubMenu(menu, index)
                return @GetSubMenu.call(menu, index)
        end
       
        def AppendMenu(menu, flags, mid, name)
                return @utf8_AppendMenu.call(menu, flags, mid, name)
        end
       
        def CreateDialog(style, x, y, cx, cy, title)
                return @utf8_CreateDialog.call(style, x, y, cx, cy, title)
        end
       
        def AppendDialogItem(id, style, x, y, cx, cy, classid, mid, name)
                return @utf8_AppendDialogItem.call(id, style, x, y, cx, cy, classid, mid, name)
        end
       
        def ShowDialog(id)
                return @ShowDialog.call(id)
        end
       
        def DestoryDialog(id)
                return @DestoryDialog.call(id)
        end
       
        def GetWindowTitle(hWnd)
                return @GetWindowTitle.call(hWnd)
        end
       
        def EndDialog(hWnd, wParam)
                return @EndDialog.call(hWnd, wParam)
        end
       
        def GetDlgItem(hWnd, mid)
                return @GetDlgItem.call(hWnd, mid)
        end
       
        def SendMessageA(hWnd, message, wParam, lParam)
                return @SendMessageA.call(hWnd, message, wParam, lParam)
        end
       
        def GetMemVal(addr)
                return @GetMemVal.call(addr)
        end
       
        def SetMemVal(addr, val)
                return @SetMemVal.call(addr, val)
        end
       
        def SetWeaponAtk(val)
                SetMemVal(0x00435AEC,val)
                SetMemVal(0x00436239,val)
        end
       
        def SetWeaponPdef(val)
                SetMemVal(0x00435AFF,val)
                SetMemVal(0x0043625B,val)
        end
       
        def SetWeaponMdef(val)
                SetMemVal(0x00435B12,val)
                SetMemVal(0x0043627D,val)
        end
       
        def SetWeaponStr(min,max)
                SetMemVal(0x00435B25,max)
                SetMemVal(0x0043629F,max)
               
                SetMemVal(0x00435B2A,min)
                SetMemVal(0x004362A4,min)
        end
       
        def SetWeaponDex(min,max)
                SetMemVal(0x00435B3B,max)
                SetMemVal(0x004362C4,max)
               
                SetMemVal(0x00435B40,min)
                SetMemVal(0x004362C9,min)
        end
       
        def SetWeaponAgi(min,max)
                SetMemVal(0x00435B51,max)
                SetMemVal(0x004362E9,max)
               
                SetMemVal(0x00435B56,min)
                SetMemVal(0x004362EE,min)
        end
       
        def SetWeaponInt(min,max)
                SetMemVal(0x00435B67,max)
                SetMemVal(0x0043630E,max)
               
                SetMemVal(0x00435B6C,min)
                SetMemVal(0x00436313,min)
        end
       
        def SetArmorPdef(val)
                SetMemVal(0x00427E2C,val)
                SetMemVal(0x0042858E,val)
        end
       
        def SetArmorMdef(val)
                SetMemVal(0x00427E3F,val)
                SetMemVal(0x004285B0,val)
        end
       
        def SetArmorStr(min,max)
                SetMemVal(0x00427E62,max)
                SetMemVal(0x004285F1,max)
               
                SetMemVal(0x00427E67,min)
                SetMemVal(0x004285F6,min)
        end
       
        def SetArmorDex(min,max)
                SetMemVal(0x00427E78,max)
                SetMemVal(0x00428616,max)
               
                SetMemVal(0x00427E7D,min)
                SetMemVal(0x0042861b,min)
        end
       
        def SetArmorAgi(min,max)
                SetMemVal(0x00427E8E,max)
                SetMemVal(0x0042863B,max)
               
                SetMemVal(0x00427E93,min)
                SetMemVal(0x00428640,min)
        end
       
        def SetArmorInt(min,max)
                SetMemVal(0x00427EA4,max)
                SetMemVal(0x00428660,max)
               
                SetMemVal(0x00427EA9,min)
                SetMemVal(0x00428665,min)
        end
       
        def SetEnemyStr(val)
                SetMemVal(0x0042AEEF,val)
                SetMemVal(0x0042BBCC,val)
        end
       
        def SetEnemyDex(val)
                SetMemVal(0x0042AF02,val)
                SetMemVal(0x0042BBF2,val)
        end
       
        def SetEnemyAgi(val)
                SetMemVal(0x0042AF15,val)
                SetMemVal(0x0042BC18,val)
        end
       
        def SetEnemyInt(val)
                SetMemVal(0x0042AF28,val)
                SetMemVal(0x0042BC3E,val)
        end
       
        def SetEnemyAtk(val)
                SetMemVal(0x0042AF3B,val)
                SetMemVal(0x0042BC64,val)
        end
       
        def SetEnemyPdef(val)
                SetMemVal(0x0042AF4E,val)
                SetMemVal(0x0042BC8A,val)
        end
       
        def SetEnemyMdef(val)
                SetMemVal(0x0042AF61,val)
                SetMemVal(0x0042BCB0,val)
        end
       
        def SetDatabaseMax(val)
                SetMemVal(0x00496C9C,val)
        end
       
        def SetMapMaxSize(val)
                SetMemVal(0x004888E0,val)
                SetMemVal(0x00488906,val)
                SetMemVal(0x00488A92,val)
                SetMemVal(0x00488AA5,val)
        end
end

$rlib = Rlib.new

class PluginWindow
        def initialize
                @Window = $rlib.CreateDialog($rlib.WS_POPUP | $rlib.WS_BORDER | $rlib.WS_SYSMENU | $rlib.DS_MODALFRAME | $rlib.WS_CAPTION, 10, 10, 300, 300, "插件管理")
                $rlib.AppendDialogItem(@window, $rlib.WS_CHILD | $rlib.WS_VISIBLE | $rlib.BS_DEFPUSHBUTTON, 10, 70, 80, 20, $rlib.DG_BUTTON, $rlib.IDOK, "确定")
        end
       
        def ShowWindow()
                $rlib.ShowDialog(@window)
        end
       
        def Update(hWnd, message, wParam, lParam)
                case message
                when $rlib.WM_COMMAND
                        case wParam
                        when $rlib.IDOK
                                $rlib.MessageBox(0, "你好,这里是插件窗口", '打印', 0)
                                d = load_data("Data/Actors.rxdata")
                                $rlib.MessageBox(0, d[1].name, '读取第一个角色名字', 0)
                        when $rlib.IDCANCEL
                                $rlib.EndDialog(hWnd, wParam)
                        end
                end
                return false
        end
end

class DatabaseWindow
        def initialize(hWnd)
                #$rlib.MessageBox(0, '数据库窗口启动', '调试信息', 0)
                @hWnd = hWnd
                @tab = $rlib.GetDlgItem(hWnd, 3101)
        end
       
        def GetTebIndex()
                return $rlib.SendMessageA(@tab, $rlib.TCM_GETCURFOCUS, 0, 0)
        end
       
        def Update(hWnd, message, wParam, lParam)
                #$rlib.MessageBox(0, message.to_s + ' ' + wParam.to_s, '欢迎', 0)
        end
end

class MainWindow
        def initialize
                #$rlib.MessageBox(0, 'rpg maker xp必将迎来新生', '欢迎', 0)
                @plugin = PluginWindow.new
               
                #武器攻击力破限
                $rlib.SetWeaponAtk(9999)
               
                #武器物理防御破限
                $rlib.SetWeaponPdef(9999)
               
                #武器魔法防御破限
                $rlib.SetWeaponMdef(9999)
               
                #武器力量破限
                $rlib.SetWeaponStr(-9999, 9999)
               
                #武器灵巧破限
                $rlib.SetWeaponDex(-9999, 9999)
               
                #武器速度破限
                $rlib.SetWeaponAgi(-9999, 9999)
               
                #武器魔力破限
                $rlib.SetWeaponInt(-9999, 9999)
               
                #防具物理防御破限
                $rlib.SetArmorPdef(9999)
               
                #防具魔法防御破限
                $rlib.SetArmorMdef(9999)
               
                #防具力量破限
                $rlib.SetArmorStr(-9999, 9999)
               
                #防具灵巧破限
                $rlib.SetArmorDex(-9999, 9999)
               
                #防具速度破限
                $rlib.SetArmorAgi(-9999, 9999)
               
                #防具魔力破限
                $rlib.SetArmorInt(-9999, 9999)
               
                #敌人攻击力破限
                $rlib.SetEnemyAtk(9999)
               
                #敌人物理防御破限
                $rlib.SetEnemyPdef(9999)
               
                #敌人魔法防御破限
                $rlib.SetEnemyMdef(9999)
               
                #敌人力量破限
                $rlib.SetEnemyStr(9999)
               
                #敌人灵巧破限
                $rlib.SetEnemyDex(9999)
               
                #敌人速度破限
                $rlib.SetEnemyAgi(9999)
               
                #敌人魔力破限
                $rlib.SetEnemyInt(9999)
               
                #数据库元素上限破限
                $rlib.SetDatabaseMax(9999)
               
                #地图大小破限
                $rlib.SetMapMaxSize(9999)
        end
       
        def ShowMenu(id, menu)
                case id
                        when 801
                        sub_menu = $rlib.GetSubMenu(menu, 6)
                        $rlib.AppendMenu(sub_menu, 0, 100000, '插件')
                end
        end
       
        def UpdateMain(hWnd, message, wParam, lParam)
                case message
                when $rlib.WM_COMMAND
                        case wParam
                        when 100000
                                @plugin.ShowWindow
                        end
                end
                return false
        end
       
        def Update(hWnd, message, wParam, lParam)
                title = $rlib.GetWindowTitle(hWnd)
                case title
                when '插件管理'
                        return @plugin.Update(hWnd, message, wParam, lParam)
                when '数据库'
                        if message == $rlib.WM_SHOWWINDOW && wParam == 1
                                @db = DatabaseWindow.new(hWnd)
                        end
                when ''
                        @db.Update(hWnd, message, wParam, lParam)
                else
                        return UpdateMain(hWnd, message, wParam, lParam)
                end
                return false
        end
end

$_washduck = MainWindow.new

点评

不好意思,这个脚本有bug,修复后再用。  发表于 2023-5-7 12:58
他大概想要地图数的破限?  发表于 2023-5-6 17:28
复制这个脚本,替换原工程中的washduck.rb,就能破限地图大小的限制。注意,要拿我改过的rmxp才可以,原版是没有效果的。  发表于 2023-5-5 22:18

评分

参与人数 1+1 收起 理由
89444640 + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
28
 楼主| 发表于 2023-5-5 22:15:35 | 显示全部楼层
玻璃柿子 发表于 2023-5-5 22:14
class Rlib
        attr_reader :WM_COMMAND
        attr_reader :WM_SHOWWINDOW

复制这个脚本,替换原工程中的washduck.rb,就能破限地图大小的限制。注意,要拿我改过的rmxp才可以,原版是没有效果的。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
29
 楼主| 发表于 2023-5-5 22:17:16 | 显示全部楼层
89444640 发表于 2023-4-25 11:30
跟楼主申请个改版的动画编辑器,可以考虑下,能在rmxp编辑器里直接运行即可套原来界面把下面动画编辑窗口弄 ...

最近就在整窗口,感觉win32编程,天生就难,想要封装成ruby,并且简单易用的话,好像不太可能的说。

点评

那就先保证能用就行好,打开和保存rmxp的动画文件,不限制动画原件在640*320画面内的摆放位置  发表于 2023-5-6 14:36
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-10 04:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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