Author Topic: ReplaceItem ?  (Read 1207 times)

I need to replace an item on a function.

I can get the item to go away, but not make the new one.

Snippet that handles this part:

Code: [Select]
for(%i=0;%i<%player.getDatablock().maxTools;%i++)
{
     %tool = %player.tool[%i].getID();
     if(%tool == GunItem.getID())
     {
          %player.tool[%i] = AkimboGunImage;
          messageClient(%killer,'MsgItemPickup','',%i, AkimboGunImage);
          if(%player.currTool == %i)
          {
               %player.updateArm(0);
               %player.unMountImage(0);
          }
               break;
     }
}

Try to do Gun to Akimbo Gun.

I think it has to be nametoid("AkimboGunImage") but let me check.
Yep.


I tried this:

Code: [Select]
for(%i=0;%i<%player.getDatablock().maxTools;%i++)
{
     %tool = %player.tool[%i].getID();
     if(%tool == GunItem.getID())
     {
          %newGun = nameToID("AkimboGunImage");
          %player.tool[%i] = %newGun;
          messageClient(%killer,'MsgItemPickup','',%i, %newGun);
          if(%player.currTool == %i)
          {
               %player.updateArm(0);
               %player.unMountImage(0);
          }
               break;
     }
}

It didn't work. However, I think I'm one step closer, as instead of not getting any items back, I got a black "?" item, with a printer model instead of the gun.

Should be item instead of image.

KICK ASS!!!

It worked! Thanks.

My script shall be finished shortly thanks to you.

New problem.

I need to replace the item, but this time, onPickUp.

Snippet:

Code: [Select]
function Player::pickup(%this, %item)
{
     %client = %this.client;
     %player = %client.player;

     for(%i=0;%i<%player.getDatablock().maxtools;%i++)
     {
          %tool = %player.tool[%i].getID();
          if(%tool == GunItem.getID())
          {
               %newGun = nameToID("AkimboGunItem");
               %player.tool[%i] = %newGun;
               messageClient(%client,'MsgItemPickup','',%i, %newGun);
               break;
          }
     }
     Parent::pickup(%this, %item);
}

I'm picking up the weapon normally, and not the Akimbos instead.


Try putting Parent::pickup(%this,%Item); before the for() loop.

A thousand thanks again.

It worked.

Damn. New problem.

This is under the same function that the first snippet was.

I'm now replacing all Frags with HE's on the trigger. All.

When the trigger is executed under the correct circumstances, I'm given an HE grenade, but the others in my inventory remain Frags.

Snippet:

Code: [Select]
for(%i=0;%i<%player.getDatablock().maxTools;%i++)
{
     %tool = IDToName(%player.tool[%i]);
     if(%tool == HEGrenadeItem)
     {
          %newGun = nameToID("FragGrenadeItem");
          %player.tool[%i] = %newGun;
          messageClient(%killer,'MsgItemPickup','',%i, %newGun);
     }

     if(%tool == 0)
     {
          %newGun = nameToID("FragGrenadeItem");
          %player.tool[%i] = %newGun;
          %player.weaponCount++;
          messageClient(%killer,'MsgItemPickup','',%i, %newGun);
          break;
     }
}

if(!%player.givenFrag)
{
     %killer.medals += 1;
     messageClient(%killer,"","\c3You have been awarded the\c4 Frag Grenade\c3 for outstanding skill!");
     %player.givenFrag = true;
}


I'm still trying a variation of things, but to no avail.

Please help.
« Last Edit: February 04, 2011, 12:19:54 PM by Deathwishez »

Your last post contains errors.

However, you DO know that Space Guy did about the same thing for his L4D survivor playertype?

Code: [Select]
Damn. New problem.

This is under the same function that the first snippet was.

I'm now replacing all Frags with HE's on the trigger. All.

When the trigger is executed under the correct circumstances, I'm given an HE grenade, but the others in my inventory remain Frags.

Snippet:

[code]
for(%i=0;%i<%player.getDatablock().maxTools;%i++)
{
     %tool = IDToName(%player.tool[%i]);
     if(%tool == HEGrenadeItem)
     {
          %newGun = nameToID("FragGrenadeItem");
          %player.tool[%i] = %newGun;
          messageClient(%killer,'MsgItemPickup','',%i, %newGun);
     }

     if(%tool == 0)
     {
          %newGun = nameToID("FragGrenadeItem");
          %player.tool[%i] = %newGun;
          %player.weaponCount++;
          messageClient(%killer,'MsgItemPickup','',%i, %newGun);
          break;
     }
}

if(!%player.givenFrag)
{
     %killer.medals += 1;
     messageClient(%killer,"","\c3You have been awarded the\c4 Frag Grenade\c3 for outstanding skill!");
     %player.givenFrag = true;
}


I'm still trying a variation of things, but to no avail.

Please help.
[/code]
Get rid of the "break;"

Didn't work.

Now every time I kill someone with a frag (after meeting the IF requirements it's in), a get an HE. Before it just happened once, and that was the purpose.

Code: [Select]
function Player::pickup(%this, %item) {
     if((%gun = %item.getID()) $= akimboGunItem.getID()) for(%i=0;%i<%this.getDatablock().maxtools;%i++) {
          if(%this.tool[%i].getID() == GunItem.getID()) {
               %this.tool[%i] = %gun;
               messageClient(%this.client, 'MsgItemPickup', '', %i, %gun);
               return;
          }
     }
     Parent::pickup(%this, %item);
}