View Single Post
Peace-Maker
SourceMod Plugin Approver
Join Date: Aug 2008
Location: Germany
Old 07-07-2012 , 13:24   Re: Lysis: An experimental .smx decompiler
Reply With Quote #106

You'll need to create that weaponKB array yourself again, but the plugin itself is straight forward.

PHP Code:
new PlVers:__version 5;
new 
Float:NULL_VECTOR[3];
new 
String:NULL_STRING[1];
new 
Extension:__ext_core 68;
new 
MaxClients;
new 
Extension:__ext_sdktools 184;
public 
Plugin:myinfo =
{
    
name "KnockBack",
    
description "Weapon Knock Back",
    
author "ıı¿ııı",
    
version "1.0",
    
url ""
};
new 
String:weaponKB[28][2][64] =
{
    {
        
"knife",
        
"0.0"
    
},
    {
        
"glock",
        
"1000.0"
    
},
    {
        
"usp",
        
"1000.0"
    
}
}
public 
__ext_core_SetNTVOptional()
{
    
MarkNativeAsOptional("GetFeatureStatus");
    
MarkNativeAsOptional("RequireFeature");
    
MarkNativeAsOptional("AddCommandListener");
    
MarkNativeAsOptional("RemoveCommandListener");
    
VerifyCoreVersion();
    return 
0;
}

ScaleVector(Float:vec[3], Float:scale)
{
    new 
var1 vec;
    
var1[0] = FloatMul(var1[0], scale);
    new 
var2 vec[4];
    
var2 FloatMul(var2scale);
    new 
var3 vec[8];
    
var3 FloatMul(var3scale);
    return 
0;
}

MakeVectorFromPoints(Float:pt1[3], Float:pt2[3], Float:output[3])
{
    
output[0] = FloatSub(pt2[0], pt1[0]);
    
output[4] = FloatSub(pt2[4], pt1[4]);
    
output[8] = FloatSub(pt2[8], pt1[8]);
    return 
0;
}

bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
{
    return 
strcmp(str1str2caseSensitive) == 0;
}

public 
OnPluginStart()
{
    
CreateConVar("knockback_version""1.0""knockback plugin info cvar"8448false0.0false0.0);
    
HookEvent("player_hurt"EventHook:5EventHookMode:1);
    return 
0;
}

public 
Action:Player_Hurt(Handle:eventString:name[], bool:dontBroadcast)
{
    new 
Client GetClientOfUserId(GetEventInt(event"userid"));
    new 
Attacker GetClientOfUserId(GetEventInt(event"Attacker"));
    new 
var1;
    if (
AliveCheck(Client) == 1) {
        
decl String:k_weapon[32];
        
GetEventString(event"weapon"k_weapon32);
        new 
0;
        while (
28) {
            new 
var2 weaponKB[i][0][0];
            if (
StrEqual(var2[0][var2], k_weapontrue)) {
                
decl Float:Clientposition[3];
                
decl Float:targetposition[3];
                
decl Float:vector[3];
                
GetClientEyePosition(AttackerClientposition);
                
GetClientEyePosition(Clienttargetposition);
                
MakeVectorFromPoints(Clientpositiontargetpositionvector);
                
NormalizeVector(vectorvector);
                
ScaleVector(vectorStringToFloat(weaponKB[i][0][0][4]));
                
TeleportEntity(ClientNULL_VECTORNULL_VECTORvector);
            }
            
i++;
        }
    }
    return 
Action:0;
}

public 
bool:AliveCheck(Client)
{
    new 
var1;
    if (
Client 0) {
        if (
IsClientConnected(Client) == 1) {
            if (
IsClientInGame(Client) == 1) {
                if (
IsPlayerAlive(Client) == 1) {
                    return 
true;
                }
                return 
false;
            }
            return 
false;
        }
        return 
false;
    }
    return 
false;

__________________
Peace-Maker is offline