Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sourcemod>
- #include <sdktools>
- static bool:ignoreNextDamageDealt[MAXPLAYERS+1] = false;
- char sDataFilePath[PLATFORM_MAX_PATH];
- public OnPluginStart()
- {
- BuildPath(Path_SM, sDataFilePath, sizeof(sDataFilePath), "data/lol_blyat_melee.ini");
- if (!FileExists(sDataFilePath))
- {
- new Handle:open_path = OpenFile(sDataFilePath, "w");
- WriteFileLine(open_path, "");
- CloseHandle(open_path);
- PrintToServer("Error Code: WSP-EC-01A");
- KvWriteToFile(sDataFilePath);
- }
- HookEvent("infected_hurt", InfectedHurt);
- }
- void KvWriteToFile(const char[] path)
- {
- KeyValues kv = new KeyValues("damage_melee_common");
- kv.SetNum("weapon_baseball_bat/damage", 1);
- kv.SetNum("weapon_cricket_bat/damage", 1);
- kv.SetNum("weapon_crowbar/damage", 1);
- kv.SetNum("weapon_electric_guitar/damage", 1);
- kv.SetNum("weapon_fireaxe/damage", 1);
- kv.SetNum("weapon_frying_pan/damage", 1);
- kv.SetNum("weapon_golfclub/damage", 1);
- kv.SetNum("weapon_katana/damage", 1);
- kv.SetNum("weapon_machete/damage", 1);
- kv.SetNum("weapon_tonfa/damage", 1);
- kv.SetNum("weapon_knife/damage", 1);
- kv.ExportToFile(path);
- delete kv;
- }
- public Action:InfectedHurt(Handle:event, const String:name[], bool:dontBroadcast)
- {
- decl String:weaponname[64];
- new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
- new entity = (GetEventInt(event, "entityid"));
- if (!attacker || !IsValidEntity(entity) || ignoreNextDamageDealt[attacker]) return;
- decl String:entname[32];
- GetEdictClassname(entity, entname, sizeof(entname));
- new dmg_health = GetEventInt(event,"amount"); // get the amount of damage done
- new eventhealth = GetEntProp(entity, Prop_Data, "m_iHealth"); // get the health after damage was applied (its a POST hook)
- if (dmg_health < 1 || eventhealth < 1) return; // exclude zero damage calculations
- GetClientWeapon(attacker, weaponname, sizeof(weaponname));
- KeyValues kv = new KeyValues("damage_melee_common");
- if (kv.ImportFromFile(sDataFilePath))
- {
- if (KvJumpToKey(kv, weaponname, true))
- {
- new num = KvGetNum(kv, "damage", 1);
- new damage = (dmg_health * 0) + num;
- applyDamage(damage, entity, attacker);
- new health = eventhealth - damage;
- SetEntProp(entity, Prop_Data, "m_iHealth", health);
- SetEventInt(event, "amount", damage);
- PrintToChatAll("HealC=%i", health);
- PrintToChatAll("DamageC=%i", damage);
- }
- }
- }
- static applyDamage(damage, victim, attacker)
- {
- new Handle:dataPack = CreateDataPack();
- WritePackCell(dataPack, damage);
- WritePackCell(dataPack, victim);
- WritePackCell(dataPack, attacker);
- CreateTimer(0.1, timer_stock_applyDamage, dataPack);
- ignoreNextDamageDealt[attacker] = true;
- CreateTimer(0.2, timer_resetStop, attacker);
- }
- public Action:timer_resetStop(Handle:timer, any:client)
- {
- ignoreNextDamageDealt[client] = false;
- }
- public Action:timer_stock_applyDamage(Handle:timer, Handle:dataPack)
- {
- ResetPack(dataPack);
- new damage = ReadPackCell(dataPack);
- new victim = ReadPackCell(dataPack);
- new attacker = ReadPackCell(dataPack);
- CloseHandle(dataPack);
- decl Float:victimPos[3], String:strDamage[16], String:strDamageTarget[16];
- if (victim < 20 && IsClientInGame(victim))
- {
- GetClientEyePosition(victim, victimPos);
- }
- else if (IsValidEntity(victim))
- {
- GetEntityAbsOrigin(victim, victimPos);
- }
- else return;
- IntToString(damage, strDamage, sizeof(strDamage));
- Format(strDamageTarget, sizeof(strDamageTarget), "hurtme%d", victim);
- new entPointHurt = CreateEntityByName("point_hurt");
- if(!entPointHurt) return;
- // Config, create point_hurt
- DispatchKeyValue(victim, "targetname", strDamageTarget);
- DispatchKeyValue(entPointHurt, "DamageTarget", strDamageTarget);
- DispatchKeyValue(entPointHurt, "Damage", strDamage);
- DispatchKeyValue(entPointHurt, "DamageType", "0"); // DMG_GENERIC
- DispatchSpawn(entPointHurt);
- // Teleport, activate point_hurt
- TeleportEntity(entPointHurt, victimPos, NULL_VECTOR, NULL_VECTOR);
- AcceptEntityInput(entPointHurt, "Hurt", (attacker && attacker < 20 && IsClientInGame(attacker)) ? attacker : -1);
- // Config, delete point_hurt
- DispatchKeyValue(entPointHurt, "classname", "point_hurt");
- DispatchKeyValue(victim, "targetname", "null");
- RemoveEdict(entPointHurt);
- }
- //entity abs origin code from here
- //http://forums.alliedmods.net/showpost.php?s=e5dce96f11b8e938274902a8ad8e75e9&p=885168&postcount=3
- stock GetEntityAbsOrigin(entity,Float:origin[3])
- {
- if (entity > 0 && IsValidEntity(entity))
- {
- decl Float:mins[3], Float:maxs[3];
- GetEntPropVector(entity,Prop_Send,"m_vecOrigin",origin);
- GetEntPropVector(entity,Prop_Send,"m_vecMins",mins);
- GetEntPropVector(entity,Prop_Send,"m_vecMaxs",maxs);
- origin[0] += (mins[0] + maxs[0]) * 0.5;
- origin[1] += (mins[1] + maxs[1]) * 0.5;
- origin[2] += (mins[2] + maxs[2]) * 0.5;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment