找回密码
 注册
X系列官方授权正版
搜索
查看: 1201|回复: 1

[原创] ProjectExtend进展汇报(2014/2/15)。

[复制链接]
发表于 2014-2-15 00:33:12 | 显示全部楼层 |阅读模式
本帖最后由 EliteCadre 于 2014-2-15 10:37 编辑

目前我已经初步了解如何修改Game Data\scripts\server下as中的代码,即使我没有什么编程基础。
已经初步实现如下效果,程序可被识别,即将测试BUG:
(1)护盾代码修改,支持武器的半穿透效果
void ShieldSoak(Event@ evt, float StoreMax, float absorbFactor) {
        if(evt.flags & DF_ShieldPiercing != 0)
                return;

        if(evt.flags & DF_HalfShieldPierce != 0) {
                if(evt.flags & DF_Kinetic != 0) {
                        Object@ obj = evt.target;
                        State@ shld = obj.getState(strShields);
                       
                        //Check to see if we should absorb the shot
                        if(randomf(1.f) < clamp((shld.val * absorbFactor) / shld.max, 0.f, 1.f)) {
                                float soak = min(evt.damage, shld.val);
                                if(soak > 0) {
                                        evt.damage -= soak;
                                        shld.val -= soak;
                                }
                                else {
                                        //The shields have collapsed, no further checks are necessary
                                        evt.flags |= DF_ShieldPiercing;
                                }
                        }
                }
                else {
                        Object@ obj = evt.target;
                        State@ shld = obj.getState(strShields);
                       
                        float shieldStability = clamp((shld.val * absorbFactor) / shld.max, 0.f, 1.f);
                       
                        float soak = min(evt.damage, shld.val) * shieldStability;
                        if(soak > 0) {
                                shld.val -= soak;
                                evt.damage -= soak;
                        }
                        else {
                                //The shields have collapsed, no further checks are necessary
                                evt.flags |= DF_ShieldPiercing;
                        }
                }
        }
        else {
                if(evt.flags & DF_Kinetic != 0) {
                        Object@ obj = evt.target;
                        State@ shld = obj.getState(strShields);
                       
                        //Check to see if we should absorb the shot
                        if(randomf(1.f) < clamp((shld.val * absorbFactor) / shld.max, 0.f, 1.f)) {
                                float soak = min(evt.damage, shld.val);
                                if(soak > 0) {
                                        evt.damage -= soak;
                                        shld.val -= soak;
                                }
                                else {
                                        //The shields have collapsed, no further checks are necessary
                                        evt.flags |= DF_ShieldPiercing;
                                }
                        }
                }
                else {
                        Object@ obj = evt.target;
                        State@ shld = obj.getState(strShields);
                       
                        float shieldStability = clamp((shld.val * absorbFactor) / shld.max, 0.f, 1.f);
                       
                        float soak = min(evt.damage, shld.val) * shieldStability;
                        if(soak > 0) {
                                shld.val -= soak;
                                evt.damage -= soak;
                        }
                        else {
                                //The shields have collapsed, no further checks are necessary
                                evt.flags |= DF_ShieldPiercing;
                        }
                }
        }
}

(2)护甲完全免疫武器的穿甲效果

//Reduces damage taken by FieldSoak, down to a minimum of 20% damage
void FieldSoakDamage(Event@ evt, float Soak) {
        SysRef@ dest = evt.dest;
        if(dest is null)
                return;
       
        evt.damage = max(evt.damage - Soak, evt.damage * 0.2f);
        float deal = min(evt.damage, dest.HP);
        dest.HP -= deal;
        evt.damage -= deal;
}

(3)护甲降低穿透比率的一半(全穿便50%穿,50%穿变25%穿)
//Reduces damage taken by Hard Soak, down to a minimum of 20% damage
void HardSoakDamage(Event@ evt, float Soak) {
        if(evt.flags & DF_ArmorPierced != 0)
                return;

        SysRef@ dest = evt.dest;
        if(dest is null)
                return;
       
        if(evt.flags & DF_ArmorPiercing != 0) {
                evt.damage = max(evt.damage - (Soak * 0.5f), evt.damage * 0.4f);
                float deal = min(evt.damage * 0.5f, dest.HP);
                dest.HP -= deal;
                evt.damage -= deal;
                evt.flags |= DF_ArmorPierced;//(加入DF_ArmorPierced是为了防止利用多块装甲堆叠反复吸收穿甲伤害)
        }
        if(evt.flags & DF_HalfArmorPierce == 0) {
                evt.damage = max(evt.damage - Soak, evt.damage * 0.2f);
                float deal = min(evt.damage, dest.HP);
                dest.HP -= deal;
                evt.damage -= deal;
        }
        else {
                evt.damage = max(evt.damage - (Soak * 0.75f), evt.damage * 0.2667f);
                float deal = min(evt.damage * 0.75f, dest.HP);
                dest.HP -= deal;
                evt.damage -= deal;
                evt.flags |= DF_ArmorPiercing;
                evt.flags |= DF_ArmorPierced;
        }
       
}

至此已经为新的两种装甲和半穿透护盾武器的加入做好了铺垫,接下来就是把新子系统加入,将已经制作好的图标和他们对应,然后再中文和英文两种语言文件中写好他们的名称和注释。预计5天内制作好版本0.0.1

评分

参与人数 1UCC +1 收起 理由
虔诚 + 1 希望能求证BUG结果

查看全部评分

发表于 2014-2-16 21:10:33 | 显示全部楼层
看不懂,不过好像很厉害的样子~~~~~~~~~~
回复

使用道具 举报

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

本版积分规则

关闭

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

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