易码技术论坛

 找回密码
 加入易码
搜索
查看: 248371|回复: 9

时空BUG/请求技术帮助 (T_T)

[复制链接]
发表于 2005-8-25 15:42:00 | 显示全部楼层
问题一:魔法值的问题:战斗的时候施放魔法,mp在战斗中不减,而是在战斗结束后才减??(在江湖和我的世界中都测试过)
...我把此类问题归结为神秘的代码消失事件,不知道发布的时候,为什么很多行代码消失了...
1、找到这行
  1. }while(add_bit16(sBattle_Enemy+b_Hp,-Damage)==TRUE&&IfEscape==FALSE)
复制代码

2、在上面加上两行
  1. //同步英雄属性
  2. memcpy(mem+sBattle_hero+b_Hp,mem+Hp,4);
  3. memcpy(mem+sBattle_hero+b_mHp,mem+mHp,4);
复制代码


问题二:战斗完毕后,人物经常卡住。
解决方法,和以前gameboyLV说的一样,找到这句
  1. //拷贝事件量
  2. memcpy(EventDat,tItem+item_edat,item_edat_l);
复制代码

去掉就可以了。终于发现这是以前没有删掉的一句……
但是还有个地方检查出来有问题,需要改。
  1. //使用普通道具
  2. Translate(tItem+item_edat,0);
复制代码


这里需要在这句前后各加一句,要改成这个样子:
  1. i=IsEnter;IsEnter=FALSE;
  2. Translate(tItem+item_edat,0);
  3. IsEnter=i;
复制代码

否则会有道具使用不能的问题。

问题三:不知道 所有属性+255的装备 BUG是否得到解决?(我还是认为保留2个存档比较好)
这个问题我无法在模拟器上面测试,暂时搁置。

问题四:商店里点击“离开”后,竟然又进入了商店模式……只能使用Esc。
这只在模拟器上面会出现吧?因为按离开是回车键,出来之后继续按住的话,就会继续触发事件。在WQX上面会有延迟,这样就不会出现这个误操作了。
[此贴子已经被作者于2005-8-25 17:56:12编辑过]

发表于 2005-8-25 17:53:00 | 显示全部楼层
1:请问是否能给物品加入时间效应?具体操作方法?
如:让一个物品在30秒内发挥作用,之后作用取消(如:在30秒内增加攻击力5点)

老实说可以做出来,但是比较麻烦,因为引擎原来没有计时器在里面。你可以在

  1. }//bGame游戏循环结束
复制代码

这个花括号上面的游戏循环里面加上判断的语句。统计时间,以及操作mem[]数组来操作人物属性,比如mem[Hp]就是人物的当前Hp。

2:做一个类似“老虎机”的小游戏。
这个代码我等下写一个,写好贴上来。

3:问一下时空里怪物的AI在哪?如逃跑的几率,施放魔法的几率……魔和抗的高低都影响着什么?具体在源码里那个位置可以修改??
说AI的话,其实没有什么AI。在Battle函数里面,

  1.   else if(sBattle_Enemy==sBattle_mon+mem)
  2.   {//怪物行动
  3.    Damage_Fix=0;
  4.    sBattle_Enemy=sBattle_hero+mem;
  5.    sBattle_Actor=sBattle_mon+mem;
  6.    rate=0;//将逃跑率设为0
  7.    if(add16(sBattle_Actor+b_Hp)*10/add16(sBattle_Actor+b_mHp)<2)
  8.    {//HP小于1/5
  9.     rate=10;
  10.    }
  11.    if(rnd(100)<rate)
  12.    {//选择逃跑
  13.     Attack_Type=254;
  14.    }else
  15.    {//选择某种攻击方式
  16.     Attack_Type=tMon[mon_action+rnd(6)];
  17.    }
  18.   }
复制代码

这就是怪物决定攻击的全部代码。
至于各项属性和攻防等换算关系,都在Battle函数里面。由注释
  1. //***************** 开始动作 *******************
复制代码

下面开始,很多注释就是计算公式。
"攻防敏魔抗"是以前的属性称呼,对应注释里面的:
ATK、DEF、AGL(SPD)、INT、LUC

4:如果我想让每点“抗”增加的时候同时增加10点mhp(生命之上限),该怎么办?
升级属性增加部分在battle函数的最后

  1.   for(i=0;i<5;i++)
  2.   {
  3.    j=mem[pInfo_add+i]*(mem[Level]+1)/100-mem[pInfo_add+i]*mem[Level]/100;
  4.    str(mem[pInfo+i]);
  5.    fstr(str_num,3,MIDDLE,32);
  6.    tMsgPaint(10*6,i*13+9,str_num,3);
  7.    add_bit8(mem+pInfo+i,j);//属性增加
  8.    str(mem[pInfo+i]);
  9.    fstr(str_num,3,MIDDLE,32);
  10.    tMsgPaint(15*6,i*13+9,str_num,3);
  11.   }
复制代码

对应五项属性。你可以在里面插入判断语句,到"抗"也就是第五项的时候,给mHp加上对应的数量。
发表于 2005-8-25 19:23:00 | 显示全部楼层
老虎机器的代码
需要定义变量
char box[3];
char max_gift;//框框总数,这里是3
char selected;//选中的计数

  1. }else if(n==100)
  2. {
  3.    max_gift=3;
  4.    selected=0;
  5.    while(selected<max_gift)
  6.    {
  7.      ClearScreen();//显示背景,这里是清空
  8.      for(i=0;i<max_gift;i++)
  9.      {
  10.        if(i>=selected)
  11.        {
  12.          box[ i]=rnd(5)+157;//出现的图像号码,可以自己改几率。
  13.        }
  14.        ShowPic(box[ i],20+i*30,20,0,LEFT);
  15.      }
  16.      Delay(50);
  17.      key=CheckKey(128);
  18.      if(key==KEY_ENTER)
  19.      {
  20.        selected++;
  21.        Delay(100);//这里延迟了下,防止连续按
  22.      }
  23.      Refresh();
  24.    }
  25.    //结束之后box[]里面就是存的选种的三个图
  26. }
复制代码
发表于 2005-8-25 19:56:00 | 显示全部楼层
其实引擎还有很多BUG,比如:
1.载入游戏时TPLAYER和PLAYER会同时载入,导致不能正确显示存盘以前的人物图像。
2.使用BATTLE以后SWINLOSE不会在普通遇敌时修正,导致以后都不能逃跑。
3.战斗以后不会执行新地点的脚本
 楼主| 发表于 2005-8-25 20:03:00 | 显示全部楼层
太感谢了。回去好好学习以下。
发表于 2005-8-25 23:15:00 | 显示全部楼层
以下是引用gameboyLV在2005-8-25 19:56:00的发言:<br>其实引擎还有很多BUG,比如:
1.载入游戏时TPLAYER和PLAYER会同时载入,导致不能正确显示存盘以前的人物图像。
2.使用BATTLE以后SWINLOSE不会在普通遇敌时修正,导致以后都不能逃跑。
3.战斗以后不会执行新地点的脚本


1、不太明白...-_-b

2、这个问题写代码的时候知道的,没有改么?我排查下……
想起来了,这里本来就是不修正的。事件战斗之后无论输赢,必须自行处理sWinLose。因为这个值是控制量,标志状态的。如果自己不需要判断输赢,也得把这里处理成false。忘记强调了。

3、“战斗之后”是普通遇敌还是事件遇敌?如果事件遇敌,那么会继续后面的脚本,不知道新地点指的是?

另外,如果还知道其他的bug,请一并写出,不要笼统的说“很多、比如”一类的。我正好这几天弄这个,一并就弄了。
发表于 2005-8-26 07:11:00 | 显示全部楼层
1.在  MsgPaint(7,5,"存档读取成功",0x48);后面加上mem[tPlayer]=0
3.是普通遇敌,比如从在B走向A的时候遇敌,战斗完以后人在A,但不会执行A的脚本
AB
我再仔细找找,不好意思,改得很乱了。
发表于 2005-8-26 07:57:00 | 显示全部楼层
啊不好!龙之传说也准备开个堵场,撞到一起了……
发表于 2005-8-26 13:29:00 | 显示全部楼层
以下是引用gameboyLV在2005-8-26 7:11:00的发言:<br>1.在  MsgPaint(7,5,"存档读取成功",0x48);后面加上mem[tPlayer]=0
3.是普通遇敌,比如从在B走向A的时候遇敌,战斗完以后人在A,但不会执行A的脚本
AB
我再仔细找找,不好意思,改得很乱了。

哦,明白了。有这个问题,考虑欠周到啊^_^bbb
 楼主| 发表于 2005-8-25 00:12:37 | 显示全部楼层 |阅读模式
BUG的问题:
1:魔法值的问题:战斗的时候施放魔法,mp在战斗中不减,而是在战斗结束后才减??(在江湖和我的世界中都测试过)
2:战斗完毕后,人物经常卡住。
3:不知道 所有属性+255的装备 BUG是否得到解决?(我还是认为保留2个存档比较好)
4:商店里点击“离开”后,竟然又进入了商店模式……只能使用Esc。

请求帮助:
1:请问是否能给物品加入时间效应?具体操作方法?
如:让一个物品在30秒内发挥作用,之后作用取消(如:在30秒内增加攻击力5点)

2:****这个问题目前正急需解决,如果解决完了,序章的测试应该就能公开了*****
做一个类似“老虎机”的小游戏。
我来具体说明一下:
如图:

1,2,3分别是3个档
1:在方框里根据不同几率快速闪烁下列图标(长方框里的)
然后按enter,第一项的图片确定,接着开始第二项……
*上面的效果我做不出来(我的编程水平太烂,式了好多遍还是没成功)*
发一下源码,高手们请帮我看看。十分感谢。(game sub中的)

  1. }else if(n==diaoyu)
  2. {
  3.   for(i=0;i<161;i++)
  4.   {
  5.    Showp1(203,0,160-i,1,LEFT);
  6.    Refresh();
  7.    Delay(5);
  8.   }
  9.   Showp1(202,80,40,1,MIDDLE);
  10.   Refresh();
  11.   KeyPause(500);
  12.   
  13.   Showp1(203,0,0,1,LEFT);
  14.   Refresh();
  15.    Showp1(200,20,30,1,LEFT);
  16.   Refresh();
  17.   Delay(30);
  18.    for(i=0;i<108;i++)
  19.    {
  20.     Showp1(206,20,30,1,LEFT);
  21.     Showp1(201,22+i,30,1,LEFT);
  22.     Showp1(204,22+i,30,0,LEFT);
  23.     Refresh();
  24.     Delay(30);
  25.     }
  26.   Showp1(207,0,0,1,LEFT);
  27.   Refresh();

  28.   diaoyujilu=rnd(100);
  29.    if (mem[yugan]==1 && mem[yuer]==1)
  30.    {
  31.     diaoyujilu=rnd(100);
  32.     if (diaoyujilu<=90)
  33.     {
  34.      Showp1(209,10,16,1,LEFT);
  35.      Refresh();
  36.      Delay(10);
  37.     }else if (90<diaoyujilu<=95)
  38.     {Showp1(210,10,16,1,LEFT);
  39.      Refresh();
  40.      Delay(10);
  41.     }else if (95<diaoyujilu<=100)
  42.     {Showp1(211,10,16,1,LEFT);
  43.      Refresh();
  44.      Delay(10);
  45.     }else
  46.     {
  47.     }
  48.    }else
  49.    {
  50.    }
  51.    
  52.   
  53.   do
  54.   {
  55.   diaoyujilu=rnd(100);
  56.    if (mem[yugan]==1 && mem[yuer]==1)
  57.    {
  58.     diaoyujilu=rnd(100);
  59.     if (diaoyujilu<=90)
  60.     {
  61.      Showp1(209,60,16,1,LEFT);
  62.      Refresh();
  63.      Delay(10);
  64.     }else if (90<diaoyujilu<=95)
  65.     {Showp1(210,60,16,1,LEFT);
  66.      Refresh();
  67.      Delay(10);
  68.     }else if (95<diaoyujilu<=100)
  69.     {Showp1(211,60,16,1,LEFT);
  70.      Refresh();
  71.      Delay(10);
  72.     }else
  73.     {
  74.     }
  75.    }else
  76.    {
  77.    }
  78.    KeyPause(500);
  79.   }while (key==KEY_ENTER)
  80.    
  81.   
  82.   i=1;
  83.   while (i!=0)
  84.   {
  85.   diaoyujilu=rnd(100);
  86.    if (mem[yugan]==1 && mem[yuer]==1)
  87.    {
  88.     diaoyujilu=rnd(100);
  89.     if (diaoyujilu<=90)
  90.     {
  91.      Showp1(209,60,16,1,LEFT);
  92.      Refresh();
  93.      Delay(10);
  94.     }else if (90<diaoyujilu<=95)
  95.     {Showp1(210,60,16,1,LEFT);
  96.      Refresh();
  97.      Delay(10);
  98.     }else if (95<diaoyujilu<=100)
  99.     {Showp1(211,60,16,1,LEFT);
  100.      Refresh();
  101.      Delay(10);
  102.     }else
  103.     {
  104.     }
  105.    }else
  106.    {
  107.    }
  108.     if (key==KEY_ENTER)
  109.     {
  110.     i=1;
  111.     }
  112.     else
  113.     {
  114.     }
  115.    }
  116.   
复制代码

   

3:问一下时空里怪物的AI在哪?如逃跑的几率,施放魔法的几率……
魔和抗的高低都影响着什么?具体在源码里那个位置可以修改??
4:如果我想让每点“抗”增加的时候同时增加10点mhp(生命之上限),该怎么办?

如果大家能帮我解决这些问题,我真是感激不尽……
现在游戏正在赶工(前几天因为某些原因,所以耽误了一些时间),我实在没有时间在去分析源码了。如果大家能帮下忙,就能帮我省去大时间了。
我为了一表诚意,再次说:谢谢了,谢谢谢谢谢谢……


[em04][em04][em04]

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 03:16 , Processed in 0.016644 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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