User-Profile-Image
hankin
  • 5
  • 关于
  • 分类
    • 路由器
    • 电脑相关
    • 游戏相关
    • 未分类
    • 服务器相关
    • 数据库
  • 页面
    • 关于
  • 友链
    • 华夏网盟
Help?

Please contact us on our email for need any support

Support
  • 关于
    首页   ›   游戏相关   ›   正文
游戏相关

求生之路 超级轻功(多重跳)-源码

2021-02-23 08:51:00
111  0 0
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>

#define PLUGIN_VERSION "1.0.3"


new Float:JumpTime[MAXPLAYERS+1];
new bool:JumpEnabled[MAXPLAYERS+1];
new bool:Jumped[MAXPLAYERS+1];
new Buffer[MAXPLAYERS+1];


new Handle:timer_handle=INVALID_HANDLE;
new Handle:Enabled = INVALID_HANDLE;
new Handle:InitEnabled = INVALID_HANDLE;

new Handle:CVarDamage = INVALID_HANDLE;
new Handle:CVarxymult = INVALID_HANDLE;
new Handle:CVarzmult = INVALID_HANDLE;
new Handle:CVarDamage2 = INVALID_HANDLE;
new Handle:CVarxymult2 = INVALID_HANDLE;
new Handle:CVarzmult2 = INVALID_HANDLE;

new Handle:CVarTick = INVALID_HANDLE;
new Handle:CVarMsgTime = INVALID_HANDLE;


   new g_iVelocity;
   new all_iVelocity;


public Plugin:myinfo =
{
 name = "轻功插件",
 author = "小海",
 description = "轻功插件",
 version = PLUGIN_VERSION,
}
 new String:sdemage[10];
 new String:sdemage2[10];
 new Float:zmult;
 new Float:xymult;
 new Float:zmult2;
 new Float:xymult2;
 new time;
 new difficult;
 new Float:velocity[3];
 new bool:suppermode=false;

 new damage;
 new damage2;

 new SupperKey=IN_DUCK;
 new DisableKey=IN_SPEED;

public OnPluginStart()
{
 CreateConVar("l4d_incappedpillspop_version", PLUGIN_VERSION, "   ", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD);

 Enabled = CreateConVar("l4d_jump_enabled", "1", " 1 : 启动轻功 , 0: 禁用轻功 ", FCVAR_PLUGIN);
 InitEnabled = CreateConVar("l4d_jump_init", "1", " 1 : 初始启动 , 0: 初始禁用 ", FCVAR_PLUGIN);
 CVarzmult = CreateConVar("l4d_jump_zmult", "2.2", "垂直加速", FCVAR_PLUGIN);
 CVarxymult = CreateConVar("l4d_jump_xymult", "2.5", "水平加速", FCVAR_PLUGIN);
 CVarDamage = CreateConVar("l4d_jump_damage", "5", "使用轻功反伤", FCVAR_PLUGIN);
 CVarzmult2 = CreateConVar("l4d_jump_zmult2", "4.0", "超级轻功垂直加速", FCVAR_PLUGIN);
 CVarxymult2 = CreateConVar("l4d_jump_xymult2", "3.6", "超级轻功水平加速", FCVAR_PLUGIN);
 CVarDamage2 = CreateConVar("l4d_jump_damage2", "10", "使用超级轻功反伤", FCVAR_PLUGIN);
 CVarTick = CreateConVar("l4d_jump_difficult", "0.25", "使用轻功难易度, 越小越难 单位 秒", FCVAR_PLUGIN);
 CVarMsgTime = CreateConVar("l4d_jump_showtime", "200", "提示间隔", FCVAR_PLUGIN);

 AutoExecConfig(true, "l4d_jump_v13");

 damage=GetConVarInt(CVarDamage );
 damage2=GetConVarInt(CVarDamage2 );
 Format(sdemage, sizeof(sdemage),  "%i", damage);
 Format(sdemage2, sizeof(sdemage2),  "%i", damage2);

 HookConVarChange(CVarzmult, ConVarChange);
 HookConVarChange(CVarxymult, ConVarChange);
 HookConVarChange(CVarzmult2, ConVarChange);
 HookConVarChange(CVarxymult2, ConVarChange);
 HookConVarChange(CVarTick, ConVarChange);

 zmult=GetConVarFloat(CVarzmult );
 xymult=GetConVarFloat(CVarxymult );
 zmult2=GetConVarFloat(CVarzmult2 );
 xymult2=GetConVarFloat(CVarxymult2 );
 difficult=GetConVarFloat(CVarTick);

 g_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]");
 all_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]");

 HookEvent("round_end", RoundEnd);
 HookEvent("mission_lost", RoundEnd);
 HookEvent("finale_win", RoundEnd);

 HookEvent("round_start", RoundStart);
 HookEvent("player_jump", player_jump);
  RegConsoleCmd("sm_qinggong", Command_QG);
  RegConsoleCmd("sm_qg", Command_QG);

 Reset();
}
public ConVarChange(Handle:convar, const String:oldValue[], const String:newValue[])
{
 zmult=GetConVarFloat(CVarzmult );
 xymult=GetConVarFloat(CVarxymult );
 zmult2=GetConVarFloat(CVarzmult2 );
 xymult2=GetConVarFloat(CVarxymult2 );
 difficult=GetConVarFloat(CVarTick);
}


public Action:Msg(Handle:timer, any:data)
{
 PrintToChatAll("\x01[sea]\x03输入: \x04!qg\x03可以学会轻功");
   return Plugin_Continue;
}
public Action:Command_QG(client, args)
{
 if (client == 0 || GetClientTeam(client) != 2 || !IsPlayerAlive(client))
  return Plugin_Handled;
 JumpEnabled[client]=!JumpEnabled[client];
 if( JumpEnabled[client])
 {
  PrintToChat(client, "\x01[sea]\x03你练成了轻功,使用方法:\x04快速按跳2次(同时按住蹲下键或使用键)");
 }
 else
 {
  PrintToChat(client, "\x01[sea]\x03你废除了轻功");
 }

   return Plugin_Handled;
}
public Action:player_jump(Handle:hEvent, const String:name[], bool:dontBroadcast)
{

 if(GetConVarInt(Enabled)==0)return;
 new client = GetClientOfUserId(GetEventInt(hEvent, "userid"));
 if (!client) return;
 if (!IsClientInGame(client)) return;
 if (GetClientTeam(client)!=2) return;
 if (!IsPlayerAlive(client)) return;

  new buttons = GetClientButtons(client);
 if( (buttons & DisableKey))
 {
  return;
 }
 Buffer[client]=0;
 JumpTime[client]=GetEngineTime() ;

 Jumped[client]=true;
 //PrintToChat(client, "jump t %f",JumpTime[client]);
 return;
 }
new Float:duration=0;
new buttons;
public OnGameFrame()
{
 if(GetConVarInt(Enabled)==0)return;
 time=GetEngineTime();
   for (new client = 1; client <= MaxClients; client++)
 {
  if (JumpEnabled[client] && Jumped[client] && IsClientInGame(client) && GetClientTeam(client)==2 && IsPlayerAlive(client))
  {
   duration=FloatSub(time,JumpTime[client]);
   buttons = GetClientButtons(client);
   if(FloatCompare(duration , difficult)==1 || (buttons & DisableKey))
   {
    JumpTime[client]=0;
    Jumped[client]=false;
    //PrintToChat(client, "out");
    continue;
   }
    if( (buttons & IN_JUMP)  )
   {
    if(Buffer[client]>1)
    {
     //sPrintToChat(client, "%f %f %f", time, duration, difficult);
     suppermode=false;
     if((buttons & SupperKey) || (buttons & IN_USE))
     {
      suppermode=true;
     }

     GetEntDataVector(client, all_iVelocity, velocity);
     if( velocity[2] >0)
     {
      if  (suppermode)
      {
       velocity[0]=velocity[0]*xymult2;
       velocity[1]=velocity[1]*xymult2;
       velocity[2]=velocity[2]*zmult2;
      }
      else
      {
       velocity[0]=velocity[0]*xymult;
       velocity[1]=velocity[1]*xymult;
       velocity[2]=velocity[2]*zmult;
      }
      TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity);
      SetEntDataVector(client, all_iVelocity, velocity);
      Jumped[client]=false;
      JumpTime[client]=0;

      if(suppermode)
      {
       if(damage2>0) DamageEffect(client, sdemage2) ;
      }
      else
      {
       if(damage>0)DamageEffect(client, sdemage);
      }

      if(suppermode)
      {
       PrintCenterText(client, "超级轻功");
      }
      else
      {
       PrintCenterText(client, "轻功");
      }
      }
     else
     {
      Jumped[client]=false;
     }

    }
    }
   else
   {
    Buffer[client]++;
   }
   //new cl_flags;

   //GetEntDataVector(client,g_iVelocity,speed);
   //cl_flags = GetEntityFlags(client);
   //if(speed[2] >= 0 || (cl_flags & FL_ONGROUND))
   //{
   //   Jumped[client]=0;
   // timepasted[client]=0;
   //}
  }
 }
 return;
}

 stock DamageEffect(target, String:demage[])
{
 new String:N[20];
 Format(N, 20, "target%d", target);
 new pointHurt = CreateEntityByName("point_hurt");   // Create point_hurt
 DispatchKeyValue(target, "targetname", N);   // mark target
 DispatchKeyValue(pointHurt, "Damage", demage);     // No Damage, just HUD display. Does stop Reviving though
 DispatchKeyValue(pointHurt, "DamageTarget", N);  // Target Assignment
 DispatchKeyValue(pointHurt, "DamageType", "65536");   // Type of damage
 DispatchSpawn(pointHurt);         // Spawn descriped point_hurt
 AcceptEntityInput(pointHurt, "Hurt");       // Trigger point_hurt execute
 AcceptEntityInput(pointHurt, "Kill");       // Remove point_hurt
 //DispatchKeyValue(target, "targetname", "cake");   // Clear target's mark
}


public Action:RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
  if(timer_handle != INVALID_HANDLE )
  {
  KillTimer(timer_handle);
  timer_handle=INVALID_HANDLE;
 }

 return Plugin_Continue;
}

public Action:RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{

 if(timer_handle != INVALID_HANDLE )
 {
  KillTimer(timer_handle);
  timer_handle=INVALID_HANDLE;
 }
 if(timer_handle == INVALID_HANDLE)
 {
  timer_handle=CreateTimer(GetConVarFloat(CVarMsgTime), Msg, 0, TIMER_REPEAT);
 }
 return Plugin_Continue;
}

stock CheatCommand(client, String:command[], String:parameter1[], String:parameter2[])
{
 new userflags = GetUserFlagBits(client);
 SetUserFlagBits(client, ADMFLAG_ROOT);
 new flags = GetCommandFlags(command);
 SetCommandFlags(command, flags & ~FCVAR_CHEAT);
 FakeClientCommand(client, "%s %s %s", command, parameter1, parameter2);
 SetCommandFlags(command, flags);
 SetUserFlagBits(client, userflags);
}

Reset()
{
 new bool:e=GetConVarInt(InitEnabled)>0;
 for (new x = 0; x < MAXPLAYERS+1; x++)
 {
    JumpEnabled[x]=e;
 }
}
评论 (0)

Click here to cancel reply.

欢迎您 游客  

近期文章

  • 用于网速测试的下载测速文件合集
  • docker构建SB镜像
  • pterodactl docker install
  • OpenWRT流量实时监控插件
  • docker部署dify

近期评论

No comments to show.

归档

  • 1 月 2026
  • 8 月 2025
  • 5 月 2025
  • 4 月 2025
  • 3 月 2025
  • 2 月 2025
  • 12 月 2024
  • 4 月 2024
  • 10 月 2023
  • 8 月 2023
  • 4 月 2023
  • 3 月 2023
  • 2 月 2023
  • 10 月 2021
  • 5 月 2021
  • 3 月 2021
  • 2 月 2021

分类

  • 数据库
  • 服务器相关
  • 未分类
  • 游戏相关
  • 电脑相关
  • 路由器
Copyright © 2026
smarty_hankin 主题. Designed by hankin
主页
页面
  • 关于
博主
hkthomas 管理员
136 文章 0 评论 18365 浏览
测试
测试