|
楼主 |
发表于 2009-9-14 21:36:00
|
显示全部楼层
总的基础:
输入管理器的majia.mdx直接输入到你的地图里的对应路径里去。
最好把我所有的技能什么的全部copy进去。
在System里的触发一个不能丢
地图头文件也需要复制过去。
常量的设置:
StructUnit中的
Const_TempItemSlotAbility
设置为item temp的ID。
UnitMissile中的
Const_MissileUnitId
设置为UsableUnit的ID(注意……没有其他字符)
StructItem中的
Const_ItemSeerId改为
UsableUnit(PlayerSeeItem的ID)
以及Const_ItemBuff改为
魔法效果“物品”的ID
“影子权杖”的魔法效果也要改为这个“物品”
StructDestructable Terrain
中的Const_Destructable_UsableUnitId
改为UsableUnit(Desturctable)的ID
其他的暂时无需更改。
无伤大雅。
===================================
单位的设置:
(在原先基础上更改)
单位编辑器部分:
原单位A:
装甲类型为“没有”(按Shift,输入【 _ 】)即可
投射物图像为“没有”
武器声音为“没有”
如果单位没有物品栏,或者物品栏技能被限制。
在【技能-普通】增加一个物品栏技能“item temp”
这个演示叫这个名字,其实你可以改。
就是一个英雄物品栏,只不过个数为1而已。
视野范围全部改为0(白天和夜晚)
然后copy一个原单位。新的单位类型B。(我称其为“尸体单位”)
在已改完的原单位基础上,更改:
阴影图像:没有
阴影图像-宽度/高度/X轴偏移/Y轴偏移:0(这个貌似可改可不改)
深水区有阴影:false
然后,按照单位A原先的视野,从
UsableUnit (See_XXXX_YYYY)(XXXX为白天视野,YYYY为晚上视野,如果单位A原先的视野为这个数的话,那么不用注册新的UsableUnit,这个UsableUnit直接视为视野马甲C)
中copy一个。
将其视野调整为单位A原先的视野,改名字(这个不是必需的…………),符合上面的格式。
这样,我们得到3个单位类型…………于是……下面的工作麻烦了…………
(以下内容,如果关于UnitC的已经在编辑器里有了,则不用理会)
-----------------------------------------------------------------
翻到技能的页面。
需要以下技能:
burrow <UnitAId> 01(从burrow XXXX 01中复制一个)
将普通形态单位和变化形态单位全部变成<UnitAId>。
burrow <UnitAId> 02(从burrow XXXX 02中复制一个)
将普通形态单位和变化形态单位全部变成<UnitAId>。(这是物品技能,别和上边混了)
接下来:
burrow <UnitAId> deadbody <UnitBId> 01(从burrow XXXX deadbody YYYY 01中复制一个)
将普通形态单位和变化形态单位全部变成<UnitBId>。
burrow <UnitAId> deadbody <UnitBId> 02(从burrow XXXX deadbody YYYY 02中复制一个)
将普通形态单位和变化形态单位全部变成<UnitBId>。(这是物品技能,别和上边混了)
Usable单位:
burrow UsableUnit <UnitCId> 01(从burrow UsableUnit XXXX 01中复制一个)
将普通形态单位和变化形态单位全部变成<UnitAId>。
burrow UsableUnit <UnitCId> 02(从burrow UsableUnit XXXX 02中复制一个)
将普通形态单位和变化形态单位全部变成<UnitCId>。(这是物品技能,别和上边混了)
翻到物品。
------------------------------------------------------------------
需要
burrow <UnitAId>(从 burrow XXXX中复制)
将技能改为burrow <UnitAId> 02
burrow <UnitAId> deadbody <UnitBId>(从 burrow XXXX deadbody YYYY中复制)
将技能改为burrow <UnitAId> deadbody <UnitBId> 02
burrow UsableUnit <UnitCId>(从 burrow UsableUnit XXXX中复制)
将技能改为burrow UsableUnit <UnitCId> 02
好了……准备工作完成了额…………
接下来还有呢…………
翻到触发:
RegisterTypeData
里面有以下函数:
[jass]
function RegisterUnitTypeData_Missile takes integer id, string missileart, real missilespeed, boolean missileHoming, real missilek returns nothing
function RegisterUnitTypeData_MissileHeight takes integer id, real attack, real attacked returns nothing
function RegisterUnitTypeData_Attack takes integer id, real beforeattack, string attacksound, string attackedsound returns nothing
function RegisterUnitTypeData_Usable takes integer id returns nothing
function RegisterUnitTypeData_SeerId takes integer id, integer seerid returns nothing
function RegisterUnitTypeData_Burrow takes integer id, integer id_01, integer id_02_it returns nothing
function RegisterUnitTypeData_DeadBody takes integer id, integer db_id, boolean havedecay returns nothing
function RegisterUnitTypeData_Collision takes integer id, real collision returns nothing
function RegisterUnitTypeData_Null takes integer id returns nothing
function RegisterUnitTypeData_Destructable takes integer id returns nothing
[/jass]
(*^__^*) 嘻嘻……
先看范例:
[jass]
call RegisterUnitTypeData_Burrow( 'hwt2', 'A00C', 'I002' )
call RegisterUnitTypeData_Missile( 'hwt2', "Abilities\\\\Weapons\\\\WaterElementalMissile\\\\WaterElementalMissile.mdl", 1300.0, true, 0.3 )
call RegisterUnitTypeData_Attack( 'hwt2', 0.4, "WaterElementalMissile\\\\WaterElementalMissile", "Flesh" )
call RegisterUnitTypeData_MissileHeight( 'hwt2', 120.0, 60.0 )
call RegisterUnitTypeData_SeerId( 'hwt2', 'h002' )
call RegisterUnitTypeData_DeadBody( 'hwt2', 'h005', false )
call RegisterUnitTypeData_Burrow( 'h005', 'A00K', 'I008' )
call RegisterUnitTypeData_Collision( 'hwt2', 32.0 )
//hwt2
[/jass]
首先是Burrow()
第一个是UnitAId,第二个是burrow <UnitAId> 01(技能),第三个是burrow <UnitAId>(物品)
Missile()是关于投射物的。近战单位就不用这个了。
第一个是UnitAId,第二个是原投射物的路径,第三个投射物速率,第四个是否追踪目标,第五个为弧度(和魔兽默认的不一样……应该是*2吧……)
Attack()是关于攻击和攻击音效的。
第一个是UnitAId,第二个是攻击伤害点(前摇),第三个是音效路径(远程在声音编辑器里找,截取和范例一样的路径部分copy过来),第四个是原装甲类型。
MissileHeight()是关于投射物高度的。
第一个是UnitAId,第二个是投射物的初高度(近战单位不用这个),第三个是投射物以此单位为目标时的末高度。这两个可以参考“射弹碰撞偏移——Z”和“射弹偏移——Z”
SeerId()是关于视野马甲的。
第一个是UnitAId,第二个是UnitCId。
DeadBody()是关于尸体的。
第一个是UnitAId,第二个是UnitBId,第三个是是否有腐化。
与第一个Burrow不同的是,下面的Burrow是注册的是UnitBId的东西。
第一个是UnitBId,第二个是burrow <UnitAId> deadbody <UnitBId> 01(技能),第三个是burrow <UnitAId> deadbody <UnitBId>(物品)
Collision()这是关于碰撞的。
第一个是UnitAId,第二个是碰撞体积。
然后就完事了…………
这还只是一个单位类型UnitA…………O(∩_∩)O哈哈~
要把全地图的单位全都注册一遍……哦哈哈~
==================================
关于如何创建/切换位面。
创建位面:
World.create( force Players )
返回一个位面,在这个位面中Players中的玩家会被视为在这个位面存在。
切换位面:
GetUser( Player ).change( World ToWorld )
这个玩家会被转移到ToWorld这个位面里。
==================================
关于物品:
首先将原物品的模型改为“.mdl”,即空模型。
再copy一个新的“卡嘉长笛 (ItemTest)”(单位-建筑里的)
将名字改为物品的名字。
模型改为物品的模型。
然后翻到RegisterEffectTextTag......这个触发里。
按照我的样子
注册(物品本身,物品马甲单位的ID,所属的世界)
(PS:演示中的世界是这样的:
玩家1和玩家4的世界是先创建的,所以编号为1,而另一个世界的编号为2)
==================================
创建(可以在任何时候创建/删除)请使用RegisterXXXXX(......)
删除的话,call <struct>.Delete()+RemoveEffect/.......即可。
关于在RegisterEffectTextTag...这个触发里的其他struct的说明:
Effect:
[jass]function RegisterEffect takes real x, real y, widget target, string attach returns Effect[/jass]
如果是绑定单位的话,那么直接设置后两个参数。
如果是绑定点的话,设置前两个参数。
当4个参数全部存在时,优先取后两个参数。
不同步的部分:
Register_EffectModels
这个。在对应的位面的序号-1的位置(比如在世界1里是“A”,那么set RegisterEffectModels[0] = "A"这样),设置这个Effect在这个位面的下的model的路径。
texttag
weather
fog
这三个全部都是用Register_XXXXXShow来决定
在对应的位面的序号-1的位置,设置这个XXXXX在这个位面的下能否显示。
[jass]function RegisterTextTag takes texttag t returns TextTag
function RegisterWeather takes weathereffect t returns Weather
function RegisterFogModifier takes fogmodifier t returns FogModifier[/jass]
这三个类型的注册函数就不解释了吧………………(就是被注册的对象本身……)
lightning
[jass]function RegisterLightning takes lightning t returns Lightning[/jass]
不解释了。
用这个Register_LightningAlphas(位面对应的index不变)
来决定在各个位面下lightning的alpha值(255为不透明,0为完全透明)
---------------------------------
关于在RegisterTerrain...这个触发里的其他struct的说明:
destructable
[jass]function RegisterDestructable takes real x, real y, real z, real sizex, real sizey, real sizez, integer red, integer green, integer blue, integer alpha, real facing, boolean IsRemove returns Destructable[/jass]
挺长的……但是我相信应该都能看懂的(IsRemove,是指在切换位面时,是否直接RemoveMajia, RecreateMajia,来达到没有effect死亡延迟的效果)。
同Effect_Models的一样。
用Register_DestructableModels来决定在各个位面下的model的路径。
terrain(地形纹理)
terrainXXXXX
.........
TerrainHeight是指地形高度。
其他的自己想去吧…………
这些struct的注册函数我就不说了,自己看看吧。
Terrain用Register_TerrainIds
来确定在不同位面下的Terrain的纹理。
(貌似以下使用Flush来进行删除动作)
TerrainHeight用
Register_TerrainDeformRadiuss
Register_TerrainDeformDepths
TerrainCrater用
Register_TerrainDeformRadiuss
Register_TerrainDeformDepths
TerrainRipple用
Register_TerrainDeformStartRadiuss
Register_TerrainDeformEndRadiuss
Register_TerrainDeformPeriods
Register_TerrainDeformWidths
Register_TerrainDeformDepths
TerrainWave用:
Register_TerrainDeformToXs
Register_TerrainDeformToYs
Register_TerrainDeformTrailDelays
Register_TerrainDeformRadiuss
Register_TerrainDeformDepths
TerrainRandom用:
Register_TerrainDeformMinDeltas
Register_TerrainDeformMaxDeltas
Register_TerrainDeformUpdateIntervals
Register_TerrainDeformRadiuss
==================================
这样就是现在能实现的东西了…………感觉其实还是很少的说………………
关于在游戏进行中能够更改的数据:
单位方面:
GetUnitUnit( unit ),可以获得我的单位数据类
[jass]
string MissileArt//投射物图像
real MissileSpeed//投射物速度
real MissileHeight//投射物初高度
boolean MissileHoming//投射物是否跟踪
real MissileAttackedHeight//投射物末高度
real MissileBefore//攻击前摇
real MissileK//投射物弧度
string AttackS//攻击音效
string AttackedS//被攻击音效(只对被近战攻击有效)
[/jass]
如果要更改,
[jass]set GetUnitUnit( unit ).MissileArt = "XXXX"[/jass]
(仅仅举例而已)
这样既可。
如果要把一个单位转成另一个玩家手里,
[jass]call User.Change( theunit, toplayer, changecolor )[/jass]
更改单位的坐标:
[jass]call GetUnitUnit( unit ).SetX( x )
call GetUnitUnit( unit ).SetY( y )
call GetUnitUnit( unit ).SetPosition( x, y )//这个的效果和SetUnitPosition的效果一样……[/jass]
另一种方法是,在你设置了单位的坐标后,
[jass]call GetUnitUnit( unit ).updateXY()[/jass]
禁止事项:
关于一切隐身和钻地什么的……在我明确使用方法之前绝对不能动。
SetUnitPathing()最好别用。因为很可能失效
攻击不能用弹射和溅射。
所有技能全部用模拟的。
…………好吧……很恶心的东西对不?
貌似就没有了…………
------------------------------------
物品方面:
GetItemItem( item )获得Item数据类
如果要直接转换到另一个位面:
[jass]call GetItemItem( item ).updateWorld( newworld )[/jass]
更改物品的坐标:
[jass]call GetItemItem( item ).SetPosition( x, y )[/jass]
另一种方法是,在你设置了物品的坐标后,
[jass]call GetItemItem( item ).updateXY()[/jass]
Effect、TextTag、 Weather:
[jass]call Effect/TextTag/Weather.updateModel/Show( World target, model/show )[/jass]
这里的Target是指要对于这个Effect/...要改变的对应的位面下的数据。
Destructable
Terrain
Terrain.....
这些都有对应的更改数据的method:
updateId
updateModel
updateRadius
updateDepth
……………………
对于玩家转换位面,有两个method:
call GetUser( player ).change( toworld )
call GetUser( player ).change_Wait( toworld )
上面那个是直接转换。
下面的是有timer的0.0秒延迟的转换,可以不考虑触发执行字节数的影响。
World是终端,无法改变数据。
----------------------
判断两个单位在同一位面里:
[jass]IsUnitsInSameWorld( u1, u2 )[/jass]
两个玩家在同一位面里:
[jass]GetUser( player1 ).Place == GetUser( player2 ).Place[/jass]
一个单位一个玩家在同一位面里:
[jass]GetUnitUnit( unit ).GetPlace == GetUser( player ).Place[/jass] |
|