1. 3oJIoTou Пользователь

    Регистрация:
    07.12.15
    Сообщения:
    21
    Симпатии:
    10
    Пол:
    Мужской
    Приветствую товарищи, знающие толк в этом не легком деле!
    Помогите с плагином пожалуйста.
    Нужно в нем сделать так чтоб нож выбирался в начале раунда(и при этом команда /knife чтоб оставалась) и чтоб выбор ножа можно было запомнить или сохранить(чтоб не надоедал каждый раз и не вылазил). Ну и чтоб нож можно было выбирать один раз за раунд.
    Код (PHP):
    1. #include <amxmodx>
    2. #include <engine>
    3. #include <fakemeta>
    4. #include <fun>
    5. #include <amxmisc>
    6. #include <hamsandwich>
    7. #include <xs>
    8. #include <dhudmessage>
    9. #include <cstrike>
    10.  
    11. #define PLUGIN "Knife Mod"
    12. #define VERSION "1.0"
    13. #define AUTHOR "korolr"
    14.  
    15. #define TASK_INTERVAL 4.0
    16. #define MAX_HEALTH 255
    17.  
    18. new knife_model[33]
    19. new g_Menu
    20.  
    21. new CVAR_HIGHSPEED
    22. new CVAR_LOWSPEED
    23. new CVAR_LOWGRAV
    24. new CVAR_NORMGRAV
    25. new CVAR_HEALTH_ADD
    26. new CVAR_HEALTH_MAX
    27. new CVAR_DAMAGE
    28.  
    29.  
    30.  
    31. public plugin_init(){
    32.  
    33.  register_plugin(PLUGIN, VERSION, AUTHOR)
    34.  
    35.  register_event("Damage","event_damage","be")
    36.  register_event("CurWeapon","CurWeapon","be","1=1")
    37.  
    38.  g_Menu = register_menuid("Knife Mod")
    39.  register_menucmd(g_Menu, 1023,"knifemenu")
    40.  
    41.  register_clcmd("say /knife","display_knife")
    42.  
    43.  CVAR_HIGHSPEED = register_cvar("km_highspeed","340")
    44.  CVAR_LOWSPEED = register_cvar("km_lowspeed","170")
    45.  CVAR_HEALTH_ADD = register_cvar("km_addhealth","3")
    46.  CVAR_HEALTH_MAX = register_cvar("km_maxhealth","70")
    47.  CVAR_DAMAGE = register_cvar("km_damage","2")
    48.  CVAR_LOWGRAV = register_cvar("km_lowgravity","400")
    49.  CVAR_NORMGRAV = get_cvar_pointer("sv_gravity")
    50.  
    51.  set_task(480.0,"kmodmsg", 0, _, _,"b")
    52. }
    53.  
    54. public plugin_precache(){
    55.  precache_model("models/knifecso/v_fire_knife.mdl")
    56.  precache_model("models/knifecso/v_ninja_knife.mdl")
    57.  precache_model("models/knifecso/v_crowbars.mdl")
    58.  precache_model("models/knifecso/v_flash_knife.mdl")
    59.  precache_model("models/knifecso/v_knife.mdl")
    60. }
    61.  
    62. public display_knife(id){
    63.  new menuBody[512]
    64.  add(menuBody, 511,"\wМеню выбора ножей CSO ^n^n")
    65.  add(menuBody, 511,"1. Мачето \r(Большой урон/Малеьнька скорость)\w^n")
    66.  add(menuBody, 511,"2. Бак нож \r(Не слышно шагов)\w^n")
    67.  add(menuBody, 511,"3. Быстрый нож \r(Большая скорость)\w^n")
    68.  add(menuBody, 511,"4. Лёгкий нож \r(Гравити)\w^n")
    69.  add(menuBody, 511,"5. Асасин \r(Регенирация здаровья)\w^n^n")
    70.  add(menuBody, 511,"0. Exit^n")
    71.  
    72.  new keys =( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<9 )
    73.  show_menu(id, keys, menuBody,-1,"Knife Mod")
    74. }
    75.  
    76. public knifemenu(id, key){
    77.  switch(key)
    78.  {
    79.  case 0: SetKnife(id , 4)
    80.  case 1: SetKnife(id , 2)
    81.  case 2: SetKnife(id , 3)
    82.  case 3: SetKnife(id , 1)
    83.  case 4: SetKnife(id , 0)
    84.  default: return PLUGIN_HANDLED
    85.  }
    86.  SaveData(id)
    87.  return PLUGIN_HANDLED
    88. }
    89.  
    90. public SetKnife(id , Knife){
    91.  knife_model[id]= Knife
    92.  
    93.  new Clip, Ammo, Weapon = get_user_weapon(id, Clip, Ammo)
    94.  if ( Weapon != CSW_KNIFE )
    95.  return PLUGIN_HANDLED
    96.  
    97.  new vModel[56],pModel[56]
    98.  
    99.  switch(Knife)
    100. {
    101.  case 0:{
    102.  format(vModel,55,"models/knifecso/v_knife.mdl")
    103.  
    104. }
    105.  case 1:{
    106.  format(vModel,55,"models/knifecso/v_fire_knife.mdl")
    107. }
    108.  case 2:{
    109.  format(vModel,55,"models/knifecso/v_flash_knife.mdl")
    110. }
    111.  case 3:{
    112.  format(vModel,55,"models/knifecso/v_crowbars.mdl")
    113. }
    114.  case 4:{
    115.  format(vModel,55,"models/knifecso/v_ninja_knife.mdl")
    116. }
    117. }
    118.  
    119.  entity_set_string(id, EV_SZ_viewmodel, vModel)
    120.  entity_set_string(id, EV_SZ_weaponmodel, pModel)
    121.  
    122.  return PLUGIN_HANDLED;
    123. }
    124.  
    125. public event_damage( id ){
    126.  
    127.  new victim_id = id;
    128.  if(!is_user_connected( victim_id )) return PLUGIN_CONTINUE
    129.  new dmg_take = read_data( 2 );
    130.  new dmgtype = read_data( 3 );
    131.  new Float:multiplier = get_pcvar_float(CVAR_DAMAGE);
    132.  new Float:damage = dmg_take * multiplier;
    133.  new health = get_user_health( victim_id );
    134.  
    135.  new iWeapID, attacker_id = get_user_attacker( victim_id, iWeapID );
    136.  
    137.  if(!is_user_connected( attacker_id )||!is_user_alive( victim_id )){
    138.  return PLUGIN_HANDLED
    139.  }
    140.  
    141.  if( iWeapID == CSW_KNIFE && knife_model[attacker_id]== 4 ){
    142.  
    143.  if( floatround(damage)>= health ){
    144.  if( victim_id == attacker_id ){
    145.  return PLUGIN_CONTINUE
    146.  }else{
    147.  log_kill( attacker_id, victim_id,"knife", 0 );
    148. }
    149.  
    150.  return PLUGIN_CONTINUE
    151.  }else {
    152.  if( victim_id == attacker_id ) return PLUGIN_CONTINUE
    153.  
    154.  fakedamage( victim_id,"weapon_knife", damage, dmgtype );
    155. }
    156. }
    157.  return PLUGIN_CONTINUE
    158. }
    159.  
    160. public CurWeapon(id)
    161. {
    162.  new Weapon = read_data(2)
    163.  
    164.  // Set Knife Model
    165.  SetKnife(id, knife_model[id])
    166.  
    167.  // Task Options
    168.  
    169.  if(knife_model[id]== 0 &&!task_exists(id)&& Weapon == CSW_KNIFE)
    170.  set_task(TASK_INTERVAL ,"task_healing",id,_,_,"b")
    171.  else if(task_exists(id))
    172.  remove_task(id)
    173.  
    174.  // Abilities
    175.  set_user_footsteps(id ,((knife_model[id]== 2 && Weapon == CSW_KNIFE)? 1 : 0))
    176.  
    177.  new Float:Gravity =((knife_model[id]== 1 && Weapon == CSW_KNIFE)? get_pcvar_float(CVAR_LOWGRAV): get_pcvar_float(CVAR_NORMGRAV))/ 800.0
    178.  set_user_gravity(id , Gravity)
    179.  
    180.  // Speed
    181.  new Float:Speed
    182.  if(Weapon != CSW_KNIFE || knife_model[id]< 3)
    183.  return PLUGIN_CONTINUE
    184.  else if(knife_model[id]== 3)
    185.  Speed = get_pcvar_float(CVAR_HIGHSPEED)
    186.  else if(knife_model[id]== 4)
    187.  Speed = get_pcvar_float(CVAR_LOWSPEED)
    188.  
    189.  set_user_maxspeed(id, Speed)
    190.  
    191.  return PLUGIN_HANDLED
    192.  
    193. }
    194.  
    195. stock log_kill(killer, victim, weapon[],headshot){
    196.  user_silentkill( victim );
    197.  
    198.  message_begin( MSG_ALL, get_user_msgid("DeathMsg"),{0,0,0}, 0 );
    199.  write_byte( killer );
    200.  write_byte( victim );
    201.  write_byte( headshot );
    202.  write_string( weapon );
    203.  message_end();
    204.  
    205.  new kfrags = get_user_frags( killer );
    206.  set_user_frags( killer, kfrags++);
    207.  new vfrags = get_user_frags( victim );
    208.  set_user_frags( victim, vfrags++);
    209.  
    210.  return PLUGIN_CONTINUE
    211. }
    212.  
    213.  
    214. public task_healing(id){
    215.  new addhealth = get_pcvar_num(CVAR_HEALTH_ADD)
    216.  if (!addhealth)
    217.  return
    218.  
    219.  new maxhealth = get_pcvar_num(CVAR_HEALTH_MAX)
    220.  if (maxhealth > MAX_HEALTH){
    221.  set_pcvar_num(CVAR_HEALTH_MAX, MAX_HEALTH)
    222.  maxhealth = MAX_HEALTH
    223.  }
    224.  
    225.  new health = get_user_health(id)
    226.  
    227.  if (is_user_alive(id)&&(health < maxhealth)){
    228.  set_user_health(id, health + addhealth)
    229.  set_hudmessage(0, 255, 0,-1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.1, 4)
    230.  show_hudmessage(id,"<< !!HEAL IN PROGRESS!! >>")
    231.  message_begin(MSG_ONE, get_user_msgid("ScreenFade"),{0,0,0}, id)
    232.  write_short(1<<10)
    233.  write_short(1<<10)
    234.  write_short(0x0000)
    235.  write_byte(0)
    236.  write_byte(200)
    237.  write_byte(0)
    238.  write_byte(75)
    239.  message_end()
    240. }
    241.  
    242.  else {
    243.  if (is_user_alive(id)&&(health > maxhealth))
    244.  remove_task(id)
    245. }
    246. }
    247.  
    248. public client_disconnect(id){
    249.  if(task_exists(id)) remove_task(id)
    250. }
    251.  
    252.  
    253. public kmodmsg(){
    254.  
    255.  client_print(0,print_chat,"[AMXX] Type /knife to change your knife skins")
    256. }
    257.  
    258. public client_authorized(id)
    259. {
    260.  LoadData(id)
    261. }
    262.  
    263. SaveData(id)
    264. {
    265.  
    266.  new authid[32]
    267.  get_user_authid(id, authid, 31)
    268.  
    269.  new vaultkey[64]
    270.  new vaultdata[64]
    271.  
    272.  format(vaultkey, 63,"KMOD_%s", authid)
    273.  format(vaultdata, 63,"%d", knife_model[id])
    274.  set_vaultdata(vaultkey, vaultdata)
    275. }
    276.  
    277. LoadData(id)
    278. {
    279.  new authid[32]
    280.  get_user_authid(id,authid,31)
    281.  
    282.  new vaultkey[64], vaultdata[64]
    283.  
    284.  format(vaultkey, 63,"KMOD_%s", authid)
    285.  get_vaultdata(vaultkey, vaultdata, 63)
    286.  knife_model[id]= str_to_num(vaultdata)
    287.  
    288. }
    289. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
    290. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
    291. */
    292.  
    293.