Jump to content

AJXB

Members
  • Posts

    370
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by AJXB

  1. 7 hours ago, FernandoMTA said:

    oooo interesting

    Is the project available for contribution on GitHub or something?

     

    7 hours ago, TMTMTL said:

    Nice work!

    As Nando said it would be cool if this was a Git repo so it could be contributed to, it couldbe used in many instances I would think

    Thank you! Yes, I just added the Github link: https://github.com/MrgSub/mtasa-ai

    • Like 1
  2. Use AI in your MTA:SA resources.

    Powered by providers like OpenAI, Anthropic & Groq. You can now bake Artificial Intelligence into your resources, gamemodes and systems.

    This resource exports the below functions:

    init(config)
    generateText(prompt,system)
    generateObject(prompt, system)
    getProviders()
    getModels(provider)
    getConfig()

    Example usage:

    The below code initializes the AI agent (add your API key from the provider) and creates a ped and a marker. when the player hits the marker, the ped says something funny.

    addEventHandler("onResourceStart", resourceRoot,
        function()
            AI.init({
                api_key = "",
                provider = "groq",
                model = "llama3-8b-8192",
                temperature = 0.7,
                max_tokens = 150
            })
            createPed(0, 0, 0, 5)
            local marker = createMarker(0, 0, 2, "cylinder", 5, 10, 244, 23, 10, root)
            local function handleMarkerHit(hitElement)
                local elementType = getElementType(hitElement)
                if elementType ~= "player" then return end
            	local playerName = getPlayerName(hitElement)
                outputDebugString("Player "..playerName.." hit marker")
                AI.generateText(playerName.." got close to you, say something funny, and out of pocket. Limit is 255 characters. Your name is Pedro. Don't use quotes.", "You are a random pedestrian living in San Andreas, grand theft auto.")(
                    function(result, error)
                        if error then
                            outputDebugString("Error: " .. error)
                            return
                        end
                        if (result:len() >= 254) then
                            result = result:sub(1, 254) .. "..."
                            return
                        end
                        outputChatBox("[Pedro]: "..result, hitElement, 255, 255, 255)
                    end
                )
            end
            addEventHandler("onMarkerHit", marker, handleMarkerHit)
        end
    )

     

    Download

    https://community.multitheftauto.com/index.php?p=resources&s=details&id=18946

    Roadmap:

    - Support conversation history

    - Support streaming

    Contributing:

    Contributions are welcome on Github: https://github.com/MrgSub/mtasa-ai

    • Like 1
  3. 2 hours ago, Sorata_Kanda said:

    I do use the db functions too, but I'm sort of worried that my meta.xml turns to a mess due to the amount of functions I export.

    The healthy thing to do is to make one resource and just export the functions.

    Otherwise, you're just repeating code and that's useless.

  4. On 02/09/2018 at 05:25, Simple01 said:
    
    // SERVER
    
    function nickHandler( playerNick )
    	if ( playerNick and ( #playerNick <= 3 ) ) then
        	// DO SOMETHING
         	cancelEvent() // KICK
        end
    end
    
    addEventHandler( 'onPlayerConnect', root, nickHandler )
    

     

    Way to reinvent how Lua comments are supposed to be.

    • Haha 1
  5. On 7/15/2018 at 12:57, Lampard1 said:

    Thank you for your feedback. All the resources we are providing on our shop will get updated, with new versions being released regularly. In one of the version, we will surely change our GUIs! :)

    And if I may ask, do you update the purchased resources for each client after you update the versions?

    Also, how are you protecting these resources from being leaked? (someone can purchase one resource and leak it since you're selling the source code, I presume)

  6. 16 hours ago, iSubvibe said:

    you both don't know what you're talking about.  show me how u can make a theme?'

     

    themes aren't useless. i've sold themes for 200 euros you just dont know the work people put in IPS themes.

    They aren't useless, they look good, and your theme looks good. but if you think it's worth 200 euros, it's not. at least not to me. But I wouldn't be surprised if "clans" pay that much.

    Anyway, good luck

  7.     local serialMute = { }
    
        	function doAction(thePlayer, cmd, actionId, playername, arg3)
            if (isElement( thePlayer )) then
        		if actionId then
        			local actionId = tonumber(actionId) 
        			local player = getPlayerFromNamePart(playername or "")
        			local name = getPlayerName(thePlayer)
        			if player then
        				if actionId == 1 then
    						local accName = getAccountName ( getPlayerAccount ( thePlayer ) ) 
             				if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then 
    	    					local duration = (tonumber(arg3) or 0) * 60 * 1000
    	    					setPlayerMuted(player, true)
    	    					outputChatBox(getPlayerName(player).." #005A0Ehas been muted by #FFFFFF"..name.."#005A0E.#FFFFFF Reason: insulting #005A0EDuration #FFFFFF["..math.floor((duration *1.66666667 * 1/100000)).." mins].", root, 255, 255, 255, true)
    	    					local timer = setTimer ( unmute, duration, 1, player )
    	    					serialMute [ getPlayerSerial ( player ) ] = { duration, timer })
        					end
        				end
        			else
        				outputChatBox("Could not find the player.",thePlayer, 255, 0, 0)
        			end
        		end
        	end
        end
        addCommandHandler("action", doAction)
    
        function unmutePlayer(player,command,victimName)
        	if victimName then
        		local victim = getPlayerFromNamePart(victimName or "")
        		if victim then
        			if ( isPlayerMuted(victim) ) then
        				setPlayerMuted(victim, false)
        			end
        		end
        	end
        end
        addCommandHandler("unmute",unmutePlayer)
    
        function onJoin ()
            local serial = getPlayerSerial(source)
            local muted = serialMute [ serial ]
            if ( type ( muted ) == "table" ) then
                if ( muted [ 1 ] ) then
                    setPlayerMuted ( source, true )
                    local timer = setTimer ( unmute, muted [ 1 ], 1, source )
                    serialMute [ serial ] [ 2 ] = timer
         
                    return
                end
            end
            setPlayerMuted ( source, false )
        end
        addEventHandler ( "onPlayerJoin", getRootElement(), onJoin )
         
        addEventHandler ( "onPlayerQuit", root,
            function ( )
                local serial = getPlayerSerial ( source )
                local muted = serialMute [ serial ]
                if ( type ( muted ) == "table" ) then
                    if isTimer ( muted [ 2 ] ) then
                        local timeLeft = getTimerDetails ( muted [ 2 ] )
                        killTimer ( muted [ 2 ] )
                        serialMute [ serial ] [ 1 ] = timeLeft
                    end
                end
            end
        )
         
        function unmute ( thePlayer )
            if isElement ( thePlayer ) then
                setPlayerMuted ( thePlayer, false )
                serialMute [ getPlayerSerial ( thePlayer ) ] = nil
                outputChatBox ( "You have been unmuted by Console.", thePlayer, 0, 255, 100 )
            end
        end
    
        function getPlayerFromNamePart(name)
            if name then
                for i, player in ipairs(getElementsByType("player")) do
                    if string.find(getPlayerName(player):lower(), tostring(name):lower(), 1, true) then
                        return player
                    end
                end
            end
            return false
        end

    Try this

×
×
  • Create New...