gokalpfirat Posted August 26, 2012 Share Posted August 26, 2012 ------------ -- Events -- ------------ function moveOnStart() check(source) end addEventHandler("onResourceStart",getRootElement(),moveOnStart) function playerJoined() check(source) end addEventHandler("onPlayerJoin",getRootElement(),playerJoined) function playerChangedNick(oldNick,newNick) -- Use timer to wait until the nick really has changed setTimer(check,1000,1,source) end addEventHandler("onPlayerChangeNick",getRootElement(),playerChangedNick) function playerQuit() removePlayerFromTeam(source) end addEventHandler("onPlayerQuit",getRootElement(),playerQuit) -- Check for ACL Groups on login/logout function loggedIn() check(source) end addEventHandler("onPlayerLogin",getRootElement(),loggedIn) function loggedOut() check(source) end addEventHandler("onPlayerLogout",getRootElement(),loggedOut) -- Holds the teams as defined in the settings local teams = {} --- -- Reads the settings and creates the teams if enabled. -- function initiate() local rootNode = xmlLoadFile("config.xml") local children = xmlNodeGetChildren(rootNode) if children == false then return end for _,node in pairs(children) do local attributes = xmlNodeGetAttributes(node) local name = attributes.name local color = {getColorFromString(attributes.color)} if not color[1] then color = {255,255,255} end teams[name] = attributes teams[name].color = color if not toboolean(get("noEmptyTeams")) then teams[name].team = createTeam(name,unpack(color)) end end for k,v in pairs(getElementsByType("player")) do check(v) end end addEventHandler("onResourceStart",getResourceRootElement(),initiate) --------------- -- Functions -- --------------- --- -- Checks the player's nick and ACL Groups and sets his team if necessary. -- -- @param player player: The player element -- function check(player) if not isElement(player) or getElementType(player) ~= "player" then debug("No player") return end local nick = getPlayerName(player) local accountName = getAccountName(getPlayerAccount(player)) for name,data in pairs(teams) do local tagMatch = false local aclGroupMatch = false if data.tag ~= nil and string.find(nick,data.tag,1,true) then tagMatch = true end if data.aclGroup ~= nil and accountName and isObjectInACLGroup("user."..accountName,aclGetGroup(data.aclGroup)) then aclGroupMatch = true end if data.required == "both" then if tagMatch and aclGroupMatch then addPlayerToTeam(player,name) setTimer(check2, 500, 1) return end else if tagMatch or aclGroupMatch then addPlayerToTeam(player,name) setTimer(check2, 500, 1) return end end end removePlayerFromTeam(player) setPlayerTeam(player,nil) setTimer(check2, 500, 1) end function check2() if toboolean(get("noEmptyTeams")) then for i,v in pairs(teams) do team2 = teams[i].name team = getTeamFromName(teams[i].name) if isElement(team) and getElementType(team) == "team" then if countPlayersInTeam(team) == 0 then debug("Removed team '" .. tostring(team2) .. "' since it has no players") destroyElement(team) end end end end end --- -- Adds a player to the team appropriate for the name. -- It is not checked if the team is really defined in the table, since -- it should only be called if it is. -- -- Creates the team if it doesn't exist. -- -- @param player player: The player element -- @param string name: The name of the team -- function addPlayerToTeam(player,name) local team = teams[name].team if not isElement(team) or getElementType(team) ~= "team" then team = createTeam(teams[name].name,unpack(teams[name].color)) teams[name].team = team end setTimer(setPlayerTeam, 500, 1, player, team) debug("Added player '"..getPlayerName(player).."' to team '"..name.."'") end --- -- Removes a player from a team. Also checks if any team -- needs to be removed. -- -- @param player player: The player element -- function removePlayerFromTeam(player) setPlayerTeam(player, nil) debug("Removed player '"..getPlayerName(player).."' from team") --[[if toboolean(get("noEmptyTeams")) then for i,v in pairs(teams) do team = getTeamFromName(teams[i].name) if isElement(team) and getElementType(team) == "team" then if countPlayersInTeam(team) == 0 then destroyElement(team) end end end end]] end --- -- Converts a string-boolean into a boolean. -- -- @param string string: The string (e.g. "false") -- @return true/false Returns false if the string is "false" or evaluates to false (nil/false), true otherwise -- function toboolean(string) if string == "false" or not string then return false end return true end ----------- -- Debug -- ----------- -- Little debug function to turn on/off debug setElementData(getResourceRootElement(),"debug",true) function debug(string) if getElementData(getResourceRootElement(),"debug") then outputDebugString("autoteams: "..string) end end This is the script that I found it in community. I tried to add something but I cant do. I at onResource start to check but it is still doesnt check. Like when I add clan and restart script all clans gone down and when they reconnect or change their nickname then they move to clan. But I want to go their clan when I start script. I tried a onResourceStart event like you see in code but it doesnt works. Link to comment
Guest Guest4401 Posted August 26, 2012 Share Posted August 26, 2012 function moveOnStart() for i,v in ipairs(getElementsByType"player") do check(v) end end addEventHandler("onResourceStart",resourceRoot,moveOnStart) Link to comment
gokalpfirat Posted August 26, 2012 Author Share Posted August 26, 2012 function moveOnStart() for i,v in ipairs(getElementsByType"player") do check(v) end end addEventHandler("onResourceStart",resourceRoot,moveOnStart) nope doesnt works. Link to comment
Castillo Posted August 26, 2012 Share Posted August 26, 2012 ------------ -- Events -- ------------ function playerJoined() check(source) end addEventHandler("onPlayerJoin",getRootElement(),playerJoined) function playerChangedNick(oldNick,newNick) -- Use timer to wait until the nick really has changed setTimer(check,1000,1,source) end addEventHandler("onPlayerChangeNick",getRootElement(),playerChangedNick) function playerQuit() removePlayerFromTeam(source) end addEventHandler("onPlayerQuit",getRootElement(),playerQuit) -- Check for ACL Groups on login/logout function loggedIn() check(source) end addEventHandler("onPlayerLogin",getRootElement(),loggedIn) function loggedOut() check(source) end addEventHandler("onPlayerLogout",getRootElement(),loggedOut) -- Holds the teams as defined in the settings local teams = {} --- -- Reads the settings and creates the teams if enabled. -- function initiate() local rootNode = xmlLoadFile("config.xml") local children = xmlNodeGetChildren(rootNode) if children == false then return end for _,node in pairs(children) do local attributes = xmlNodeGetAttributes(node) local name = attributes.name local color = {getColorFromString(attributes.color)} if not color[1] then color = {255,255,255} end teams[name] = attributes teams[name].color = color teams[name].team = createTeam(name,unpack(color)) end for k,v in ipairs ( getElementsByType ( "player" ) ) do check ( v ) end end addEventHandler("onResourceStart",resourceRoot,initiate) --------------- -- Functions -- --------------- --- -- Checks the player's nick and ACL Groups and sets his team if necessary. -- -- @param player player: The player element -- function check(player) if not isElement(player) or getElementType(player) ~= "player" then debug("No player") return end local nick = getPlayerName(player) local accountName = getAccountName(getPlayerAccount(player)) for name,data in pairs(teams) do local tagMatch = false local aclGroupMatch = false if data.tag ~= nil and string.find(nick,data.tag,1,true) then tagMatch = true end if data.aclGroup ~= nil and accountName and isObjectInACLGroup("user."..accountName,aclGetGroup(data.aclGroup)) then aclGroupMatch = true end if data.required == "both" then if tagMatch and aclGroupMatch then addPlayerToTeam(player,name) setTimer(check2, 500, 1) return end else if tagMatch or aclGroupMatch then addPlayerToTeam(player,name) setTimer(check2, 500, 1) return end end end removePlayerFromTeam(player) setPlayerTeam(player,nil) setTimer(check2, 500, 1) end function check2() if toboolean(get("noEmptyTeams")) then for i,v in pairs(teams) do team2 = teams[i].name team = getTeamFromName(teams[i].name) if isElement(team) and getElementType(team) == "team" then if countPlayersInTeam(team) == 0 then debug("Removed team '" .. tostring(team2) .. "' since it has no players") destroyElement(team) end end end end end --- -- Adds a player to the team appropriate for the name. -- It is not checked if the team is really defined in the table, since -- it should only be called if it is. -- -- Creates the team if it doesn't exist. -- -- @param player player: The player element -- @param string name: The name of the team -- function addPlayerToTeam(player,name) local team = teams[name].team if not isElement(team) or getElementType(team) ~= "team" then team = createTeam(teams[name].name,unpack(teams[name].color)) teams[name].team = team end setTimer(setPlayerTeam, 500, 1, player, team) debug("Added player '"..getPlayerName(player).."' to team '"..name.."'") end --- -- Removes a player from a team. Also checks if any team -- needs to be removed. -- -- @param player player: The player element -- function removePlayerFromTeam(player) setPlayerTeam(player, nil) debug("Removed player '"..getPlayerName(player).."' from team") --[[if toboolean(get("noEmptyTeams")) then for i,v in pairs(teams) do team = getTeamFromName(teams[i].name) if isElement(team) and getElementType(team) == "team" then if countPlayersInTeam(team) == 0 then destroyElement(team) end end end end]] end --- -- Converts a string-boolean into a boolean. -- -- @param string string: The string (e.g. "false") -- @return true/false Returns false if the string is "false" or evaluates to false (nil/false), true otherwise -- function toboolean(string) if string == "false" or not string then return false end return true end ----------- -- Debug -- ----------- -- Little debug function to turn on/off debug setElementData(getResourceRootElement(),"debug",true) function debug(string) if getElementData(getResourceRootElement(),"debug") then outputDebugString("autoteams: "..string) end end The problem was the empty team setting checker, I removed the check at "initiate" function. Link to comment
gokalpfirat Posted August 26, 2012 Author Share Posted August 26, 2012 Thanks Solidsnake14 It works Link to comment
gokalpfirat Posted August 27, 2012 Author Share Posted August 27, 2012 Sorry but now i see it doesnt work. Like the old clan and there is a new clan that i made. When I restart script old clan member go to his clan but new clan member didnt. Link to comment
gokalpfirat Posted August 29, 2012 Author Share Posted August 29, 2012 Sorry for flooding but waiting. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now