Cuberite Forum
attempting to make a plugin to spawn giants - Printable Version

+- Cuberite Forum (https://forum.cuberite.org)
+-- Forum: Plugins (https://forum.cuberite.org/forum-1.html)
+--- Forum: Plugin Discussion (https://forum.cuberite.org/forum-8.html)
+--- Thread: attempting to make a plugin to spawn giants (/thread-3366.html)



attempting to make a plugin to spawn giants - Code_Blue - 07-14-2021

Hi,
I am new to Lua and I wanted to modify the tutorial code a bit to create a plugin to spawn giants (1.12.2). I think I got most of it down, but I am having an issue with two different parts of it. 
Console Errors:

[12:58:58] LUA: Plugins/SpawnGiants/spawngiants.lua:28: attempt to call method 'SpawnMob' (a nil value)
[12:58:58] Stack trace:
[12:58:58]  Plugins/SpawnGiants/spawngiants.lua(28): (no name)
[12:58:58]  [C](-1): FindAndDoWithPlayer
[12:58:58]  Plugins/SpawnGiants/spawngiants.lua(35): (no name)
[12:58:58] Stack trace end
[12:58:58] Error in <attached> calling function <callback>()


Code:
Code:
PLUGIN = nil function Initialize(Plugin)     Plugin:SetName("GiantSpawn")     Plugin:SetVersion(1)     -- Hooks     PLUGIN = Plugin -- NOTE: only needed if you want OnDisable() to use GetName() or something like that     -- Command Bindings     cPluginManager.BindCommand("/spawngiant", "SpawnGiants.main", SpawnGiant, " ~ Spawn a Giant at someone's location")     LOG("Initialised version " .. Plugin:GetVersion())     return true end function SpawnGiant(Split, Player)     if (#Split ~= 2) then         -- Send the proper usage to the player and exit         Player:SendMessage("Usage: /spawngiant [PlayerName]")         return true     end     local CommandSent = false     local GiantSpawnPerson = function(Giantee)         if (Giantee:GetName() == Split[2]) then             Player:SpawnMob(giant)             Player:SendMessageSuccess(Split[2] .. " has been attacked by a giant")             CommandSent = true             return true         end     end     cRoot:Get():FindandDoWithPlayer(Split[2], GiantSpawnPerson)     if not(CommandSent) then         Player:SendMessageFailure:(Split[2] .. " was not found")     end     return true end function OnDisable()     LOG("Shutting down...") end


I am new to Lua and new to programming in general. Any help would be appreciated (This is running on a raspberry pi, I am not sure if that makes any difference.)


RE: attempting to make a plugin to spawn giants - 12xx12 - 07-14-2021

Hi,

The Player doesn't contain a SpawnMob Method.

You need to get the world object from the player and call the spawn method from there.

Code:
Player:GetWorld():SpawnMob(Player:GetPosition(), mtGiant, false)
´

Edit: This wall cause the giant to spawn at the position of the player using the command. If you replace "Player" with "Giantee" you should get your desired result


RE: attempting to make a plugin to spawn giants - NiLSPACE - 07-14-2021

Hi, welcome to the forum!

The reason it's giving an error is because you're calling 'SpawnMob' on a player object. What you want is the world object, probably the world of the player on which you're trying to spawn a monster on. So this line:

Player:SpawnMob(giant)

would have to be replaced with something like this:
Giantee:GetWorld():SpawnMob(Giantee:GetPosX(), Giantee:GetPosY(), Giantee:GetPosZ(), mtGiant, false);



RE: attempting to make a plugin to spawn giants - 12xx12 - 07-14-2021

(07-14-2021, 03:15 AM)NiLSPACE Wrote: Hi, welcome to the forum!

The reason it's giving an error is because you're calling 'SpawnMob' on a player object. What you want is the world object, probably the world of the player on which you're trying to spawn a monster on. So this line:

Player:SpawnMob(giant)

would have to be replaced with something like this:
Giantee:GetWorld():SpawnMob(Giantee:GetPosX(), Giantee:GetPosY(), Giantee:GetPosZ(), mtGiant, false);

Doesn't the SpawnMob method take a vector as a position parameter?


RE: attempting to make a plugin to spawn giants - NiLSPACE - 07-14-2021

I thought so as well, but the documentation showed individual coordinates: https://api.cuberite.org/cWorld.html#SpawnMob_1 But perhaps it's out of date.


RE: attempting to make a plugin to spawn giants - 12xx12 - 07-14-2021

It should still work. The vector object just pushes three integers and then the API takes just three integers.

I don‘t think anyone took the time to add this explicitly


RE: attempting to make a plugin to spawn giants - Code_Blue - 07-14-2021

Success! Giant spawned.
Thanks for your help everybody!