• Anti Team Kill For Darkrp Support
    6 replies, posted
[B]Hi Facepunch ![/B] I' ve been working on a "Anti team kill " addon for darkrp. I' m coding a server and i need this addon to prevent troll to team kill person witch are in their own team ... This is how my job are working : [I]SWAT SWAT Soldier SWAT Caporal SWAT Capitain SWAT Commender TERRO TERRO Soldier TERRO Caporal TERRO Capitain TERRO Commender [/I] This is how i want it to work : SWAT can kill TERRO , TERRO can kill SWAT but SWAT cant kill SWAT and TERRO cant kill TERRO ___________________________________________________________________________________________________________________________________________________________________ This is what i' ve done/found : Anti team kill for TTT ( This will prevent detectives from killing detectives and traitors from killing traitors. ) [CODE]if SERVER then --[[Configs true = Enable and false = Disable Changing any of these configs will take direct effect without needing to restart your server.]] -- Traitor Deathmatch local TraitorAttackerNotify = true local TraitorVictimNotify = true local TraitorServerLog = true local TraitorAntiRDM = true -- This needs to be set to true for the traitor configs to work. -- Detective Deathmatch local DetectiveAttackerNotify = true local DetectiveVictimNotify = true local DetectiveServerLog = true local DetectiveAntiRDM = true -- This needs to be set to true for the detective configs to work. -- Anti Deathmatch Function local function antiteamkill(victim, attacker) if victim == attacker or attacker == victim then return end if victim:IsPlayer() and attacker:IsPlayer() and IsValid(victim) and IsValid(attacker) then -- Anti Traitor Deathmatch if victim:GetRole() == ROLE_TRAITOR and attacker:GetRole() == ROLE_TRAITOR then if TraitorAntiRDM == true and TraitorAttackerNotify == true then attacker:ChatPrint("You were attempting to harm your traitor buddy, " ..victim:Nick().. ".") end if TraitorAntiRDM == true and TraitorVictimNotify == true then victim:ChatPrint("Your traitor buddy, " ..attacker:Nick().. " was attempting to harm you.") end if TraitorAntiRDM == true and TraitorServerLog == true then DamageLog("TKA: " ..attacker:Nick().. " [traitor] was attempting to harm " ..victim:Nick().. " [traitor]") end if TraitorAntiRDM == true then return false else return true end end -- Anti Detective Deathmatch if victim:GetRole() == ROLE_DETECTIVE and attacker:GetRole() == ROLE_DETECTIVE then if DetectiveAntiRDM == true and DetectiveAttackerNotify == true then attacker:ChatPrint("You were attempting to harm your detective buddy, " ..victim:Nick().. ".") end if DetectiveAntiRDM == true and DetectiveVictimNotify == true then victim:ChatPrint("Your detective buddy, " ..attacker:Nick().. " was attempting to harm you.") end if DetectiveAntiRDM == true and DetectiveServerLog == true then DamageLog("TKA: " ..attacker:Nick().. " [detective] was attempting to harm " ..victim:Nick().. " [detective]") end if DetectiveAntiRDM == true then return false else return true end end end end hook.Add("PlayerShouldTakeDamage", "antiteamkill", antiteamkill) end[/CODE] I need this for darkrp . I' ve already make some basic code but i lost it due to unsave work ... ( My work was not even working ) This is why i' ll realy apriciate if some of you guys could help me with this ! [B]If you help me with this I don' t see any problem to upload it on the website , just for you to be able to use it ;) [/B] Thanks you !
[lua]hook.Add("PlayerShouldTakeDamage","NoTeamkillPls",function(ply,att,) if ply:Team()==att:Team() then return false end end)[/lua] You get the basic idea, Get the team the player is on and just check to see if they are part of the SWAT or part of the other faction you listed, then check if the attacker and victim are on the same team, if they are then return false
Take a look at my system: [url]https://dl.dropboxusercontent.com/u/26074909/tutoring/_systems/simple_anti_teamkill_system/anti_teamkill_system_with_failsafe.lua.html[/url] - Remove .html to view .lua It allows you to assign a common ID over multiple "teams" and use the id to distinguish between teams instead of the actual team key. Just set the table up and the first time someone gets damaged it'll build the table ( had to do it this way because if it is installed as an addon, GM won't exist and CreateTeams may not have ran all the way if I used that hook ) and it'll prevent damage for people with the same id.. This will allow unlimited team ids and unlimited teams to be added to the table. so the table would look something like: [code] // Set the teams up on the first occasion when damage is dealth... ANTI_TEAMKILL_TEAMS_TABLE = { // Team 1 [ TEAM_SWAT ] = 1; [ TEAM_SWAT_SOLDIER ] = 1; [ TEAM_SWAT_CORPORAL ] = 1; [ TEAM_SWAT_CAPTAIN ] = 1; [ TEAM_SWAT_COMMANDER ] = 1; // Team 2 [ TEAM_TERROR ] = 2; [ TEAM_TERROR_SOLDIER ] = 2; [ TEAM_TERROR_CORPORAL ] = 2; [ TEAM_TERROR_CAPTAIN ] = 2; [ TEAM_TERROR_COMMANDER ] = 2; }; [/code]
Thanks you guys for your help i' ll take a look at this today !
Ok so this is what i' m using : [CODE]// // Stop Team Damage with failsafe ( auto-refresh compatible ) - Josh 'Acecool' Moser // // // Configuration Table - Make sure the teams you want immunity between share the same number // ANTI_TEAMKILL_TEAMS_TABLE = ANTI_TEAMKILL_TEAMS_TABLE || { }; // // Changed to a function which gets called on damage instead of attempting to figure out when // DarkRP sets up the teams... // local function AntiTeamKillBuildTable( ) // Set the teams up on the first occasion when damage is dealth... ANTI_TEAMKILL_TEAMS_TABLE = { // Team 1 [ TEAM_AMERICAIN ] = 1; [ TEAM_SWATING ] = 1; [ TEAM_ACAPORAL ] = 1; // Team 2 [ TEAM_REBELVIP] = 2; [ TEAM_REBEL ] = 2; [ TEAM_RCAPORAL ] = 2; }; // Insert any left-over teams as rogues... for k, v in pairs( team.GetAllTeams( ) ) do // Only insert if the entry doesn't exist; this allows you to set up 1 team, and everyone else gets their own entry... if ( ANTI_TEAMKILL_TEAMS_TABLE[ k ] ) then CONTINUE; end // Set it up, give it a team number which is offset by a bit... ANTI_TEAMKILL_TEAMS_TABLE[ k ] = k + 9000; end end // // When making hooks, it is best to remain non-intrusive. Other hooks may be running to determine damage in addition to this one. // To remain non-intrusive we create the scenario which matches the logic we're using; nothing else should be touched. // // // Perform the action that prevents team-damage between like-teams // hook.Add("PlayerShouldTakeDamage", "PlayerShouldTakeDamage:AvoidTeamDamage", function( _victim, _attacker ) // Make sure both victim and attacker are valid entities and that they re both player entities -- The victim can be assumed a player because of the hook. We're just calling it to remain uniform. if ( IsValid( _victim ) && IsValid( _attacker ) && _victim:IsPlayer( ) && _attacker:IsPlayer( ) ) then // ANTI_TEAMKILL_TEAMS_TABLE is defined as an empty table, at least, so here we query the teams... local _teamA = ANTI_TEAMKILL_TEAMS_TABLE[ _attacker:Team( ) ]; local _teamV = ANTI_TEAMKILL_TEAMS_TABLE[ _victim:Team( ) ]; // Set up the table when it needs to be set up ( first damage occasion instead of guessing with DarkRP / other gamemodes )... if ( !ANTI_TEAMKILL_TEAMS_TABLE || !_teamA || !_teamV ) then // Build the table AntiTeamKillBuildTable( ); // Reset the values _teamA = ANTI_TEAMKILL_TEAMS_TABLE[ _attacker:Team(1) ]; _teamV = ANTI_TEAMKILL_TEAMS_TABLE[ _victim:Team(2) ]; end // If both victim and attacker team data matches, don't allow damage. This is the ONLY return we need to handle. if ( ANTI_TEAMKILL_TEAMS_TABLE[ _victim:Team(1) ] == ANTI_TEAMKILL_TEAMS_TABLE[ _attacker:Team(2) ] ) then return false; end end end );[/CODE] The team can still kill each over ... I keep trying to find a way out ! [editline]12th February 2015[/editline] Seems that you forget and '=' near the ';' , here is the ERROR : [ERROR] addons/atk/lua/autorun/server/antiteamkill.lua:33: '=' expected near ';' ... [editline]12th February 2015[/editline] ______________________________________________________________________________________________________________________________________________________________________________________________________________________________ I' ve found the way to do this and now the script is done , thanks you for your help i will upload it soon on the site - This will prevent people witch are in the same team to kill each other : Exemple [ TEAM_REBEL_VIP] [ TEAM_REBEL ] [ TEAM_REBEL_CAPORAL ] [ TEAM_REBEL_LIEUTANT ] [ TEAM_REBEL_CAPITAIN ] [ TEAM_REBEL_MAJOR] [ TEAM_REBEL_COMMANDANT ] [ TEAM_REBEL_MARECHAL ] || || Can kill v______________________________________________________ ^ || Can kill || [ TEAM_AMERICAIN ] [ TEAM_SWATING ] [ TEAM_AMERCICAN_CAPORAL ] [ TEAM_AMERCICAN_RTILLEURA ] [ TEAM_AMERCICAN_LIEUTENANT ] [ TEAM_AMERCICAN_CAPITAIN ] [ TEAM_AMERCICAN_MAJOR ] [ TEAM_AMERCICAN_COMMANDANT ] [ TEAM_AMERCICAN_MARECHAL ] But the american can not kill each other and same thing for the rebel ... Thanks you for helping me out ! ______________________________________________________________________________________________________________________________________________________________________________________________________________________________
Yep, you need to associate all teams on a side with a single id to prevent team killing.
can i please have the fixed version of this ????? [highlight](User was banned for this post ("Dumb bumps" - Novangel))[/highlight]
Sorry, you need to Log In to post a reply to this thread.