- Posts: 27
- Thank you received: 5
Lag Initiator Snippet for DG_Scripts
- Sapphire
- Topic Author
- Offline
- Junior Member
-
Less
More
1 year 2 months ago - 1 year 2 months ago #8440
by Sapphire
Lag Initiator Snippet for DG_Scripts was created by Sapphire
I got a wild idea in my head tonight to add a dg_script variable which causes a player to lag in a way identical to when you use a skill such as Bash or Kick. In my case, I needed a script to emulate the 1 round of combat lag because of a unique cast type trigger on my mud. I thought I would include this below for anyone else who is interested in allowing triggers to lag a player in-game. Keep in mind, I'm operating off of a SunTzu variant of Circle, but I attempted to convert it to TBA's format for the purposes of this forum. Whereas SunTzu uses "GET_WAIT_STATE(c) = addition * PULSE_VIOLENCE;" in the trigger, I'm assuming TBA follows an identical format to its act.offensive.c format, so I adjusted it to, "WAIT_STATE(c, addition * PULSE_VIOLENCE);" to match the TBA format. Also, SunTzu has the area to include the code in dg_scripts.c, but it looks like TBA moved it all to dg_variables.c.
Note: I included a fail-safe mechanism for if a builder uses negative integers, or a zero. In the case of this variable, it can be called upon with %actor.lag% to determine an existing wait_state, and if you want to lag a player you can use the nop function. IE: "nop %actor.lag(3)%" would lag a player for 3 rounds.
In dg_variables.c
Original:
Replace with:
Note: I included a fail-safe mechanism for if a builder uses negative integers, or a zero. In the case of this variable, it can be called upon with %actor.lag% to determine an existing wait_state, and if you want to lag a player you can use the nop function. IE: "nop %actor.lag(3)%" would lag a player for 3 rounds.
In dg_variables.c
Original:
case 'l':
if (!str_cmp(field, "level")) {
if (subfield && *subfield) {
int lev = atoi(subfield);
GET_LEVEL(c) = MIN(MAX(lev, 0), LVL_IMMORT-1);
} else
snprintf(str, slen, "%d", GET_LEVEL(c));
}
break;
Replace with:
case 'l':
if (!str_cmp(field, "lag")) {
if (subfield && *subfield) {
int addition = atoi(subfield);
if (addition <= 0) {
}
if (addition >= 1) {
WAIT_STATE(c, addition * PULSE_VIOLENCE);
}
}
snprintf(str, slen, "%d", WAIT_STATE(c));
}
else if (!str_cmp(field, "level")) {
if (subfield && *subfield) {
int lev = atoi(subfield);
GET_LEVEL(c) = MIN(MAX(lev, 0), LVL_IMMORT-1);
} else
snprintf(str, slen, "%d", GET_LEVEL(c));
}
break;
Last edit: 1 year 2 months ago by Sapphire.
The following user(s) said Thank You: thomas
Please Log in or Create an account to join the conversation.
Time to create page: 0.071 seconds