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

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 712|回复: 7

[灌水] 会插件的来看下,这源码倒地哪里错误…… [复制链接]

Rank: 10Rank: 10Rank: 10

帖子
1250
精华
0
声望
3577 点
金币
470 Mold
被赞许
45 次
注册时间
2010-7-13

可爱小猫

发表于 2010-11-27 18:39:34 |显示全部楼层
本帖最后由 水蛭 于 2010-11-27 18:43 编辑

这是一个刀子击退插件的源码,本来是人类和幸存者使用,僵尸被打飞,我想修改为复仇天神专用——
打飞效果的确是给复仇天神了,不过他的跳跃效果和模型使用都没有得到,跳跃似乎是人类使用,刀子P模型是人类使用,怎么修改。
谁能修改的顺便说下哪里的问题标明下下……?
(可以的话把跳跃效果删掉吧= =)
等级不够就没办法悬赏……郁闷
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <engine>
  4. #include <zombieplague>

  5. #define CUSTOM_MODELS  1
  6. #define MAX_KNIFE_SNDS 9

  7. #if (CUSTOM_MODELS)
  8.         new MODEL_PLAYER[]         = "models/zombie_plague/p_zombieknife_t.mdl"
  9. #endif

  10. #define PLUGIN        "Knife Knockback"
  11. #define VERSION        "3.0"
  12. #define AUTHOR        "CHyC"


  13. new cvar_knife , cvar_knock , cvar_jump , cvar_nemesis , cvar_sounds;

  14. new const knife_sounds[][] =
  15. {
  16.         "weapons/knife_deploy1.wav",
  17.         "weapons/knife_hit1.wav",
  18.         "weapons/knife_hit2.wav",
  19.         "weapons/knife_hit3.wav",
  20.         "weapons/knife_hit4.wav",
  21.         "weapons/knife_hitwall1.wav",
  22.         "weapons/knife_slash1.wav",
  23.         "weapons/knife_slash2.wav",
  24.         "weapons/knife_stab.wav"
  25. }

  26. new const oldknife_sounds[][] =
  27. {
  28.         "weapons/knife_deploy1.wav",
  29.         "weapons/knife_hit1.wav",
  30.         "weapons/knife_hit2.wav",
  31.         "weapons/knife_hit3.wav",
  32.         "weapons/knife_hit4.wav",
  33.         "weapons/knife_hitwall1.wav",
  34.         "weapons/knife_slash1.wav",
  35.         "weapons/knife_slash2.wav",
  36.         "weapons/knife_stab.wav"
  37. }

  38. public plugin_init()
  39. {
  40.         register_plugin(PLUGIN , VERSION , AUTHOR);
  41.         register_cvar("zp_knife", VERSION, FCVAR_SERVER);
  42.         register_event("Damage" , "event_Damage" , "b" , "2>0");
  43.         register_event( "CurWeapon", "Event_CurWeapon", "be", "1=1" );
  44.         register_forward(FM_EmitSound, "fw_EmitSound");

  45.         cvar_knife         = register_cvar("zp_knife_knock" , "1");
  46.         cvar_knock           = register_cvar("zp_knife_power" , "10");
  47.         cvar_jump          = register_cvar("zp_knife_jump", "300.0");
  48.         cvar_nemesis       = register_cvar("zp_knife_nemesis" , "1");
  49.         cvar_sounds        = register_cvar("zp_knife_sound" , "1");
  50. }

  51. public event_Damage(id)
  52. {
  53.         if(!get_pcvar_num(cvar_knife))
  54.                 return PLUGIN_CONTINUE;

  55.         if(!is_user_alive(id))
  56.                 return PLUGIN_CONTINUE;

  57.         if(zp_get_user_nemesis(id) && get_pcvar_num(cvar_nemesis) == 0)
  58.                 return PLUGIN_CONTINUE;

  59.         new weapon , attacker = get_user_attacker(id , weapon);

  60.         if(!is_user_alive(attacker))
  61.                 return PLUGIN_CONTINUE;

  62.         if(weapon == CSW_KNIFE)
  63.         {
  64.                 new Float:vec[3];
  65.                 new Float:oldvelo[3];
  66.                 get_user_velocity(id, oldvelo);
  67.                 create_velocity_vector(id , attacker , vec);
  68.                 vec[0] += oldvelo[0];
  69.                 vec[1] += oldvelo[1];
  70.                 set_user_velocity(id , vec);
  71.         }

  72.         return PLUGIN_CONTINUE;
  73. }

  74. public Event_CurWeapon( id )
  75. {
  76.         if (!is_user_connected(id) || zp_get_user_zombie(id))
  77.                 return PLUGIN_CONTINUE
  78.        
  79.         new WeaponID = read_data(2)
  80.         if (WeaponID != CSW_KNIFE)
  81.                 return  PLUGIN_CONTINUE
  82.        
  83.         #if (CUSTOM_MODELS)
  84.                 entity_set_string(id, EV_SZ_weaponmodel, MODEL_PLAYER)
  85.         #endif
  86.        
  87.         return PLUGIN_CONTINUE;
  88. }

  89. stock create_velocity_vector(victim,attacker,Float:velocity[3])
  90. {
  91.         if(!is_user_alive(victim) || !zp_get_user_nemesis(attacker))
  92.                 return 0;

  93.         new Float:vicorigin[3];
  94.         new Float:attorigin[3];
  95.         entity_get_vector(victim   , EV_VEC_origin , vicorigin);
  96.         entity_get_vector(attacker , EV_VEC_origin , attorigin);

  97.         new Float:origin2[3]
  98.         origin2[0] = vicorigin[0] - attorigin[0];
  99.         origin2[1] = vicorigin[1] - attorigin[1];

  100.         new Float:largestnum = 0.0;

  101.         if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
  102.         if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);

  103.         origin2[0] /= largestnum;
  104.         origin2[1] /= largestnum;

  105.         velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knock) * 3000) ) / get_entity_distance(victim , attacker);
  106.         velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knock) * 3000) ) / get_entity_distance(victim , attacker);
  107.         if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
  108.                 velocity[2] = random_float(200.0 , 275.0);

  109.         return 1;
  110. }

  111. public plugin_precache()
  112. {
  113.         for(new i = 0; i < sizeof knife_sounds; i++)
  114.                 precache_sound(knife_sounds[i])

  115.         #if (CUSTOM_MODELS)
  116.                 precache_model(MODEL_PLAYER)
  117.         #endif
  118. }


  119. public fw_EmitSound(id, channel, const sound[])
  120. {
  121.         if(!is_user_alive(id) || zp_get_user_survivor(id) || !get_pcvar_num(cvar_sounds))
  122.                 return FMRES_IGNORED
  123.         
  124.         for(new i = 0; i < sizeof knife_sounds; i++)
  125.         {
  126.                 if(equal(sound, oldknife_sounds[i]))
  127.                 {
  128.                         emit_sound(id, channel, knife_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
  129.                         return FMRES_SUPERCEDE
  130.                 }
  131.         }
  132.                        
  133.         return FMRES_IGNORED
  134. }

  135. public client_PreThink(id)
  136. {
  137.         if (!is_user_connected(id) || !is_user_alive(id) || zp_get_user_zombie(id) || zp_get_user_survivor(id))
  138.                 return PLUGIN_CONTINUE

  139.         new temp[2], weapon = get_user_weapon(id, temp[0], temp[1])
  140.         if (weapon != CSW_KNIFE)
  141.                 return PLUGIN_CONTINUE
  142.                
  143.         if ((get_user_button(id) & IN_JUMP) && !(get_user_oldbutton(id) & IN_JUMP))
  144.         {
  145.                 new flags = entity_get_int(id, EV_INT_flags)
  146.                 new waterlvl = entity_get_int(id, EV_INT_waterlevel)
  147.                
  148.                 if (!(flags & FL_ONGROUND))
  149.                         return PLUGIN_CONTINUE
  150.                 if (flags & FL_WATERJUMP)
  151.                         return PLUGIN_CONTINUE
  152.                 if (waterlvl > 1)
  153.                         return PLUGIN_CONTINUE
  154.                                
  155.                 new Float:fVelocity[3]
  156.                 entity_get_vector(id, EV_VEC_velocity, fVelocity)
  157.                 fVelocity[2] += get_pcvar_num(cvar_jump)
  158.                
  159.                 entity_set_vector(id, EV_VEC_velocity, fVelocity)
  160.                 entity_set_int(id, EV_INT_gaitsequence, 6)
  161.         }
  162.         return PLUGIN_CONTINUE;
  163. }  
复制代码
//-------------------------
需要原源码的话……附件里面包含一个原版,我没修改过的……
上次因为源码问题某帮忙修复了居然只给插件,源码不给了……我都还没设置好呢……
这次先说…不用帮忙编辑了,修改好的源码给我或者告诉我哪里怎么改……学习中……
关于return的用法都有哪些?
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 8Rank: 8

帖子
1219
精华
5
声望
1774 点
金币
377 Mold
被赞许
35 次
注册时间
2009-4-25
发表于 2010-11-27 19:39:51 |显示全部楼层
你是换V模型还是人物模型,而且貌似模型在ZP里更换是被限制的

使用道具 举报

Rank: 8Rank: 8

帖子
1219
精华
5
声望
1774 点
金币
377 Mold
被赞许
35 次
注册时间
2009-4-25
发表于 2010-11-27 19:43:09 |显示全部楼层
return嘛,我很少用,貌似只是对一个函数或者一个事件进行返回..
比如你弄个叫abc()的函数成功就返回给上面1就return 1失败返回给上边0就return 0
在if里怎样判断你应该知道if(abc() == 0或1)
已有 1 人评分声望 收起 理由
水蛭 + 5 同感谢……不怎么看得懂

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

使用道具 举报

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

帖子
406
精华
0
声望
9411 点
金币
1421 Mold
被赞许
4 次
注册时间
2009-12-18
发表于 2010-11-27 21:10:15 |显示全部楼层
本帖最后由 a7811311622 于 2010-11-27 21:11 编辑
这是一个刀子击退插件的源码,本来是人类和幸存者使用,僵尸被打飞,我想修改为复仇天神专用——
打飞效果 ...
水蛭 发表于 2010-11-27 18:39

跳躍效果會失敗是因為…你可能誤解了復仇天神的判斷條件…當某ID是復仇天神時…
「zp_get_user_zombie(id)」和「zp_get_user_nemesis(id)」都是「true」…
有關跳躍的內容是寫在「public client_PreThink(id)」裡…
但是你的第一個判斷就將「zp_get_user_zombie(id)」都否定了…
復仇天神自然不會有跳躍效果…而P模型使用也是同道理…
「public Event_CurWeapon( id )」裡的第一個判斷也是相同的誤判…

解決方法:
兩個public都將第一個判斷裡的「zp_get_user_zombie(id)」改成「!zp_get_user_nemesis(id)」…
已有 1 人评分声望 收起 理由
水蛭 + 5 非常感谢

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
1250
精华
0
声望
3577 点
金币
470 Mold
被赞许
45 次
注册时间
2010-7-13

可爱小猫

发表于 2010-11-27 21:31:14 |显示全部楼层
回复 4# a7811311622


    那人类呢?怎么禁止使用设置的模型,我想让他所有效果只给复仇。打飞全给人类。非常感谢

使用道具 举报

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

帖子
406
精华
0
声望
9411 点
金币
1421 Mold
被赞许
4 次
注册时间
2009-12-18
发表于 2010-11-27 22:26:22 |显示全部楼层
回复  a7811311622


    那人类呢?怎么禁止使用设置的模型,我想让他所有效果只给复仇。打飞全给人类。 ...
水蛭 发表于 2010-11-27 21:31

LZ指的是P模型?還是人物模型?
P模型我在前面有說明…請查看…
至於人物模型…要改ZP主插件…不然效果會被主插件覆蓋掉…

打飛全給人類:
只要將「public event_Damage(id)」裡的「if(!is_user_alive(attacker))」換成「if(!is_user_alive(attacker) || zp_get_user_zombie(attacker))」就能限制只有人類才有打飛效果…
已有 1 人评分声望 收起 理由
水蛭 + 5 非常感谢

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
1250
精华
0
声望
3577 点
金币
470 Mold
被赞许
45 次
注册时间
2010-7-13

可爱小猫

发表于 2010-11-28 06:07:00 |显示全部楼层
本帖最后由 水蛭 于 2010-11-28 06:15 编辑

回复 6# a7811311622


    非常感谢,但是你写的攻击者是僵尸而不是复仇吧……我要的是复仇天神可以使用P模型,可以使用新跳跃,可以打飞人类。
顺便问下加个!是什么意思?强调这个是比较重要?
///////////////////
修改完成!非常感谢各位的帮忙!攻击者我设的是复仇天神,现在跳跃、P模型使用者和可打飞别人的效果似乎全给复仇了,不过怎么好像幸存者也有跳跃

使用道具 举报

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

帖子
406
精华
0
声望
9411 点
金币
1421 Mold
被赞许
4 次
注册时间
2009-12-18
发表于 2010-11-28 11:13:59 |显示全部楼层
回复  a7811311622


    非常感谢,但是你写的攻击者是僵尸而不是复仇吧……我要的是复仇天神可以使用P模 ...
水蛭 发表于 2010-11-28 06:07

加個「!」在前面代表的是「相反」…
例如「is_user_alive(id)」是判斷此ID玩家還存活…
反之「!is_user_alive(id)」是判斷此ID玩家已死亡…

倖存者會跳躍…?照理來說「public client_PreThink(id)」
裡的第一個假設就有判斷「zp_get_user_survivor(id)」了…
不會讓倖存者跳躍才對…

使用道具 举报

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

回顶部