[LUA] Funktion mit Funktion zu deaktivieren

06/16/2014 22:28 ChilloutFuzi#1
Hey,
Ich arbeite erst seit geringe Zeit mit Lua und wollte mal fragen ob ihr wisste wie das geht.
Also ich habe eine Funktion (z.B. Dmg aus) und ob ich dann in einer weiteren Funktion schreiben kann das wenn das chatcommand (was ich oben gadded habe) z.B. /dmgoff benutzt wird das dmg aus geht. (bzw das hab ich schon jetzt kommt mein Problem). Wenn ich in einer Weiteren funktion mit z.B. /dmgon (das command oben schon geadded) das dmg wieder einzuschalten in dem ich die dmgoff funktion deaktiviere.
Ist das möglich oder kennt ihr andere möglichkeiten das zu lösen ?
MFG
06/16/2014 22:34 strubelz#2
Mach dir doch eine einzige Dmg Funktion, in der hast du einen Boolean, wenn er true ist wird er auf false gesetzt und Dmg ausgeschaltet, wenn er false ist wird er auf true gesetzt und Dmg angeschaltet. Du callst dann einfach bei beiden Commands die Dmg Funktion.
06/16/2014 22:37 ChilloutFuzi#3
OK versteh nicht ganz was du meinst hab im moment folgendes:

Plugin lädt:

Damage wird ausgeschaltet :

Damage wieder an fehlt mir noch
06/16/2014 23:00 strubelz#4
Ich kenn mich zwar nicht so sehr mit LUA aus, aber ich würde das ungefähr so machen:
Code:
function PLUGIN:Init()
print( self.Title .. " v" .. self.Version .. ": successfully initialized! Enjoy!" )
self:AddChatCommand( "dmgbypasson", self.dmgbypass )
self:AddChatCommand( "dmgbypassoff", self.dmgbypass )
end
Code:
boolean bypass = false

function PLUGIN:dmgbypass(takedamage, damage)

if (bypass == false) then
//damage anschalten
bypass = true
end

if (bypass == true) then
//damage abschalten
bypass = false
end

return damage
end
06/17/2014 14:26 ChilloutFuzi#5
Danke für deine Antwort
ich brauche jemanden der es testet:
So siehts aus:
Code:
function PLUGIN:Init()
print( self.Title .. " v" .. self.Version .. ": successfully initialized! Enjoy!" )
self:AddChatCommand( "dmgbypasson", self.dmgbypass )
self:AddChatCommand( "dmgbypassoff", self.dmgbypass )
end

function PLUGIN:SendHelpText( netuser:isAdmin )
rust.SendChatToUser( netuser:isAdmin, self.Settings.ChatHandle, "Use /dmgbypasson to disable the damage of the admins!" )
rust.SendChatToUser( netuser:isAdmin, self.Settings.ChatHandle, "Use /dmgbypassoff to disable the damage of the admins!" )
end

function PLUGIN:PostInit()
	flags_plugin = plugins.Find( "flags" )
	if(flags_plugin) then print(self.Title .. ": Flags support activated - Admins are recognized by flag 'kick'!") end
	oxminplugin = plugins.Find( "oxmin" )
	if(oxminplugin) then print(self.Title .. ": Oxmin support activated - Admins are recognized by flag 'FLAG_CANKICK'!") end
end

function PLUGIN:dmgbypass(takedamage, damage)
	if (damage.attacker.client and damage.victim.client) then
		local victim = damage.victim.client.netUser
		local attacker = damage.attacker.client.netUser
		if (victim and attacker and victim ~= attacker and self:isAdmin(victim) and self:isAdmin(attacker)) then
			rust.InventoryNotice( attacker, "ADMIN!" )
			if (damage.amount > 0) then damage.amount = 0 end
			if (damage.status ~= LifeStatus.IsAlive) then damage.status = LifeStatus.IsAlive end
		end
	end
	return damage
end

if (bypass == false) then
//damage anschalten
bypass = true
end

if (bypass == true) then
//damage abschalten
bypass = false
end

return damage
end

function PLUGIN:isAdmin(netuser)
	if (netuser:CanAdmin()) then return true end
	if(oxminplugin) then
		local FLAG_CANKICK = 3
		if (oxminplugin:HasFlag(netuser, FLAG_CANKICK)) then return true end
	end
	if(flags_plugin) then
		local steamID = rust.CommunityIDToSteamID(tonumber(rust.GetUserID(netuser)))
		if (flags_plugin:HasFlag(steamID, "kick")) then return true end
	end
	return false
end
06/17/2014 17:14 strubelz#6
^facepalm^
Da wo //damageon steht natürlich den Code zum anschalten des Schadens und bei //damageoff den Code zum abschalten.
06/17/2014 20:03 ChilloutFuzi#7
Das war ja mein Hauptproblem deswegen hatte ich ja gefragt ^^
06/17/2014 21:56 strubelz#8
Aber den hast du doch schon ?!
06/17/2014 23:07 ChilloutFuzi#9
ne ich kann damage ausschalten aber keine ahnung wie ichs dann wieder anschalte