songyx0 songyx0
关注数: 9 粉丝数: 21 发帖数: 3,618 关注贴吧数: 42
【原创】可编程块API辅助代码 Github 项目地址:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fgithub.com%2FBeMxself%2FSpaceEngineers_ProgrammableBlock_Helper&urlrefer=c9c4f71df92945175ab1e44d351fad3e 通用物块操作函数 IMyTerminalBlock GetBlock(string name) 传递物块名,返回物块对象 T GetBlock<T>(string name) 功能同上,泛型版 void RunAction(string blockName, string actionName) 传递物块名,执行 Action void RunAction(IMyTerminalBlock block, string actionName) 传递物块对象,执行 Action void BatchRunAction(IList<string> blockNames, string actionName) 通过物块名列表(如数组),指定多个物块执行 Action void BatchRunAction(IList<IMyTerminalBlock> blocks, string actionName) 多个物块执行 Action Var类 实现了通用的变量存储功能 SE 编程部分没有能够存储状态的全局变量之类的东西,所以这里是通过把值存在某个物块的名字里实现的。 构造函数 Var(IMyGridTerminalSystem gts) Var(IMyGridTerminalSystem gts, string prefix) Var(IMyGridTerminalSystem gts, string prefix, string separator) 参数说明 gts 传递GridTerminalSystem prefix 用来存变量的物块名称前缀,不指定默认是 “$var” 要注意的查找物块时只要包含$var就会返回,也就是说如果你同时有一个叫$var1的物块用来存其他变量,很可能本来你要存在$var上的值会存到$var1上。 spearator 变量间的分隔符,不指定默认是 “|”(竖线) 方法 T GetVar<T>() 返回指定类型的值 T GetVar<T>(uint index) 同上,不过可以指定索引位置(从0开始),也就是说一个Var对象可以存储多个值 void SetVar(object value) 设置值 void SetVar(uint index, object value) 同上,可以指定索引位置,同样也是0开始
用可编程块实现的跟踪系统 先放成品图:优点: * 省材料,只需一个陀螺仪就可以实现制导 缺点: * 受制于 Timer Block,实时性差 建造过程 第一步,先放一个计时器块第二步,在计时器四面装上传感器。一定要注意,字母的朝向要一致,否则配置麻烦第三步,装上推进器,注意传感器字母朝向为前,指示灯为后别装反了以及反应堆,陀螺仪(陀螺仪上球上那个不对称的小圈圈超前放),可编程块第四步,配置,这一步是最麻烦的 1. 相对于陀螺仪找到各个 Sensor 的位置,分别命名为:Sensor T(上方),Sensor B(下方),Sensor L(左方),Sensor R(右方) 2. 把传感器按图设置,除了 Back extent 其他方向越大越好 3. 确定陀螺仪名字是 Gyroscope 4. 设置Timer Block 动作为运行可编程块以及开始自己,把陀螺仪的动作也设置成运行可编程块 5. 这里为了调试方便我加了一个信标(Beacon),信标命名为$var,可编程块会把运行状态记录在信标上,如果你不想用信标,可以把推进器、反应堆、计时器、可编程块任意一个的名字设置为$var,否则程序会出错。第五步,把下方的代码粘贴到可编程块中,代码中的 SENSITIVITY 常量是陀螺仪的旋转速度,最高值60,太高的话容易打转儿 void Main() { Track(); } string gyroName = "Gyroscope"; string sensorT = "Sensor T"; string sensorB = "Sensor B"; string sensorL = "Sensor L"; string sensorR = "Sensor R"; const float SENSITIVITY = 30; void Track(){ bool t = IsSensorActive(sensorT); bool b = IsSensorActive(sensorB); bool l = IsSensorActive(sensorL); bool r = IsSensorActive(sensorR); Var var = new Var(GridTerminalSystem, "$var", "|"); //if some sensor active override gyroscope OverrideGyroscope(gyroName, true); IMyGyro gyro = (IMyGyro)GetBlock(gyroName); float yaw=0; float pitch=0; //X axis if (t && b){ pitch = 0; var.SetVar("Reset X"); } else if (t){ pitch = SENSITIVITY; var.SetVar("Turn Up"); } else if (b){ pitch = -SENSITIVITY; var.SetVar("Turn Down"); } //Y axis if (l && r){ yaw = 0; var.SetVar(1, "Reset Y"); } else if(l){ yaw = SENSITIVITY; var.SetVar(1, "Turn left"); } else if(r){ yaw = -SENSITIVITY; var.SetVar(1, "Turn Right"); } gyro.SetValue("Pitch", pitch); gyro.SetValue("Yaw", yaw); } bool IsSensorActive(string sensorName){ IMySensorBlock sensor = (IMySensorBlock)GetBlock(sensorName); return sensor.IsActive; } void OverrideGyroscope(string gyroName, bool doOverride){ IMyGyro gyro = (IMyGyro)GetBlock(gyroName); //Need Rewrite with GetValue SetValue if ((doOverride && !gyro.GyroOverride) || (!doOverride && gyro.GyroOverride)) RunAction(gyroName, "Override"); } // Helper Function // DONT CHANGE IMyTerminalBlock GetBlock(string name){ IMyTerminalBlock block = GridTerminalSystem.GetBlockWithName(name); if (block==null) throw new Exception(String.Format("\"{0}\" Not Found")); return block; } void RunAction(IMyTerminalBlock block, string actionName){ block.GetActionWithName(actionName).Apply(block); } void RunAction(string blockName, string actionName){ RunAction(GetBlock(blockName), actionName); } void BatchRunAction(IList<string> blockNames, string actionName){ for(int i = 0; i < blockNames.Count; ++i) RunAction(blockNames[i], actionName); } void BatchRunAction(IList<IMyTerminalBlock> blocks, string actionName){ for(int i = 0; i < blocks.Count; ++i) RunAction(blocks[i], actionName); } class Var{ private IMyGridTerminalSystem gts; private IMyTerminalBlock varBlock; private string[] varArray; private string separator; public Var(IMyGridTerminalSystem gts){ this.gts = gts; InitVar("$var", "|"); } public Var(IMyGridTerminalSystem gts,string prefix){ this.gts = gts; InitVar(prefix, "|"); } public Var(IMyGridTerminalSystem gts,string prefix, string separator){ this.gts = gts; InitVar(prefix, separator); } private void InitVar(string prefix, string separator){ this.separator = separator; varBlock = FirstBlockWithPrefix(prefix); varArray = varBlock.CustomName.Split(new string[]{separator}, StringSplitOptions.None); } private IMyTerminalBlock FirstBlockWithPrefix(string prefix){ List<IMyTerminalBlock> allBlocks = gts.Blocks; for (int i = 0; i < allBlocks.Count; ++i){ if (allBlocks[i].CustomName.StartsWith(prefix)) return allBlocks[i]; } throw new Exception(String.Format("FirstBlockWithPrefix: prefix \"{0}\" not found", prefix)); } public T GetVar<T>(){ return GetVar<T>(0); } public T GetVar<T>(uint index){ return (T)(Object)varArray[index+1]; } public T GetVarWithDefault<T>(object defaultValue){ return GetVarWithDefault<T>(0, defaultValue); } public T GetVarWithDefault<T>(uint index, object defaultValue){ try{ return GetVar<T>(index); } catch(Exception e){ return (T)defaultValue; } } public void SetVar(object value){ SetVar(0, value); } public void SetVar(uint index, object value){ if (index+2 > varArray.Length) Array.Resize(ref varArray, (int)index+2); varArray[index+1] = value == null ? "" : value.ToString(); varBlock.SetCustomName(String.Join(separator, varArray)); } }
话说EVE的武器装备真的应该好好重新设计一下了 舰船现在经过调整,同吨位不同级别的船都有了新的定位,废物船越来越少,这点做得挺好。但是还有大量的废物装备就没人管啦(按品种的数至少有60%的装备)?比如同级别炮中的小口径炮台,同类型装备中的衍生1~2,甚至某些装备的T2型号,很多废物除了卖给新人也就剩下化矿一个出路了。 先说武器,武器的情况是同级别下的口径越大、占PG/CPU越高的综合性能越好,越受欢迎,剩下的那些几乎没人用。 举个例子,所有人都知道联邦耻辱425吧?但是那有多少人用过同级别的350和双联250磁轨?DPS低,射程低,转速和射速的优势也不大,只要PG够,能上大口径谁上小口径的? 当然事无绝对,可能也射弹炮稍强一些。有些射弹炮小口径的转速、射速优势能够弥补伤害系数和射程劣势,所以有些人也会主动的选择同级别中的小口径武器。 但是激光、混合武器就没那么幸运了,同类型不同口径的也只是参数稍微有些不一样,综合性能呈阶梯状分布,特色不够明显。CCP就不能放开点重新设计一下? 拿大型磁轨炮来说,如果把350和双联250的DPS向425看齐,但是350伤害系数低,射程低,但射速更高,转火效率更高;双联250一次开火消耗两发炮弹,结算两次伤害,射程跟中型的250磁轨一样,转速更高一些,更适合在中距离里打中型船。这样大幅加大不同参数的差距,缩小武器间的综合差距,让玩家能够配出特色更加鲜明的船。 说些题外话,其实EVE不同武器的特点还是不够鲜明啊,如果照下面这样改相信会更有意思: 激光炮没有伤害延迟,但是伤害属于持续性的,持续时间越久伤害越高,集束是伤害起点低但是伤害上限高,伤害在时间轴上的曲线是凹曲线,而脉冲激光则是伤害起点高,但是伤害上限比较低,伤害在时间轴上的曲线是凸曲线。 离子/电子/中子炮这类高速粒子武器也没有伤害延迟,伤害也是持续性的,但是伤害不会随着持续时间升高,伤害在时间轴上是线性的,伤害类型单一。 磁轨炮伤害延迟较低,伤害不是持续性的,有效射程高,射速较低,伤害类型以动能为主,但是可以根据附带其他伤害。 火炮在炮类中伤害延迟最高,伤害同样不是持续性的,有效射程低,失准高,射速快,伤害类型根据弹药而定,但是也夹杂一点动伤,与磁轨不同的是动伤占的比例要小一些 不同衍生级别的装备差别也应该更大胆一些,比如武器提升,白板是射速、伤害均衡加成的,衍生的可能有的偏重射速,有的偏重伤害,综合DPS提升有所差距但是差距不大。T2跟T1在这类参数上的差距不要太大,但是可以增加特殊效果,比如可以降低超载伤害等等。 在比如装甲板,大家都用Y4包金,T2装甲板都是废物,就不能多动动脑子,比如包金虽然HP高但是重量也应该高。而现在呢?包金是T1装甲中HP最高的,重量也是最轻的。。。明摆着就是不让用其他装甲板了,而T2跟T1的区别也仅仅是装配需求更高了,甲量更高了,二级科技仅仅是参数调整,太能偷懒了吧?按我说T2应该HP略低一些,但是附带一定抗性,但是这个抗性是动态的,随着装甲消耗儿降低,比如你的装甲板占了全船装甲的50%,那么打完了你一半装甲之后T2装甲带来的抗性加成就全部消失了。装甲板也可以加入一些新特性增加战斗的变数。比如装甲板有一定概率受损,受损到一定程度装备就会下线,必须回站或者用纳米粘合剂修理,这样设计也可以为了防止带抗性的T2装甲板过于逆天提高T2装甲板的受损概率。 说到这里,又想起了一个点子,盾抗和甲亢的区别应该进一步区别,盾抗应该可以更好的保护船上的装备,而甲抗船则会有一定的概率伤到武器、推进器,包括刚才说的装甲板等外部设施,伤到结构以后所有装备都有可能受损,结构越少损伤越大,这样可以让那些靠卖结构留人的PVPer承担更高的风险(现在伤到结构虽然装备也会受损,但是损伤程度太低)。 然后还要放宽纳米粘合剂的使用限制,提高使用率。 其他装备也应该进一步缩小综合性能,加强特色性能,让每个装备都能派上用场。
我开着娜迦在低安 正吃着火锅还唱着歌 突然就遇到海盗了 刚才我正开着娜迦在低安吃着火锅还唱着歌刷四级 突然就跳进一个ALZ啊 我正纳闷呢,刚想问“小妹妹你是不是迷路啦” 然后她就闪黄了 然后我又删掉刚打出的字,又一个字母一个字母的想要键入“小妹妹你锁我干嘛啊” 然后就发现我的仪表盘上方多出了几个图标,反跳、网子、帽子 我又删除了打了一半的话,又一个字一个字的想要键入“不要啊,这样很危险的” 我惊喜的发现我居然可以开委曲,于是我就点开了委曲 于是图标减到了只剩下帽子,然后又跳进一个DS 卧槽,组团迷路吗?傻子也知道他们这是要搞我了啊 于是我开始锁定他们,发现居然锁不上啊,那几个帽子威力真大啊,把我的锁定距离压到了20多KM DS正在努力的向我爬来,我就开着委曲跟他们大眼瞪小眼看着,当时的场面很尴尬…… 几秒钟后我做了一个决定,正闲着也是闲着,干脆锁个怪打打吧 然后我神奇的发现能够锁到100KM外的怪,我赶紧锁了下ALZ发现能锁上了,然后就开搞呗,搞了几炮,快打到结构了ALZ毫无悬念的跳走 我跟DS又陷入了尴尬的大眼瞪小眼的情景 我试着打了几下远处的小护卫……角速度太大打不中,然后我惊恐的发现DS快走到跟前了 我赶紧撒丫子开委曲跑 好在DS好像没有扰频,一个网子还不足以挽留我,我超载了下委曲一脚油门又撒远了 但是想想真是生气啊!当我的任务空间是公共厕所吗!?想来就来想走就走,我心一横,给了他几炮,然后就撒丫子跑了,给他吃我尾气,哈哈哈哈,真解气……
我是一个PS老玩家,也是一个EVE新玩家,关于某CCP员工失言 首先声明 ======== 1. 我非常非常非常热爱PS,她是第一个让我兴奋得发抖的游戏,国服我是TR红闪军团的,从内测一直坚持到倒闭 2. 我也非常非常非常喜欢EVE,她是我第一个认认真真的学习、分析的游戏,PS国服倒了之后我就接触了EVE,08年正式开始玩EVE 关于失言 ========他的文字很容易让人误解,但是仔细看一下,你会发现,其实他的话主体一直都是“视频”而不是游戏本身。 PS:咱有一说一啊,PS2官网的视频真算不上制作精良,很对不起PS2本身的素质,这是9c的问题,宣传片太缺乏深度了。这点应该向CCP学习一下,每一部宣传片都诚意十足。 关于失言后大家的表现 ==================== 有人挖出这个帖子后我直接去ECF扣了这个官员10分(驱逐舰只能扣10分),我也发了截图,他现在已经被EVEr扣到1000分以下了(当然扣费原因不完全是因为他的自大)。 都说EVEr爱秀优越感,其实很多人都非常讨厌这种恶意秀优越感的,而EVEr的行为确实也证明了这一点。 有些PS玩家(老玩家么?)却进入了一种失去理智的状态。从DUST514到EVE都批判加嘲讽。但你想过没有,PS1国服倒闭后,一部分人去了美服,还有一部分人分散到了WOW、EVE等游戏中,你嘲讽EVE时可能会有很多PS老玩家看不下去(我在EVE里遇到的PS1老玩家可不止一个两个)。 冷静!冷静! ============ PS2、EVE、Dust514都是诚意十足的好游戏,大家还是不要因为某个人的无心的话,恶意攻击了。 PS玩家已经等了6年,很多人都很淡定了,但是现在PS2测试越来越近,现在很多人都开始燃起来了。 EVE呢,国服换代理加升版本,拖了两个月,现在正是最焦躁的阶段。 这么说吧两边玩家都是有个火星子就能爆炸,所以大家还是稍微忍让点吧,精力实在过剩就去youku什么的地方去发泄吧
1 下一页