搜索
查看: 9554|回复: 34

[AMXX 带源码] 自定义玩家信息

[复制链接]
发表于 2010-11-14 19:00:25 | 显示全部楼层 |阅读模式 来自 广东广州
本帖最后由 kk阿朗 于 2010-11-22 12:37 编辑

Spec Information


  1. //#define DOD_STATS

  2. #include <amxmodx>
  3. #include <amxmisc>
  4. #include <nvault>

  5. #if defined DOD_STATS
  6. #include <dodstats>
  7. #else
  8. #include <csx>
  9. #endif
  10. #include <ipseeker>

  11. #define PLUGIN "Spec Information"
  12. #define VERSION "1.0"
  13. #define AUTHOR "K.K.Lv"

  14. new g_LevelNum
  15. new g_SyncObj

  16. new Array:g_LevelName
  17. new Array:g_LevelXp

  18. new g_pCvarXpos, g_pCvarYpos, g_pCvarOpColor, g_pCvarVipColor, g_pCvarUserColor, g_pCvarMsg, g_pCvarEffects

  19. new g_iSpecMode[33]
  20. new g_szSign[33][192]

  21. new g_iColor[3][3]

  22. new Float:g_fXpos, Float:g_fYpos

  23. public plugin_init() {
  24.         register_plugin(PLUGIN, VERSION, AUTHOR)

  25.         g_LevelName = ArrayCreate(32)
  26.         g_LevelXp = ArrayCreate(1, 1)

  27.         g_pCvarXpos = register_cvar("amx_xpos", "0.55")
  28.         g_pCvarYpos = register_cvar("amx_ypos", "0.66")
  29.         g_pCvarOpColor = register_cvar("amx_opcolor", "250 250 250")
  30.         g_pCvarVipColor = register_cvar("amx_vipcolor", "250 250 010")
  31.         g_pCvarUserColor = register_cvar("amx_usercolor", "010 250 010")
  32.         g_pCvarEffects = register_cvar("amx_effects", "0")
  33.         g_pCvarMsg = register_cvar("amx_msg", "[%level%]Name:%name% - Flag:%flag% - Rank:%rank%\nCountry:%country% - Area:%area%\nSign:%sign%")

  34.         g_fXpos = get_pcvar_float(g_pCvarXpos)
  35.         g_fYpos = get_pcvar_float(g_pCvarYpos)

  36.         g_SyncObj = CreateHudSyncObj()

  37.         new szColor[3][12], szRGB[3][3][4]
  38.         get_pcvar_string(g_pCvarOpColor, szColor[0], charsmax(szColor[]))
  39.         get_pcvar_string(g_pCvarVipColor, szColor[1], charsmax(szColor[]))
  40.         get_pcvar_string(g_pCvarUserColor, szColor[2], charsmax(szColor[]))
  41.         for (new a = 0; a < 3; a++)
  42.         {
  43.                 parse(szColor[a], szRGB[a][0], charsmax(szRGB[][]), szRGB[a][1], charsmax(szRGB[][]), szRGB[a][2], charsmax(szRGB[][]))
  44.                 g_iColor[a][0] = str_to_num(szRGB[a][0])
  45.                 g_iColor[a][1] = str_to_num(szRGB[a][1])
  46.                 g_iColor[a][2] = str_to_num(szRGB[a][2])
  47.         }
  48.         register_event("TextMsg", "eventSpecMode", "bd", "2&ec_Mod")
  49.         register_event("StatusValue", "eventShowInfo", "bd", "1=2")

  50.         register_clcmd("say", "hookSay")

  51.         new szFileName[64]
  52.         get_localinfo("amxx_configsdir", szFileName, charsmax(szFileName))
  53.         format(szFileName, charsmax(szFileName), "%s/%s", szFileName, "rank_level.ini")
  54.         if (!file_exists(szFileName))
  55.         {
  56.                 pause("a")
  57.         }
  58.         load_settings(szFileName)
  59. }

  60. public eventSpecMode(id)
  61. {
  62.         new szData[12]
  63.         read_data(2, szData, charsmax(szData))
  64.         g_iSpecMode[id] = (szData[10] == '4')
  65.         return PLUGIN_CONTINUE
  66. }

  67. public eventShowInfo(id)
  68. {
  69.         if (g_iSpecMode[id])
  70.         {
  71.                 new iPlayer = read_data(2)
  72.                 if (is_user_connected(iPlayer))
  73.                 {
  74.                         new szName[32], szIp[16], szCountry[45], szArea[64], szMsg[512], iStats[8], iBody[8], szRank[5], iRank = get_user_stats(iPlayer, iStats, iBody)
  75.                         new iEffects = get_pcvar_num(g_pCvarEffects)
  76.                         get_pcvar_string(g_pCvarMsg, szMsg, charsmax(szMsg))
  77.                         get_user_name(iPlayer, szName, charsmax(szName))
  78.                         get_user_ip(iPlayer, szIp, charsmax(szIp))
  79.                         ipseeker2(szIp, szCountry, charsmax(szCountry), 1, szArea, charsmax(szArea), 1)
  80.                         num_to_str(iRank, szRank, charsmax(szRank))
  81.                         replace_all(szMsg, charsmax(szMsg), "\n", "^n")
  82.                         replace_all(szMsg, charsmax(szMsg), "%level%", get_levelname(iPlayer))
  83.                         replace_all(szMsg, charsmax(szMsg), "%name%", szName)
  84.                         replace_all(szMsg, charsmax(szMsg), "%rank%", szRank)
  85.                         replace_all(szMsg, charsmax(szMsg), "%country%", szCountry)
  86.                         replace_all(szMsg, charsmax(szMsg), "%area%", szArea)
  87.                         replace_all(szMsg, charsmax(szMsg), "%flag%", get_flagname(iPlayer))
  88.                         replace_all(szMsg, charsmax(szMsg), "%sign%", g_szSign[iPlayer])
  89.    
  90.                         if (access(iPlayer, ADMIN_IMMUNITY))
  91.                                 set_hudmessage(g_iColor[0][0], g_iColor[0][1], g_iColor[0][2], g_fXpos, g_fYpos, iEffects, _, _, _, _, _)
  92.                         else if (access(iPlayer, ADMIN_RESERVATION) && !access(iPlayer, ADMIN_IMMUNITY))
  93.                                 set_hudmessage(g_iColor[1][0], g_iColor[1][1], g_iColor[1][2], g_fXpos, g_fYpos, iEffects, _, _, _, _, _)
  94.                         else set_hudmessage(g_iColor[2][0], g_iColor[2][1], g_iColor[2][2], g_fXpos, g_fYpos, iEffects, _, _, _, _, _)
  95.    
  96.                         ShowSyncHudMsg(id, g_SyncObj, szMsg)
  97.                 }
  98.         }
  99. }

  100. public hookSay(id)
  101. {
  102.         new szChat[192], szName[32]
  103.         read_args(szChat, charsmax(szChat))
  104.         remove_quotes(szChat)
  105.         get_user_name(id, szName, charsmax(szName))

  106.         if (szChat[0] == '!' && szChat[1] == '+')
  107.         {
  108.                 copy(g_szSign[id], charsmax(g_szSign[]), szChat[2])
  109.                 client_print(id, print_center, "%s", szChat[2])
  110.                 new iVault = nvault_open("sign")
  111.                 if (iVault == INVALID_HANDLE)
  112.                         set_fail_state("nValut return invalid handle.")
  113.                 nvault_set(iVault, szName, g_szSign[id])
  114.                 nvault_close(iVault)
  115.                 return PLUGIN_HANDLED
  116.         }
  117.         return PLUGIN_CONTINUE
  118. }

  119. public client_putinserver(id)
  120. {
  121.         new szName[32], szSign[192], iVault = nvault_open("sign")
  122.         if (is_user_connected(id))
  123.         {
  124.                 get_user_name(id, szName, charsmax(szName))
  125.   
  126.                 if (iVault == INVALID_HANDLE)
  127.                         set_fail_state("nValut return invalid handle.")
  128.   
  129.                 if (nvault_get(iVault, szName, szSign, charsmax(szSign)))
  130.                 {
  131.                         copy(g_szSign[id], charsmax(g_szSign[]), szSign)
  132.                 }
  133.                 else copy(g_szSign[id], charsmax(g_szSign[]), "say !+your sign")
  134.         }
  135.         nvault_close(iVault)
  136. }

  137. public plugin_natives()
  138. {
  139.         register_native("get_user_sign", "_get_user_sign")
  140.         register_native("get_user_flagname", "_get_user_flagname")
  141. }

  142. public _get_user_sign(amx, param)
  143. {
  144.         new id = get_param(1)
  145.         if (g_szSign[id][0])
  146.         {
  147.                 set_string(2, g_szSign[id], get_param(3))
  148.                 return 1
  149.         }
  150.         return 0
  151. }

  152. public _get_user_flagname(amx, param)
  153. {
  154.         new id = get_param(1)
  155.         new szFlagName[16]
  156.         format(szFlagName, charsmax(szFlagName), "%s", get_flagname(id))
  157.         if (szFlagName[0])
  158.         {
  159.                 set_string(2, szFlagName, get_param(3))
  160.                 return 1
  161.         }
  162.         return 0
  163. }

  164. load_settings(const filename[])
  165. {
  166.         new fp = fopen(filename, "rt")

  167.         if (!fp)
  168.         {
  169.                 return 0
  170.         }

  171.         new szText[256]
  172.         new szLevelName[32], szLevelXp[6], iLevelXp
  173.         while (!feof(fp))
  174.         {
  175.                  fgets(fp, szText, charsmax(szText))
  176.   
  177.                 if (szText[0] == ';' || (szText[0] == '/' && szText[1] == '/'))
  178.                          continue
  179.                 if (parse(szText, szLevelName, charsmax(szLevelName), szLevelXp, charsmax(szLevelXp)) < 1)
  180.                         continue
  181.                 iLevelXp = str_to_num(szLevelXp)
  182.                 ArrayPushString(g_LevelName, szLevelName)
  183.                 ArrayPushCell(g_LevelXp, iLevelXp)
  184.   
  185.                 g_LevelNum++
  186.         }
  187.         server_print("%i", g_LevelNum)
  188.         return 1
  189. }

  190. get_levelname(id)
  191. {
  192.         new szLevelName[32], i, iLevel, iStats[8], iBody[8], iRank = get_user_stats(id, iStats, iBody)

  193.         for (i = 0; i < g_LevelNum; i++)
  194.         {
  195.                 iLevel = ArrayGetCell(g_LevelXp, i)
  196.                 if (iRank <= iLevel)
  197.                 {
  198.                         ArrayGetString(g_LevelName, i, szLevelName, charsmax(szLevelName))
  199.                         break
  200.                 }
  201.                 ArrayGetString(g_LevelName, i, szLevelName, charsmax(szLevelName))
  202.         }
  203.         return szLevelName
  204. }

  205. get_flagname(id)
  206. {
  207.         new szFlagName[16]
  208.         if (access(id, ADMIN_IMMUNITY))
  209.         {
  210.                 copy(szFlagName, 5, "ADMIN")
  211.         }
  212.         else if (access(id, ADMIN_RESERVATION) && !access(id, ADMIN_IMMUNITY))
  213.         {
  214.                 copy(szFlagName, 3, "VIP")
  215.         }else copy(szFlagName, 4, "USER")
  216.         return szFlagName
  217. }

复制代码
这是个老插件了,之前点通有朋友写了,但是好像没源码!
所以昨天我自己尝试写了一个!
但是单机测试不出来,本想测试完才发出来的,现在只有靠感兴趣的朋友来帮忙测试一下了!
我只简单写了一些,要用的模块是
  1. #include <nvault>
  2. #include <csx>
  3. #include <ipseeker>

复制代码
相信大家都有这些吧,所以我只把源码贴出来哈!
我还加了两个接口,

  1. native get_user_sign(id, szSign[], len)
  2. native get_user_flagname(id, szFlagName[], lev)
复制代码
分别是获取玩家个性签名,和获取玩家权限职称的!
难免有问题,希望大家积极反馈哈!
任何问题可以跟贴!
会尽力决哈!

本帖子中包含更多资源

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

×
发表于 2010-11-14 19:35:59 | 显示全部楼层 来自 内蒙古
先坐个沙发!!
回复

使用道具 举报

发表于 2010-11-14 22:23:15 | 显示全部楼层 来自 北京
:lol支持!
回复

使用道具 举报

 楼主| 发表于 2010-11-15 14:42:05 | 显示全部楼层 来自 广东广州
由于发贴比较匆忙,把那个定义等级的内容忘了哈!
现在补充一下!rank_level.ini文件的内容如下,可以自行修改的!
我相信大家应该比较清楚了,我还是贴上来哈!
  1. "上将"                        "15"
  2. "中将"                        "55"
  3. "少将"                        "75"
  4. "大校"                        "105"
  5. "上校"                        "145"
  6. "中校"                        "195"
  7. "少校"                        "255"
  8. "上尉"                        "325"
  9. "中尉"                        "405"
  10. "少尉"                        "495"
  11. "六级士官"                        "595"
  12. "五级士官"                        "705"
  13. "四级士官"                        "825"
  14. "三级士官"                        "955"
  15. "二级士官"                        "1095"
  16. "一级士官"                        "1245"
  17. "上等兵"                        "1408"
  18. "列兵"                        "1575"
复制代码
我主要的思路都是根据那个100%自定义军衔来写的,主要的核心是计算玩家的军衔!
其他的显示玩家金钱吖等等,就让有兴趣的朋友自动手加哈:)
之前那个插件是签名与显示信息分开为两个插件,我这里都合在一起了!
还有,这个代码原则上可以让你定义无数个等级,不过我想应该不用定义这么多个了!
就如上面这些我想就足够了哈!
回复

使用道具 举报

发表于 2010-11-15 17:58:01 | 显示全部楼层 来自 广东深圳
看看先!好像不能在DOD上用
回复

使用道具 举报

 楼主| 发表于 2010-11-15 18:23:03 | 显示全部楼层 来自 广东广州
5# ghf


应该是可以的,把
  1. #include <csx>
复制代码
改成
  1. #include <dodstats>
复制代码
应该就可以了,,你可以自己试试,我没有DOD哈!
回复

使用道具 举报

发表于 2010-11-17 08:22:32 | 显示全部楼层 来自 河南郑州
kk顶你哈。。:)
回复

使用道具 举报

发表于 2010-11-17 10:48:26 | 显示全部楼层 来自 天津
顶。。。。。。
回复

使用道具 举报

发表于 2010-11-17 22:27:37 | 显示全部楼层 来自 河南漯河
楼主,编译错误,如图:

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2010-11-17 22:45:28 | 显示全部楼层 来自 广东广州
本帖最后由 kk阿朗 于 2010-11-17 22:50 编辑

9# 银闪闪


估计你用的是老版本!


edit:AMXX 1.8.1
回复

使用道具 举报

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

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