Lua API ReferencePlayer

Player Object Documentation

Overview

The Player object in GrowSoft provides access to player-specific data, actions, and UI interactions. Most methods are used with the colon operator (player:methodName()).


Player Currency

player:getGems() -- Returns the player's gems count.
player:addGems(amount, sendPacket:optional, isDisplay:optional) -- Adds gems to the player.
player:removeGems(amount, sendPacket:optional, isDisplay:optional) -- Removes gems from the player.
player:setGems(number) -- Sets the player's gems count.
player:getCoins() -- Returns the player's coins count.
player:removeCoins(amount, sendPacket:optional) -- Removes coins from the player.
player:setCoins(number) -- Sets the player's coins count.
player:getBankBalance() -- Returns bank balance.
player:addBankBalance(amount) -- Adds to bank balance.
player:setBankBalance(number) -- Sets bank balance.
player:removeBankBalance(amount) -- Removes from bank balance.

Player Position

player:getPosX()
player:getPosY()
player:getMiddlePosX()

Player Inventory

player:getInventorySize() -- Returns the player's inventory size.
player:isMaxInventorySpace() -- Returns true if inventory is full.
player:upgradeInventorySpace(amount) -- Increases inventory slots.
player:getItemAmount(itemID) -- Returns the count of a specific item.
player:changeItem(itemID, amount, sendPacket) -- Adds/removes an item.
player:getInventoryItems() -- Returns table of all inventory items.
player:getClothingItemID([clothesID]) -- Returns a clothing item's ID.
player:getBackpackUsedSize() -- Returns backpack used slots.
player:setSlots(slotAmount) -- Sets the player's slots.

Player Stats

player:getGems()
player:getCoins()
player:getUnlockedAchievementsCount()
player:getAchievementsCount()
player:isFacingLeft()
player:isOnline()

Player UI & Dialogs

player:onConsoleMessage(message) -- send console message to the player.
player:onTalkBubble(netID, message, isApi) -- Show a talk bubble, netID set to player:getNetID() if you want only you can see isApi = 0 is false and 1 is true.
player:onDialogRequest(dialog) -- Opens a dialog.
player:setNextDialogRGBA(r, g, b, a) -- Change dialog background color.
player:setNextDialogBorderRGBA(r, g, b, a) -- Change dialog border color.
player:resetDialogColor() -- Reset dialog color to default.
player:onTextOverlay(text) -- Displays overlay text.

Player Menus / Interfaces

player:onTradeScanUI()
player:onGrow4GoodUI()
player:onGuildNotebookUI()
player:onGrowmojiUI()
player:onGrowpassUI()
player:onNotebookUI()
player:onBillboardUI()
player:onPersonalizeWrenchUI()
player:onOnlineStatusUI()
player:onFavItemsUI()
player:onCoinsBankUI()
player:onUnlinkDiscordUI()
player:onLinkDiscordUI()
player:onClothesUI(targetPlayer)
player:onAchievementsUI(targetPlayer)
player:onTitlesUI(targetPlayer)
player:onWrenchIconsUI(targetPlayer)
player:onNameIconsUI(targetPlayer)
player:onVouchersUI()
player:onMentorshipUI()
player:onBackpackUI(targetPlayer)
player:onStorePurchaseResult()
player:onRedeemMenu()
player:onGrow4GoodDonate()

Player Audio & Actions

player:playAudio("audio.wav") -- Plays an audio file.
player:setNickname(name) -- Sets the player's display name (now supports colors, spaces, '@', saved on relog).
player:resetNickname() -- Resets the player's display name to their original name.
player:hasRole(roleID) -- Checks if player has role.
player:setRole(roleID) -- Sets player's role.
player:sendAction("action|play_sfx\nfile|audio/blabla.mp3\ndelayMS|0")
player:sendVariant({"OnTalkBubble", player:getNetID(), "Hello", 0, 0})
player:sendVariant({"OnConsoleMessage", "Hello"})
player:sendVariant({"OnConsoleMessage", "Hello"}, delay, netID)
ℹ️

Nickname Feature

The setNickname() function now supports colors, spaces, and the ’@’ symbol. Nicknames are saved and persist across relogs!


Player World & Connection

player:getWorld() -- Returns the current World object or nil.
player:getWorldName() -- Returns the current worldName as a string.
player:enterWorld(worldName, doorID) -- Enters specified world, optional doorID for spawn location.
player:disconnect() -- Disconnects the player from server.
player:setBroadcastWorld(worldName) -- Sets broadcast world for this player (/go will work).

Player Identity

player:getNetID() -- Returns the player's net ID.
player:getUserID() -- Returns the player's user ID.
player:getName() -- Returns the player's display name.
player:getCleanName() -- Returns the player's clean name.
player:lower() -- Returns lowercase player name.
player:getCleanName():lower() -- Clean name in lowercase.
player:getCountry() -- Returns player's country (string, online only).
player:getPlatform() -- Returns player's platform ID (0=Windows, 1=iOS, 2=MacOS, 4=Android).
player:getDiscordID() -- Returns the player's Discord ID.
player:getAccountCreationDateStr() -- Returns account creation date.
player:getType() -- Returns the player's type. Non-zero means it is an NPC.
player:hasGrowID() -- Returns true if player has a GrowID.

Player World Lists

player:getOwnedWorlds() -- Returns table of world IDs that player owns (with world locks).
player:getRecentWorlds() -- Returns table of world IDs that player recently entered.
player:getAccessWorlds() -- Returns table of world IDs that player has access to.
player:getSmallLockedWorlds() -- Returns table of world IDs locked by player with small locks (SL, BL, HL, etc).

Player Security & History

player:getIPHistory() -- Returns table of strings (IP addresses recently used to login).
player:getRIDHistory() -- Returns table of strings (RID addresses recently used to login).
⚠️

Privacy Notice

Use IP and RID history data responsibly and in accordance with privacy regulations. This data is sensitive and should be handled securely.


Player Friends Management

player:getFriends() -- Returns table of friend user IDs (numbers).
player:addFriend(targetPlayer) -- Adds a friend (bidirectional, updates both players).
player:removeFriend(targetPlayer) -- Removes a friend (bidirectional, updates both players).

Player Quests & Goals

player:getLifeGoals() -- Returns table of life goal task objects.
player:getBiweeklyQuests() -- Returns table of biweekly quest task objects.
getJimDailyQuest() -- (Global function) Returns Jim's daily quest object (same for everyone).

Life Goals & Biweekly Quest Properties

Task objects from getLifeGoals() and getBiweeklyQuests() contain:

lifeGoal.taskID
lifeGoal.taskTargetValue
lifeGoal.taskCompletedValue
lifeGoal.taskReward
lifeGoal.deliverItem
lifeGoal.rewardAmount
lifeGoal.claimed
lifeGoal.givenup
lifeGoal.completed
lifeGoal.lastAnnouncePercentage

Jim Daily Quest Properties

The getJimDailyQuest() object contains:

jimDaily.firstItemID
jimDaily.firstItemCount
jimDaily.secondItemID
jimDaily.secondItemCount
jimDaily.completedPlayers -- Table of user IDs who completed it

Player Network & Connection

player:getPing() -- Returns player's ping in milliseconds.

Player Modifiers & Buffs

player:getMod(modID) -- Returns player's mod status.
player:addMod(modID, durationSeconds) -- Adds a mod/buff to the player.
player:getSubscription(subscriptionID) -- Returns subscription status.
player:getHomeWorldID() -- Returns player's home world ID.
player:getOnlineStatus() -- Returns online status.
player:getGuildID() -- Returns guild ID.
player:getTransformProfileButtons() -- Returns transform profile buttons.

Player Profile & Content

player:getClassicProfileContent(category, flags)

Player Dungeons

player:getDungeonScrolls() -- Returns how many dungeon scrolls the player has.
player:setDungeonScrolls(number) -- Sets dungeon scrolls (max 255).
ℹ️

Dungeon Scrolls

The maximum number of dungeon scrolls a player can have is 255.


Player Growpass & Progression

player:addGrowpassPoints(points) -- Adds growpass points that can be spent on rewards.

Player Block Hit Count Adjustment

Adjust how many hits it takes to break blocks:

player:adjustBlockHitCount(amount) -- Adjust block break difficulty (-10 to +10).
player:getAdjustedBlockHitCount() -- Get current adjustment value.
ℹ️

Block Hit Count Examples

  • +1: Makes blocks take more hits to break (amount varies by block)
  • -1: Makes blocks easier to break
  • -10: Makes all blocks 1-hit to break (very efficient!)
  • +10: Maximum difficulty increase
⚠️

Important Note

Setting to -10 makes all blocks break in 1 hit. The digger’s spade increases hit count by 1 for non-dirt blocks.


Player Stats Management

player:setStats(type, amount) -- Sets player statistics.

Player Account Notes & Moderation

player:addNote("Some note text") -- Adds an account note (visible in punishment UI).
player:addMod(GAME_BAN, 60) -- Bans player for 60 seconds (0 = permanent).
ℹ️

Account Notes

Account notes provide a history of previous punishments and system warnings, useful for moderation decisions.


Enhanced Dialog Callbacks

You can now pass a callback function directly to player:onDialogRequest() to handle responses without using the global dialog callback:

function handleMyGazetteDialogResponse(world, player, data)
    if data["buttonClicked"] == "test" then
        player:onConsoleMessage("tada!")
    end
end
 
player:onDialogRequest(
    "set_default_color|`o\n" ..
    "add_button|test|Test Button|left|\n" ..
    "end_dialog|my_gazette|||",
    0, -- delay (optional)
    handleMyGazetteDialogResponse -- callback (optional)
)

Cleaner Dialog Handling

This makes dialog handling cleaner and less error-prone by localizing the callback logic.