搜索
查看: 10776|回复: 14

【求助】插件高手进来帮忙,我修改插件遇到困难了

[复制链接]
发表于 2005-8-25 09:52:09 | 显示全部楼层 |阅读模式 来自 重庆
我想自己修改一个插件,以前有求过别人,但都没人帮我做!

所一我看了一点点基础想自己修改一下!

我需要改sprites_show插件!
我想把CLCMD的权限设为0,然后把sprite命令的目标设置成命令发起者,然后去掉unsprite命令,并且修改sprite命令使得spr出现后在几秒后自动消失!!!

不过上述的东西我实现很困难!
有谁可一教我?
发表于 2005-8-25 17:19:03 | 显示全部楼层 来自 四川成都
你问的问题。。。要你自己修改,可是一开始就不知道怎么进行?

那我们还能说什么。。。

先多看看amxx的教程
,能有c或c++的基础最好。


ps:那个插件传上来吧,我想看看。
回复

使用道具 举报

 楼主| 发表于 2005-8-25 18:04:53 | 显示全部楼层 来自 重庆
这是代码
  1. /*

  2. Plugin: Sprites Show (Show funny sprites above players' head)
  3. Version: 1.5
  4. Author: KRoTaL (Based on the original admin show plugin by StuD|MaN)

  5. 1.0 Release
  6. 1.1 new sprite : camper2
  7. 1.2 optimization, works better
  8. 1.3 you can now precache and use your own sprites
  9. 1.4 bug fix (hopefully)
  10. 1.5 sprites stay on player's head until you remove them with amx_unsprite (it can stay a whole map now)
  11.     + sprites_show_players.txt file added (see below for more details)

  12. Commands:

  13.    amx_sprite <name|id|@CT|@TERRORIST|*(all)> <name of sprite>   -   Shows sprite above player's head.
  14.    amx_unsprite <name|id|@CT|@TERRORIST|*(all)>          -   Removes sprite(s).

  15. Default sprites are :

  16. camper
  17. camper2 (bigger sprite)
  18. fag
  19. idiot
  20. sexy
  21. shoot
  22. grass_01
  23. ic4
  24. ihostage
  25. iplayerc4
  26. ledglow
  27. sniper_scope

  28. You can use your own sprites by simply :

  29. 1) writing their names in the "sprites_show.txt" file located in addons/amxx/configs (this file is included in the zip,
  30.    with the names of the default sprites inside).
  31.    Use this format (names without .spr) :
  32.    camper
  33.    asskicker
  34.    banned
  35. 2) putting your sprites in the "sprites" folder of your game (ex: cstrike/sprites), sprites must be named
  36.    like what you wrote in sprites_show.txt
  37.    camper.spr
  38.    asskicker.spr
  39.    banned.spr       

  40. You can associate a SteamId with a sprite in the "sprites_show_players.txt" file located in addons/amxx/configs.
  41. Each time a player connects, if his steamid is in this file with a valid sprite written after, the sprite will appear
  42. on his head when he enters the game (and the sprite will remain until you amx_unsprite him).
  43. Use this format in the "sprites_show_players.txt" file :
  44. STEAM_0:0:481540,idiot
  45. STEAM_0:1:7412,camper


  46. Examples :

  47. amx_sprite Player idiot
  48. amx_sprite @CT sexy
  49. amx_sprite @TERRORIST shoot
  50. amx_sprite * fag

  51. amx_unsprite Player
  52. amx_unsprite @CT
  53. amx_unsprite *

  54. If you want to use more than 25 sprites, you must set MAX_SPRITES to the maximum number of sprites wanted, and then
  55. compile the source file.

  56. */

  57. #define MAX_SPRITES 25










  58. //----------------------------------------------------------------------------------------------
  59. #include <amxmodx>
  60. #include <amxmisc>

  61. new spritew[32]
  62. new sprite_name[MAX_SPRITES+1][32]
  63. new sprite_precached[MAX_SPRITES+1]
  64. new nbr_sprites=0
  65. new SpriteFlag[33]


  66. //----------------------------------------------------------------------------------------------
  67. public sprite(id, level, cid) {
  68.    if(!cmd_access(id, level, cid, 2))
  69.         return PLUGIN_HANDLED

  70.    new arg1[32]
  71.    read_argv(1, arg1, 31)
  72.    read_argv(2, spritew, 31)

  73.    new test=0
  74.    new id_sprite
  75.    new valid_sprites[128]

  76.    for(new i = 0 ; i<nbr_sprites-1 ; i++)
  77.    {
  78.       if(equal(spritew,sprite_name[i]))
  79.       {
  80.          test++
  81.          id_sprite=i
  82.       }       
  83.       if(i>0)
  84.          add(valid_sprites, 127, ",")
  85.       add(valid_sprites, 127, sprite_name[i])
  86.    }
  87.    if(test==0)
  88.    {
  89.       console_print(id, "%s 不是一个有效的标记.", spritew)
  90.       console_print(id, "有效的标记是 :")
  91.       console_print(id, "%s", valid_sprites)
  92.       return PLUGIN_HANDLED
  93.    }   

  94.    if(arg1[0] == '@') {
  95.       new users[32], inum
  96.       get_players(users, inum, "ae", arg1[1])
  97.       if(inum == 0) {
  98.               console_print(id, "在这个队伍没有这名字的玩家")
  99.               return PLUGIN_HANDLED
  100.       }

  101.       for(new i = 0; i < inum; ++i) {
  102.                 message_begin(MSG_ALL,SVC_TEMPENTITY)
  103.                 write_byte(125)
  104.                 write_byte(users[i])
  105.                 message_end()
  106.                 new parm[1]
  107.                 parm[0] = users[i]
  108.                 SpriteFlag[users[i]] = id_sprite
  109.                 set_task(0.1,"showS",481,parm,1)
  110.       }
  111.    }
  112.    else if(arg1[0] == '*')
  113.    {
  114.       new users[32], inum
  115.       get_players(users, inum, "a")
  116.       if(inum == 0) {
  117.               console_print(id, "在这个队伍没有这名字的玩家")
  118.               return PLUGIN_HANDLED
  119.       }        

  120.       for(new i = 0; i < inum; ++i) {
  121.                 message_begin(MSG_ALL,SVC_TEMPENTITY)
  122.                 write_byte(125)
  123.                 write_byte(users[i])
  124.                 message_end()
  125.                 new parm[1]
  126.                 parm[0] = users[i]
  127.                 SpriteFlag[users[i]] = id_sprite
  128.                 set_task(0.1,"showS",481,parm,1)

  129.       }
  130.    }
  131.    else {
  132.         new uid = cmd_target(id, arg1, 5)  
  133.         if(!uid) return PLUGIN_HANDLED
  134.         if(SpriteFlag[uid] != -1)
  135.         {
  136.                 message_begin(MSG_ALL,SVC_TEMPENTITY)
  137.                 write_byte(125)
  138.                 write_byte(uid)
  139.                 message_end()
  140.         }                       
  141.         new parm[1]
  142.         parm[0] = uid
  143.         SpriteFlag[uid] = id_sprite
  144.         set_task(0.1,"showS",481,parm,1)
  145.    }
  146.    if(task_exists(4810))
  147.       remove_task(4810)
  148.    set_task(5.0,"showS_loop",4810,"",0,"b")

  149.    return PLUGIN_HANDLED
  150. }
  151. //----------------------------------------------------------------------------------------------
  152. public unsprite(id, level, cid) {
  153.    if(!cmd_access(id, level, cid, 2))
  154.         return PLUGIN_HANDLED

  155.    new arg[32]
  156.    read_argv(1, arg, 31)

  157.    if(arg[0] == '@') {
  158.       new users[32], inum
  159.       get_players(users, inum, "e", arg[1])
  160.       if(inum == 0) {
  161.               console_print(id, "在这个队伍没有这名字的玩家")
  162.               return PLUGIN_HANDLED
  163.       }

  164.       for(new i = 0; i < inum; ++i) {
  165.                 message_begin(MSG_ALL,SVC_TEMPENTITY)
  166.                 write_byte(125)
  167.                 write_byte(users[i])
  168.                 message_end()
  169.                 SpriteFlag[users[i]] = -1
  170.       }
  171.    }
  172.    else if(arg[0] == '*')
  173.    {
  174.       new users[32], inum
  175.       get_players(users, inum)
  176.       if(inum == 0) {
  177.               console_print(id, "在这个队伍没有这名字的玩家")
  178.               return PLUGIN_HANDLED
  179.       }        

  180.       for(new i = 0; i < inum; ++i) {
  181.                 message_begin(MSG_ALL,SVC_TEMPENTITY)
  182.                 write_byte(125)
  183.                 write_byte(users[i])
  184.                 message_end()
  185.                 SpriteFlag[users[i]] = -1
  186.       }
  187.       if(task_exists(4810))
  188.             remove_task(4810)
  189.    }
  190.    else {
  191.         new uid = cmd_target(id, arg, 5)  
  192.         if(!uid) return PLUGIN_HANDLED
  193.         message_begin(MSG_ALL,SVC_TEMPENTITY)
  194.         write_byte(125)
  195.         write_byte(uid)
  196.         message_end()
  197.         SpriteFlag[uid] = -1
  198.    }
  199.    return PLUGIN_HANDLED
  200. }
  201. //----------------------------------------------------------------------------------------------
  202. public showS(parm[])
  203. {       
  204.         new id = parm[0]
  205.         if(is_user_alive(id))
  206.         {
  207.                 if(SpriteFlag[id] != -1)
  208.                 {
  209.                         message_begin(MSG_ALL,SVC_TEMPENTITY)
  210.                         write_byte(124)
  211.                         write_byte(id)
  212.                         write_coord(65)
  213.                         write_short(sprite_precached[SpriteFlag[id]])
  214.                         write_short(32767)
  215.                         message_end()
  216.                 }
  217.         }
  218.         return PLUGIN_CONTINUE
  219. }
  220. //----------------------------------------------------------------------------------------------
  221. public showS_loop()
  222. {       
  223.         new players[32], pl_num=0
  224.         get_players(players,pl_num,"a")
  225.         for (new i=0;i<pl_num;i++)
  226.         {
  227.                 if(SpriteFlag[players[i]] != -1)
  228.                 {
  229.                         message_begin(MSG_ALL,SVC_TEMPENTITY)
  230.                         write_byte(124)
  231.                         write_byte(players[i])
  232.                         write_coord(65)
  233.                         write_short(sprite_precached[SpriteFlag[players[i]]])
  234.                         write_short(32767)
  235.                         message_end()
  236.                 }
  237.         }
  238.         return PLUGIN_CONTINUE
  239. }
  240. //----------------------------------------------------------------------------------------------
  241. public client_connect(id)
  242. {
  243.         SpriteFlag[id] = -1
  244.         return PLUGIN_CONTINUE
  245. }
  246. //----------------------------------------------------------------------------------------------
  247. public client_disconnect(id)
  248. {
  249.         message_begin(MSG_ALL,SVC_TEMPENTITY)
  250.         write_byte(125)
  251.         write_byte(id)
  252.         message_end()
  253.         SpriteFlag[id] = -1
  254.         return PLUGIN_CONTINUE
  255. }
  256. //----------------------------------------------------------------------------------------------
  257. public client_authorized(id)
  258. {
  259.         new authid[33]
  260.         get_user_authid(id,authid,32)

  261.         new text[64]
  262.         new len
  263.         new pos=0
  264.         new textblock[33]
  265.         new sprite_config[64]
  266.         get_configsdir(sprite_config, 63)
  267.         format(sprite_config, 63, "%s/sprites_show_players.txt", sprite_config)

  268.         if (file_exists(sprite_config))
  269.         {
  270.                 while(read_file(sprite_config,pos++,text,63,len))
  271.                 {
  272.                         len = contain(text,",")
  273.                         if(len == -1) return -1
  274.                         copyc(textblock,strlen(text),text,',')
  275.                         if(equali(textblock,authid))
  276.                         {
  277.                                 replace(text,63,textblock,"")
  278.                                 replace(text,63,",","")
  279.                                    for(new i = 0 ; i<nbr_sprites-1 ; i++)
  280.                                    {
  281.                                       if(equal(text,sprite_name[i]))
  282.                                                 SpriteFlag[id]=i
  283.                                 }
  284.                         }
  285.                 }
  286.         }
  287.         return PLUGIN_CONTINUE
  288. }
  289. //----------------------------------------------------------------------------------------------
  290. public death_event()
  291. {
  292.         new dead = read_data(2)
  293.         message_begin(MSG_ALL,SVC_TEMPENTITY)
  294.         write_byte(125)
  295.         write_byte(dead)
  296.         message_end()
  297.         set_task(1.0,"death_clear",dead)
  298.         return PLUGIN_CONTINUE
  299. }
  300. //----------------------------------------------------------------------------------------------
  301. public death_clear(dead)
  302. {
  303.         message_begin(MSG_ALL,SVC_TEMPENTITY)
  304.         write_byte(125)
  305.         write_byte(dead)
  306.         message_end()
  307.         return PLUGIN_CONTINUE
  308. }
  309. //----------------------------------------------------------------------------------------------
  310. public reset_hud(id)
  311. {
  312.         new parm[1]
  313.         parm[0]=id
  314.         message_begin(MSG_ALL,SVC_TEMPENTITY)
  315.         write_byte(125)
  316.         write_byte(id)
  317.         message_end()
  318.         set_task(0.5,"showS",481,parm,1)
  319.         return PLUGIN_CONTINUE
  320. }
  321. //----------------------------------------------------------------------------------------------
  322. public plugin_precache()
  323. {
  324.         new sprite_file[32]
  325.         new sprite_config[64]
  326.         get_configsdir(sprite_config, 63)
  327.         format(sprite_config, 63, "%s/sprites_show.txt", sprite_config)
  328.         new spr_temp[50]
  329.         new length

  330.         if (file_exists(sprite_config))
  331.         {
  332.                 while(read_file(sprite_config,nbr_sprites++,sprite_file,sizeof(sprite_file),length))
  333.                 {
  334.                         format(spr_temp,sizeof(spr_temp),"sprites/%s.spr",sprite_file)
  335.                         format(sprite_name[nbr_sprites-1],sizeof(sprite_name),"%s",sprite_file)
  336.                         if (file_exists(spr_temp))
  337.                         {
  338.                                 sprite_precached[nbr_sprites-1]=precache_model(spr_temp)
  339.                         }
  340.                 }
  341.         }
  342.         return PLUGIN_CONTINUE
  343. }
  344. //----------------------------------------------------------------------------------------------
  345. public plugin_init() {
  346.    register_plugin("标记玩家", "1.5", "[BenZ] China")
  347.    register_clcmd("amx_sprite", "sprite", ADMIN_SLAY, "<name/id/wonid/@CT/@TERRORIST/*(all)> <sprite> - shows sprite above player's head")
  348.    register_clcmd("amx_unsprite", "unsprite", ADMIN_SLAY, "<name/id/wonid/@CT/@TERRORIST/*(all)> - removes sprite(s)")
  349.    register_event("DeathMsg", "death_event", "a")
  350.    register_event("ResetHUD", "reset_hud", "be")
  351.    return PLUGIN_CONTINUE
  352. }
复制代码

是论坛大大修改的版本,原版我没有。。。。。
回复

使用道具 举报

发表于 2005-8-26 22:25:14 | 显示全部楼层 来自 四川成都
按我理解的改了,你看看吧,我没测试。。

输入的命令 也改为 amx_sprite  idiot  直接跟spr的名字


另外等级那个不太确定。。。

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2005-8-26 22:33:23 | 显示全部楼层 来自 重庆南岸区
哦,谢了,学习学习!
回复

使用道具 举报

 楼主| 发表于 2005-8-26 22:34:28 | 显示全部楼层 来自 重庆南岸区

register_clcmd("amx_sprite", "sprite", ADMIN_LEVEL_H , " <sprite> - shows sprite above player's head")
换成
register_clcmd("amx_sprite", "sprite", 0 , " <sprite> - shows sprite above player's head")
不可以么?
回复

使用道具 举报

 楼主| 发表于 2005-8-26 22:36:15 | 显示全部楼层 来自 重庆南岸区
另外,这个也是读取sprites_show.txt么?
回复

使用道具 举报

发表于 2005-8-26 22:39:25 | 显示全部楼层 来自 四川成都
又改了,你再下来看吧

至于改成0,我也不确定。我也是才研究不到10天而已。。。
回复

使用道具 举报

发表于 2005-8-26 22:42:15 | 显示全部楼层 来自 四川成都
Post by ssj4gogeta
另外,这个也是读取sprites_show.txt么?


当然,只照着你要的改的,其他的没动
回复

使用道具 举报

 楼主| 发表于 2005-8-26 22:47:48 | 显示全部楼层 来自 重庆南岸区
麻烦你了!
回复

使用道具 举报

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

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