前几天自制PowerfulBuilders的mod,结果在Enhancements下面一级那里漏打了一样东西。。。后来进游戏发现居然没出错。。。现在改好了,继续研究LUA脚本中,看起来满简单的,至少修改blueprint是很简单的。。。接下来打算研究下Weapon部分的内容,打算增加所有武器的飞行速度:victory:,不知道能不能区分各类武器是弹道型的还是直线型的。。。如果可以,打算分别用不同的比例增加。
[ 本帖最后由 honeyfox 于 2007-9-6 18:44 编辑 ]
前几天自制PowerfulBuilders的mod,结果在Enhancements下面一级那里漏打了一样东西。。。后来进游戏发现居然没出错。。。现在改好了,继续研究LUA脚本中,看起来满简单的,至少修改blueprint是很简单的。。。接下来打算研究下Weapon部分的内容,打算增加所有武器的飞行速度:victory:,不知道能不能区分各类武器是弹道型的还是直线型的。。。如果可以,打算分别用不同的比例增加。
[ 本帖最后由 honeyfox 于 2007-9-6 18:44 编辑 ]
blueprint里面的应该是根据lua所定义的,都很简单~ 弹道有三种:直线、低曲线和高弧线,而追踪的功能在弹头定义。
源文件是SupremilatedAfterTheWar_110
do
local oldModBlueprints = ModBlueprints
function ModBlueprints(all_bps)
oldModBlueprints(all_bps)
for id,bp in pairs(all_bps.Unit) do
# New Veterancy Buffs
#
# This will remove ALL of the previous buffs, and then we will implement a completely new system
if bp.Buffs then
bp.Buffs = nil
end
if bp.Weapon then
for k,v in pairs(bp.Weapon) do
if v.Buffs then
if v.Label != 'DeathWeapon' then
v.Buffs = nil
end
end
end
end
# New Buff system
#
# The idea behind the new buffs is that it emphasises realistic skill improvement of a unit, rather
# than unrealistic things like extra health for no reason, more projectile damage, etc.
# We may move to a 3-tier system at a later point, but for now it will be 5 as per standard supcom.
# Each level, the unit recieves bonuses to weapons and chassis. We will try to stay away from non-visible
# upgrades to a unit, like projectile damage.
# Currently Available options:
# FIRINGRANDOMNESS
# MAXRADIUS
# DAMAGE
# TURRETYAWSPEED
# TURRETPITCHSPEED
# RATEOFFIRE
# HEALTHREGENRATE
# FUELRATIO
# MAXFUEL
# SPEEDMULT
# HEALTH
# MAXHEALTH
# To be implemented at a later date:
# ACCELERATION
# MINAIRSPEED
# MAXAIRSPEED
# Unit Buffs
# Top Speed and Regenrate
bp.Buffs = {
# Top Speed
{
Add = {
VeteranLevel1 = true,
},
BuffType = 'SPEEDMULT',
Value = 1.1,
},
{
Add = {
VeteranLevel2 = true,
},
BuffType = 'SPEEDMULT',
Value = 1.2,
},
{
Add = {
VeteranLevel3 = true,
},
BuffType = 'SPEEDMULT',
Value = 1.3,
},
{
Add = {
VeteranLevel4 = true,
},
BuffType = 'SPEEDMULT',
Value = 1.4,
},
{
Add = {
VeteranLevel5 = true,
},
BuffType = 'SPEEDMULT',
Value = 1.5,
},
# Fuel
{
Add = {
VeteranLevel1 = true,
},
BuffType = 'MAXFUEL',
Value = bp.Physics.FuelUseTime or 0 * 1.1,
},
{
Add = {
VeteranLevel2 = true,
},
BuffType = 'MAXFUEL',
Value = bp.Physics.FuelUseTime or 0 * 1.2,
},
{
Add = {
VeteranLevel3 = true,
},
BuffType = 'MAXFUEL',
Value = bp.Physics.FuelUseTime or 0 * 1.3,
},
{
Add = {
VeteranLevel4 = true,
},
BuffType = 'MAXFUEL',
Value = bp.Physics.FuelUseTime or 0 * 1.4,
},
{
Add = {
VeteranLevel5 = true,
},
BuffType = 'MAXFUEL',
Value = bp.Physics.FuelUseTime or 0 * 1.5,
},
#Regen
{
Add = {
VeteranLevel4 = true,
},
BuffType = 'HEALTHREGENRATE',
Value = (bp.Defense.RegenRate or 0) + ((bp.Defense.MaxHealth or 0) / 100),
},
{
Add = {
VeteranLevel5 = true,
},
BuffType = 'HEALTHREGENRATE',
Value = (bp.Defense.RegenRate or 0) + ((bp.Defense.MaxHealth or 0) / 100 * 2),
},
}
# Weapon Buffs
#
# ROF, Turret Speed, MaxRadius
if bp.Weapon then
for k,v in pairs(bp.Weapon) do
if v.Label != 'DeathWeapon' then
v.Buffs = {
# ROF
{
Add = {
VeteranLevel1 = true,
},
BuffType = 'RATEOFFIRE',
Value = (v.RateOfFire or 0)* 1.05,
},
{
Add = {
VeteranLevel2 = true,
},
BuffType = 'RATEOFFIRE',
Value = (v.RateOfFire or 0) * 1.2,
},
{
Add = {
VeteranLevel3 = true,
},
BuffType = 'RATEOFFIRE',
Value = (v.RateOfFire or 0) * 1.4,
},
{
Add = {
VeteranLevel4 = true,
},
BuffType = 'RATEOFFIRE',
Value = (v.RateOfFire or 0) * 1.5,
},
{
Add = {
VeteranLevel5 = true,
},
BuffType = 'RATEOFFIRE',
Value = (v.RateOfFire or 0) * 2,
},
# Turret Speed
{
Add = {
VeteranLevel1 = true,
},
BuffType = 'TURRETYAWSPEED',
Value = (v.TurretYawSpeed or 0) * 1.05,
},
{
Add = {
VeteranLevel2 = true,
},
BuffType = 'TURRETYAWSPEED',
Value = (v.TurretYawSpeed or 0) * 1.25,
},
{
Add = {
VeteranLevel3 = true,
},
BuffType = 'TURRETYAWSPEED',
Value = (v.TurretYawSpeed or 0) * 1.4,
},
{
Add = {
VeteranLevel4 = true,
},
BuffType = 'TURRETYAWSPEED',
Value = (v.TurretYawSpeed or 0) * 1.5,
},
{
Add = {
VeteranLevel5 = true,
},
BuffType = 'TURRETYAWSPEED',
Value = (v.TurretYawSpeed or 0) * 2,
},
#Range
{
Add = {
VeteranLevel3 = true,
},
BuffType = 'MAXRADIUS',
Value = (v.MaxRadius or 0) * 1.05,
},
{
Add = {
VeteranLevel5 = true,
},
BuffType = 'MAXRADIUS',
Value = (v.MaxRadius or 0) * 1.15,
},
}
end
end
end
end
end
end
[ 本帖最后由 零星 于 2007-9-8 14:10 编辑 ]
:Q :Q :Q 经历了n多次的Supreme Commander出错。。。Projectile的代码貌似和Unit的不大一样。。。
现在问题应该出在这句语句上,为了使系统能够逐个将Projectile的blueprint内的某些数据进行修改。。。但是我怎么也猜不出这个语句应该怎么写。。。
现在写成这样 for id,bp in all_bps.Proj do 失败。。。 将Proj改成Projectile 失败。。。 将Projectile改成Projectiles 还是失败。。。:L
(对Unit遍历的代码是:for id,bp in all_bps.Unit do)
不知道是不是Proj的名称问题,还是all_bps里没有关于弹头的引用。。。没道理啊。。。弹头的数据里也是bp格式的呀。。。有没有谁知道如何遍历Projectiles.scd里面的bp数据。。。或者有没有sdk这类的东西可以参考下。。。否则那么多东西记不下。。。
[ 本帖最后由 honeyfox 于 2007-9-6 22:26 编辑 ]
:lol 看到别人给你的答案了,http://forums.gaspowered.com/viewtopic.php?t=19019
for id,bp in all_bps.Projectile do
#modify projectiles
end
可是这个你不是试过了吗?
是啊,所以我奇怪了,看来我猜得满准的,是Projectile(其实前面就在lua.scd和mohodata.scd里面发现了)。。。只是。。。我估计我其他代码有点问题。。。不过貌似没什么太多内容啊,就是把Projectile的一些属性改了改。。。难道不能改:L 。。。所以,我又发贴问了:lol GPGNet是个好地方:victory: 而且至少MuzzleVelocity那里的可以先改起来了,不过关于导弹类的加速度和转弯角速度的问题。。。:Q 先不管了。。。让那些提过n倍速度的导弹和飞机无数次地擦肩而过吧~~~
:‘( :’( 我晕了。。。
我现在代码里面已经删去了所有关于Projectile的东东,只是用
for id,bp in all_bps.Unit do
if bp.Weapon then
for i,wep in bp.Weapon do
来对所有单位的所有武器(如果有)进行遍历,然后把MuzzleVelocity扩大1.5倍。。。居然还是报错:Q
先把野心收小一些,试试只改一种武器弹头?另外,改的倍数过多是否会溢出,少改一点点试试?
en
这是什么语言啊?
这个是Lua 脚本语言。。。
啊哈哈哈,终于找到错误的地方了。。。说来惭愧:L Lua里面的数组的引用是name[index],因为使用其他编程语言过多。。。习惯性的打成了name(index)。。。终于OK了!!!
恭喜
你喜欢改游戏啊?
搞个sc的mod出来啊
恭喜
有成果尽快拿出来分享,高速导弹不知是什么效果。
:L 光加速的结果是来不及转弯……
事实上。。。我的测试结果倒并非如此。。。
因为貌似原来导弹的TurnRate就很高了。。。所以它们的速度提升以后(×2),貌似对精确度没有太大的影响,现在问题在于,跟踪类武器(导弹、鱼雷等)跟踪的是目标实体,如果可以像其他弹道型武器一样也跟踪目标的提前位置,那么精准度会非常高,几乎是百发百中的,不过貌似这个代码很难写,天晓得是不是要创建一个虚的目标来进行定位位置,而且还要有算法来计算提前量。。。:L
提前?
……我怎么找不到提前量的那个参数了?!难道被删掉了?
以前Aeon和UEF的T2PD就是因为没有那个参数而无法打中移动目标啊……
找到了…… LeadTarget = true,
[ 本帖最后由 零星 于 2007-9-8 14:11 编辑 ]
哦?LeadTarget就是提前计算弹道?看来我还得去翻翻Blueprint的说明手册。。。
。。。话说我最早就在纳闷LeadTarget和TrackTarget有什么区别。。。:L
当时以为这个提前量是用Lua脚本算出来的,心想这帮人这么牛啊,那不要繁死了。。。原来是现成的,不过话说回来,这个提前量也是程序员编出来的,可能他们要获得些数据比较方便,不用像Lua一样还要GetUnit,还要获得单位速度,Get来Get去的。。。
零星:对了,这句的意思if v.Label != ‘DeathWeapon’ then
是不是当label 不等于deathweapon的时候?
honeyfox:对的。感叹号相当于Not逻辑运算符
[ 本帖最后由 honeyfox 于 2007-9-8 19:00 编辑 ]
对呀~ Leadtarget和Tracktarget是不一样的……
不过在Tracktarget测同时Leadtarget不知道是否真的有效,我想大概不矛盾吧~ lead是在bp.unit.weapon里的
不会 这里的弹药制导 也用PID控制的吧:L