Blockland Forums > Modification Help
On player touch brick though coding. (or in zone, whichever)
DrenDran:
I need to make it so when a player enters a bricks zone, or touches the brick, whichever is easier, something happens:
--- Code: ---
datablock fxDTSBrickData(DDRPSmith : brick8x8FData)
{
category = "DDRP";
subCategory = "Job Plates";
uiName = "Smithing";
};
datablock TriggerData(DDRPTrigger)
{
tickPeriodMS = 200;
};
function zoneTrigger::onEnterTrigger(%this,%trigger,%obj)
{
echo("Hi!");
}
deactivatepackage(smithplant);
package smithplant
{
function fxdtsbrick::onplant(%brick)
{
if(%brick.getDatablock().getID() == DDRPSmith.getID())
{
Parent::onplant(%brick);
echo("Adding trigger.");
%zoneXa = getWord(%brick.getWorldBox(), 0) - 1/10;
%zoneYa = getWord(%brick.getWorldBox(), 1) - 1/10;
%zoneZa = getWord(%brick.getWorldBox(), 2) - 1/10;
%polySuffA = 0;
%zoneShape = "0.0 0.0 0.0 1.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0";
%pz = new PhysicalZone()
{
position = %zoneXa SPC %zoneYa SPC %zoneZa;
velocityMod = "1";
gravityMod = "1";
extraDrag = "0";
isWater = "0";
waterViscosity = "40";
waterDensity = "1";
waterColor = "0.200000 0.600000 0.600000 0.300000";
appliedForce = 1;
polyhedron = %zoneShape;
};
missionCleanup.add(%pz);
//Create a new trigger
%tr = new trigger()
{
position = %zoneXa SPC %zoneYa SPC %zoneZa;
polyhedron = %zoneShape;
dataBlock = DDRPTrigger;
};
missionCleanup.add(%tr);
%pz.setScale("5 5 5");
%tr.setScale("5 5 5");
%brick.IsZoneBrick = 1;
%brick.physicalZone = %pz;
%brick.trigger = %tr;
%brick.trigger.Active = 1;
%tr.istriggerBricktrigger = 1;
%tr.triggerBrick = %brick;
}
}
};
activatepackage(smithplant);
--- End code ---
I have also tried things with adding an onActivate->self->fireRelay when a brick is planted to put one event in it, so the onPlayerTouch function is called for that brick, but I can't seem to get events put into a brick though script.
And no, this can not be done though events.
And it dosn't work as of yet.
halcynthis:
I would say the initContainerBoxSearch, or however its spelled.
Chrono:
DDRPTrigger::blablabla
Space Guy:
From Brick_Checkpoint:
--- Code: ---function brickCheckpointData::onPlayerTouch(%data, %obj, %player)
{
%client = %player.client;
if(!isObject(%client))
return;
if(%client.checkPointBrick != %obj)
{
%client.checkPointBrick = %obj;
%client.checkPointBrickPos = %obj.getPosition();
commandToClient(%client, 'BottomPrint', "\c4Checkpoint reached! \c7- Say /clearCheckpoint to go back to the beginning", 3);
Parent::onPlayerTouch(%data, %obj, %player);
}
}
--- End code ---
Truce:
--- Quote from: Space Guy on November 24, 2010, 12:43:48 PM ---From Brick_Checkpoint:
--- Code: ---function brickCheckpointData::onPlayerTouch(%data, %obj, %player)
{
%client = %player.client;
if(!isObject(%client))
return;
if(%client.checkPointBrick != %obj)
{
%client.checkPointBrick = %obj;
%client.checkPointBrickPos = %obj.getPosition();
commandToClient(%client, 'BottomPrint', "\c4Checkpoint reached! \c7- Say /clearCheckpoint to go back to the beginning", 3);
Parent::onPlayerTouch(%data, %obj, %player);
}
}
--- End code ---
--- End quote ---
Don't forget it needs this to call that method:
--- Code: ---function brickCheckpointData::onPlant(%data, %obj)
{
%obj.enableTouch = true;
%enabled = 1;
%delay = 0;
%inputEvent = "OnPlayerTouch";
%target = "Self";
%outputEvent = "PlaySound";
%par1 = Beep_Popup_Sound.getId();
%obj.addEvent(%enabled, %delay, %inputEvent, %target, %outputEvent, %par1);
}
--- End code ---