-- Table to store player classes PlayerClasses = {} -- Dynamic command registration using Info.lua function RegisterCommandsFromInfo(Plugin) local Info = dofile(cPluginManager:GetCurrentPlugin():GetLocalFolder() .. "/Info.lua") for Command, Data in pairs(Info.Commands) do local Handler = _G[Data.Handler] if not Handler then LOGERROR("[PlayerClasses] Handler function for command " .. Command .. " not found: " .. Data.Handler) else cPluginManager:BindCommand(Command, Data.Permission, Handler, Data.HelpString) end end end -- Hook for handling player join function OnPlayerJoin(Player) LOG("[PlayerClasses] Player joined: " .. Player:GetName()) Player:SendMessage(cChatColor.LightPurple .. "Welcome! Choose your class using /class ") end -- Function to handle the /class command function HandleClassCommand(Split, Player) if #Split < 2 then Player:SendMessage(cChatColor.Red .. "Usage: /class ") return true end local Class = Split[2]:lower() if Class == "mage" or Class == "warrior" then PlayerClasses[Player:GetUUID()] = Class:sub(1, 1):upper() .. Class:sub(2) Player:SendMessage(cChatColor.Green .. "You have chosen the class: " .. PlayerClasses[Player:GetUUID()]) else Player:SendMessage(cChatColor.Red .. "Invalid class! Choose: mage or warrior.") end return true end -- Function to handle the /fireball command function HandleFireballCommand(Split, Player) if PlayerClasses[Player:GetUUID()] ~= "Mage" then Player:SendMessage(cChatColor.Red .. "Only Mages can use Fireball!") return true end local Pos = Player:GetPosition() local LookVector = Player:GetLookVector() local World = Player:GetWorld() if World then local Fireball = cFireChargeEntity(Pos.x, Pos.y + 1.5, Pos.z, LookVector.x * 5, LookVector.y * 5, LookVector.z * 5) World:SpawnEntity(Fireball) Player:SendMessage(cChatColor.LightPurple .. "You cast a Fireball!") else Player:SendMessage(cChatColor.Red .. "Error: World is not valid!") end return true end -- Function to handle the /powerstrike command function HandlePowerStrikeCommand(Split, Player) if PlayerClasses[Player:GetUUID()] ~= "Warrior" then Player:SendMessage(cChatColor.Red .. "Only Warriors can use Power Strike!") return true end Player:SendMessage(cChatColor.Gold .. "You unleash a mighty Power Strike!") -- Add actual power strike logic here, e.g., spawning particles, damaging entities, etc. return true end -- Initialization function function Initialize(Plugin) Plugin:SetName("PlayerClasses") Plugin:SetVersion(1.0) LOG("[PlayerClasses] Registering commands...") RegisterCommandsFromInfo(Plugin) LOG("[PlayerClasses] Registering hooks...") LOG("[PlayerClasses] HOOK_PLAYER_JOIN value: " .. tostring(cPluginManager.HOOK_PLAYER_JOIN)) LOG("[PlayerClasses] OnPlayerJoin function type: " .. tostring(type(OnPlayerJoin))) if cPluginManager.HOOK_PLAYER_JOIN and type(OnPlayerJoin) == "function" then cPluginManager:AddHook(cPluginManager.HOOK_PLAYER_JOIN, OnPlayerJoin) LOG("[PlayerClasses] Successfully registered HOOK_PLAYER_JOIN") else LOGERROR("[PlayerClasses] Failed to register HOOK_PLAYER_JOIN. Hook or function is invalid.") end LOG("[PlayerClasses] Initialized PlayerClasses Plugin v1.0") return true end