| Blockland Forums > Modification Help |
| Help with Confusing Syntax Error! |
| << < (2/5) > >> |
| Port:
This code is such a horrible mess which wouldn't even work if the missing " issue was solved. Here, let me point out a few of the flaws: --- Quote ---package NoBaseplates { function FxBTSBrick::OnPlant(%client, %this) { parent::OnPlant(%client, %this); %brick = %this; // Why would you even do this? The brick is available from %this, no need for an extra variable. if(%client.isAdmin) return; if(!(%brick.getType() & $TypeMasks::FxBrickAlwaysObjectType)) if(!%brick.isPlanted) // What the hell is the point of the this? The brick will never not brick, and will never not placed. In fact, this will cause it to never define %brickData unless somebody is running this function on a namespace basis. %brickData = %brick.getDataBlock().getID(); if(%brickData.category $= "Baseplates") { %brick.killBrick(); MessageClient(%this, '', "\c6Non-admins aren't allowed to plant any bricks in the baseplate section."); } } }; ActivatePackage(NoBaseplates); --- End quote --- Here are some hints: * The arguments for the fxDTSBrickData::onPlant callback are the brick datablock, %this, and the brick object, %obj. * You can access the client of a brick by getting it's brick group using getBrickGroupFromObject( object ) and accessing it's .client field. * The previously mentioned function is called when the brick is planted. There is no need to check whether it's planted. |
| Greek2me:
Port is correct, aside from this: --- Quote from: Port on March 21, 2012, 11:55:30 AM --- * The previously mentioned function is called when the brick is planted. There is no need to check whether it's planted. --- End quote --- The fxDtsBrick::onPlant function is also called when a temp brick is placed. %brick.isPlanted checks whether the brick is a temp brick or not, so it is in fact something that should be included. |
| Port:
--- Quote from: Greek2me on March 21, 2012, 08:22:49 PM ---The fxDtsBrick::onPlant function is also called when a temp brick is placed. %brick.isPlanted checks whether the brick is a temp brick or not, so it is in fact something that should be included. --- End quote --- What are you talking about? fxDTSBrick::plant() only calls fxDTSBrick::onPlant() upon successfully placing the brick. Try it yourself. package test { function fxDTSBrick::onPlant( %this ) { announce ( "onPlant( " @ %this @ " )" ); parent::onPlant( %this ); } }; activatePackage( "test" ); Evaluate those two lines in the console and place a brick. |
| ScratchTehEPICSpaceDude:
It seems to work. |
| ScratchTehEPICSpaceDude:
Anyway, I don't know anything about this. Adam Savage coded this. |
| Navigation |
| Message Index |
| Next page |
| Previous page |