FlacoBey

Untitled

Jan 6th, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.91 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <sdktools>
  3.  
  4. static bool:ignoreNextDamageDealt[MAXPLAYERS+1]     =   false;
  5. char sDataFilePath[PLATFORM_MAX_PATH];
  6.  
  7. public OnPluginStart()
  8. {
  9.     BuildPath(Path_SM, sDataFilePath, sizeof(sDataFilePath), "data/lol_blyat_melee.ini");
  10.     if (!FileExists(sDataFilePath))
  11.     {
  12.         new Handle:open_path = OpenFile(sDataFilePath, "w");
  13.         WriteFileLine(open_path, "");
  14.         CloseHandle(open_path);
  15.         PrintToServer("Error Code: WSP-EC-01A");
  16.         KvWriteToFile(sDataFilePath);
  17.     }
  18.     HookEvent("infected_hurt", InfectedHurt);
  19. }
  20.  
  21. void KvWriteToFile(const char[] path)
  22. {
  23.     KeyValues kv = new KeyValues("damage_melee_common");
  24.     kv.SetNum("weapon_baseball_bat/damage", 1);
  25.     kv.SetNum("weapon_cricket_bat/damage", 1);
  26.     kv.SetNum("weapon_crowbar/damage", 1);
  27.     kv.SetNum("weapon_electric_guitar/damage", 1);
  28.     kv.SetNum("weapon_fireaxe/damage", 1);
  29.     kv.SetNum("weapon_frying_pan/damage", 1);
  30.     kv.SetNum("weapon_golfclub/damage", 1);
  31.     kv.SetNum("weapon_katana/damage", 1);
  32.     kv.SetNum("weapon_machete/damage", 1);
  33.     kv.SetNum("weapon_tonfa/damage", 1);
  34.     kv.SetNum("weapon_knife/damage", 1);
  35.  
  36.     kv.ExportToFile(path);
  37.  
  38.     delete kv;
  39. }
  40.  
  41. public Action:InfectedHurt(Handle:event, const String:name[], bool:dontBroadcast)
  42. {
  43.     decl String:weaponname[64];
  44.    
  45.     new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
  46.     new entity = (GetEventInt(event, "entityid"));
  47.    
  48.     if (!attacker || !IsValidEntity(entity) || ignoreNextDamageDealt[attacker]) return;
  49.    
  50.     decl String:entname[32];
  51.     GetEdictClassname(entity, entname, sizeof(entname));
  52.    
  53.     new dmg_health = GetEventInt(event,"amount");    // get the amount of damage done
  54.     new eventhealth = GetEntProp(entity, Prop_Data, "m_iHealth");   // get the health after damage was applied (its a POST hook)
  55.    
  56.     if (dmg_health < 1 || eventhealth < 1) return; // exclude zero damage calculations
  57.    
  58.     GetClientWeapon(attacker, weaponname, sizeof(weaponname));
  59.    
  60.     KeyValues kv = new KeyValues("damage_melee_common");
  61.     if (kv.ImportFromFile(sDataFilePath))
  62.     {
  63.         if (KvJumpToKey(kv, weaponname, true))
  64.         {
  65.             new num = KvGetNum(kv, "damage", 1);
  66.             new damage = (dmg_health * 0) + num;
  67.    
  68.             applyDamage(damage, entity, attacker);
  69.             new health = eventhealth - damage;
  70.    
  71.             SetEntProp(entity, Prop_Data, "m_iHealth", health);
  72.             SetEventInt(event, "amount", damage);
  73.             PrintToChatAll("HealC=%i", health);
  74.             PrintToChatAll("DamageC=%i", damage);
  75.         }
  76.     }
  77. }
  78.  
  79. static applyDamage(damage, victim, attacker)
  80. {
  81.     new Handle:dataPack = CreateDataPack();
  82.     WritePackCell(dataPack, damage);  
  83.     WritePackCell(dataPack, victim);
  84.     WritePackCell(dataPack, attacker);
  85.    
  86.     CreateTimer(0.1, timer_stock_applyDamage, dataPack);
  87.     ignoreNextDamageDealt[attacker] = true;
  88.     CreateTimer(0.2, timer_resetStop, attacker);
  89. }
  90.  
  91. public Action:timer_resetStop(Handle:timer, any:client)
  92. {
  93.     ignoreNextDamageDealt[client] = false;
  94. }
  95.  
  96. public Action:timer_stock_applyDamage(Handle:timer, Handle:dataPack)
  97. {
  98.     ResetPack(dataPack);
  99.     new damage = ReadPackCell(dataPack);  
  100.     new victim = ReadPackCell(dataPack);
  101.     new attacker = ReadPackCell(dataPack);
  102.     CloseHandle(dataPack);  
  103.  
  104.     decl Float:victimPos[3], String:strDamage[16], String:strDamageTarget[16];
  105.    
  106.     if (victim < 20 && IsClientInGame(victim))
  107.     {
  108.         GetClientEyePosition(victim, victimPos);
  109.     }
  110.     else if (IsValidEntity(victim))
  111.     {
  112.         GetEntityAbsOrigin(victim, victimPos);
  113.     }
  114.     else return;
  115.    
  116.     IntToString(damage, strDamage, sizeof(strDamage));
  117.     Format(strDamageTarget, sizeof(strDamageTarget), "hurtme%d", victim);
  118.    
  119.     new entPointHurt = CreateEntityByName("point_hurt");
  120.     if(!entPointHurt) return;
  121.  
  122.     // Config, create point_hurt
  123.     DispatchKeyValue(victim, "targetname", strDamageTarget);
  124.     DispatchKeyValue(entPointHurt, "DamageTarget", strDamageTarget);
  125.     DispatchKeyValue(entPointHurt, "Damage", strDamage);
  126.     DispatchKeyValue(entPointHurt, "DamageType", "0"); // DMG_GENERIC
  127.     DispatchSpawn(entPointHurt);
  128.    
  129.     // Teleport, activate point_hurt
  130.     TeleportEntity(entPointHurt, victimPos, NULL_VECTOR, NULL_VECTOR);
  131.     AcceptEntityInput(entPointHurt, "Hurt", (attacker && attacker < 20 && IsClientInGame(attacker)) ? attacker : -1);
  132.    
  133.     // Config, delete point_hurt
  134.     DispatchKeyValue(entPointHurt, "classname", "point_hurt");
  135.     DispatchKeyValue(victim, "targetname", "null");
  136.     RemoveEdict(entPointHurt);
  137. }
  138.  
  139. //entity abs origin code from here
  140. //http://forums.alliedmods.net/showpost.php?s=e5dce96f11b8e938274902a8ad8e75e9&p=885168&postcount=3
  141. stock GetEntityAbsOrigin(entity,Float:origin[3])
  142. {
  143.     if (entity > 0 && IsValidEntity(entity))
  144.     {
  145.         decl Float:mins[3], Float:maxs[3];
  146.         GetEntPropVector(entity,Prop_Send,"m_vecOrigin",origin);
  147.         GetEntPropVector(entity,Prop_Send,"m_vecMins",mins);
  148.         GetEntPropVector(entity,Prop_Send,"m_vecMaxs",maxs);
  149.        
  150.         origin[0] += (mins[0] + maxs[0]) * 0.5;
  151.         origin[1] += (mins[1] + maxs[1]) * 0.5;
  152.         origin[2] += (mins[2] + maxs[2]) * 0.5;
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment