搜索
查看: 7896|回复: 8

公布CS1.6记分牌插件的源代码,大家研究研究怎么修复BUG?

[复制链接]
发表于 2010-12-23 01:12:34 | 显示全部楼层 |阅读模式 来自 中国–湖北–武汉
本帖最后由 Osker Lee 于 2010-12-23 14:04 编辑

由于Kone发布的CS1.6记分牌插件(score.amxx)没有公开源代码,而且这个人最近好像也不在MOD论坛活动了,所以找他要源代码也不太现实。求人不如求己,最近折腾了两天,结合CS1.6广告牌插件和普通记分牌插件的源代码,我自己写了一个记分牌插件,和Kone发布的记分牌插件差不多。之前Ethan也发布过一个记分牌插件,但我的这个记分牌插件的源代码与Ethan的不一样,对比一下我和他的源代码就知道了。他那个是以spr的形式显示图像的,我的则是以tga的形式显示的,二者原理不一样。

但是我的这个插件和Kone的一样都存在之前的BUG:即与CS系统自身的杀敌提示冲突,导致杀敌数据无法在游戏屏幕的右边显示。(如图,插件是用AMXMODX1.8.1和1024*768这个游戏分辨率进行测试的。)

下面我公布一下插件和源代码,大家一块研究研究,集所有人的智慧,群策群力,我相信总会把BUG修复的。
#include <amxmodx>
#include <amxmisc>

#define PLUGIN_NAME "Team Score"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "Osker Lee"

new iTeamScore[2]

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
        register_event("HLTV", "NewRound", "a", "1=0", "2=0")
        register_event("TeamScore", "Event_TeamScore", "a" )
}

public plugin_precache()
{
        precache_generic("gfx/career/round_corner_nw.tga")
        precache_generic("resource/TutorScheme.res")
        precache_generic("resource/UI/TutorTextWindow.res")
}

public Event_TeamScore()
{
        new iTeam[2]
        read_data(1, iTeam, 1)
        iTeamScore[(iTeam[0]=='C')?1:0] = read_data(2)
        return PLUGIN_CONTINUE
}

public NewRound()
{
        for (new id = 1; id < get_maxplayers(); id++)
        {
                static iMsg[128]
                format(iMsg, 127, "^n%d                                      %d", iTeamScore[0], iTeamScore[1])
                Create_Show(id, iMsg)
        }
}

stock Create_Show(id, iMsg[])
{
        message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("TutorText"), {0, 0, 0}, id)
        write_string(iMsg)
        write_byte(0)
        write_short(0)
        write_short(0)
        message_end()
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
发表于 2010-12-23 11:16:07 | 显示全部楼层 来自 中国–四川–成都
本帖最后由 homework 于 2010-12-23 11:26 编辑

沙发,顶起,虽然我不懂源码,但是楼主的共享精神绝对值得称赞,谢谢。。。

测试结果 如图:


所有文件都放在服务器端的,客户端进去不下载相关文件,是不是要把TutorScheme.res这些文件放在客户端相应目录呢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

发表于 2010-12-23 11:38:20 | 显示全部楼层 来自 中国–上海–上海–松江区
由于我玩1.5,因此下面HUD显示不冲突未测试....
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Team Score"
#define VERSION "1.0"
#define AUTHOR "Osker Lee"

new ct_score, terrorist_score
new g_MsgTutor
new const g_TutorPrecache[][] = { "gfx/career/round_corner_nw.tga", "resource/TutorScheme.res", "resource/UI/TutorTextWindow.res" }

new g_MyMsgSync

public plugin_init() {
        register_plugin(PLUGIN,VERSION,AUTHOR)
        register_event("TeamScore","team_score", "a")
        set_task(1.0,"score_round",_,_,_,"b")
        register_event("HLTV", "NewRound", "a", "1=0", "2=0")
        g_MsgTutor = get_user_msgid("TutorText")
        g_MyMsgSync = CreateHudSyncObj()  
}
public plugin_precache()
{
        new i
        for(i = 0; i < sizeof g_TutorPrecache; i++)  
        {        
        precache_generic(g_TutorPrecache)
        }
}
public score_round()
{
        set_hudmessage(255, 255, 255, -1.0, 0.02, 0, 0.5, 2.0, 0.08, 2.0, -1);
                    ShowSyncHudMsg(0,g_MyMsgSync,"%d                                ", terrorist_score);
                 
        set_hudmessage(255, 255, 255, -1.0, 0.02, 0, 0.5, 2.0, 0.08, 2.0, -1);
        ShowSyncHudMsg(0,g_MyMsgSync,"                           %d", ct_score);
}

public NewRound()
{
        for (new id = 1; id < get_maxplayers(); id++)
{
        new Text[ 100 ]
        MakeTutor(id, Text)
        return PLUGIN_CONTINUE   
}        
        return PLUGIN_CONTINUE   
}
stock MakeTutor(id,Text[]){
      
        message_begin(MSG_ONE_UNRELIABLE,g_MsgTutor,_,id)
        write_string(Text)
        write_byte(0)
        write_short(0)
        write_short(0)
        message_end()
}
public tutorek(id)
{
        new Text[ 100 ]
        MakeTutor(id, Text)
        return PLUGIN_CONTINUE   
}
public team_score()
        {
        new team[32];
        read_data(1,team,31);
        if (equal(team,"CT"))
        {
        ct_score = read_data(2);
        }
        else if (equal(team,"TERRORIST"))
        {
        terrorist_score = read_data(2);
        }
}
回复

使用道具 举报

发表于 2010-12-23 13:49:59 | 显示全部楼层 来自 中国–广东–广州
set_hudmessage使用不科学
没必要封开两个显示道,这样只会浪费,显示道只有4个,只要不重复即可
不过你说的那种效果图暂不清楚


set_hudmessage - Sets the format for a HUD message

Syntax:
     set_hudmessage ( red=200, green=100, blue=0, Float:x=-1.0, Float:y=0.35, effects=0, Float:fxtime=6.0, Float:holdtime=12.0, Float:fadeintime=0.1, Float:fadeouttime=0.2, channel=4 )
Type:
    Native
Notes:
There are 4 hud channels pr player. This means you can send a 2 diffrent messages to player a & b via channel 1.

Use index 0 if you want to send a message to everyone.
Use show_hudmessage to show the message.

effects types:
0 = fade in/fade out
1 = flickery credits
2 = write out (training room)

Plugins that can be helpfull.
This plugin allows you to easly change the pos/color of a hud message:
http://forums.alliedmods.net/showthread.php?p=19439

Note - as of AMX Mod X 1.61, setting the channel to -1 will automatically choose the next available HUD channel for a player.
回复

使用道具 举报

 楼主| 发表于 2010-12-23 13:57:02 | 显示全部楼层 来自 中国–湖北–武汉
本帖最后由 Osker Lee 于 2010-12-23 14:14 编辑

嗯,我又精简了一下,取消set_hudmessage改用format了,这下效果和Kone的记分牌插件一样了,参见一楼的源代码。
回复

使用道具 举报

 楼主| 发表于 2010-12-23 17:04:17 | 显示全部楼层 来自 中国–湖北–武汉
CSOL的记分牌就不存在这个BUG,不知道是用插件还是第三方程序实现的,还得继续研究研究。
回复

使用道具 举报

发表于 2010-12-23 17:07:21 | 显示全部楼层 来自 中国–广东–广州
CSOL的记分牌就不存在这个BUG,不知道是用插件还是第三方程序实现的,还得继续研究研究。
Osker Lee 发表于 2010-12-23 17:04

我看不像是AMXX的问题
回复

使用道具 举报

发表于 2012-10-5 06:59:14 | 显示全部楼层 来自 中国–江西–赣州–南康区
Lz已经很厉害了,加qq,互加736119146
回复

使用道具 举报

发表于 2013-11-15 10:53:27 | 显示全部楼层 来自 中国–辽宁–鞍山
不好修复啊。
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

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