Jump to content
The Dark Mod Forums

Recommended Posts

Posted

HMart -
I followed your helpful outline, though my thread function was somewhat simplified:

void player::DiscardWeaponThread(entity weapon) {
    sys.trigger($atdm_gui_message_no_art_my_weapon_message);
    sys.wait(4);
        disableWeapon();    
    sys.waitFor(weapon);
    sys.wait(3); // possibly redundant    
    discardthreadNumber = 0; // Tell caller we're done
  }

My version of DiscardWeaponThread() has these differences:

  • I added the ...Thread suffix - that's just me.
  • It's a void function, since the "thread" keyword on the call takes care of returning the thread ID.
  • Wrapping the body in "eachFrame" didn't seem to buy anything other than making my head hurt. By not having an endless loop, I can end the thread just by ending the function, so don't need a sys.terminate
  • Instead of your gui method, I used an atdm_gui_message... element in the map to put a message up for 4 seconds.  This works fine.
  • weapon.weaponHolstered() is a void function, so was not meaningful to test by an "if". And its presence or absence didn't seem to make a difference.
  • I don't know if waitFor(weapon) works (I added "sys." before it), so I did sys.wait(3) too to be safe.

This is an OK if imperfect solution. A problem with using disableWeapon is that, while it puts the weapon down, it leaves it selected in the GUI, and you can't unselect with TAB. Nor can the user raise it (and see my message) again. I tried putting an enableWeapon() at the end of the thread, but that undesirably raises the weapon again.

I also tried, in place of the disableWeapon() call, these functions -

  • LowerWeapon(); // w or w/o "self."
  • selectWeapon("atdm:weapon_unarmed");

Neither exhibited the necessary lowering response (although getting rid of disableWeapon did mean you could lower the weapon with the normal keystroke, and when you re-raised it with the normal keystroke, the gui message would re-appear).

Finally, I considered trying .Lower(), that is available for certain weapons, e.g.:

#include "script/tdm_weapon_blackjack.script"
...
    // replace "disableWeapon()" with code that checks if weapon is blackjack (not shown) and if so:
    weapon_blackjack jack = weapon; // cast so "Lower" is available. BAD SYNTAX
    jack.Lower();

But I don't know how to do the required cast/conversion in this scripting language.

Posted

Among my problems with disableWeapon() is that it disables ALL weapons, not just the current one, by essentially freezing the weapons part of the user interface. This may work for grayman's use case (the player put in jail) but not mine... I want to be more selective. (Not shown: my filtering of weapon type so that DisarmWeaponThread gets called only for blackjack and shortsword).

[SOLVED] I finally have a solution for my needs. Instead of using "disableWeapon()" in the above function, I use:
    selectWeapon("unarmed");

Note carefully the argument here. It is not either of these:
    selectWeapon("atdm:weapon_unarmed");    
    selectWeapon("player1_weapon"); // Name returned by weapon.GetName() when player unarmed.

FYI, grayman gives the otherwise-undocumented list of selectWeapons strings here as:
 
"unarmed"
"blackjack"
"shortsword"
"broadhead"
"waterarrow"
"firearrow"
"ropearrow"
"gasarrow"
"noisemaker"
"mossarrow"
"vinearrow"

 

  • Like 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent Status Updates

    • JackFarmer

      "The Year of the Rat." 
      😄

      Al Stewart must be proud of you!
      Happy testing!
      @MirceaKitsune
      · 1 reply
    • datiswous

      I posted about it before, but I think the default tdm logo video looks outdated. For a (i.m.o.) better looking version, you can download the pk4 attached to this post and plonk it in your tdm root folder. Every mission that starts with the tdm logo then starts with the better looking one. Try for example mission COS1 Pearls and Swine.
      tdm_logo_video.pk4
      · 2 replies
    • JackFarmer

      Kill the bots! (see the "Who is online" bar)
      · 3 replies
    • STiFU

      I finished DOOM - The Dark Ages the other day. It is a decent shooter, but not as great as its predecessors, especially because of the soundtrack.
      · 5 replies
    • JackFarmer

      What do you know about a 40 degree day?
      @demagogue
      · 4 replies
×
×
  • Create New...