Advertisement
Guest User

Untitled

a guest
Oct 13th, 2015
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.74 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <fakemeta>
  5. #include <hamsandwich>
  6. #include <fun>
  7. #include <engine>
  8. #include <cs_player_models_api>
  9. #include <cs_maxspeed_api>
  10. #include <cs_teams_api>
  11.  
  12. #define PLUGIN "The Hidden"
  13. #define VERSION "1.0"
  14. #define AUTHOR "RaN"
  15.  
  16. #define task_random 123413
  17. #define task_hud 12341
  18.  
  19. new bool:b_prepare,bool:b_hidden[33],bool:b_killedbyhidden[33],v_countdown
  20.  
  21. new const map_skybox[] = "space"
  22. new const map_light[] = "c"
  23.  
  24. new const human_model_player[][]= {"arctic","terror","guerilla","gign","leet","vip"}
  25. new const hidden_model_player[] = "qt20"
  26. new const hidden_model_hand[] = "models/gr/thehidden/v_hdn.mdl"
  27. new const hidden_sound_pain[][]={"gr/thehidden/pain0.wav","gr/thehidden/pain1.wav","gr/thehidden/pain2.wav"}
  28. new const hidden_sound_die[][]={"gr/thehidden/die0.wav","gr/thehidden/die1.wav","gr/thehidden/die2.wav"}
  29. new const hidden_sound_taunt[][]={"gr/thehidden/taunt0.wav","gr/thehidden/taunt1.wav","gr/thehidden/taunt2.wav"}
  30. new const hidden_bgm[][] = {"sound/gr/thehidden/HDN_Docks.mp3","sound/gr/thehidden/HDN_Origin.mp3","sound/gr/thehidden/HDN_Traindepot.mp3","sound/gr/thehidden/HEX_Cooler.mp3"}
  31.  
  32. new const object_ent[][]={"func_bomb_target","info_bomb_target","info_vip_start","info_vip_safetyzone","func_escapezone","hostage_entity","monster_entity","func_monster_rescue","info_hostage_rescue"}
  33.  
  34. public plugin_precache()
  35. {
  36.     new j,text[128]
  37.    
  38.     for(j = 0; j < sizeof human_model_player; j++)
  39.     {
  40.         formatex(text,charsmax(text),"models/player/%s/%s.mdl",human_model_player[j],human_model_player[j])
  41.         precache_model(text)
  42.     }
  43.  
  44.     formatex(text,charsmax(text),"models/player/%s/%s.mdl",hidden_model_player,hidden_model_player)
  45.     precache_model(text)
  46.     precache_model(hidden_model_hand)
  47.    
  48.     for(j = 0; j < sizeof hidden_sound_pain; j++) precache_sound(hidden_sound_pain[j])
  49.     for(j = 0; j < sizeof hidden_sound_die; j++) precache_sound(hidden_sound_pain[j])
  50.     for(j = 0; j < sizeof hidden_sound_taunt; j++) precache_sound(hidden_sound_taunt[j])
  51.     for(j = 0; j < sizeof hidden_bgm; j++) precache_generic(hidden_bgm[j])
  52.    
  53.     for(j = 1; j < 11; j++)
  54.     {
  55.         formatex(text,charsmax(text),"gr/thehidden/%d.wav",j)
  56.         precache_sound(text)
  57.     }
  58.    
  59.     register_forward(FM_Spawn,"fm_spawn")
  60. }
  61.  
  62. public plugin_init()
  63. {
  64.     register_plugin(PLUGIN, VERSION, AUTHOR)
  65.    
  66.     // event
  67.     register_event("HLTV","event_newround","a","1=0","2=0")
  68.     register_event("CurWeapon","event_curweapon","b","1=1")
  69.    
  70.     // ham
  71.     RegisterHam(Ham_Spawn,"player","hm_spawn",1)
  72.     RegisterHam(Ham_Killed,"player","hm_killed",0)
  73.     RegisterHam(Ham_TakeDamage,"player","hm_takedmg")
  74.     RegisterHam(Ham_Use,"func_tank","hm_use")
  75.     RegisterHam(Ham_Use,"func_tankmortar","hm_use")
  76.     RegisterHam(Ham_Use,"func_tanklaser","hm_use")
  77.     RegisterHam(Ham_Use,"func_tankrocket","hm_use")
  78.     RegisterHam(Ham_Use,"func_pushable","hm_use")
  79.     RegisterHam(Ham_Touch,"weaponbox","hm_touch")
  80.     RegisterHam(Ham_Spawn,"weaponbox","hm_weapon_spawn",1)
  81.    
  82.     // msg
  83.     register_message(get_user_msgid("StatusIcon"),"msg_status_icn")
  84.     register_message(get_user_msgid("TextMsg"),"msg_text")
  85.     register_message(get_user_msgid("SendAudio"),"msg_sendaudio")
  86.     set_msg_block(get_user_msgid("ShadowIdx"), BLOCK_SET)
  87.    
  88.     // fm
  89.     register_forward(FM_ClientDisconnect,"fm_client_disconnect_pre")
  90.     register_forward(FM_ClientDisconnect,"fm_client_disconnect_post")
  91.     register_forward(FM_EmitSound,"fm_emitsound")
  92.     register_forward(FM_ClientKill,"fm_kill")
  93.     unregister_forward(FM_Spawn,register_forward(FM_Spawn,"fm_spawn"))
  94.    
  95.     // misc
  96.     set_cvar_string("sv_skyname",map_skybox)
  97.     set_cvar_num("sv_skycolor_r",0)
  98.     set_cvar_num("sv_skycolor_g",0)
  99.     set_cvar_num("sv_skycolor_b",0)
  100.    
  101.     set_lights(map_light)
  102. }
  103.  
  104. public event_newround()
  105. {
  106.     client_cmd(0,"mp3 stop")
  107.     b_prepare = true
  108.    
  109.     if(!task_exists(task_random))
  110.     {
  111.         v_countdown = 20
  112.         set_task(1.0,"task_random_hidden",task_random,_,_,"b")
  113.     }
  114. }
  115.  
  116. public event_curweapon(id)
  117. {
  118.     if(!is_user_alive(id) || !is_user_connected(id))
  119.         return PLUGIN_HANDLED
  120.    
  121.     if(get_user_weapon(id) == CSW_KNIFE && b_hidden[id])
  122.     {
  123.         set_pev(id,pev_viewmodel2,hidden_model_hand)
  124.         set_pev(id,pev_weaponmodel2,"")
  125.         set_pev(id,pev_gravity,0.6)
  126.     }
  127.    
  128.     if(get_user_weapon(id) != CSW_KNIFE && b_hidden[id])
  129.     {
  130.         strip_user_weapons(id)
  131.         give_item(id,"weapon_knife")
  132.     }
  133.    
  134.     return PLUGIN_CONTINUE
  135. }
  136.  
  137. public hm_spawn(id)
  138. {
  139.     if(!is_user_alive(id) || !is_user_connected(id))
  140.         return PLUGIN_HANDLED
  141.    
  142.     b_hidden[id] = false
  143.     remove_task(id+task_hud)
  144.        
  145.     set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,254)
  146.    
  147.     strip_user_weapons(id)
  148.     give_item(id,"weapon_knife")
  149.    
  150.     set_task(0.6,"menu_wpn",id);
  151.    
  152.     cs_set_player_maxspeed(id,250.0)
  153.     cs_set_player_model(id,human_model_player[random(sizeof(human_model_player))])
  154.    
  155.     return PLUGIN_CONTINUE
  156. }
  157.  
  158. public hm_killed(vic,atk,gib)
  159. {
  160.     if(b_killedbyhidden[vic])
  161.     {
  162.         b_killedbyhidden[vic] = false
  163.         set_msg_block(get_user_msgid("ClCorpse"), BLOCK_ONCE)
  164.         SetHamParamInteger(3,2)
  165.         set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
  166.     }
  167.     if(b_hidden[vic])
  168.     {
  169.         b_hidden[vic] = false
  170.     }
  171. }
  172.  
  173. public hm_takedmg(vic,ift,atk,Float:dmg,bit)
  174. {
  175.     if(b_prepare)
  176.         return HAM_SUPERCEDE
  177.    
  178.     if(b_hidden[atk])
  179.     {
  180.         SetHamParamFloat(4,dmg*9999)
  181.         b_killedbyhidden[vic] = true
  182.         set_user_health(atk,get_user_health(atk) + get_user_health(vic))
  183.         emit_sound(atk,CHAN_STATIC,hidden_sound_taunt[random(sizeof(hidden_sound_taunt))],VOL_NORM,ATTN_NORM,0,PITCH_NORM)
  184.         return HAM_IGNORED
  185.     }
  186.    
  187.     return HAM_IGNORED
  188. }
  189.  
  190. public hm_use(ent,caller,act,use)
  191. {
  192.     if((use == 2) && is_user_connected(caller) && b_hidden[caller]) return HAM_SUPERCEDE
  193.     return HAM_IGNORED
  194. }
  195.  
  196. public hm_touch(wpn,id)
  197. {
  198.     if(!is_user_connected(id)) return HAM_IGNORED
  199.     if(b_hidden[id]) return HAM_SUPERCEDE
  200.    
  201.     return HAM_IGNORED
  202. }
  203.  
  204. public hm_weapon_spawn(ent)
  205. {
  206.     set_pev(ent,pev_flags,FL_KILLME)
  207.     dllfunc(DLLFunc_Think,ent)
  208.     return HAM_IGNORED
  209. }
  210.  
  211. public msg_status_icn(msgid,msgdest,id)
  212. {
  213.     static icon[8]
  214.     get_msg_arg_string(2,icon,7)
  215.     if(equal(icon,"buyzone") && get_msg_arg_int(1))
  216.     {
  217.         set_pdata_int(id,235,get_pdata_int(id,235) & ~(1<<0))
  218.         return PLUGIN_HANDLED
  219.     }
  220.     return PLUGIN_CONTINUE
  221. }
  222.  
  223. public msg_text(msgid,msgdest,id)
  224. {
  225.     static msg[32]
  226.     get_msg_arg_string(2,msg,charsmax(msg))
  227.    
  228.     if(equal(msg,"#Terrorists_Win"))
  229.     {
  230.         set_msg_arg_string(2,"Hidden win!")
  231.     }
  232.     if(equal(msg,"#CTs_Win"))
  233.     {
  234.         set_msg_arg_string(2,"Human win!")
  235.     }
  236. }
  237.  
  238. public msg_sendaudio()
  239. {
  240.     static msg[10]
  241.     get_msg_arg_string(2,msg,charsmax(msg))
  242.    
  243.     switch(msg[7])
  244.     {
  245.         case 'c','t','r' : return PLUGIN_HANDLED
  246.     }
  247.    
  248.     return PLUGIN_CONTINUE
  249. }
  250.  
  251. public fm_client_disconnect_pre(id)
  252. {
  253.     b_hidden[id] = false
  254.     b_killedbyhidden[id] = false
  255.     remove_task(id+task_hud)
  256. }
  257.  
  258. public fm_client_disconnect_post(id)
  259. {
  260.     if(!get_hidden_count() && !task_exists(task_random))
  261.     {
  262.         v_countdown = 20
  263.         set_task(1.0,"task_random_hidden",task_random,_,_,"b")
  264.     }
  265. }
  266.  
  267. public fm_emitsound(id,channel,const sample[],Float:volume,Float:attn,flags,pitch)
  268. {
  269.     if(!is_user_connected(id)) return FMRES_IGNORED
  270.     if(!b_hidden[id]) return FMRES_IGNORED
  271.    
  272.     if(sample[0] == 'h' && sample[3] == 't' && sample[6] == 'e')
  273.         return FMRES_SUPERCEDE
  274.    
  275.     if(sample[7] == 'b' && sample[10] == 't')
  276.     {
  277.         emit_sound(id,channel,hidden_sound_pain[random(sizeof(hidden_sound_pain))],volume,attn,flags,pitch)
  278.         return FMRES_SUPERCEDE
  279.     }
  280.    
  281.     if(sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a')))
  282.     {
  283.         emit_sound(id,channel,hidden_sound_die[random(sizeof(hidden_sound_die))],volume,attn,flags,pitch)
  284.         return FMRES_SUPERCEDE
  285.     }
  286.    
  287.     return FMRES_IGNORED
  288. }
  289.  
  290. public fm_kill()
  291. {
  292.     return FMRES_SUPERCEDE
  293. }
  294.  
  295. public fm_spawn(ent)
  296. {
  297.     if(!pev_valid(ent)) return FMRES_IGNORED
  298.    
  299.     new class[32],j
  300.     pev(ent,pev_classname,class,charsmax(class))
  301.    
  302.     for(j = 0; j < sizeof object_ent; j++)
  303.     {
  304.         if(equal(class,object_ent[j]))
  305.         {
  306.             engfunc(EngFunc_RemoveEntity,ent)
  307.             return FMRES_SUPERCEDE
  308.         }
  309.     }
  310.    
  311.     return FMRES_IGNORED
  312. }
  313.  
  314. /////////////////////////////////// HANDLER
  315. public task_random_hidden()
  316. {
  317.     v_countdown--
  318.     if(!v_countdown)
  319.     {
  320.         remove_task(task_random)
  321.         new player[32],num
  322.         get_players(player,num,"ah")
  323.         if(!num) return
  324.         set_user_hidden(player[random(num)])
  325.         return
  326.     }
  327.     client_print(0,print_center,"Random hidden will appear in %d second(s)",v_countdown)
  328.     if(v_countdown < 11) client_cmd(0,"spk gr/thehidden/%d.wav",v_countdown)
  329. }
  330.  
  331. public menu_wpn(id)
  332. {
  333.     if(!is_user_connected(id) || !is_user_alive(id))
  334.         return PLUGIN_HANDLED
  335.    
  336.     new menu = menu_create("Class Menu", "mh_MenuClass");
  337.  
  338.     menu_additem(menu, "ASSAULT A1", "", 0); // case 0
  339.     menu_additem(menu, "ASSAULT A2", "", 0); // case 1
  340.     menu_additem(menu, "ASSAULT A3", "", 0); // case 2
  341.     menu_additem(menu, "SUPPORT S1", "", 0); // case 3
  342.     menu_additem(menu, "SUPPORT S2", "", 0); // case 4
  343.     menu_additem(menu, "SUPPORT S3", "", 0); // case 5
  344.  
  345.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  346.  
  347.     menu_display(id, menu, 0);
  348.  
  349.     return PLUGIN_HANDLED;
  350. }
  351.  
  352. public mh_MenuClass(id, menu, item)
  353. {
  354.     if(!is_user_connected(id)) return PLUGIN_HANDLED;
  355.    
  356.     if(item == MENU_EXIT)
  357.     {
  358.         menu_cancel(id);
  359.         return PLUGIN_HANDLED;
  360.     }
  361.  
  362.     new command[6], name[64], access, callback;
  363.  
  364.     menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
  365.  
  366.     switch(item)
  367.     {
  368.         case 0:
  369.         {
  370.             give_item(id, "weapon_deagle")
  371.             give_item(id, "weapon_m3")
  372.             cs_set_user_bpammo(id, CSW_DEAGLE, 14)
  373.             cs_set_user_bpammo(id, CSW_M3, 28)
  374.         }
  375.         case 1:
  376.         {
  377.             give_item(id, "weapon_p228")
  378.             give_item(id, "weapon_m4a1")
  379.             cs_set_user_bpammo(id, CSW_P228, 26)
  380.             cs_set_user_bpammo(id, CSW_M4A1, 30)
  381.         }
  382.         case 2:
  383.         {
  384.             give_item(id, "weapon_fiveseven")
  385.             give_item(id, "weapon_ak47")
  386.             cs_set_user_bpammo(id, CSW_FIVESEVEN, 20)
  387.             cs_set_user_bpammo(id, CSW_AK47, 30)
  388.         }
  389.         case 3:
  390.         {
  391.             give_item(id, "weapon_smokegrenade")
  392.             give_item(id, "weapon_fiveseven")
  393.             give_item(id, "weapon_xm1014")
  394.             cs_set_user_bpammo(id, CSW_FIVESEVEN, 20)
  395.             cs_set_user_bpammo(id, CSW_XM1014, 28)
  396.         }
  397.         case 4:
  398.         {
  399.             give_item(id, "weapon_smokegrenade")
  400.             give_item(id, "weapon_p228")
  401.             give_item(id, "weapon_p90")
  402.             cs_set_user_bpammo(id, CSW_P228, 26)
  403.             cs_set_user_bpammo(id, CSW_P90, 50)
  404.         }
  405.         case 5:
  406.         {
  407.             give_item(id, "weapon_smokegrenade")
  408.             give_item(id, "weapon_fiveseven")
  409.             give_item(id, "weapon_m249")
  410.             cs_set_user_bpammo(id, CSW_FIVESEVEN, 20)
  411.             cs_set_user_bpammo(id, CSW_M249, 120)
  412.         }
  413.     }
  414.  
  415.     menu_destroy(menu);
  416.  
  417.     return PLUGIN_HANDLED;
  418. }
  419.  
  420. public task_show_hud(id)
  421. {
  422.     id-=task_hud
  423.     if(!is_user_connected(id)) return
  424.    
  425.     set_hudmessage(0, 64, 0, 0.02, 0.9, 0, 6.0, 1.1, 0.5, 0.6, -1)
  426.     ShowSyncHudMsg(id, CreateHudSyncObj(), "HEALTH: %d", pev(id, pev_health))
  427. }
  428.  
  429. get_hidden_count()
  430. {
  431.     new y,j
  432.     y=0
  433.     for(j=1;j<=get_maxplayers();j++)
  434.     {
  435.         if(!is_user_connected(j)) continue
  436.         if(b_hidden[j]) y++
  437.     }
  438.     return y
  439. }
  440.  
  441. set_user_hidden(id)
  442. {
  443.     b_prepare = false
  444.     b_hidden[id] = true
  445.    
  446.     strip_user_weapons(id)
  447.     give_item(id,"weapon_knife")
  448.    
  449.     team_transfer()
  450.     cs_set_player_team(id,CsTeams:CS_TEAM_T)
  451.     cs_set_user_team(id,CS_TEAM_T)
  452.     cs_set_player_model(id,hidden_model_player)
  453.     cs_set_player_maxspeed(id,600.0)
  454.    
  455.     set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,14)
  456.     set_user_health(id,600)
  457.    
  458.     remove_task(id+task_hud)
  459.     set_task(1.0, "task_show_hud", id+task_hud, _, _, "b")
  460.    
  461.     new name[32]; get_user_name(id,name,charsmax(name))
  462.     client_print(0,print_center,"'%s' has become the hidden...",name)
  463.     client_cmd(0,"mp3 loop %s",hidden_bgm[random(sizeof(hidden_bgm))])
  464. }
  465.  
  466. public team_transfer()
  467. {
  468.     for(new i = 1; i < get_maxplayers(); i++)
  469.     {
  470.         if(is_user_alive(i) && is_user_connected(i) && !b_hidden[i])
  471.         {
  472.             cs_set_player_team(i,CS_TEAM_CT,1)
  473.         }
  474.     }
  475. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement