Register to post in forums, or Log in to your existing account
 

Play RetroMUD
Post new topic  Reply to topic     Home » Forums » CMUD General Discussion
trigsandstuff
Newbie


Joined: 09 Jul 2010
Posts: 7

PostPosted: Fri Jul 09, 2010 4:42 am   

Turn off triggers within a class
 
Is there a way to turn off all the triggers within a class, without turning off the class itself?

I'll try to clarify.

Class - Bob
Trigger - a
Trigger - b

Button - Turn off Bob triggers

I want a method of turning off all the triggers in Bob class, while leaving the class itself turned on.
This way, I can add any number of triggers to the Bob class, and the button will still disable all of them.
But I want each trigger to be able to be turned on and fired, individually. That would require the class stay turned on at all times.

Is there a method of doing this without adding t-a , t-b, t-c, etc for each new trigger I add to the Bob class?
Reply with quote
MattLofton
GURU


Joined: 23 Dec 2000
Posts: 4834
Location: USA

PostPosted: Fri Jul 09, 2010 4:59 am   
 
There is not one command that will do all of them at once like if you just turned off the class. You can, however, give them all names and use #T- to turn off each one.
_________________
EDIT: I didn't like my old signature
Reply with quote
shalimar
GURU


Joined: 04 Aug 2002
Posts: 4662
Location: Pensacola, FL, USA

PostPosted: Fri Jul 09, 2010 6:43 am   
 
Make a subclass for the triggers and turn that off instead.
_________________
Discord: Shalimarwildcat
Reply with quote
trigsandstuff
Newbie


Joined: 09 Jul 2010
Posts: 7

PostPosted: Fri Jul 09, 2010 7:58 pm   
 
A subclass doesn't change anything. It just adds another folder.
Reply with quote
trigsandstuff
Newbie


Joined: 09 Jul 2010
Posts: 7

PostPosted: Fri Jul 09, 2010 8:03 pm   
 
Say i have trigger A, B, and C

A is in a class Activate
B and C are in Triggers

A has an if statement that when true, activates trigger B
when false, activates trigger C

I want to be able to turn off B and C with the push of a button, but I want them to still be able to be turned on by A.

Disabling the class would prevent them from turning on. A subclass wouldn't change that situation. I can add a button that says #T- B;#T- C;, but I want to be able to add many more triggers to that class, without having to manually add more #T- for each trigger.
Reply with quote
Arminas
Wizard


Joined: 11 Jul 2002
Posts: 1265
Location: USA

PostPosted: Fri Jul 09, 2010 9:38 pm   
 
About the best way you are going to be able to handle that is to actually name your triggers.

Then make a function that either turns on or off the trigger based on its name. Something like the following.

Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<cmud>
  <class name="testRoot" copy="yes">
    <class name="Triggers" copy="yes">
      <trigger name="Trigger1" priority="60" copy="yes">
        <pattern>^Some random event happens.</pattern>
        <value>#cw MXPRed</value>
      </trigger>
      <trigger name="Trigger2" priority="60" copy="yes">
        <pattern>^Some other random event happens.</pattern>
        <value>#cw MXPBlue</value>
      </trigger>
      <trigger name="Trigger3" priority="60" copy="yes">
        <pattern>^A third random event happens.</pattern>
        <value>#cw dodgerblue
#call @tState(Trigger1,1)
#call @tState(Trigger2,0)
#call @tState(Trigger3,0)</value>
      </trigger>
    </class>
    <class name="Buttons" copy="yes">
      <button autosize="false" width="75" height="23" inset="true" textcolor="#FF6600" border="#3366FF" priority="72" copy="yes">
        <caption>Trigger 1 Text</caption>
        <value>#Show {Some random event happens.}</value>
      </button>
      <button autosize="false" width="86" height="23" priority="82" copy="yes">
        <caption>Disable Trigger 1</caption>
        <value>#call @tState(Trigger1,0)</value>
      </button>
      <button autosize="false" width="86" height="23" priority="80" copy="yes">
        <caption>Disable Trigger 2</caption>
        <value>#call @tState(Trigger2,0)</value>
      </button>
      <button autosize="false" width="75" height="23" inset="true" textcolor="#FF6600" border="#3366FF" priority="71" copy="yes">
        <caption>Trigger 2 Text</caption>
        <value>#Show {Some other random event happens.}</value>
      </button>
      <button autosize="false" width="86" height="23" priority="81" copy="yes">
        <caption>Enable Triggers</caption>
        <value>#loopdb @tTriggers {#if (%val==0) {#call @tState(%key,1)}}</value>
      </button>
      <button autosize="false" width="75" height="23" inset="true" textcolor="#FF6600" border="#3366FF" priority="70" copy="yes">
        <caption>Trigger 3 Text</caption>
        <value>#Show {A third random event happens.}</value>
      </button>
    </class>
    <func name="tState" copy="yes">
      <value>#if (%trigger(tTriggers)==-1)
  {
    #var tTriggers "" _nodef testRoot
  }
#if (%trigger(%string($tName))==-1)
  {
    #print {"Trigger not found."}
    #Return
  }
#switch ($tState==1) {
                        #addkey tTriggers $tName 1
                        #T+ %string($tName)
                     }
        ($tState==0) {
                        #addkey tTriggers $tName 0
                        #T- %string($tName)
                     }
        {#return @{%concat($tName,".",$tState)}}</value>
      <arglist>$tName, $tState</arglist>
    </func>
  </class>
</cmud>


I use something a little more complex but this should show you the idea.
_________________
Arminas, The Invisible horseman
Windows 7 Pro 32 bit
AMD 64 X2 2.51 Dual Core, 2 GB of Ram
Reply with quote
albo
Apprentice


Joined: 27 Mar 2008
Posts: 106

PostPosted: Thu Feb 03, 2022 5:21 am   Re: Turn off triggers within a class
 
trigsandstuff wrote:
Is there a way to turn off all the triggers within a class, without turning off the class itself?

I'll try to clarify.

Class - Bob
Trigger - a
Trigger - b

Button - Turn off Bob triggers

I want a method of turning off all the triggers in Bob class, while leaving the class itself turned on.
This way, I can add any number of triggers to the Bob class, and the button will still disable all of them.
But I want each trigger to be able to be turned on and fired, individually. That would require the class stay turned on at all times.

Is there a method of doing this without adding t-a , t-b, t-c, etc for each new trigger I add to the Bob class?


Hey, I know this is coming in late but I needed a similar setup and I thought I would share something that worked for me. I used a function with a forall loop that iterates through a string list and turns off a single trigger each step along the way; there is a variable local to the function for index. The trigger name of the individual mob triggers are the elements of that string list. To maintain this I need to ensure that each time I create a new mob trigger I give it a unique name, and then also place that unique trigger name in the string list.

Example function,
Code:
@disableMobTriggers()

Code:
$index = 1
#FORALL (@stringlistMobTriggers) {#T- %item(@stringlistMobTriggers, $index)
$index = $index + 1}


Example usage of ensuring all mob triggers are turned off before turning one on,
Code:
@disableMobTriggers()
#class {aabot-walk} (1)
#class {aabot-look} (1)
#T+ $a trigger


Notice in this last one that $a is used, which means this example code is from a function itself. The function starts the player character on a path to hunt down and kill a specific mob somewhere out there in the MUD world. The $a is a trigger name being passed around, the same ones that would be in that string list from earlier. To wrap that up, name your triggers with something unique to that trigger and then place those names in a string list; you can then create a function that contains the loop of #t- and extend its reach on-going without coming back to it.
Reply with quote
hpoonis2010
Adept


Joined: 18 Jun 2019
Posts: 279

PostPosted: Thu Feb 03, 2022 7:52 am   
 
All of this seems a trifle long-winded.

For myself, I use sub-class for separate items. Eg., Quests

Class: QUESTS
Sub-classes: Quest_trigs, Quest_vars, Quest_aliases, etc. Then I can easily on/off a bunch of things without the hassle of looping.
Reply with quote
albo
Apprentice


Joined: 27 Mar 2008
Posts: 106

PostPosted: Thu Feb 03, 2022 8:16 am   
 
My solution is nested within a bot that runs quests, specifically hunt a mob and kill it quests. Having individual triggers for the mobs was to accomplish needing a specific and unique path for each different mob and a way to use the correct keyword to interact with it. Sometimes the bot comes across a non quest mob on the way to the actual quest mob, so I needed to ensure that only the hunted mob would set off a trigger. The bot is designed to turn the triggers on and off by receiving and completing the quest, but there needed to be a fail safe that would turn off every single mob trigger. At first I had it setup just like you, but the bot just runs smoother with the fail safe.
Reply with quote
Display posts from previous:   
Post new topic   Reply to topic     Home » Forums » CMUD General Discussion All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© 2009 Zugg Software. Hosted by Wolfpaw.net