设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3918|回复: 21

[原创] 【源码分享】CSO疾跑+致命打击     [复制链接]

Rank: 7Rank: 7Rank: 7

帖子
863
精华
0
声望
2462 点
金币
584 Mold
被赞许
7 次
注册时间
2010-5-7
发表于 2011-1-27 18:30:21 |显示全部楼层
本帖最后由 lyynyfy 于 2011-1-27 22:00 编辑

简单的注明了一些信息。
源码仅供交流,可能牵扯了一些敏感字眼,不过目的还是用于交流。
  1. /* 本插件由 AMXX-Studio 中文版自动生成*/
  2. /* UTF-8 func by www.DT-Club.net */

  3. #include <amxmodx>
  4. #include <fakemeta>
  5. //check player se.x.if in ZP,just ignore it
  6. #include <nst_player>
  7. //check player class.if in ZP,use <zombieplague> and zp_get_user_zombie(id) instead
  8. #include <nst_zombie>
  9. #include <hamsandwich>
  10. #define PLUGIN_NAME        "Speedup_Accshoot"
  11. #define PLUGIN_VERSION        "2.0"
  12. #define PLUGIN_AUTHOR        "csoldjb"
  13. const Float:speedup_time=12.0           //speed up time
  14. const Float:speedup_colddown=6.0         //slow down time
  15. const Float:accshoot_colddown=8.0        //acc shoot time
  16. const Float:buy_time=7.0               //fix bug
  17. const Float:speedup_1=400.0           //speed up speed
  18. const Float:speedup_2=140.0            //slow down speed
  19. new const heart_beat[]="items/speedup_heartbeat.wav"
  20. new const speedup_sound[]="items/speedup.wav"
  21. //male and female sounds
  22. new const speedup_breath_male[]="items/human_breath_male.wav"
  23. new const speedup_breath_female[]="items/human_breath_female.wav"
  24. new player_status[33]
  25. new shoot_status[33]
  26. new icon,g_msgScreenFade
  27. new g_speed[33]
  28. new g_accshoot[33]
  29. new sound_file[33][32]
  30. public plugin_init()
  31. {
  32.         register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
  33.         register_concmd("speedup","check_speed")
  34.         register_concmd("accshoot","check_shoot")
  35.         register_logevent("reset_value",2,"1=Round_Start")
  36.         icon=get_user_msgid("StatusIcon")
  37.         g_msgScreenFade=get_user_msgid("ScreenFade")
  38.         register_forward(FM_PlayerPreThink,"Speed_Setting") //make player speed
  39.         //ignore
  40.         RegisterHam(Ham_Spawn,"player","check_icon")
  41.         register_forward(FM_TraceLine, "traceline_forward") //TR forward
  42. }
  43. //**************CLIENT PRESS***************
  44. //check player keys
  45. public client_command(id)
  46. {
  47.         new arg[13]
  48.         read_argv(0, arg, 12)
  49.         if(equali(arg,"nst_wpn"))
  50.         {
  51.                 client_cmd(id,"bind 5 slot5")
  52.                 client_cmd(id,"bind 6 slot6")
  53.                 //to fix bugs
  54.                 set_task(buy_time,"Unbindpress",id+3000)
  55.         }
  56.         if(equali(arg,"radio1")||equali(arg,"radio2")||equali(arg,"radio3"))
  57.         {
  58.                 client_cmd(id,"bind 5 slot5")
  59.                 client_cmd(id,"bind 6 slot6")
  60.                 set_task(5.0,"Unbindpress",id+3000)
  61.         }
  62. }
  63. //once player disconnect,make keys normal
  64. public client_disconnect(id)
  65. {
  66.         client_cmd(id,"bind 5 slot5")
  67.         client_cmd(id,"bind 6 slot6")
  68. }
  69. public Unbindpress(index)
  70. {
  71.         new id=index-3000
  72.         client_cmd(id,"bind 5 speedup")
  73.         client_cmd(id,"bind 6 accshoot")
  74. }
  75. public reset_value()
  76. {
  77.         for(new i=1;i<=32;i++)
  78.         {
  79.                 g_speed[i]=1
  80.                 g_accshoot[i]=1
  81.                 player_status[i]=0
  82.                 shoot_status[i]=0
  83.                 if(is_user_alive(i)) messagesingle("zb3_accshoot",1,i)
  84.                 if(is_user_alive(i)) messagesingle("zb3_speedup",1,i)
  85.         }
  86. }
  87. public Speed_Setting(id)
  88. {
  89.         //maxspeed setting
  90.         switch(player_status[id])
  91.         {
  92.                 case 1:engfunc(EngFunc_SetClientMaxspeed,id,speedup_1)
  93.                 case 2:engfunc(EngFunc_SetClientMaxspeed,id,speedup_2)
  94.         }
  95. }
  96. public client_putinserver(id)
  97. {
  98.         set_task(1.0,"Bind_Press",id+777)
  99. }
  100. //bind some keys for client
  101. public Bind_Press(index)
  102. {
  103.         new id=index-777
  104.         client_cmd(id,"bind 5 speedup")
  105.         client_cmd(id,"bind 6 accshoot")       
  106. }
  107. /*==============================MAIN FUNCTION=============================
  108. ========================================================================*/
  109. //****************SPEED UP****************
  110. public check_speed(id)
  111. {
  112.         //whether player is viewing a menu?
  113.         new menu1,menu2,other,callback
  114.         callback=player_menu_info(id,menu1,menu2,other)
  115.         if(callback||player_status[id]) return
  116.         if(nst_zb_get_user_zombie(id)) return
  117.         g_speed[id]=0
  118.         //spr
  119.         messagesingle("zb3_speedup",0,id)
  120.         speed_up1(id)       
  121. }
  122. public speed_up1(id)
  123. {
  124.         player_status[id]=1
  125.         copy(sound_file[id],31,heart_beat)
  126.         emit_sound(id, CHAN_AUTO,heart_beat,1.0, ATTN_NORM, 0, PITCH_NORM)
  127.         set_task(1.0,"play_sound",id+888,"",0,"a",floatround(speedup_time))
  128.         set_task(speedup_time,"speed_up2",id+1000)
  129. }
  130. public speed_up2(index)
  131. {
  132.         new id=index-1000
  133.         player_status[id]=2
  134.         new ***=nst_get_user_***(id)
  135.         if(***==1)
  136.         {
  137.                 copy(sound_file[id],31,speedup_breath_male)
  138.         }
  139.         else
  140.         {
  141.                 copy(sound_file[id],31,speedup_breath_female)
  142.         }
  143.         set_task(1.0,"play_sound",id+888,"",0,"a",floatround(speedup_colddown))
  144.         set_task(speedup_colddown,"speed_up3",id+2000)
  145. }
  146. public speed_up3(index)
  147. {
  148.         new id=index-2000
  149.         if(task_exists(id+888)) remove_task(id+888)
  150.         if(task_exists(index)) remove_task(index)
  151.         player_status[id]=3
  152. }
  153. //*********ACCUMULATE SHOOT***************
  154. public check_shoot(id)
  155. {
  156.         new menu1,menu2,other,callback
  157.         callback=player_menu_info(id,menu1,menu2,other)
  158.         if(callback||!g_accshoot[id]) return
  159.         if(nst_zb_get_user_zombie(id)) return
  160.         g_accshoot[id]=0
  161.         shoot_status[id]=1
  162.         messagesingle("zb3_accshoot",0,id)
  163.         set_task(1.0,"effacc",id+8888,"",0,"a",floatround(accshoot_colddown))
  164.         set_task(accshoot_colddown,"end_accshoot",id+1100)       
  165. }

  166. public effacc(index)
  167. {
  168.         new id=index-8888
  169.         ScreenFade(id)
  170. }       
  171. public end_accshoot(index)
  172. {
  173.         new id=index-1100
  174.         shoot_status[id]=0
  175. }
  176. //*******************OTHERS****************
  177. public plugin_precache()
  178. {
  179.         engfunc(EngFunc_PrecacheSound,heart_beat)
  180.         engfunc(EngFunc_PrecacheSound,speedup_sound)
  181.         engfunc(EngFunc_PrecacheSound,speedup_breath_male)
  182.         engfunc(EngFunc_PrecacheSound,speedup_breath_female)
  183. }
  184. public play_sound(index)
  185. {
  186.         new id=index-888
  187.         //emit_sound .you can also use client_cmd(id,"spk %s",soundfile[id]) [only player self can hear that]
  188.         emit_sound(id, CHAN_AUTO, sound_file[id], 1.0, ATTN_NORM, 0, PITCH_NORM)
  189.         ScreenFade(id)
  190. }
  191. //***************************FORWARD ACCSHOOT****************************
  192. public traceline_forward(Float:start[3], Float:end[3], conditions, id, trace)
  193. {
  194.    //hitzone head
  195.    if(id>=32) return FMRES_IGNORED
  196.    if(!shoot_status[id]) return FMRES_IGNORED
  197.     set_tr2(trace, TR_iHitgroup, HIT_HEAD)
  198.    
  199.     //blood from head
  200.     static hit, Float:head_origin[3], Float:angles[3]
  201.     if(!pev_valid(hit)) return FMRES_IGNORED
  202.     hit = get_tr2(trace, TR_pHit)
  203.     engfunc(EngFunc_GetBonePosition, hit, 8, head_origin, angles)
  204.    
  205.     set_tr2(trace, TR_vecEndPos, head_origin)
  206.    
  207.     return FMRES_IGNORED
  208. }
  209. public nst_zb_user_infected(id, infector)
  210. {
  211.         if(is_user_alive(id))
  212.         {
  213.                 messagesingle("zb3_accshoot",0,id)
  214.                 messagesingle("zb3_speedup",0,id)
  215.                 if(task_exists(id+888)) remove_task(id+888)
  216.                 if(task_exists(id+8888)) remove_task(id+8888)
  217.                 if(task_exists(id+1100)) remove_task(id+1100)
  218.                 player_status[id]=3
  219.                 shoot_status[id]=0
  220.         }
  221. }
  222. //new thing to fix bug
  223. public check_icon(id)
  224. {
  225.         if(!pev_valid(id)) return HAM_IGNORED
  226.         if(!is_user_alive(id)) return HAM_IGNORED
  227.         if(!nst_zb_get_user_zombie(id))
  228.         {
  229.                 messagesingle("zb3_accshoot",1,id)
  230.                 messagesingle("zb3_speedup",1,id)
  231.         }
  232. }               
  233. //******************************STOCK***********************************
  234. stock messagesingle(string[],sight,id)
  235. {
  236.         message_begin(MSG_ONE,icon,{0,0,0},id)
  237.         write_byte(sight)
  238.         write_string(string)
  239.         write_byte(243)
  240.         write_byte(207)
  241.         write_byte(149)
  242.         message_end()
  243. }       
  244. stock ScreenFade(id)
  245. {
  246.         message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade , _, id);
  247.         write_short(1<<10)
  248.         write_short(1<<10)
  249.         write_short(0x0000)
  250.         write_byte(255)
  251.         write_byte(255)
  252.         write_byte(255)
  253.         write_byte(75)
  254.         message_end()
  255. }
复制代码
已有 3 人评分声望 收起 理由
lzn591255239 + 5 感谢分享
n3ph223172 + 5 放出來源碼真的好嗎......?你懂的.
cN.SKy + 10 +++++++++++++++

总评分: 声望 + 20   查看全部评分

使用道具 举报

Rank: 3Rank: 3

帖子
101
精华
0
声望
485 点
金币
29 Mold
被赞许
0 次
注册时间
2009-12-23
发表于 2011-1-27 19:01:38 |显示全部楼层
感謝樓主免費分享 如果MODCHINA有多些你這些人就好了....

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
1011
精华
2
声望
24573 点
金币
154 Mold
被赞许
14 次
注册时间
2008-8-7

新人进步奖 Modchina元老 可爱小猫 懒人勋章

发表于 2011-1-27 19:44:24 |显示全部楼层
为什么set_task(1.0,"Bind_Press",id+777)
然后又public Bind_Press(index)
{
        new id=index-777 // 不直接传递id,其用意是标记吗?

135行nst有区别性别功能,是不是根据model的文件夹来判断的?
我知道有个models\female文件夹

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
863
精华
0
声望
2462 点
金币
584 Mold
被赞许
7 次
注册时间
2010-5-7
发表于 2011-1-27 21:37:29 |显示全部楼层
本帖最后由 lyynyfy 于 2011-1-27 21:39 编辑

回复 p5248891 的帖子

性别问题是通过主插件写出来的native,直接用于判断就行。
set_task()传递的是数或者数组,如果set_task(1.0,"xxx",id)那么传递过来的就是数id,如果是id+888传递过来的就是id+888,public xxx(index)指的就是传递过来的数,所以正确的id应该就是index-888.虽然这个数一般用在task_exists或change_task来用,不过为了区分,还是加上一个数来区分不同的task

使用道具 举报

Rank: 2

帖子
46
精华
0
声望
221 点
金币
35 Mold
被赞许
2 次
注册时间
2010-12-18
发表于 2011-1-27 22:17:31 |显示全部楼层

你有份修改的UE版
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 1 人评分声望 收起 理由
lzn591255239 + 5 你这个版本NST有下么

总评分: 声望 + 5   查看全部评分

來自香港的小屁鞋xP

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
1011
精华
2
声望
24573 点
金币
154 Mold
被赞许
14 次
注册时间
2008-8-7

新人进步奖 Modchina元老 可爱小猫 懒人勋章

发表于 2011-1-27 22:40:53 |显示全部楼层
顶~学到了不少,例如client_command里的read_argv,我只在register_event才会用到,多了个方法。而且收集了个stock ScreenFade(id)功能函数。
当我小白入门~
set_task为什么不能直接调用stock的函数?干脆stock转public算了
message_begin(MSG_ONE,iconstatus,{0,0,0},id);
与message_begin(MSG_ONE,icon,{0,0,0},id)有什么不同,
emit_sound(id, CHAN_AUTO, sound_file[id], 1.0, ATTN_NORM, 0, PITCH_NORM)
的 CHAN_AUTO  ATTN_NORM  PITCH_NORM是什么参数,那里可以找到它的定义?

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
863
精华
0
声望
2462 点
金币
584 Mold
被赞许
7 次
注册时间
2010-5-7
发表于 2011-1-28 08:41:33 |显示全部楼层
回复 p5248891 的帖子

其实icon和iconstatue是一样的,都是get_user_msgid("iconstatue"),变量指向的内容是一样的。
根据我的理解,stock是自定义函数,public是公共函数,不加的是内置调用函数,接口函数必须用public调用(因为公共)。
关于CHAN_XXX是指声音频道(见amxconst.inc),PITCH_XXX是指音量高低(估计和VOLUME是一样的),至于ATTN_是指环境音效效果半径大小,可在sdk/dlls/sound.cpp查看:
  1.         if ( FBitSet ( pev->spawnflags, AMBIENT_SOUND_EVERYWHERE) ) 所有地方
  2.         {
  3.                 m_flAttenuation = ATTN_NONE;
  4.         }
  5.         else if ( FBitSet ( pev->spawnflags, AMBIENT_SOUND_SMALLRADIUS) )  小半径
  6.         {
  7.                 m_flAttenuation = ATTN_IDLE;
  8.         }
  9.         else if ( FBitSet ( pev->spawnflags, AMBIENT_SOUND_MEDIUMRADIUS) ) 中半径
  10.         {
  11.                 m_flAttenuation = ATTN_STATIC;
  12.         }
  13.         else if ( FBitSet ( pev->spawnflags, AMBIENT_SOUND_LARGERADIUS) )  大半径
  14.         {
  15.                 m_flAttenuation = ATTN_NORM;
  16.         }
复制代码

点评

p5248891  学习了~  发表于 2011-1-28 10:54:55
已有 1 人评分声望 金币 收起 理由
p5248891 + 10 + 1 感谢分享

总评分: 声望 + 10  金币 + 1   查看全部评分

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
1259
精华
1
声望
2866 点
金币
430 Mold
被赞许
0 次
注册时间
2009-6-18
发表于 2011-2-2 20:16:02 |显示全部楼层
高手帖.前来学习.

使用道具 举报

Rank: 8Rank: 8

帖子
831
精华
0
声望
2877 点
金币
1312 Mold
被赞许
10 次
注册时间
2009-9-24
发表于 2011-2-2 21:49:41 |显示全部楼层
本帖最后由 de01 于 2015-11-15 20:32 编辑

.              

使用道具 举报

Rank: 5Rank: 5

帖子
307
精华
0
声望
1196 点
金币
366 Mold
被赞许
1 次
注册时间
2011-1-1
发表于 2011-2-3 13:44:08 |显示全部楼层
谢LZ!!!!!!!!!!!!!!!!!!!

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部