铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 1603|回复: 10

关于事件脚本化之设想

[复制链接]
发表于 2008-12-6 17:50 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
原版的事件都是通过二进制数字来表示各种指令来实现的,实际也可称为一种脚本。
在复刻版中,可以使用类似高级语言的方式进行事件描述。例如:

Talk(1, 1, 0);
ClearScreen;
Talk(1, 2, 0);
ClearScreen;
ModifyEvent(...);

就是对话,清屏,改写事件定义等。事件文件的内容就是这些语句组成的文本文件,取代原本的二进制序列。

这时每条语句的作用一目了然,判断和循环等结构也可以使用高级语言的代码,数据的定义都十分简单,略懂程式设计的人就可以轻易实现许多原本很麻烦才能实现的设计。只是不懂可能就会费些时间学习,或者也可以设法制作自动生成这类代码的事件编辑器。

希望看看大家的看法。

[发帖际遇]: weyl去辽东拜祭胡一刀,碰到袁紫衣,帮忙转告消息,袁紫衣赠送银两15。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-12-6 17:58 | 显示全部楼层
支持,如果这样的话,就有望实现全民Modify了。
顺便问一句,用VC可以做么,我刚学,正好借机会从理论走向实践。

[发帖际遇]: =令狐冲=买通太监进宫偷葵花,转手挣到银两4.


[ 本帖最后由 =令狐冲= 于 2008-12-6 18:00 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2008-12-7 15:21 | 显示全部楼层
用vc做什么?
脚本的话需要规定一套语法。

[发帖际遇]: weyl偷得虚竹身上的美女图卷轴,卖给段誉,得银子银两49。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-12-7 15:24 | 显示全部楼层
我有个不成熟的想法:先获取群芳谱的句柄,再进程ID,再定义事件定时读指定人物血量的内存,如果发生减少,就执行代码....能不能实现反击
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2008-12-7 16:00 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-12-7 16:11 | 显示全部楼层
原帖由 weyl 于 2008-12-7 16:00 发表
群芳的代码处于半公开状态,何必如此大费周章

[发帖际遇]: weyl在老顽童处骗取《养蜂秘法》,翻印成《如何饲养文化型蜜蜂》出版被查出偷税漏税,罚款银两13.


玩游戏不是主要目的,借这个机会熟悉一下技术挺不错的 看书正好看到相关内容,借这个题目作练习。

[发帖际遇]: =令狐冲=暑假期间在洛阳绿竹巷参加《任盈盈琴箫兴趣班》,学习高级课程,报名费银两80。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-12-7 16:22 | 显示全部楼层
还有,你说的这个脚本,让我联想到了插件....我倒想作个插件监视内存变化,做出响应。不知道可行么。

[发帖际遇]: =令狐冲=抢了钟灵给段誉的绣花鞋,被钟灵见到放闪电貂追杀,掉了银两13.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-12-9 22:22 | 显示全部楼层
这个,我现在正在抽空做这件事情。脚本直接使用lua语言,用vc处理图形音乐等。这本来是去年的设想,只是一直没时间做。

考虑到现在机器的速度快,实际上程序主体是用lua写的,vc只是提供了几个必要的库函数而已。现在初步框架已经建好,经过测试,速度可以满足要求。只有显示主地图排序的部分算法比较复杂,只能用vc实现了。

其余的场景模块,菜单模块,战斗模块等都是采用lua。这样的好处就是程序编出来全部就是源码,修改的自由度非常大。。。。。只要你会lua语言。不过lua作为脚本语言,语法非常简单。只要学过任何一门语言的人,看看就会了。

当然,现在无法做到了50指令兼容了。但是可以把原版的全部事件指令导入为lua代码。

争取元旦或春节前发布给大家吧!

目前使用的版本是lua5.1.2。大家感兴趣的话可以先学学看。。

贴一段代码,是原来加入队员的指令。大家感受一下:
--加入队员指令
function instruct_10(personid)
    if JY.Person[personid]==nil then
        JYLib.Debug("instruct_10 error: person id not exist");
    end
    local add=0;
    for i =2, JY.TeamNum do             --第一个位置是主角,从第二个开始
        if JY.Base["队伍"..i]<0 then
            JY.Base["队伍"..i]=personid;
            add=1;
            break;
        end
    end
    if add==0 then     
        JYLib.Debug("instruct_10 error: 加入队伍已满");
        return ;
    end

    for i =1,4 do                --个人物品归公
        local id =JY.Person[personid]["携带物品" .. i];
        local n=JY.Person[personid]["携带物品数量" .. i];
        if id>=0 and n>0 then
            instruct_2(id,n);
            JY.Person[personid]["携带物品" .. i]=-1;
            JY.Person[personid]["携带物品数量" .. i]=0;
        end
    end
end

[发帖际遇]: 游泳的鱼替小昭千里送信给张无忌,途中被赵敏拦截,损失银两30.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2008-12-9 22:30 | 显示全部楼层
原版的事件能全导出吗?
这就有点像ASM - > C,导出为结构化程序几乎不可能吧,除非带一大堆goto的
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-12-9 22:40 | 显示全部楼层
原帖由 weyl 于 2008-12-9 22:30 发表
原版的事件能全导出吗?
这就有点像ASM - > C,导出为结构化程序几乎不可能吧,除非带一大堆goto的


原版的可以。因为原版的跳转都是向下跳转,可以导出为if。。。then的形式。测试过原版,大概有两三个错误,需要手工修改。

而50指令的跳转可以向上跳,因为脚本没有goto语句,要导出就太复杂了。干脆就不做了。

导出后的例子:


function oldevent_5()
    instruct_1(20,1,0);   --  1(1):[胡斐]说: 小兄弟,再次造访,*是否练就了更高深的武功*胡某候教.
    instruct_0();   --  0(0)::空语句(清屏)

    if instruct_5(1,0) ==false then    --  5(5):是否选择战斗?是则跳转到:Label0
        do return; end
    end    --:Label0

    instruct_1(19,0,1);   --  1(1):[1111]说: 晚辈斗胆向前辈讨教讨教.
    instruct_0();   --  0(0)::空语句(清屏)

    if instruct_6(7,0,22,1) ==true then    --  6(6):战斗[7]否则跳转到:Label1
        instruct_0();   --  0(0)::空语句(清屏)
        instruct_13();   --  13(D):重新显示场景
        instruct_1(23,1,0);   --  1(1):[胡斐]说: 可恨啊!可恨!*只恨胡某刀谱不全,*未能练成我祖传之胡家刀法
        instruct_0();   --  0(0)::空语句(清屏)
        instruct_3(-2,-2,-2,-2,3,-2,-2,-2,-2,-2,-2,-2,-2);   --  3(3):修改事件定义:当前场景:当前场景事件编号
        do return; end
    end    --:Label1

    instruct_0();   --  0(0)::空语句(清屏)
    instruct_13();   --  13(D):重新显示场景
    instruct_1(21,1,0);   --  1(1):[胡斐]说: 小兄弟,功夫虽有精进,*但火侯仍嫌不够.
    instruct_0();   --  0(0)::空语句(清屏)
    instruct_1(22,0,1);   --  1(1):[1111]说: 他日再向胡大哥领教刀法.
    instruct_0();   --  0(0)::空语句(清屏)
    instruct_3(-2,-2,-2,-2,4,-2,-2,-2,-2,-2,-2,-2,-2);   --  3(3):修改事件定义:当前场景:当前场景事件编号
end

[发帖际遇]: 游泳的鱼去天宁寺抢夺连城宝藏,抢到有毒的宝藏,损失医药费银两18。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-12-9 22:43 | 显示全部楼层
楼上的没注意看:
“当然,现在无法做到了50指令兼容了。但是可以把原版的全部事件指令导入为lua代码。”
也就是说:原版、问情、苍龙可以导入。再战以后的就不行了……
题外话:居然鱼会没有MOD勋章……


——我说的楼上是weyl,打字太慢,错过一层楼……

[ 本帖最后由 凶神恶煞 于 2008-12-9 22:45 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-12-23 04:05

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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