找回密码
 注册
X系列官方授权正版
搜索
楼主: 虔诚

[公告] StandardX 招工

[复制链接]
发表于 2013-6-16 04:40:40 | 显示全部楼层
虔诚 发表于 2013-6-16 00:44
会看……还要会修理……能成么……

- -没用过SR的开发系统,不知道Debug的难度如何。。。。。

可以一试
回复

使用道具 举报

发表于 2013-6-21 09:18:56 | 显示全部楼层
额  俺对C语言程序什么的是个小白。
精神上支持大侠们!
回复

使用道具 举报

发表于 2013-6-25 11:38:54 | 显示全部楼层
虔诚 发表于 2013-6-16 00:48
有空请你帮忙翻看一下出问题的数据吧……我排查都搞得眼睛花了…… ...

比较忙,需要排查哪类错误?
回复

使用道具 举报

 楼主| 发表于 2013-6-26 23:35:29 | 显示全部楼层
风中的黑骑士 发表于 2013-6-25 11:38
比较忙,需要排查哪类错误?

跳跃引擎故障的问题~
回复

使用道具 举报

发表于 2013-6-27 08:01:35 | 显示全部楼层
虔诚 发表于 2013-6-26 23:35
跳跃引擎故障的问题~

求相关段落的代码- -
回复

使用道具 举报

 楼主| 发表于 2013-7-2 23:41:03 | 显示全部楼层
FRIGHTER 发表于 2013-6-27 08:01
求相关段落的代码- -
  1. const string[url=home.php?mod=space&uid=20834]@[/url] strFuel = "Fuel";

  2. float checkRange(const Object@ src, const Object@ trg, const Effector@ eff) {
  3.         //Can only jump to significant sources of gravity
  4.         if(trg.toStar() is null && trg.toPlanet() is null && trg.toSystem() is null)
  5.                 return 0.f;

  6.         //Check that it is within range
  7.         float dist = src.getPosition().getDistanceFromSQ(trg.getPosition());
  8.         if(dist < eff[0] * eff[0]) // || dist > eff[1] * eff[1]) //Max range is implied in the effector
  9.                 return 0.f;

  10.         return 1.f;
  11. }

  12. float checkFuel(const Object@ src, const Object@ trg, const Effector@ eff) {
  13.         const State@ fuel = src.getState(strFuel);
  14.        
  15.         if(fuel.val - eff[4] < fuel.max * 0.05f || fuel.max <= 0)
  16.                 return 0.f;
  17.                
  18.         return 1.f;
  19. }

  20. void checkJumpSetting(Event@ evt) {
  21.         if(getGameSetting("GAME_AUTO_JUMP", 0.f) >= 0.5f) {
  22.                 if(@evt.target != null && @evt.obj != null) {
  23.                         HulledObj@ ship = evt.obj;
  24.                         uint cnt = ship.getSubSystemCount();
  25.                         for(uint i = 0; i < cnt; i++) {
  26.                                 subSystem@ sys = ship.getSubSystem(i).system;
  27.                                 if(sys.type.hasTag("JumpDrive")) {
  28.                                         triggerAutoJump(evt.obj);
  29.                                         return;
  30.                                 }
  31.                         }
  32.                 }
  33.         }
  34. }

  35. void triggerAutoJump(Object@ obj) {
  36.         Effect AutomatedJumpEvent("AutomatedJumpEvent");       
  37.         obj.addTimedEffect(AutomatedJumpEvent, pow(10, 35), 0.f, obj, null, null, TEF_None);
  38. }

  39. void autoJump(Event@ evt) {
  40.         Object@ obj = evt.target;

  41.         if(obj.getTarget() !is null) {
  42.                 Object@ targ = obj.getTarget();

  43.                 if(obj.toHulledObj().canUseToolOn("JumpDrive", targ)) {
  44.                         OrderList orders;
  45.                         if(orders.prepare(obj))
  46.                                 orders.giveUseToolOrder("JumpDrive", targ, true, true, false);
  47.                 }
  48.         }
  49. }

  50. void Jump(Event@ evt, float FuelCost) {
  51.         Object@ jumpShip = evt.obj;
  52.         Object@ jumpTo = evt.target;
  53.        
  54.         State@ fuel = jumpShip.getState(strFuel);
  55.        
  56.         //Checks if the planet or star is in the same system and if not sets the target to the edge of the target system
  57.         if(jumpTo.toPlanet() !is null || jumpTo.toStar() !is null) {
  58.                 if(jumpTo.getCurrentSystem() !is jumpShip.getCurrentSystem())
  59.                         @jumpTo = jumpTo.getCurrentSystem().toObject();
  60.         }
  61.        
  62.         //Clear Orders, Consume Fuel and do the jump.
  63.         clearOrders(jumpShip);       
  64.         fuel.consume(FuelCost, jumpShip);
  65.         doJump(jumpShip, jumpTo);
  66.        
  67.         evt.state = ESC_DISABLE;
  68. }       

  69. void doJump(Object@ jumpShip, Object@ jumpTo) {       
  70.         //Get the direction and distance to move the ship
  71.         vector toTarg = jumpTo.getPosition() - jumpShip.getPosition();
  72.         float len = toTarg.getLength();
  73.         if(jumpTo.toSystem() !is null)
  74.                 len -= jumpShip.radius + (jumpTo.radius - 134.f); //Jump 67 units closer to the target
  75.         else
  76.                 len -= jumpShip.radius + jumpTo.radius + 67.f; //Jump 67 units away from the target
  77.         toTarg.normalize(len);

  78.         //Move the ship
  79.         jumpShip.position += toTarg;
  80.         jumpShip.velocity = vector(0, 0, 0);

  81.         //Convince it not to wander off
  82.         jumpShip.setDestination(jumpShip.getPosition());

  83.         //Clear orbiting object so it re-evaluates
  84.         jumpShip.orbitAround(null);

  85.         //Force it to be reparented correctly
  86.         jumpShip.reparent();
  87.         //NOTE: It will take 2 game frames to relocate the ship to the other system
  88. }

  89. const string@ strStargate = "Stargate";
  90. float checkStargate(const Object@ src, const Object@ trg, const Effector@ eff) {
  91.         const HulledObj@ stargate = trg;
  92.         if (@stargate !is null){
  93.                 const HullLayout@ stargateHull = stargate.getHull();
  94.                 if (@stargateHull !is null){
  95.                         if(src.getOwner() is trg.getOwner() || src.getOwner().isAllied(trg.getOwner())){       
  96.                                 if(stargateHull.hasSystemWithTag(strStargate)){
  97.                                         return 1.f;
  98.                                 }
  99.                         }
  100.                 }
  101.         }
  102.         return 0;
  103. }

  104. void createLink(Event@ evt) {
  105.         evt.obj.getState(strStargate).val = evt.target.uid;
  106.         evt.obj.getOwner().postMessage("Hyperspace route established from #link:o"+evt.obj.uid+"##c:red#"+evt.obj.getName()+"#c##link# to #link:o"+evt.target.uid+"##c:red#"+evt.target.getName()+"#c##link#.");       
  107.         clearOrders(evt.obj);
  108. }

  109. void GateJump(Event@ evt) {
  110.         Object@ jumpShip = evt.obj;
  111.         Object@ jumpFrom = evt.target;
  112.         const State@ targetID = jumpFrom.getState(strStargate);
  113.        
  114.         if(@targetID !is null){
  115.                 Object@ jumpTo = getObjectByID(targetID.val);
  116.                 if (@jumpTo !is null){
  117.                         if(jumpTo.isValid()){
  118.                                 float jumpShipScale = jumpShip.radius * jumpShip.radius;
  119.                                 float jumpFromScale = jumpFrom.radius * jumpFrom.radius;
  120.                                 float jumpToScale = jumpTo.radius * jumpTo.radius;
  121.                                 if(jumpShipScale <= jumpFromScale){
  122.                                         if(jumpShipScale <= jumpToScale){
  123.                                                 doJump(jumpShip, jumpTo);
  124.                                                 return;
  125.                                         }
  126.                                         else{
  127.                                                 jumpShip.getOwner().postMessage("#link:o"+jumpShip.uid+"##c:red#"+jumpShip.getName()+"#c##link#: Aborting stargate jump. End point #link:o"+jumpTo.uid+"##c:red#"+jumpTo.getName()+"#c##link# is too small to pass.");
  128.                                                 return;
  129.                                         }
  130.                                 }
  131.                                 else{
  132.                                         jumpShip.getOwner().postMessage("#link:o"+jumpShip.uid+"##c:red#"+jumpShip.getName()+"#c##link#: Aborting stargate jump. Starting point #link:o"+jumpFrom.uid+"##c:red#"+jumpFrom.getName()+"#c##link# is too small to pass.");
  133.                                         return;
  134.                                 }
  135.                         }
  136.                 }
  137.         }
  138.         jumpShip.getOwner().postMessage("#link:o"+jumpShip.uid+"##c:red#"+jumpShip.getName()+"#c##link#: Aborting stargate jump. #link:o"+jumpFrom.uid+"##c:red#"+jumpFrom.getName()+"#c##link# has invalid hyperspace coordinates.");       
  139. }

  140. void clearOrders(Object@ obj){
  141.         AIStance old = obj.getStance();
  142.         obj.setStance(AIS_HoldFire);
  143.         obj.setStance(old);

  144.         OrderList orders;
  145.         if(orders.prepare(obj)) {
  146.                 orders.clearOrders(false);
  147.                 orders.prepare(null);               
  148.         }
  149. }
复制代码
Game Data\scripts\server 里面的JUMPDRIVE.AS文件。帮忙排查一下,跟Game Data\scripts\server文件夹里面的哪一个文件冲突了……comgbat.AS ??  
回复

使用道具 举报

发表于 2013-7-3 00:41:17 | 显示全部楼层
虔诚 发表于 2013-7-2 23:41
Game Data\scripts\server 里面的JUMPDRIVE.AS文件。帮忙排查一下,跟Game Data\scripts\server文件夹里 ...

看了一下。。。。
虽然似乎有不少地方值得调整,例如几个Check都是用浮点数作为返回值这个- -。。。。。

不过似乎没有遇到神么特别明显的错误。能具体说说游戏里到底是出现了什么错误么- -

另外你看看第10行,双斜杠是不是多了一个,if的括号里面有一个双斜杠难道不会屏蔽掉后面的内容吗?。。。。
回复

使用道具 举报

 楼主| 发表于 2013-7-3 00:50:53 | 显示全部楼层
FRIGHTER 发表于 2013-7-3 00:41
看了一下。。。。
虽然似乎有不少地方值得调整,例如几个Check都是用浮点数作为返回值这个- -。。。。。
...

那一段数据是正常的。……

这一通篇代码放到游戏里面的效果就是

当你想让舰船启动跳跃装置时,发现跳跃装置部件只会在不断的刷新状态,无限刷CD中,可就是不执行跳跃动作)

我弄不清楚哪一段还是返回的数值导致的跳跃条件判定失败了。
回复

使用道具 举报

发表于 2013-7-3 09:11:26 | 显示全部楼层
虔诚 发表于 2013-7-3 00:50
那一段数据是正常的。……

这一通篇代码放到游戏里面的效果就是

虽然能看懂,但毕竟不是我学的那门,想只看代码排错还真是吃力了点。。。。

关于Debug我给你点建议好了。。。现在手头上没有游戏

在各个阶段(目前就我所见至少可以分成三个阶段了)检查、调用、执行。在每个阶段里添加一行能产生不同效果的语句,例如文本输出之类的(比方说在float checkRange 里就可以加一行输出文本输出”距离检查完成“之类的字样)这样看最后输出到哪个地方输出不出来了,就知道哪个地方出了问题了。。。。

然后知道哪里出了问题之后,再到那个段落里面,在不同的位置添加一个输出文本,把那部分的运行结果输出出来。看是哪里的运行结果跟预期值不符。最后就只要在那一小段代码里找问题就简单很多了。。。。
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|DeepTimes.NET 太空游戏站