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:
Code:
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:
Code:
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;