|
最近好象有人说了一句话,让我彻底沸腾起来了。就先做了个JASS技能(有详解):
我做这个技能的目的是为了最初级的不会JASS的人准备的,如果觉得太简单了,我以后还会发新的JASS技能上来
效果:
对单位使用风暴之锤时
伤害公式这样计算:
获得 【施法单位的 力量】
乘以 风暴之锤的等级
乘以 250
减去 【目标单位的 力量】*15的数值
乘以 随机数:1到1.33
并把这个伤害用漂浮文字显示出来。
怎么用JASS来做呢??
首先,我的Trigger是:
[trigger]
对战初始化
事件
单位 - 山丘之王 0000 <预设> 发动技能效果
条件
动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
(施放技能) 等于 风暴之锤
Then - 动作
自定义代码: call Bolt_Spell(GetTriggerUnit(),GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId()),GetSpellTargetUnit())
Else - 动作
[/trigger]
那么,也就是说:
单位在释放风暴之锤时,会调用一个Bolt_Spell的函数,并传递给了他这些:
[codes=jass]
GetTriggerUnit()
翻译成触发器就是: 触发单位 的意思
GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId())
翻译成触发器就是
获得单位的技能等级(触发单位,释放的技能ID)
GetSpellTargetUnit()
翻译成触发器就是: 技能释放目标 的意思
[/codes]
恩恩?这些有什么用呢?那么看看Bolt_Spell的原型吧:
[codes=jass]
function Bolt_Spell takes unit u,integer ability_level,unit target returns nothing
Bolt_Spell的开始,takes就是刚刚给他传递的
GetTriggerUnit()
GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId())
GetSpellTargetUnit()这些数据
local real damage = Bolt_GetDamage(u,ability_level,target)
声明一个 实数 类型的局部变量
设置 这个变量 为 Bolt_GetDamage,并传递给了Bolt_GetDamage这些:
u(GetTriggerUnit())
ability_level(GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId()))
target(GetSpellTargetUnit()这些数据)
最后获得了这个函数返回的数据
call UnitDamageTargetBJ( u, target, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
翻译成触发器为:
单位——伤害目标
单位 - 命令 (u) 对 (target) 造成 damage 点伤害,攻击类型: 法术 伤害类型: 普通
call CreateTextTagUnitBJ( I2S(R2I(damage)), target, 4, 10, 100, 0, 0, 0 )
翻译成触发器为:
漂浮文字——创建漂浮文字(普通单位)
漂浮文字 - 创建漂浮文字:(转换 (转换 damage 为整数) 为字符串) 在 target 头顶Z轴偏移 4.00 处,字体大小: 10.00 ,颜色值:(100.00%, 0.00%, 0.00%) ,透明度: 0.00%
call SetTextTagVelocityBJ( bj_lastCreatedTextTag, 64, GetUnitFacing(u) ) //bj_lastCreateTextTag是 【最后创建的漂浮文字】
翻译成触发器为:
漂浮文字——设置速率
漂浮文字 - 设置 (最后创建的漂浮文字) 的移动速率为 64.00 ,方向为 ((u) 的面向角度) 度
call SetTextTagPermanent( bj_lastCreatedTextTag, false )
翻译成触发器为:
漂浮文字——设置永久性
漂浮文字 - 设置 (最后创建的漂浮文字) : 禁用 永久显示.
call SetTextTagLifespan( bj_lastCreatedTextTag, 5 )
翻译成触发器为:
漂浮文字——设置生命周期
漂浮文字 - 设置 (最后创建的漂浮文字) 的生命周期为 5.00 秒
call SetTextTagFadepoint( bj_lastCreatedTextTag, 4 )
翻译成触发器为:
漂浮文字——设置消逝时间点
漂浮文字 - 设置 (最后创建的漂浮文字) 的消逝时间点为 4.00 秒
endfunction
[/codes]
先消化一下~~~~~
……………………
……………………
……………………
……………………
……………………
我们来梳理一下:
1.单位释放 【风暴之锤】
2.调用Bolt_Spell函数
3.声明一个 实数 类型的局部变量damage并设置 这个变量 为 Bolt_GetDamage(这个暂且不谈)
4.命令 释放单位 对 技能释放目标 造成 damage 点伤害,攻击类型: 法术 伤害类型: 普通
5.创建漂浮文字并设置一些属性
请仔细的再看一遍
…………
…………
…………
…………
…………
那么,最后疑点——Bolt_GetDamage我们来看看吧
[codes=jass]
function Bolt_GetDamage takes unit u,integer ability_level,unit target returns real
Bolt_Spell的开始,takes就是刚刚给他传递的
u(GetTriggerUnit())
ability_level(GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId()))
target(GetSpellTargetUnit()这些数据)
最后返回一个 实数 类型的值
local real damage = I2R(GetHeroStr(u,true))*ability_level
声明一个 实数 类型的局部变量damage
设置damage为 转换 获得(u)的英雄力量 为实数 再乘以 单位的【风暴之锤】的技能
set damage = (damage*250)-(I2R(GetHeroStr(target,true))*15)
设置damage为 damage*250 再减去 (转换 获得(target)的英雄力量 为实数 再乘以 15)
set damage = damage*GetRandomReal(1,1.33)
设置damage为 damage*随机数1到1.33
return damage
返回damage
endfunction
[/codes]
这就是
“获得 【施法单位的 力量】
乘以 风暴之锤的等级
乘以 250
减去 【目标单位的 力量】*15的数值
乘以 随机数:1到1.33。”
这个伤害计算的公式了。
这个技能就完成了!!
怎么样,自己动手做一做?
作业:
把 霜冻闪电(伪·锤子)的伤害公式改成:
获得 【施法单位的 力量】+【施法单位的 敏捷】的和 除以2
乘以 霜冻闪电的等级
乘以 25
减去 【目标单位的 智力】* 随机数:2到3.33 的数值
并显示这个伤害。
好了…………总算写完了……………………
不要说我哦~~
PS:补发地图: |
评分
-
查看全部评分
|