Content: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Background: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Pattern: Blank Waves Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Welcome to Xbox Chaos: Modding Evolved

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

AbandonedCashew

Support
Assistance With A Gametype Idea (Started-Don't Worry)

33 posts in this topic

Hey guys, a couple of you may have seen a similar post on Se7ensins, but I have made improvements to my concept.

I am trying to make an oddball gametype where in addition to holding the ball, you may also bring it into a scorezone for a 50 point boost.

 

Here is what my trigger looks like, this is inside oddball, and is the only thing I have done so far.

      <Trigger execMode="OnObjectFilter" name="Trigger50" objectFilter="oddball_scorezone"> <!-- My Stuff -->        <Elements>          <E type="Action" DBID="31" name="ActivateTrigger">            <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" />            <Param type="EntityFilter" filterType="Any" />			</E>          <E type="Action" name="VariableOperation">		     <Param type="VarReference" varRefKind="Custom" varRefType="Scratch">ObjectScratch1</Param>		     <Param type="VarReference" varRefKind="Custom" varRefType="ObjectFilter">oddball_ball</Param>		     <Param type="OperationType">Set</Param>		   </E>		   <E type="Action" name="VariableOperation">		     <Param type="VarReference" varRefKind="Custom" varRefType="Scratch">GlobalObject1</Param>		     <Param type="VarReference" varRefKind="Custom" varRefType="ObjectFilter">oddball_scorezone</Param>		     <Param type="OperationType">Set</Param>		   </E>          <E type="Condition" DBID="2" name="ObjectIsInBoundary" unionGroupID="-2">		     <Param type="ObjectReference" varRefKind="Custom" varRefType="ObjectScratch1" />		     <Param type="ObjectReference" varRefKind="Custom" varRefType="GlobalObject1" />		     <Param type="Bool">True</Param>		   </E>		   <E type="Action" name="ModifyScore">            <Param type="TargetVar" targetType="Player" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />		     <Param type="OperationType">Add</Param>		     <Param type="CustomReference" varRefType="Int16">50</Param>		   </E>          <E type="Action" name="SubmitIncident">            <Param type="IncidentId">ctf_teammatescored</Param>            <Param type="TargetVar" targetType="Team" varRefType="Player.OwnerTeam" dataType="PlayerScratch0" />            <Param type="TargetVar" targetType="Player" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" />          </E>        </Elements>      </Trigger>

I am just showing the trigger portion, I added the string and the filter earlier in the xml- don't need help with that. This is my first real trigger project so bear with me I am learning a lot as I go and don't have previous coding experience.

 

So what is needed with what I have?

Share this post


Link to post
Share on other sites

I'm not sure what the problem is? Did you want to award 50 points just once?

Share this post


Link to post
Share on other sites

<E type="Action" DBID="31" name="ActivateTrigger"><Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /><Param type="EntityFilter" filterType="Any" />            </E>

 

ActivateTrigger activates a subroutine trigger and I don't see it as a parameter.

Share this post


Link to post
Share on other sites

No, you'll need to use the correct format. Take a look at the official gametypes to see how it's done.

Share this post


Link to post
Share on other sites

Hey guys I have a broken trigger that I am working on, it's my first trigger, so don't laugh, but I did a complete revision of it, so tell me what looks right, and what looks wrong?

      </Trigger> <!--My Trigger-->      <Trigger execMode="OnObjectFilter" name="Trigger50" objectFilter="oddball_scorezone"> <!--Label I created-->        <Elements>          <E type="Action" DBID="35" name="ObjectSetUnknownFilter"> <!--Make the boundary visible-->             <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" />            <Param type="EntityFilter" filterType="Any" />          </E>		   <E type="Action" name="VariableOperation"> <!--Setting oddball_scorezone to GlobalObject0-->		     <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="Iterator.Object">            <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="GlobalObject0">		     <Param type="OperationType">Set</Param>		   </E>          <E type="Action" name="ActivateTrigger">            <Param type="TriggerReference">              <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="Trigger50_Subroutine20" objectfilter="oddball_ball">                <Elements>			        <E type="Action" name="VariableOperation"> <!--??: Stole this from CTF -->			          <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" />					   <Param type="VarReference" varRefKind="Player" varRefType="Object.PlayerVar" dataType="ObjectScratch0">ObjectPlayer0</Param>					   <Param="OperationType">Set</Param>					 </E>			        <E type="Action" name="VariableOperation"> <!--Setting the oddball to ObjectScratch0-->			          <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="Iterator.Object" />					   <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="ObjectScratch0"/>					   <Param type="OperationType">Set</Param>					 </E>					 <E type="Action" name="VariableOperation"> <!--Set the oddball to 1-->					   <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="ObjectScratch0">ObjectNumeric0</Param>					   <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param>					   <Param type="OperationType">Set</Param>					 </E>					 <E type="Condition" DBID="2" name="ObjectIsInBoundary"> <!--If Ball enters boundary (oddball_scorezone)...-->					   <Param type="ObjectReference" varRefKind="Custom" varRefType="Iterator.Object">					   <Param type="ObjectReference" varRefKind="Custom" varRefType="GlobalObject0">					   <Param type="Bool">True</Param>					 </E>					 <E type="Action" name="ModifyScore"> <!--Add 50 ball carry points to ball holder-->					   <Param type="TargetVar" targetType="Team" varRefType="Player.OwnerTeam" dataType="PlayerScratch0" />					   <Param type="OperationType">Add</Param>					   <Param type="CustomReference" varRefType="Int16">50</Param>					 </E>					 <E type="Action" name="SubmitIncident"> <!--And have the announcer say "Team Scored"-->					   <Param type="IncidentId">ctf_teammatescored</Param>					   <Param type="TargetVar" targetType="Team" varRefType="Player.OwnerTeam" dataType="PlayerScratch0" />					   <Param type="TargetVar" targetType="Player" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" />					 </E>			      </Elements>			    </T>	         </Param>	       </E>        </Elements>      </Trigger> <!--/My Trigger-->

My comments should explain what I am trying to achieve...

Share this post


Link to post
Share on other sites

  1. You shouldn't have to worry about DBID's since Ksoft should take care of it automatically, so don't use the DBID attribute.
  2. VariableOperation is an action which lets you do math-based operations. You use it to assign a value to a variable or modify its value.
  3. Does it compile?

Share this post


Link to post
Share on other sites

For the VariableOperation, should I just do a comparison instead?

 

Depends on what you're trying to do. Comparison compares two values and VariableOperation sets a value.

Share this post


Link to post
Share on other sites

Make it so when a ball carrier in oddball walks a ball into a boundary labelled oddball_scorezone, they get an extra 50 carry points

There should be a condition along the lines of object_is_in_boundary for checking that. I have used it before.

Share this post


Link to post
Share on other sites

@AbandonedCashew

Ok let's take a look at this conceptually. We need to ask ourselves two things:

  • Is the player carrying the oddball?
  • Was the player awarded 50 points already?
Let's create a trigger which loops through each player and get their weapon.

 

     <Trigger execMode="OnEachPlayer" name="BonusPointsTrigger">        <Elements>          <!-- Store current player's weapon to scratch (temp) object variable 0 -->          <E type="Action" name="PlayerGetWeapon">            <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />            <Param type="Bool">True</Param>            <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />          </E>        </Elements>      </Trigger>

Now, let's create a subroutine trigger which will enumerate through all objects with the oddball_scorezone label. We need to skip this subroutine if the player isn't holding an oddball, so we add a condition checking whether the player's weapon is indeed an oddball. (I'm assuming you have the label defined.)

 

      <Trigger execMode="OnEachPlayer" name="BonusPointsTrigger">        <Elements>          <!-- Store current player's weapon to scratch (temp) object variable 0 -->          <E type="Action" name="PlayerGetWeapon">            <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />            <Param type="Bool">True</Param>            <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />          </E>          <!-- Checks if the object stored in scratch object variable 0 is the oddball -->          <E type="Condition" name="ObjectIsSameType" unionGroupID="-2">            <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />            <Param type="ObjectTypeIndex">ball</Param>          </E>          <!-- If the above condition is true, activate this subroutine trigger. -->          <E type="Action" name="ActivateTrigger">            <Param type="TriggerReference">              <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="BonusPointsTrigger_EnumScoreZonesTrigger" objectFilter="oddball_scorezone">                <Elements />              </T>            </Param>          </E>        </Elements>      </Trigger>

We want to award the oddball carrier 50 points if they're inside a bonus point zone. So, we add the ScoreModify action and a condition checking if the player is inside the boundaries of the zone.

 

      <Trigger execMode="OnEachPlayer" name="BonusPointsTrigger">        <Elements>          <!-- Store current player's weapon to scratch (temp) object variable 0 -->          <E type="Action" name="PlayerGetWeapon">            <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />            <Param type="Bool">True</Param>            <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />          </E>          <!-- Checks if the object stored in scratch object variable 0 is the oddball -->          <E type="Condition" name="ObjectIsSameType" unionGroupID="-2">            <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />            <Param type="ObjectTypeIndex">ball</Param>          </E>          <!-- If the above condition is true, activate this subroutine trigger. -->          <E type="Action" name="ActivateTrigger">            <Param type="TriggerReference">              <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="BonusPointsTrigger_EnumScoreZonesTrigger" objectFilter="oddball_scorezone">                <Elements>                  <E type="Condition" name="ObjectIsInBoundary" unionGroupID="-2">                    <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player" />                    <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" />                  </E>                  <E type="Action" name="ModifyScore">                    <Param type="TargetVar" targetType="Player" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />                    <Param type="OperationType">Add</Param>                    <Param type="CustomReference" varRefType="Int16">50</Param>                  </E>                </Elements>              </T>            </Param>          </E>        </Elements>      </Trigger>

Take a look in-game. It should award the ball carrier 50 points. However since this trigger is executed every game tick, you will be awarded tons of points rapidly.

One way to solve this issue is to store an integer variable for each player.

 

    <PlayerVariables>      <Numeric>        <Var networkState="LowPriority" name="PlayerNumeric0" varRefType="Int16">0</Var>      </Numeric>    </PlayerVariables>

Then, use VariableOperation to set this variable to "1" when the ball carrier enters the zone.

 

      <Trigger execMode="OnEachPlayer" name="BonusPointsTrigger">        <Elements>          <!-- Store current player's weapon to scratch (temp) object variable 0 -->          <E type="Action" name="PlayerGetWeapon">            <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />            <Param type="Bool">True</Param>            <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />          </E>          <!-- Checks if the object stored in scratch object variable 0 is the oddball -->          <E type="Condition" name="ObjectIsSameType" unionGroupID="-2">            <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />            <Param type="ObjectTypeIndex">ball</Param>          </E>          <!-- If the above condition is true, activate this subroutine trigger. -->          <E type="Action" name="ActivateTrigger">            <Param type="TriggerReference">              <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="BonusPointsTrigger_EnumScoreZonesTrigger" objectFilter="oddball_scorezone">                <Elements>                  <E type="Condition" name="ObjectIsInBoundary" unionGroupID="-2">                    <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player" />                    <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" />                  </E>                  <E type="Action" name="ModifyScore">                    <Param type="TargetVar" targetType="Player" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />                    <Param type="OperationType">Add</Param>                    <Param type="CustomReference" varRefType="Int16">50</Param>                  </E>                  <E type="Action" name="VariableOperation">                    <Param type="VarReference" varRefKind="Custom" varRefType="Player.NumericVar" dataType="Iterator.Player">PlayerNumeric0</Param>                    <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param>                    <Param type="OperationType">Set</Param>                  </E>                </Elements>              </T>            </Param>          </E>        </Elements>      </Trigger>

Are we done here? No, but we're almost there, buddy.

Your homework assignment for tonight is to add another condition checking if this new variable is not = 1 before awarding the points. You will need to create another subroutine trigger before the part where we check the player's weapon. In this trigger, loop through all objects with the oddball_scorezone label. Yes, another one but in this one, reset the variable to 0 if the player is NOT inside the boundary.

Yeah, there are more things to factor in such as adding a cooldown timer to prevent players from rapidly entering and leaving the area to rack up points, but I hope this helps.

Share this post


Link to post
Share on other sites

@Matt

 

Hey I started my homework, but I still don't have enough in my mental toolbox to achieve some of this.

Here is where I am

      <Trigger execMode="OnEachPlayer" name="BonusPointsTrigger">        <Elements>          <E type="Action" name="ActivateTrigger">		     <Param type="TriggerReference">		       <T type="Trigger" trigType="Subroutine" execMode="BonusPointsTrigger_EnumScoreZonesCondition" objectFilter="oddball_scorezone">		         <Elements>				    <E type="Condition" name="?">				                <E type="Action" name="PlayerGetWeapon">            <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />		     <Param type="Bool">True</Param>		     <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />		   </E>

I put a '?' in the name of the Condition, so what next? Btw I am so happy someone saw that I am not learning very much without instruction, so thank you for walking me through even this much.

Share this post


Link to post
Share on other sites

@Matt

 

Hey I started my homework, but I still don't have enough in my mental toolbox to achieve some of this.

Here is where I am

      <Trigger execMode="OnEachPlayer" name="BonusPointsTrigger">        <Elements>          <E type="Action" name="ActivateTrigger">		     <Param type="TriggerReference">		       <T type="Trigger" trigType="Subroutine" execMode="BonusPointsTrigger_EnumScoreZonesCondition" objectFilter="oddball_scorezone">		         <Elements>				    <E type="Condition" name="?">				                <E type="Action" name="PlayerGetWeapon">            <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />		     <Param type="Bool">True</Param>		     <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />		   </E>

I put a '?' in the name of the Condition, so what next? Btw I am so happy someone saw that I am not learning very much without instruction, so thank you for walking me through even this much.

<E type="Condition" name="Comparison" unionGroupID="-2">  <Param type="VarReference" varRefKind="Custom" varRefType="Player.NumericVar" dataType="Iterator.Player">PlayerNumeric0</Param>  <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param>  <Param type="ComparisonType">NotEqual</Param></E>

You probably want something like this. I would suggest spending some time reading (slowly) through existing gametypes and trying to make sense of what you see. I found doing so to be quite enlightening. You have to stick with it though - it takes a while to not look like gibberish. I'm not saying you'll master it quickly or anything, but simple stuff like basic numeric variable operations like this should be a little easier to comprehend. Variable names are still a dick though.. lol

Share this post


Link to post
Share on other sites

Well I know exactly where I am in terms of knowledge. I have been staring and makng sense of gametypes for a couple weeks now, I just recently learned how scratches are applied, but I don't know where to use things like branches and subroutines.

Edit: I just have to imbed all my temporary knowledge, which will come with time and application, but I am certainly trying, its just being a longer learning path for me.

Edited by AbandonedCashew

Share this post


Link to post
Share on other sites

@Matt

 

I think I did it! :D Almost, But I'm close right? It doesn't compile but Im glad I got this far.

      <Trigger execMode="OnEachPlayer" name="BonusPointsTrigger">        <Elements>          <E type="Action" name="ActivateTrigger">		     <Param type="TriggerReference">		       <T type="Trigger" trigType="Subroutine" execMode="BonusPointsTrigger_EnumScoreZonesVarCheck" objectFilter="oddball_scorezone">		         <Elements>				    <E type="Condition" name="Comparison" unionGroupID="-2">				      <Param type="VarReference" varRefKind="Custom" varRefType="Player.NumericVar" dataType="Iterator.Player">PlayerNumeric0</Param>				      <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param>				      <Param type="ComparisonType">NotEqual</Param>				    </E>				    <E type="Action" name="VariableOperation">				      <Param type="VarReference" varRefKind="Custom" varRefType="PlayerNumeric0" dataType="Iterator.Player" />				      <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param>				      <Param type="OperationType">Set</Param>				    </E>				  </Elements>				</T>		     </Param>		   </E>

Share this post


Link to post
Share on other sites

Remember that trigger names have to be unique. I see you haven't renamed the trigger.

Share this post


Link to post
Share on other sites

What's stored in PlayerNumeric0?

 

And remember that trigger names have to be unique. I see you haven't renamed the trigger.

The Player.NumericVar I would assume? And I slightly changed the name from BonusPointsTrigger_EnumScoreZonesCondition to BonusPointsTrigger_EnumScoreZonesVarCheck

Share this post


Link to post
Share on other sites

The Player.NumericVar I would assume? And I slightly changed the name from BonusPointsTrigger_EnumScoreZonesCondition to BonusPointsTrigger_EnumScoreZonesVarCheck

 

Yeah sorry, I had a derp moment. By the way, you need to add that condition to the trigger which awards the points. Here's the entire code with comments:

<Trigger execMode="OnEachPlayer" name="BonusPointsTrigger">  <Elements>        <!-- Go through each score zone -->    <E type="Action" name="ActivateTrigger">      <Param type="TriggerReference">        <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="BonusPointsTrigger_EnumScoreZonesVarCheck" objectFilter="oddball_scorezone">          <Elements>             <!-- Check if current player's biped is *NOT* inside the boundaries -->            <!-- To make the condition inverted, add invert="True" to the condition -->            <E type="Condition" name="ObjectIsInBoundary" unionGroupID="-2"  invert="True">              <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player" />              <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" />            </E>             <!-- Reset PlayerNumeric0 to 0 -->            <E type="Action" name="VariableOperation">              <Param type="VarReference" varRefKind="Custom" varRefType="Player.NumericVar" dataType="Iterator.Player">PlayerNumeric0</Param>              <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param>              <Param type="OperationType">Set</Param>            </E>                      </Elements>        </T>      </Param>    </E>        <!-- Store current player's weapon to scratch (temp) object variable 0 -->    <E type="Action" name="PlayerGetWeapon">      <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />      <Param type="Bool">True</Param>      <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />    </E>     <!-- Checks if the object stored in scratch object variable 0 is the oddball -->    <E type="Condition" name="ObjectIsSameType" unionGroupID="-2">      <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" />      <Param type="ObjectTypeIndex">ball</Param>    </E>     <!-- If the above condition is true, activate this subroutine trigger. -->    <E type="Action" name="ActivateTrigger">      <Param type="TriggerReference">        <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="BonusPointsTrigger_EnumScoreZonesTrigger" objectFilter="oddball_scorezone">          <Elements>                        <!-- Is current player's biped inside the boundaries? -->            <E type="Condition" name="ObjectIsInBoundary" unionGroupID="-2">              <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player" />              <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" />            </E>                        <!-- Is PlayerNumeric0 not equal to 1? -->            <E type="Condition" name="Comparison" unionGroupID="-2">              <Param type="VarReference" varRefKind="Custom" varRefType="Player.NumericVar" dataType="Iterator.Player">PlayerNumeric0</Param>              <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param>              <Param type="ComparisonType">NotEqual</Param>            </E>                        <!-- Award 50 pts to the current player -->            <E type="Action" name="ModifyScore">              <Param type="TargetVar" targetType="Player" varRefType="ExplicitPlayerType" dataType="Iterator.Player" />              <Param type="OperationType">Add</Param>              <Param type="CustomReference" varRefType="Int16">50</Param>            </E>                        <!-- Set PlayerNumeric0 to 1 -->            <E type="Action" name="VariableOperation">              <Param type="VarReference" varRefKind="Custom" varRefType="Player.NumericVar" dataType="Iterator.Player">PlayerNumeric0</Param>              <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param>              <Param type="OperationType">Set</Param>            </E>                      </Elements>        </T>      </Param>    </E>  </Elements></Trigger>

Share this post


Link to post
Share on other sites

Ah ok I understand. And one more question, the points are awarded via kill points, not carry points, how would I change that?

 

Edit: My trigger isn't compiling and I can't find the error, can you run through to see what I did wrong real quick?

http://pastebin.com/gRqBybku

Edited by AbandonedCashew

Share this post


Link to post
Share on other sites

I compiled it myself before posting the code. Paste it at the end of the Triggers block right before the </Triggers> tag. Be sure that you defined the player variable and the forge label too.

Share this post


Link to post
Share on other sites

I compiled it myself before posting the code. Paste it at the end of the Triggers block right before the </Triggers> tag. Be sure that you defined the player variable and the forge label too.

Umm Yes I did that, and I know I can just copy+paste, but that won't help me learn where I made a typo writing it myself.

Share this post


Link to post
Share on other sites