找回密码
 点一下
查看: 13295|回复: 41

位面消隐正式v1.0版!(附超长的移植/注意事项手册)

[复制链接]
发表于 2009-9-14 21:35:07 | 显示全部楼层 |阅读模式
………………
正式版的介绍:

因为kook大人的鼎力相助,所以现在终于完成了联机测试
…………居然不可思议的一次通过了………………我的天哪…………

相比v0.01更改了两个方面(其实根本没什么大不了的):
物品不再显示血条。
嗯……某个小小的Bug。

移植手册…………天哪………………等等…………我写写…………

使用WE:WEHelper(在论坛里有的那个http://bbs.islga.org/read-htm-tid-15253-keyword-WEHelper.html

此系统的效果:
在一个“位面”里的玩家和在另一个“位面”里的玩家看到的东西是不一样的。
比如位面1里,玩家1看到的是Footman在互砍,而位面2里则可能是一堆食人魔(在同一坐标上)…………

最多支持玩家数:6个(演示里是玩家1-6)。
最多支持位面数量:8190(演示中只有2个)个。
最多支持单位/物品/Effect......数量:8190个。

这只是简述效果。
具体的可以参见此贴:
好久没办了~~那么综合与系统区第N届官方活动——位面消隐技术~~

截图4张:
PIC1.jpg
PIC2.jpg
PIC3.jpg
PIC4.jpg

TheSystem_v1.0.w3x

226 KB, 下载次数: 483

 楼主| 发表于 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]
回复

使用道具 举报

 楼主| 发表于 2009-9-14 21:42:19 | 显示全部楼层
回复

使用道具 举报

发表于 2009-9-14 22:26:19 | 显示全部楼层
膜拜啊……
可惜我是1.24b的,进不去……
回复

使用道具 举报

发表于 2009-9-14 22:28:00 | 显示全部楼层
加精罢。
终于看到正品了,非常好非常好。小血辛苦了。
回复

使用道具 举报

发表于 2009-9-14 22:28:11 | 显示全部楼层
膜拜……
回复

使用道具 举报

发表于 2009-9-14 23:07:34 | 显示全部楼层
实际上我一直没有搞明白为什么要设置0视野……
回复

使用道具 举报

 楼主| 发表于 2009-9-15 06:27:43 | 显示全部楼层
…………………………(*^__^*) 嘻嘻……
因为看到隐身单位需要视野而已~
回复

使用道具 举报

发表于 2009-9-15 07:19:58 | 显示全部楼层
单位自己有视野不行么?
回复

使用道具 举报

 楼主| 发表于 2009-9-15 18:01:17 | 显示全部楼层
……………………那就是你自己去想为什么啦~
回复

使用道具 举报

发表于 2009-9-15 18:02:33 | 显示全部楼层
呜呜……
最近大脑混乱了
什么也不知道……
回复

使用道具 举报

发表于 2009-9-15 18:02:45 | 显示全部楼层
哇,苦工……抱走……
回复

使用道具 举报

发表于 2009-9-15 19:36:59 | 显示全部楼层
都是看不懂的东西
回复

使用道具 举报

 楼主| 发表于 2009-9-15 19:49:19 | 显示全部楼层
………………学了VJ就知道了………………
当然还得知道原理…………
回复

使用道具 举报

发表于 2009-9-15 22:02:42 | 显示全部楼层
借位置传个东西
QQ截图未命名.jpg
回复

使用道具 举报

 楼主| 发表于 2009-9-16 06:18:06 | 显示全部楼层
……………………我真想砍掉LS………………太郁闷了………………投到水区就是这下场吗?
被歪楼了…………
下面的不许歪楼。
全部无视14L。
回复

使用道具 举报

发表于 2009-9-16 08:29:08 | 显示全部楼层
拿来存图的确让人很不爽。
我打算拿这个系统做个图如何。
回复

使用道具 举报

发表于 2009-9-16 08:57:34 | 显示全部楼层
先留个言 预存下帖子 起床后再来看
回复

使用道具 举报

发表于 2009-9-16 09:47:03 | 显示全部楼层
话说原理 我上次问你 你说太麻烦 牵扯太多... 没告诉来着
操作手册好长啊 打算移植到地图里当个BOSS玩
回复

使用道具 举报

发表于 2009-9-16 09:57:37 | 显示全部楼层
阿对,比如阿瓦隆之类的boss。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-23 10:33 , Processed in 0.225418 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表