Following is a patch from our source. Please include this by hand.
Index: C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.h
===================================================================
--- C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.h (revision 85)
+++ C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.h (revision 86)
@@ -914,9 +914,16 @@
/// @param ammo Does the image have ammo?
/// @param triggerDown Is the trigger on this image down?
/// @param target Does the image have a target?
+// Begin MMO Kit
+/* Original TGE Code:
+ virtual void setImage(U32 imageSlot, ShapeBaseImageData* imageData, NetStringHandle &skinNameHandle,
+ bool loaded = true, bool ammo = false, bool triggerDown = false,
+ bool target = false);
+*/
virtual void setImage(U32 imageSlot, ShapeBaseImageData* imageData, NetStringHandle &skinNameHandle,
- bool loaded = true, bool ammo = false, bool triggerDown = false,
+ bool loaded = true, F32 scale = 1.f, bool ammo = false, bool triggerDown = false,
bool target = false);
+// End MMO Kit
/// Clear out an image slot
/// @param imageSlot Image slot id
@@ -1275,7 +1282,12 @@
/// @param imageSlot Image mount point
/// @param loaded True if weapon is loaded (it assumes it's a weapon)
/// @param skinNameHandle Skin name for object
- virtual bool mountImage(ShapeBaseImageData* image,U32 imageSlot,bool loaded, NetStringHandle &skinNameHandle);
+// Begin MMO Kit
+/* Original MMO Kit
+ virtual bool mountImage(ShapeBaseImageData* image,U32 imageSlot,bool loaded, NetStringHandle &skinNameHandle);
+*/
+ virtual bool mountImage(ShapeBaseImageData* imageData,U32 imageSlot,bool loaded,NetStringHandle &skinNameHandle,F32 scale);
+// End MMO Kit
/// Unmount an image from a slot
/// @param imageSlot Mount point
Index: C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.cpp
===================================================================
--- C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.cpp (revision 85)
+++ C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.cpp (revision 86)
@@ -3592,12 +3592,21 @@
int count = stream->readInt(3);
+// Begin MMO Kit
+/* Original TGE Code:
if ((image.dataBlock != imageData) || (image.skinNameHandle != skinDesiredNameHandle)) {
setImage(i, imageData, skinDesiredNameHandle, image.loaded, image.ammo, image.triggerDown);
}
+*/
+ if ((image.dataBlock != imageData) || (image.skinNameHandle != skinDesiredNameHandle) || image.scale != scale) {
+ setImage(i, imageData, skinDesiredNameHandle, image.loaded, scale, image.ammo, image.triggerDown);
+
+ }
+// End MMO Kit
+
if (isProperlyAdded()) {
// Normal processing
if (count != image.fireCount)
@@ -4403,27 +4412,19 @@
ShapeBaseImageData* imageData;
if (Sim::findObject(argv[2],imageData)) {
U32 slot = dAtoi(argv[3]);
- // MMO Kit Change
- /* Old code
- bool loaded = (argc == 5)? dAtob(argv[4]): true;
- NetStringHandle team;
- */
- // New code
- // F32 scale = (argc >= 5)? dAtof(argv[4]): 1.0f;
+ F32 scale = (argc >= 5) ? dAtof(argv[4]) : 1.0f;
bool loaded = false;
NetStringHandle team;
- // End MMO Kit
+
if(argc == 6)
{
if(argv[5][0] == StringTagPrefixByte)
team = NetStringHandle(U32(dAtoi(argv[5]+1)));
- // Begin MMO Kit
else
team = NetStringHandle(argv[5]);
- // End MMO Kit
}
if (slot >= 0 && slot < ShapeBase::MaxMountedImages)
- object->mountImage(imageData,slot,loaded,team);
+ object->mountImage(imageData,slot,loaded,team,scale);
}
return false;
}
Index: C:/svns/repopulation_code/trunk/engine/source/T3D/shapeImage.cpp
===================================================================
--- C:/svns/repopulation_code/trunk/engine/source/T3D/shapeImage.cpp (revision 85)
+++ C:/svns/repopulation_code/trunk/engine/source/T3D/shapeImage.cpp (revision 86)
@@ -747,20 +747,35 @@
//----------------------------------------------------------------------------
// Any item with an item image is selectable
+// Begin MMO Kit
+bool ShapeBase::mountImage(ShapeBaseImageData* imageData,U32 imageSlot,bool loaded,NetStringHandle &skinNameHandle,F32 scale)
+/* TGE Original Code
bool ShapeBase::mountImage(ShapeBaseImageData* imageData,U32 imageSlot,bool loaded,NetStringHandle &skinNameHandle)
+*/
+// End MMO Kit
{
AssertFatal(imageSlot<MaxMountedImages,"Out of range image slot");
MountedImage& image = mMountedImageList[imageSlot];
if (image.dataBlock) {
+ // Begin MMO Kit
+ if ((image.dataBlock == imageData) && (image.skinNameHandle == skinNameHandle) && (image.scale == scale)) {
+ /* TGE Original Code
if ((image.dataBlock == imageData) && (image.skinNameHandle == skinNameHandle)) {
+ */
+ // End MMO Kit
// Image already loaded
image.nextImage = InvalidImagePtr;
return true;
}
}
//
- setImage(imageSlot,imageData,skinNameHandle,loaded);
+ // Begin MMO Kit
+ setImage(imageSlot,imageData,skinNameHandle,loaded,scale);
+ /* TGE Original Code
+ setImage(imageSlot,imageData,skinNameHandle,loaded);
+ */
+ // End MMO Kit
//see if the image has a light source
if (imageData->lightType != ShapeBaseImageData::NoLight)
@@ -1120,7 +1135,10 @@
mat->mul(nmat,data.eyeOffset);
}
else {
- getRenderMountTransform(data.mountPoint,&nmat);
+ //Original TGE
+ //getRenderMountTransform(data.mountPoint,&nmat);
+ //MMO Kit
+ getRenderMountTransform(imageSlot,&nmat);
mat->mul(nmat,data.mountTransform);
}
}
@@ -1279,7 +1297,12 @@
//----------------------------------------------------------------------------
+// Begin MMO Kit
+void ShapeBase::setImage(U32 imageSlot, ShapeBaseImageData* imageData, NetStringHandle& skinNameHandle, bool loaded, F32 scale, bool ammo, bool triggerDown, bool target)
+/* TGE Original Code
void ShapeBase::setImage(U32 imageSlot, ShapeBaseImageData* imageData, NetStringHandle& skinNameHandle, bool loaded, bool ammo, bool triggerDown, bool target)
+*/
+// End MMO Kit
{
AssertFatal(imageSlot<MaxMountedImages,"Out of range image slot");
@@ -1290,17 +1313,25 @@
// Mark that there is not a datablock change pending.
image.nextImage = InvalidImagePtr;
// Change the skin handle if necessary.
- if (image.skinNameHandle != skinNameHandle) {
+ // Begin MMO Kit
+ if (image.skinNameHandle != skinNameHandle || image.scale != scale) {
+ /* TGE Original Code
+ if (image.skinNameHandle != skinNameHandle) {
+ */
+ // End MMO Kit
if (!isGhost()) {
// Serverside, note the skin handle and tell the client.
image.skinNameHandle = skinNameHandle;
+ image.scale = scale; // <-- MMO Kit
setMaskBits(ImageMaskN << imageSlot);
}
else {
// Clientside, do the reskin.
image.skinNameHandle = skinNameHandle;
+ image.scale = scale; // <-- MMO Kit
if (image.shapeInstance) {
image.shapeInstance->reSkin(skinNameHandle);
+ //image.shapeInstance->setShapeBalloon(scale); // <-- MMO Kit
}
}
}
@@ -1338,11 +1369,13 @@
image.dataBlock = imageData;
image.state = &image.dataBlock->state[0];
image.skinNameHandle = skinNameHandle;
+ image.scale = scale; // <-- MMO Kit
image.shapeInstance = new TSShapeInstance(image.dataBlock->shape, isClientObject());
if (isClientObject()) {
if (image.shapeInstance) {
image.shapeInstance->cloneMaterialList();
image.shapeInstance->reSkin(skinNameHandle);
+ //image.shapeInstance->setShapeBalloon(scale); // <-- MMO Kit
}
}
image.loaded = loaded;
@@ -1422,6 +1455,7 @@
image.ammo = false;
image.triggerDown = false;
image.loaded = false;
+ image.scale = -1; // <-- MMO Kit
image.lightStart = 0;
// image.light.fLight.fType = TSLight::LightInvalid;
updateMass();
@@ -1537,7 +1571,12 @@
// Mount pending images
if (image.nextImage != InvalidImagePtr && stateData.allowImageChange) {
- setImage(imageSlot,image.nextImage,image.nextSkinNameHandle,image.nextLoaded);
+ // Begin MMO Kit
+ setImage(imageSlot,image.nextImage,image.nextSkinNameHandle,image.nextLoaded,image.scale);
+ /* TGE Original Code
+ setImage(imageSlot,image.nextImage,image.nextSkinNameHandle,image.nextLoaded);
+ */
+ // End MMO Kit
return;
}
