Game Development Community

Scripting problems...

by Funky Diver · in Torque Game Engine · 06/19/2004 (12:40 pm) · 2 replies

Greetings,

I'm trying to script additional weapons in my tiny demo and have some problems... Would be very nice if someone give me an idea.
Well, I've added sword weapon and it works fine on pickup and and on adding it by script to my player model. Until it's the only weapon. I've added to my mod also a scripted inventory from RealmWars. Now, if I have a sword and a crossbow, I see them on my inventory HUD. I always can equip the crossbow, but never the sword.
After 5 hours of "echo()"-style debugging :), I've found that the method "onUse" cannot be found in the Sword class. Basicly, Sword class is the copy of the Crossbow class. And they both have parent Weapon class with onUse() method.
I've invoked dump() method on %data parameter in ShapeBase::use() method in server/inventory.cs; and I could see the following...

After I pickup the sword from the ground:
Collide with item Item.
ShapeBase::setInventory(): SET INV FOR Sword ITEM TYPE=melee NUM=1
ShapeBase::use(): CALLING OnUse of 72 with THIS =1532
Member Fields:
  aiAvoidThis = "0"
  cameraDefaultFov = "90"
  cameraMaxDist = "0.223297"
  cameraMaxFov = "120"
  cameraMinDist = "0.2"
  cameraMinFov = "5"
  category = "Weapon"
  className = "Weapon"
  computeCRC = "0"
  density = "2"
  destroyedLevel = "1"
  disabledLevel = "1"
  drag = "0.5"
  dynamicType = "0"
  elasticity = "0.199413"
  emap = "1"
  firstPersonOnly = "0"
  friction = "0.599218"
  gravityMod = "1"
  hudRenderAlways[0] = "0"
  hudRenderAlways[1] = "0"
  hudRenderAlways[2] = "0"
  hudRenderAlways[3] = "0"
  hudRenderAlways[4] = "0"
  hudRenderAlways[5] = "0"
  hudRenderAlways[6] = "0"
  hudRenderAlways[7] = "0"
  hudRenderCenter[0] = "0"
  hudRenderCenter[1] = "0"
  hudRenderCenter[2] = "0"
  hudRenderCenter[3] = "0"
  hudRenderCenter[4] = "0"
  hudRenderCenter[5] = "0"
  hudRenderCenter[6] = "0"
  hudRenderCenter[7] = "0"
  hudRenderDistance[0] = "0"
  hudRenderDistance[1] = "0"
  hudRenderDistance[2] = "0"
  hudRenderDistance[3] = "0"
  hudRenderDistance[4] = "0"
  hudRenderDistance[5] = "0"
  hudRenderDistance[6] = "0"
  hudRenderDistance[7] = "0"
  hudRenderModulated[0] = "0"
  hudRenderModulated[1] = "0"
  hudRenderModulated[2] = "0"
  hudRenderModulated[3] = "0"
  hudRenderModulated[4] = "0"
  hudRenderModulated[5] = "0"
  hudRenderModulated[6] = "0"
  hudRenderModulated[7] = "0"
  hudRenderName[0] = "0"
  hudRenderName[1] = "0"
  hudRenderName[2] = "0"
  hudRenderName[3] = "0"
  hudRenderName[4] = "0"
  hudRenderName[5] = "0"
  hudRenderName[6] = "0"
  hudRenderName[7] = "0"
  inheritEnergyFromMount = "0"
  isInvincible = "0"
  lightColor = "1.000000 1.000000 1.000000 1.000000"
  lightOnlyStatic = "0"
  lightRadius = "10"
  lightTime = "1000"
  lightType = "NoLight"
  mass = "1"
  maxDamage = "1"
  maxEnergy = "0"
  maxVelocity = "-1"
  observeThroughObject = "0"
  pickUpName = "a sword"
  renderWhenDestroyed = "1"
  repairRate = "0.0033"
  shapeFile = "MiddleAge.fps/data/shapes/sword/rune_blade01.dts"
  sticky = "0"
  useEyePoint = "0"
Tagged Fields:
  image = "SwordImage"
  itemType = "melee"
  trayIcon = "sword01.png"
Methods:
  checkDeployPos() - 
  create() - 
  Damage() - 
  delete() - 
  dump() - 
  getClassName() - 
  getDeployTransform() - 
  getGroup() - 
  getId() - 
  getName() - 
  getType() - 
  onInventory() - 
  onPickup() - 
  onThrow() - 
  onUse() - 
  save() - 
  schedule() - 
  setName() - 
*** Sword::onUse data=72, obj=1532
USING WEAPON 72

#1
06/19/2004 (12:41 pm)
As you can see, the %data variable in OnUse() holds value "72" instead of the "Sword".
Now, I have the sword in my inventory slot 0 and it's equiped in hand. I press a key to re-equip it, and I have completly different dump!

SERVER CMD EQUIP NUM = 0
TRY TO EQUIP Sword
CALLING OnUse of Sword with THIS =1532
Member Fields:
  collideable = "0"
  dataBlock = "Sword"
  position = "365.632 310.334 219.604"
  rotate = "1"
  rotation = "1 0 0 0"
  scale = "1 1 1"
  static = "1"
Tagged Fields:
Methods:
  applyDamage() - 
  applyImpulse() - 
  applyRepair() - 
  canCloack() - 
  clearDamageDt() - 
  clearInventory() - 
  clearScopeToClient() - 
  Damage() - 
  decInventory() - 
  delete() - 
  dump() - 
  getAIRepairPoint() - 
  getCameraFov() - 
  getClassName() - 
  getClientSlotFor() - 
  getControllingClient() - 
  getControllingObject() - 
  getDamageFlash() - 
  getDamageLevel() - 
  getDamagePercent() - 
  getDamageState() - 
  getDataBlock() - 
  getEnergyLevel() - 
  getEnergyPercent() - 
  getEyePoint() - 
  getEyeTransform() - 
  getEyeVector() - 
  getFirstFreeSlot() - 
  getForwardVector() - 
  getGroup() - 
  getId() - 
  getImageAmmo() - 
  getImageLoaded() - 
  getImageSkinTag() - 
  getImageState() - 
  getImageTrigger() - 
  getInventory() - 
  getLastStickyNormal() - 
  getLastStickyPos() - 
  getMountedImage() - 
  getMountedObject() - 
  getMountedObjectCount() - 
  getMountedObjectNode() - 
  getMountNodeObject() - 
  getMountSlot() - 
  getMuzzlePoint() - 
  getMuzzleVector() - 
  getName() - 
  getObjectBox() - 
  getObjectMount() - 
  getPendingImage() - 
  getPosition() - 
  getRechargeRate() - 
  getRepairRate() - 
  getScale() - 
  getShapeName() - 
  getSkinName() - 
  getSlotFor() - 
  getSlotTransform() - 
  getTransform() - 
  getTrayItem() - 
  getType() - 
  getVelocity() - 
  getWhiteOut() - 
  getWorldBox() - 
  getWorldBoxCenter() - 
  incInventory() - 
  isCloaked() - 
  isDestroyed() - 
  isDisabled() - 
  isEnabled() - 
  isHidden() - 
  isImageFiring() - 
  isImageMounted() - 
  isMounted() - 
  isRotating() - 
  isStatic() - 
  maxInventory() - 
  mountImage() - 
  mountObject() - 
  onInventory() - 
  pauseThread() - 
  pickup() - 
  playAudio() - 
  playThread() - 
  respawn() - 
  save() - 
  schedule() - 
  schedulePop() - 
  scopeToClient() - 
  setCameraFov() - 
  setCloaked() - 
  setCollisionTimeout() - 
  setDamageDt() - 
  setDamageFlash() - 
  setDamageLevel() - 
  setDamageState() - 
  setDamageVector() - 
  setDataBlock() - 
  setEnergyLevel() - 
  setHidden() - 
  setImageAmmo() - 
  setImageLoaded() - 
  setImageTrigger() - 
  setInventory() - 
  setInvincibleMode() - 
  setName() - 
  setRechargeRate() - 
  setRepairRate() - 
  setScale() - 
  setScopeAlways() - 
  setShapeName() - 
  setShapeServerId() - 
  setSkinName() - 
  setSlot() - 
  setThreadDir() - 
  setTransform() - 
  setVelocity() - 
  setWhiteOut() - 
  startFade() - 
  stopAudio() - 
  stopThread() - 
  throw() - 
  throwObject() - 
  unmount() - 
  unmountImage() - 
  unmountObject() - 
  use() - 
MiddleAge.fps/server/scripts/items/inventory.cs (56): Unknown command onUse.
  Object Sword(1379) Item -> ShapeBase -> GameBase -> SceneObject -> NetObject -> SimObject

We have correct value of the %data="Sword", but no onUse() method of the Sword class.

Does anybody have any idea what is going on? I'm lost because the same code works fine for the Crossbow class...

Thank you.
#2
06/19/2004 (2:04 pm)
The problem appears to be in your inventory code. Somehow the number 72 is being converted into the dataname before being sent the second time. The inventory pickup code is automatic and is different than use code or equiping a weapon.

You need a function that is something like this....


function Sword::onUse(%this)
{
do stuff here;
}


to equip or mount the sword onto your player character.


Without seeing your scripts, I can't tell you much more.