[CS2/教程]如何修改段位位置的图标与硬币位置的图标 趣味内容 游戏性拓展 通用内容 服务器管理 数据统计 开发者相关

华仔 一级用户组 1天前 90

很多社区在服务器内修改了记分牌段位位置的图标用于显示VIP等信息

像这样:

有些小伙伴可能很好奇这是如何做到的呢?

1.首先修改段位位置的图标,我们需要使用CS2内部设置段位图标的方法

也就是 player.CompetitiveRankType

11 是 优先模式段位图标 

12 是 竞技段位图标 与 自定图标

7是 搭档模式图标

例如 player.CompetitiveRankType = 12;

为了正常显示想要的图标还要设置胜利场次

设置  player.CompetitiveWins

如果胜利场次不足则会显示需求场次的图标

所以为了正确设置自己想要的图标尽量设置的大一些

例如 player.CompetitiveWins = 10;

接下来要设置使用的当前图标名称(关键)

player.CompetitiveRanking

player.CompetitiveRanking 的值与段位文件有关

例如 你想设置cs2内部竞技段位 黄金2

你可以设置 

player.CompetitiveWins = 10; //设置胜场超过需要胜场 不然则会显示需要胜场 X
player.CompetitiveRankType = 12; //使用竞技段位文件夹
player.CompetitiveRanking = 8; //CS2一共有 18个段位 第8个段位就是黄金新星2 
Utilities.SetStateChanged(player, "CCSPlayerController", "m_iCompetitiveRankType"); //最后修改至UI

注意!:由于引擎会覆盖修改,所以需要在OnTick中设置 (或者使用Timer未测试)

全部代码

//修改段位图标为黄金新星2 
RegisterListener<Listeners.OnTick>(() =>
{
    Utilities.GetPlayers().ForEach(player =>
    {
        //这里的示例是修改所有玩家,可以根据自己的逻辑区分应该修改谁
        //例如 if(!isvip(player)) return;

        player.CompetitiveWins = 10;
        player.CompetitiveRankType = 12; 
        player.CompetitiveRanking = 8;
        Utilities.SetStateChanged(player, "CCSPlayerController", "m_iCompetitiveRankType");
    });
});

2.接下来是如何修改自定义图标

根据上面的原理 12是 指向竞技段位文件夹 

也就是 panorama\images\icons\skillgroups

如果你想设置自己的自定义段位图片例如 SVIP VIP等

你需要在 panorama\images\icons\skillgroups 中

根据段位原版段位图标的文件名格式制作自己的图标文件

并上传到创意工坊使用 

图标格式是svg文件 (上传后将自动打包成VSVG 文件 未测试)

例如 skillgroup10000.svg 上传后变为 skillgroup10000.vsvg_c

注意:文件名格式必须为前缀 skillgroup 后面的编号可以自己定义

之后使用

RegisterListener<Listeners.OnTick>(() =>
{
    Utilities.GetPlayers().ForEach(player =>
    {
        //这里的示例是修改所有玩家,可以根据自己的逻辑区分应该修改谁
        //例如 if(!isvip(player)) return;

        player.CompetitiveWins = 10;
        player.CompetitiveRankType = 12; 
        player.CompetitiveRanking = 10000; //这里填写  skillgroup10000.vsvg_c 中的 10000
        Utilities.SetStateChanged(player, "CCSPlayerController", "m_iCompetitiveRankType");
    });
});

这样你就把 段位图标改成了 自己想要的图片

3.修改硬币位置的图标 

需要修改 InventoryServices.Rank[5] = (MedalRank_t)  

其中 InventoryServices.Rank[5] = (MedalRank_t)  是固定格式

游戏内的默认硬币图片无法修改至UI

必须将自定义图标上传至创意工坊 

由于创意工坊机制,同样路径的文件优先读取创意工坊文件


所以本质上是用创意工坊文件 覆盖了游戏原版硬币图标以达到替换的作用

找到游戏原版VPK


查看游戏内的原版硬币编号 使用游戏内的硬币编号 来设置硬币位置的图片

这些硬币的编号是有限的 用一个少一个 

将自己制作的符合格式的图片上传至创意工坊

图片的路径必须与硬币编号内的硬编码路径一致,名称一致

才能正确设置自定义硬币图片

例如 想要使用1054号硬币 找到编号1054的这一栏

上面标注了 硬币图片的路径和图片前缀名称


接下来我们就可以在 panorama/images/econ/status_icons/ 路径中找到

panorama/images/econ/status_icons/maptoken_subzero_small_png.vtex_c

其中 maptoken_subzero_small_png 就是硬币显示的小图标 

接下来 将你的自定义图标按照这个图标的大小 制作一份

上传至创意工坊 并且路径与文件名

一定要与 panorama/images/econ/status_icons/maptoken_subzero_small_png 一致

具体格式请参考官方文档之类的 制作符合的 图片格式


例如创意工坊中 其他人制作的 国旗图标 的文件

这个创意工坊的图片路径严格的按照了官方文件的路径与命名

经过查看他在1060号硬币上使用了国旗

也就是将国旗的名称设置为了1060号上需要的图片路径名称

//修改硬币图标不需要 ontick 可以使用命令 或者队伍切换等等事件设置
[GameEventHandler]
public HookResult OnEventPlayerTeam(EventPlayerTeam @event, GameEventInfo info)
{
    var player = @event.Userid;
    if (player == null || !player.IsValid)
    {
        return HookResult.Continue;
    }

    AddTimer(0.1f, () =>
    {
        player.InventoryServices.Rank[5] = (MedalRank_t) 1060;
        Utilities.SetStateChanged(player, "CCSPlayerController", "m_pInventoryServices");
    });

    return HookResult.Continue;
}

之后进入游戏切换队伍 我的硬币图标就变成了国旗

以上就是关于设置自定义段位图标与自定义硬币图标的教程了 能帮到你的话就点个赞留下评论

题外话:
因为段位图标是在ontick内设置
,可以制作动态段位的图标
既然都用ontick,那肯定要做的更炫酷一点~

int frame = 0;
float elapsed = 0f;
float frameInterval = 0.5f; // 每0.5秒切换一帧
int[] iconFrames = new int[] { 10000, 10001, 10002 }; // 轮播段位图标ID
public override void Load(bool hotReload)
{
    RegisterListener<Listeners.OnTick>(() =>
    {
        elapsed += Server.TickInterval;
        if (elapsed >= frameInterval)
        {
            elapsed = 0f;
            frame = (frame + 1) % iconFrames.Length;
        }
        Utilities.GetPlayers().ForEach(player =>
        {
            player.CompetitiveWins = 10;
            player.CompetitiveRankType = 12;
            player.CompetitiveRanking = iconFrames[frame];  // 动态轮播
            Utilities.SetStateChanged(player, "CCSPlayerController", "m_iCompetitiveRankType");
        });

    });
}

 

 



注意!! : V社官方声明,不允许玩家修改记分牌项目,(硬币或段位等)

使用可能会造成服务器封禁风险


使用可能需要将  Cssharp框架配置 core.json 内


FollowCS2ServerGuidelines  改为 false 


是否使用请自行斟酌


CSGO插件分享-申明 1、本网站名称:CSGO插件分享-中文站  网址:https://bbs.csgocn.net
2、本站的宗旨在于为CSGO玩家提供一个插件分享的中文资源平台,多数插件来源于SourceMod论坛,并配以中文介绍和安装教程。
3、欢迎有能力的朋友共享有趣的CSGO插件资源。
4、本站资源大多为百度网盘,如发现链接失效,可以点: 这里进行反馈,我们会第一时间更新。
最新回复 (3)
返回