找回密码
 点一下
查看: 1704|回复: 5

请问如何在触发器中修改英雄属性(力量,敏捷,智力)

[复制链接]
发表于 2015-11-30 18:13:35 | 显示全部楼层 |阅读模式
请问如何在触发器中或代码中修改英雄的属性?
 楼主| 发表于 2015-11-30 22:55:26 | 显示全部楼层
嗯, 获取敏捷是用UnitBehaviorCount (u, "AttAgi")获取, 修改呢
回复

使用道具 举报

 楼主| 发表于 2015-12-1 10:17:17 | 显示全部楼层
也许是通过CatalogFieldValueGet ,CatalogFieldValueModify 读取修改 Hero Balance?
回复

使用道具 举报

 楼主| 发表于 2015-12-1 10:47:59 | 显示全部楼层
本帖最后由 jim 于 2015-12-1 15:06 编辑

1.应该是直接用CatalogFieldValueModify修改单位的敏捷行为,就能修改敏捷的吧...

2.先从用户数据获取对应英雄的主属性,然后从数据模板获取单位的对应属性层数
回复

使用道具 举报

 楼主| 发表于 2015-12-1 22:02:50 | 显示全部楼层
果然要看源码啊,
int level=UnitXPGetCurrentLevel(u,"AHer")-1;
    string id=UnitGetType(u);
    int STR=UserDataGetInt("HeroBalance",id,"STR",1);
    int AGI=UserDataGetInt("HeroBalance",id,"AGI",1);
    int INT=UserDataGetInt("HeroBalance",id,"INT",1);
    fixed STRplus=UserDataGetFixed("HeroBalance",id,"STRplus",1);
    fixed AGIplus=UserDataGetFixed("HeroBalance",id,"AGIplus",1);
    fixed INTplus=UserDataGetFixed("HeroBalance",id,"INTplus",1);
    int S=STR+FloorI(STRplus*level+0.001);
    int A=AGI+FloorI(AGIplus*level+0.001);
    int I=INT+FloorI(INTplus*level+0.001);
    GAw3_SetUnitAtt(u,"Str",S);
    GAw3_SetUnitAtt(u,"Agi",A);
    GAw3_SetUnitAtt(u,"Int",I);

一目了然。。。。
回复

使用道具 举报

 楼主| 发表于 2015-12-1 23:00:55 | 显示全部楼层
本帖最后由 jim 于 2015-12-2 11:10 编辑

最后贴上修改属性的代码

void modify(unit u){
        string id;
    int AGI;
    int level;
    fixed AGIplus;
    int A;
    id=UnitGetType(u);
    AGI=UserDataGetInt("HeroBalance",id,"AGI",1);
    UIDisplayMessage(PlayerGroupAll(), 5, IntToText(AGI));
    AGI+=100;
    UserDataSetInt("HeroBalance",id,"AGI",1, AGI);
    level=UnitXPGetCurrentLevel(u,"AHer")-1;
    AGIplus=UserDataGetFixed("HeroBalance",id,"AGIplus",1);
    A=AGI+FloorI(AGIplus*level+0.001);
    GAw3_SetUnitAtt(u,"Agi",A);

}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 19:54 , Processed in 0.096439 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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