铁血丹心

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

[通用] 武功替换指令代码

[复制链接]
发表于 2010-1-11 23:54 | 显示全部楼层 |阅读模式

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

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

x
我不大会用原版原代码里自带的替换武功指令,所以自己做了一个。
用法:
贴入源码后声明,再在50 43 指令做个 case of 的判断,记得写入调用事件。
rnum为人物号;
oldmagic为旧武功号;
newmagic为新武功号;
level为替换后的等级(-2为保持不变);

提示:可直接拿来当做武功升级指令
  1. procedure ReplaceMagic(rnum, oldmagic, newmagic, level:integer);
  2. var
  3.   i, x:integer;
  4. begin
  5.   for i := 0 to 9 do
  6.     begin
  7.       if Rrole[rnum].Magic[i] = oldmagic then
  8.       begin
  9.         Rrole[rnum].Magic[i] := newmagic;
  10.         if level <> -2 then Rrole[rnum].MagLevel[i] := level * 100 -100
  11.       end;
  12.       begin
  13.         x := Rrole[rnum].PracticeBook;
  14.         if Ritem[x].Magic = oldmagic then
  15.         begin
  16.           Rrole[rnum].PracticeBook := -1;
  17.           Rrole[rnum].ExpForBook := 0;
  18.           Rrole[rnum].ExpForItem := 0;
  19.           Ritem[rnum].User := -1;
  20.         end;
  21.       end;
  22.     end;
  23. end;
复制代码

[ 本帖最后由 轩辕夏禹 于 2010-1-12 17:24 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-12 04:34 | 显示全部楼层
KG早在2007年就做出来了~
用50指令~

[发帖际遇]: killer_zingy帮丘处机寻找杨家后人,找到杨康,丘处机打赏银两9。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-1-12 08:32 | 显示全部楼层

回复 二当家 的帖子

50指令我已经会了,现在在学习源码所以就用源码。

[发帖际遇]: 轩辕夏禹路遇香香公主,惊为天人,花费银两25买水喝以补充损失的口水。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-12 10:57 | 显示全部楼层
很一般,没有考虑到各种情况
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-12 11:43 | 显示全部楼层
旧武功秘笈若在修练,要把它脱掉,不然就会无限洗属性

[发帖际遇]: 游客在丐帮树林捡到一只叫花鸡,自己吃掉,被洪七公发现暴揍一顿,花掉医药费银两16。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-1-12 11:54 | 显示全部楼层
抱歉了两位大大,因为我的mod里只用这条代码来替换内功而已,然后是建立我设定每学会一个内功就把密集的物品名、介绍和修炼武功改掉,所以没考虑到这一节。
现在改好了。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-12 12:53 | 显示全部楼层
还是没考虑周全          

[发帖际遇]: KG偷学武当梯云纵轻功,不幸从树上摔下,花掉医药费银两21两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-1-12 17:18 | 显示全部楼层

回复 七当家 的帖子

我一直丢三忘四的,真的是很对不起呀,这就补上。

[发帖际遇]: 轩辕夏禹除去游坦之脸上铁面,得游坦之感激,获赠银两12两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-12 18:18 | 显示全部楼层
代码很有问题啊~~

如果等级为-1怎么办?武功经验成-200了?

大于10怎么办?没判断,当然这没什么所谓

如果新武功和旧武功都已经存在怎么办?很可能会变成两格都是新武功?

还有中间莫名其妙地出现一个begin是啥玩意?条件呢?去哪了?似乎是判断身上是否有装备秘笈?

还有找到武功并成功处理后就应该跳出循环了吧~~

很不完整~~期待楼主修正……
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-1-12 19:43 | 显示全部楼层

回复 九当家 的帖子

我尽最大努力修正了,结果如下。
  1. procedure ReplaceMagic(rnum, oldmagic, newmagic, level:integer);
  2. var
  3.   i, x, i1, y:integer;
  4. begin
  5.   for i := 0 to 9 do
  6.     begin
  7.       if Rrole[rnum].Magic[i] = newmagic then
  8.       begin
  9.         if level <> -2 then Rrole[rnum].MagLevel[i] := Rrole[rnum].Maglevel[i] + level * 100;
  10.         if Rrole[rnum].Maglevel[i] >= 999 then Rrole[rnum].MagLevel[i] := 999;
  11.         y := 101;
  12.         break;
  13.       end;  
  14.     end;
  15.       if y <> 101 then
  16.       begin
  17.         for i1 := 0 to 9 do
  18.         begin
  19.         if Rrole[rnum].Magic[i1] = oldmagic then
  20.             begin
  21.               Rrole[rnum].Magic[i1] := newmagic;
  22.               if level > 10 then level := 10;
  23.               if level <> -2 then Rrole[rnum].MagLevel[i1] := level * 100 -100;
  24.               break;
  25.             end;

  26.         end;
  27.       end
  28.       else
  29.       begin
  30.         x := Rrole[rnum].PracticeBook;
  31.         if Ritem[x].Magic = oldmagic then
  32.         begin
  33.           Rrole[rnum].PracticeBook := -1;
  34.           Rrole[rnum].ExpForBook := 0;
  35.           Rrole[rnum].ExpForItem := 0;
  36.           Ritem[rnum].User := -1;
  37.         end;
  38.       end;  
  39. end;
复制代码

[发帖际遇]: 轩辕夏禹协助韦小宝抄鳌拜的家,捞到好处费银两35两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 00:30 | 显示全部楼层
感谢阁下的努力,你的代码依然很有问题~~

今天闲的慌了~~按你的东西改了改~~顺便告诉你,这段代码我用了~~

首先是你的代码~~有几个问题……
  1. procedure ReplaceMagic(rnum, oldmagic, newmagic, level:integer);
  2. var
  3.   i, x, i1, y:integer;
  4. begin
  5.   for i := 0 to 9 do
  6.   begin
  7.     if Rrole[rnum].Magic[i] = newmagic then
  8.     begin
  9.         if level <> -2 then Rrole[rnum].MagLevel[i] := Rrole[rnum].Maglevel[i] + level * 100;
  10.         if Rrole[rnum].Maglevel[i] >= 999 then Rrole[rnum].MagLevel[i] := 999;
  11.         y := 101;
  12.         break;
  13.     end;  
  14.   end;
  15.   
  16.   if y <> 101 then                //不妥,y之前可能没有定义
  17.   begin
  18.     for i1 := 0 to 9 do
  19.     begin
  20.       if Rrole[rnum].Magic[i1] = oldmagic then
  21.       begin
  22.         Rrole[rnum].Magic[i1] := newmagic;
  23.         if level > 10 then level := 10;
  24.         if level <> -2 then Rrole[rnum].MagLevel[i1] := level * 100 -100;                //等于-1怎么办?-2,-3,-100呢???
  25.         break;                        //而且处理完后身上秘笈没有拿下来啊……走得这么快?
  26.       end;
  27.     end;
  28.   end
  29.   else                  //没找到新武功,不代表就找到了旧武功,干嘛无缘无故拿下书……经验还是练得很辛苦的……
  30.   begin
  31.     x := Rrole[rnum].PracticeBook;
  32.     if Ritem[x].Magic = oldmagic then
  33.     begin
  34.       Rrole[rnum].PracticeBook := -1;
  35.       Rrole[rnum].ExpForBook := 0;
  36.       Rrole[rnum].ExpForItem := 0;
  37.       Ritem[rnum].User := -1;     //这是什么意思?
  38.     end;
  39.   end;  
  40. end;
复制代码
然后这是我改动后的代码……
  1. //我改改……
  2. procedure ReplaceMagic(rnum, oldmagic, newmagic, level:integer);
  3. var
  4.   i, oldfound, newfound: integer;
  5. begin
  6.   oldfound := -1;
  7.   newfound := -1;
  8.   for i:=0 to 9 do
  9.   begin
  10.     if Rrole[rnum].Magic[i] = oldmagic then
  11.       oldfound := i                         //记录旧武功所在位置
  12.     else if Rrole[rnum].Magic[i] = newmagic then
  13.       newfound := i;                   //记录新武功所在位置
  14.   end;
  15.   //得到新老武功位置,下面就不用重新历遍一次了,省事

  16.   if (oldfound>=0) and (newfound<0) then        //旧武功找到,新的找不到,正常处理
  17.   begin
  18.     Rrole[rnum].Magic[oldfound] := newmagic;
  19.     if (level = -1) or (level = 0) then
  20.       Rrole[rnum].MagLevel[oldfound] := 0        //level为0或-1, 武功经验归0,当然,写1级也可以
  21.     else if (level >= 1) then                  //level大于1,设置武功经验
  22.     begin
  23.       if level > 10 then
  24.         level := 10;
  25.       Rrole[rnum].MagLevel[oldfound] := level*100-100;
  26.     end;
  27.     //下面没有了,也就是武功等级为其他小于-1的数值为经验不变   
  28.     //然后检查身上书籍
  29.     if (Rrole[rnum].PracticeBook >= 0) and (Ritem[Rrole[rnum].PracticeBook].Magic = oldmagic) then      //有装备书籍,书籍能练出武功而且跟旧武功一样
  30.     begin
  31.       Ritem[Rrole[rnum].PracticeBook].User := -1;        //先把物品使用者去掉
  32.       Rrole[rnum].PracticeBook := -1;                   //然后拿掉人物的装备秘笈
  33.       Rrole[rnum].ExpForBook := 0;
  34.       Rrole[rnum].ExpForItem := 0;      
  35.     end;
  36.   end
  37.   else
  38.   if (newfound>=0) then        //找到新的,不管找不找得到旧的,新武功等级改变(看是否需要了,不需要的话这部分可以删掉)
  39.   begin
  40.     if (level = -1) or (level = 0) then
  41.       Rrole[rnum].MagLevel[newfound] := 0        //level为0或-1, 武功经验归0,当然,写1级也可以
  42.     else if (level >= 1) then                  //level大于1,设置武功经验
  43.     begin
  44.       if level > 10 then
  45.         level := 10;
  46.       Rrole[rnum].MagLevel[newfound] := level*100-100;
  47.     end;
  48.   end;
  49.   //剩下的可能性就是没找到旧武功,不做事……
  50. end;
  51. //完了……
复制代码
大家帮我看看,还有哪里要改的,我没放游戏里测试过~~就按LZ的改了的……

[ 本帖最后由 winson7891 于 2010-1-13 01:06 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 01:16 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 01:29 | 显示全部楼层
莫非是同種武功修改成兩個...

[发帖际遇]: 游客卖下一个mod的制作人绝密采访稿,狂赚银两38。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 01:31 | 显示全部楼层
话说同种武功有多个的情况我也考虑过,不过觉得游戏中应该不会出现,所以没判断,如果是其他情况,请KG大大明示……

虚心请教
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 01:32 | 显示全部楼层
1月13日早上10点公布答案,看谁先发现了,奖励100论坛币

[发帖际遇]: KG发现金蛇锥一枚,远赴洛阳当铺兑换时被确认为赝品,亏掉路费银两17。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 01:40 | 显示全部楼层
是不是忘记了判断武功编号,人物号是否有效?

下面的是否还有新旧武功一样的判断?

似乎还差武功编号超过上限溢出的问题(没写)

又改了改,依然没放游戏里面测试,KG大查收……
  1. //我改改……
  2. procedure ReplaceMagic(rnum, oldmagic, newmagic, level:integer);
  3. var
  4.   i, oldfound, newfound: integer;
  5. begin
  6.   oldfound := -1;
  7.   newfound := -1;
  8.   
  9.   if (oldmagic >= 0) and (newmagic >= 0) and (rnum >= 0) then   //先确认新旧武功号和人物号大于0……
  10.   begin

  11.   for i:=0 to 9 do
  12.   begin
  13.     if Rrole[rnum].Magic[i] = oldmagic then
  14.       oldfound := i                         //记录旧武功所在位置
  15.     else if Rrole[rnum].Magic[i] = newmagic then
  16.       newfound := i;                   //记录新武功所在位置
  17.   end;
  18.   //得到新老武功位置,下面就不用重新历遍一次了,省事

  19.   if (oldfound>=0) and (newfound<0) then        //旧武功找到,新的找不到,正常处理
  20.   begin
  21.     Rrole[rnum].Magic[oldfound] := newmagic;
  22.     if (level = -1) or (level = 0) then
  23.       Rrole[rnum].MagLevel[oldfound] := 0        //level为0或-1, 武功经验归0,当然,写1级也可以
  24.     else if (level >= 1) then                  //level大于1,设置武功经验
  25.     begin
  26.       if level > 10 then
  27.         level := 10;
  28.       Rrole[rnum].MagLevel[oldfound] := level*100-100;
  29.     end;
  30.     //下面没有了,也就是武功等级为其他小于-1的数值为经验不变   
  31.     //然后检查身上书籍
  32.     if (Rrole[rnum].PracticeBook >= 0) and (Ritem[Rrole[rnum].PracticeBook].Magic = oldmagic) then      //有装备书籍,书籍能练出武功而且跟旧武功一样
  33.     begin
  34.       Ritem[Rrole[rnum].PracticeBook].User := -1;        //先把物品使用者去掉
  35.       Rrole[rnum].PracticeBook := -1;                   //然后拿掉人物的装备秘笈
  36.       Rrole[rnum].ExpForBook := 0;
  37.       Rrole[rnum].ExpForItem := 0;      
  38.     end;
  39.   end
  40.   else
  41.   if (newfound>=0) or (oldmagic = newmagic) then       
  42.   //找到新的,不管找不找得到旧的,新武功等级改变(看是否需要了,不需要的话这部分可以删掉)
  43.   //或者新旧武功一样
  44.   begin
  45.     if (level = -1) or (level = 0) then
  46.       Rrole[rnum].MagLevel[newfound] := 0        //level为0或-1, 武功经验归0,当然,写1级也可以
  47.     else if (level >= 1) then                  //level大于1,设置武功经验
  48.     begin
  49.       if level > 10 then
  50.         level := 10;
  51.       Rrole[rnum].MagLevel[newfound] := level*100-100;
  52.     end;  
  53.   end;
  54.   //剩下的可能性就是没找到旧武功,不做事……
  55.   end;
  56. end;
  57. //完了……
复制代码

[发帖际遇]: winson7891协助镇远镖局运送宝物,安全到达目的地后,获得银两5酬劳。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 10:04 | 显示全部楼层
如果新武功是0怎么办,那是洗武功哦

如果没练满武功的话武功栏肯定是有0的,直接加0的等级么?

直接替代也不成,在武功栏里会空一个格来

所以新武功=0的时候要特殊处理一下,完了还要把后面的项移到前面来

[发帖际遇]: KG在擂谷山和苏星河下棋,于机缘巧合之下破解“珍珑棋局”,得到无崖子七十年内力,增加声望3。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 10:22 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 13:08 | 显示全部楼层
KG的50指令版本似乎写的很清楚了///
;Kdefnum=533
  50 0 100 0 0 0 0 0             ;  50(32):变量赋值 [X100]=0
  50 0 107 0 0 0 0 0             ;  50(32):变量赋值 [X107]=0
  50 3 0 0 103 28928 0 0         ;  50(32):四则运算 [X103]=[X28928]+0
  50 3 0 0 104 28929 0 0         ;  50(32):四则运算 [X104]=[X28929]+0
  50 3 0 0 105 28930 0 0         ;  50(32):四则运算 [X105]=[X28930]+0
  50 3 0 0 106 28931 0 0         ;  50(32):四则运算 [X106]=[X28931]+0
  50 4 0 2 104 0 0 0             ;  50(32):变量判断 If[X104]=0  then JMP=0 else JMP=1

[发帖际遇]: aawc1144护送杨不悔遇见杨逍,杨逍得知纪晓芙死亡过于激动抓断aawc1144臂骨,aawc1144疗伤用去银两13两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 13:19 | 显示全部楼层
這樣的話 新武功代號若是超大 如10000 也要判斷為替換失敗?

[发帖际遇]: 游客找冯默风打造兵器,得到了一把大剪刀,见到岳老三,高价卖给他,赚了银两37。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 13:26 | 显示全部楼层
武功编号基本不可能超过10000吧

想10000个武功名都可以累昏人
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-1-13 16:10 | 显示全部楼层
事实上我觉得武功编号要根据武功个数作判断……

人物编号也是……

不一定是10000这种数,例如游戏中有10个武功(不计0号),你写个11就会溢出……
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-5-19 09:01

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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