Hello i'm very new to Lua Programming and scripting for games, actually it's my first try. i 'm trying to build the basic mecanics for seeding to harvest a weed plant ( ilegal job )
what i wanna do is : you will have seeds ( not yet implemented) , you will plant them with "H" , after they ready to harvest , you will press "E" to collect. A bag will show on the ground and then you will be able to pick it up as a weed bag
i can plant lots of plants, i see the plants growing up, they are all added to an array and updated with the client ( i just used the atm_c.lua and atm_s.lua examples on blue montains github)
then the player can harvest the first plant. After that i remove the plant from the array and update client with it. The harvest function ("Colher") has 2 args .. plant object and player object.
When i hit "E" to harvest the SECOND plant.. i get that plant object and player object ( harvest function arguments) they are not valid objects. I dont understand very well how Onset works ..so i might be trying something impossible, i dont know.
You see a way i can do it, i can change my entire code.. no problem.
Any help is appreciated! thanks in advance!
video on youtube showing the problem : https://www.youtube.com/watch?v=Ejt_nYvJkLk
here is my scripts :
ilegalmaconha_c :
Server side :
ilegalmaconha_s :
what i wanna do is : you will have seeds ( not yet implemented) , you will plant them with "H" , after they ready to harvest , you will press "E" to collect. A bag will show on the ground and then you will be able to pick it up as a weed bag
i can plant lots of plants, i see the plants growing up, they are all added to an array and updated with the client ( i just used the atm_c.lua and atm_s.lua examples on blue montains github)
then the player can harvest the first plant. After that i remove the plant from the array and update client with it. The harvest function ("Colher") has 2 args .. plant object and player object.
When i hit "E" to harvest the SECOND plant.. i get that plant object and player object ( harvest function arguments) they are not valid objects. I dont understand very well how Onset works ..so i might be trying something impossible, i dont know.
You see a way i can do it, i can change my entire code.. no problem.
Any help is appreciated! thanks in advance!
video on youtube showing the problem : https://www.youtube.com/watch?v=Ejt_nYvJkLk
here is my scripts :
ilegalmaconha_c :
Code:
local PlantasIds = {} local plantas_ = {} local player = GetPlayerId() AddRemoteEvent("ilegalmaconha:update", function(PlantaObjects) plantas_ = PlantaObjects --[[clear array]]-- PlantasIds = {} for _,v in pairs(plantas_) do if IsValidObject(v) then table.insert(PlantasIds, v) end end end) local function OnKeyPress(key) --[[ Player is on foot. he can do some stuff ]]-- if not(IsPlayerInVehicle()) then --[[ Player will plant another Plant Later implementation : check inventory for seed. dont know how to do it yet ]]-- if(key == 'H') then CallRemoteEvent("Plantar") end --[[ Player will harvest Plant ]]-- if(key == 'E') then local x, y, z = GetPlayerLocation() for _,v in pairs(PlantasIds) do --to get the closer plant, implementation for later --local x2, y2, z2 = GetObjectLocation(v) --local dist = GetDistance3D(x, y, z, x2 , y2, z2) if IsValidObject(v) then CallRemoteEvent("Colher", v, player) break end end end end end AddEvent("OnKeyPress", OnKeyPress)
ilegalmaconha_s :
Code:
Plantas = {} idplantas = 0 --[[ util ]]-- function tablelength(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end function tablefind(tab, el) for index, value in pairs(tab) do if value == el then return index end end end function Plantar(player) local planta; local TIMER_PLANTAR = 1000; local TIMER_PLANTAR_CRESCER = 10000; local TIMER_PLANTAR_FLORIR = 10000; AddPlayerChat(player,"New Plant...") --Start animation SetPlayerAnimation(player, "PICKUP_LOWER") --[[ First step of Plant - little one. ]]-- Delay(TIMER_PLANTAR, function() --[[ Get position of player to set Plant , little adjustment of Z coord. ]]-- local x, y, z = GetPlayerLocation(player) planta = CreateObject(64, x, y, z) idplantas = idplantas + 1 SetObjectPropertyValue(planta, "nome", "planta"..tostring(idplantas)) SetObjectScale(planta,0.2,0.2,0.2) local xo, yo, zo = GetObjectLocation(planta) SetObjectLocation(planta, xo, yo, zo-95.0695) --[[Second stage of plant - vegging]]-- Delay(TIMER_PLANTAR_CRESCER, function() SetObjectScale(planta,0.7,0.7,0.7) --[[Third stage - flowering ]]-- Delay(TIMER_PLANTAR_FLORIR, function() SetObjectScale(planta,1.3,1.3,1.3) --Plant is ready to harvest, add to Harvestable Plants array table.insert(Plantas, planta) AddPlayerChatAll("Plant ready to harvest : " .. GetObjectPropertyValue(planta, "nome")) --update client with remaining harvestable Plants CallRemoteEvent(player, "ilegalmaconha:update", Plantas) end) end) end) end AddRemoteEvent("Plantar", Plantar) function Colher(object, player) AddPlayerChatAll("New Harvest...") for _,v in pairs(Plantas) do AddPlayerChatAll("Plants to harvest - " .. GetObjectPropertyValue(v, "nome")) end if IsValidPlayer(player) then AddPlayerChat(player, "Player harvesting = " .. GetPlayerName(player)) else AddPlayerChatAll("Player not found!") end local nomeplanta = "" local x, y, z if IsValidObject(object) then nomeplanta = GetObjectPropertyValue(object,"nome") x, y, z = GetObjectLocation(object) end if nomeplanta == "" then AddPlayerChatAll("Plant not found!") else AddPlayerChatAll("Plant to be harvest : " .. nomeplanta) end for _,v in pairs(Plantas) do AddPlayerChatAll("Verifying Plant - " .. GetObjectPropertyValue(v, "nome")) if GetObjectPropertyValue(v,"nome") == nomeplanta then AddPlayerChatAll("Plant Removed : " .. nomeplanta) table.remove(Plantas, tablefind(Plantas, v)) CallRemoteEvent(player,"ilegalmaconha:update", Plantas) DestroyObject(object) local pacotemaconha = CreateObject(619, x, y, z) SetObjectScale(pacotemaconha,0.5,0.5,0.5) break end end end AddRemoteEvent("Colher", Colher)
Comment