mirror of
https://github.com/tbamud/tbamud.git
synced 2025-12-21 01:30:12 +01:00
Removed all whitespace (tabs and spaces) from EOL's. How did we get so many? --Rumble
This commit is contained in:
parent
49c469967a
commit
a2031d64e2
79 changed files with 2851 additions and 2852 deletions
|
|
@ -68,7 +68,7 @@ char *one_phrase(char *arg, char *first_arg)
|
|||
|
||||
s = first_arg;
|
||||
p = arg;
|
||||
|
||||
|
||||
while (*p && !isspace(*p) && *p != '"')
|
||||
*s++ = *p++;
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ int is_substring(char *sub, char *string)
|
|||
{
|
||||
int len = strlen(string);
|
||||
int sublen = strlen(sub);
|
||||
|
||||
|
||||
/* check front */
|
||||
if ((s == string || isspace(*(s - 1)) || ispunct(*(s - 1))) &&
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ int word_check(char *str, char *wordlist)
|
|||
if (*wordlist=='*') return 1;
|
||||
|
||||
strcpy(words, wordlist);
|
||||
|
||||
|
||||
for (s = one_phrase(words, phrase); *phrase; s = one_phrase(s, phrase))
|
||||
if (is_substring(phrase, str))
|
||||
return 1;
|
||||
|
|
@ -122,7 +122,7 @@ int word_check(char *str, char *wordlist)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* mob triggers
|
||||
|
|
@ -140,7 +140,7 @@ void random_mtrigger(char_data *ch)
|
|||
return;
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, MTRIG_RANDOM) &&
|
||||
if (TRIGGER_CHECK(t, MTRIG_RANDOM) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
|
||||
script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW);
|
||||
break;
|
||||
|
|
@ -152,7 +152,7 @@ void bribe_mtrigger(char_data *ch, char_data *actor, int amount)
|
|||
{
|
||||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_BRIBE) || AFF_FLAGGED(ch, AFF_CHARM))
|
||||
return;
|
||||
|
||||
|
|
@ -179,7 +179,7 @@ void greet_memory_mtrigger(char_data *actor)
|
|||
return;
|
||||
|
||||
for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) {
|
||||
if (!SCRIPT_MEM(ch) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) ||
|
||||
if (!SCRIPT_MEM(ch) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) ||
|
||||
AFF_FLAGGED(ch, AFF_CHARM))
|
||||
continue;
|
||||
/* find memory line with command only */
|
||||
|
|
@ -227,19 +227,19 @@ int greet_mtrigger(char_data *actor, int dir)
|
|||
char_data *ch;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
int intermediate, final=TRUE;
|
||||
|
||||
|
||||
if (!valid_dg_target(actor, DG_ALLOW_GODS))
|
||||
return TRUE;
|
||||
|
||||
for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) {
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_GREET | MTRIG_GREET_ALL) ||
|
||||
!AWAKE(ch) || FIGHTING(ch) || (ch == actor) ||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_GREET | MTRIG_GREET_ALL) ||
|
||||
!AWAKE(ch) || FIGHTING(ch) || (ch == actor) ||
|
||||
AFF_FLAGGED(ch, AFF_CHARM))
|
||||
continue;
|
||||
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (((IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET) && CAN_SEE(ch, actor)) ||
|
||||
IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET_ALL)) &&
|
||||
IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET_ALL)) &&
|
||||
!GET_TRIG_DEPTH(t) && (rand_number(1, 100) <= GET_TRIG_NARG(t))) {
|
||||
if (dir>=0 && dir < NUM_OF_DIRS)
|
||||
add_var(&GET_TRIG_VARS(t), "direction", (char *)dirs[rev_dir[dir]], 0);
|
||||
|
|
@ -302,10 +302,10 @@ void entry_memory_mtrigger(char_data *ch)
|
|||
int entry_mtrigger(char_data *ch)
|
||||
{
|
||||
trig_data *t;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_ENTRY) || AFF_FLAGGED(ch, AFF_CHARM))
|
||||
return 1;
|
||||
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, MTRIG_ENTRY) && (rand_number(1, 100) <= GET_TRIG_NARG(t))){
|
||||
return script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW);
|
||||
|
|
@ -325,7 +325,7 @@ int command_mtrigger(char_data *actor, char *cmd, char *argument)
|
|||
/* prevent people we like from becoming trapped :P */
|
||||
if (!valid_dg_target(actor, 0))
|
||||
return 0;
|
||||
|
||||
|
||||
for (ch = world[IN_ROOM(actor)].people; ch; ch = ch_next) {
|
||||
ch_next = ch->next_in_room;
|
||||
|
||||
|
|
@ -334,7 +334,7 @@ int command_mtrigger(char_data *actor, char *cmd, char *argument)
|
|||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (!TRIGGER_CHECK(t, MTRIG_COMMAND))
|
||||
continue;
|
||||
|
||||
|
||||
if (!GET_TRIG_ARG(t) || !*GET_TRIG_ARG(t)) {
|
||||
mudlog(NRM, LVL_BUILDER, TRUE, "SYSERR: Command Trigger #%d has no text argument!",
|
||||
GET_TRIG_VNUM(t));
|
||||
|
|
@ -348,7 +348,7 @@ int command_mtrigger(char_data *actor, char *cmd, char *argument)
|
|||
add_var(&GET_TRIG_VARS(t), "arg", argument, 0);
|
||||
skip_spaces(&cmd);
|
||||
add_var(&GET_TRIG_VARS(t), "cmd", cmd, 0);
|
||||
|
||||
|
||||
if (script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW))
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -358,7 +358,7 @@ int command_mtrigger(char_data *actor, char *cmd, char *argument)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void speech_mtrigger(char_data *actor, char *str)
|
||||
{
|
||||
|
|
@ -394,13 +394,13 @@ void speech_mtrigger(char_data *actor, char *str)
|
|||
}
|
||||
|
||||
|
||||
void act_mtrigger(const char_data *ch, char *str, char_data *actor,
|
||||
void act_mtrigger(const char_data *ch, char *str, char_data *actor,
|
||||
char_data *victim, obj_data *object,
|
||||
obj_data *target, char *arg)
|
||||
{
|
||||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
|
||||
|
||||
if (SCRIPT_CHECK(ch, MTRIG_ACT) && !AFF_FLAGGED(ch, AFF_CHARM) &&
|
||||
(actor!=ch))
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
|
|
@ -430,10 +430,10 @@ void act_mtrigger(const char_data *ch, char *str, char_data *actor,
|
|||
*p = '\0';
|
||||
add_var(&GET_TRIG_VARS(t), "arg", nstr, 0);
|
||||
free(fstr);
|
||||
}
|
||||
}
|
||||
script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -443,11 +443,11 @@ void fight_mtrigger(char_data *ch)
|
|||
struct char_data *actor;
|
||||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_FIGHT) || !FIGHTING(ch) ||
|
||||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_FIGHT) || !FIGHTING(ch) ||
|
||||
AFF_FLAGGED(ch, AFF_CHARM))
|
||||
return;
|
||||
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, MTRIG_FIGHT) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))){
|
||||
|
|
@ -456,7 +456,7 @@ void fight_mtrigger(char_data *ch)
|
|||
ADD_UID_VAR(buf, t, actor, "actor", 0);
|
||||
else
|
||||
add_var(&GET_TRIG_VARS(t), "actor", "nobody", 0);
|
||||
|
||||
|
||||
script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW);
|
||||
break;
|
||||
}
|
||||
|
|
@ -469,11 +469,11 @@ void hitprcnt_mtrigger(char_data *ch)
|
|||
struct char_data *actor;
|
||||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_HITPRCNT) || !FIGHTING(ch) ||
|
||||
AFF_FLAGGED(ch, AFF_CHARM))
|
||||
return;
|
||||
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, MTRIG_HITPRCNT) && GET_MAX_HIT(ch) &&
|
||||
(((GET_HIT(ch) * 100) / GET_MAX_HIT(ch)) <= GET_TRIG_NARG(t))) {
|
||||
|
|
@ -492,10 +492,10 @@ int receive_mtrigger(char_data *ch, char_data *actor, obj_data *obj)
|
|||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
int ret_val;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_RECEIVE) || AFF_FLAGGED(ch, AFF_CHARM))
|
||||
return 1;
|
||||
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, MTRIG_RECEIVE) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))){
|
||||
|
|
@ -518,10 +518,10 @@ int death_mtrigger(char_data *ch, char_data *actor)
|
|||
{
|
||||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_DEATH) || AFF_FLAGGED(ch, AFF_CHARM))
|
||||
return 1;
|
||||
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, MTRIG_DEATH) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))){
|
||||
|
|
@ -538,12 +538,12 @@ void load_mtrigger(char_data *ch)
|
|||
{
|
||||
trig_data *t;
|
||||
int result = 0;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(ch, MTRIG_LOAD))
|
||||
return;
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, MTRIG_LOAD) &&
|
||||
if (TRIGGER_CHECK(t, MTRIG_LOAD) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
|
||||
result = script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW);
|
||||
break;
|
||||
|
|
@ -654,7 +654,7 @@ void time_mtrigger(char_data *ch)
|
|||
return;
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, MTRIG_TIME) &&
|
||||
if (TRIGGER_CHECK(t, MTRIG_TIME) &&
|
||||
(time_info.hours == GET_TRIG_NARG(t))) {
|
||||
sprintf(buf, "%d", time_info.hours);
|
||||
add_var(&GET_TRIG_VARS(t), "time", buf, 0);
|
||||
|
|
@ -676,7 +676,7 @@ void random_otrigger(obj_data *obj)
|
|||
return;
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(obj)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, OTRIG_RANDOM) &&
|
||||
if (TRIGGER_CHECK(t, OTRIG_RANDOM) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
|
||||
script_driver(&obj, t, OBJ_TRIGGER, TRIG_NEW);
|
||||
break;
|
||||
|
|
@ -688,16 +688,16 @@ void random_otrigger(obj_data *obj)
|
|||
void timer_otrigger(struct obj_data *obj)
|
||||
{
|
||||
trig_data *t;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(obj, OTRIG_TIMER))
|
||||
return;
|
||||
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(obj)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, OTRIG_TIMER)) {
|
||||
script_driver(&obj, t, OBJ_TRIGGER, TRIG_NEW);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -735,19 +735,19 @@ int cmd_otrig(obj_data *obj, char_data *actor, char *cmd,
|
|||
{
|
||||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
|
||||
|
||||
if (obj && SCRIPT_CHECK(obj, OTRIG_COMMAND))
|
||||
for (t = TRIGGERS(SCRIPT(obj)); t; t = t->next) {
|
||||
if (!TRIGGER_CHECK(t, OTRIG_COMMAND))
|
||||
continue;
|
||||
|
||||
|
||||
if (IS_SET(GET_TRIG_NARG(t), type) &&
|
||||
(!GET_TRIG_ARG(t) || !*GET_TRIG_ARG(t))) {
|
||||
mudlog(NRM, LVL_BUILDER, TRUE, "SYSERR: O-Command Trigger #%d has no text argument!",
|
||||
GET_TRIG_VNUM(t));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (IS_SET(GET_TRIG_NARG(t), type) &&
|
||||
(*GET_TRIG_ARG(t)=='*' ||
|
||||
!strn_cmp(GET_TRIG_ARG(t), cmd, strlen(GET_TRIG_ARG(t))))) {
|
||||
|
|
@ -775,12 +775,12 @@ int command_otrigger(char_data *actor, char *cmd, char *argument)
|
|||
/* prevent people we like from becoming trapped :P */
|
||||
if (!valid_dg_target(actor, 0))
|
||||
return 0;
|
||||
|
||||
|
||||
for (i = 0; i < NUM_WEARS; i++)
|
||||
if (GET_EQ(actor, i))
|
||||
if (cmd_otrig(GET_EQ(actor, i), actor, cmd, argument, OCMD_EQUIP))
|
||||
return 1;
|
||||
|
||||
|
||||
for (obj = actor->carrying; obj; obj = obj->next_content)
|
||||
if (cmd_otrig(obj, actor, cmd, argument, OCMD_INVEN))
|
||||
return 1;
|
||||
|
|
@ -798,7 +798,7 @@ int wear_otrigger(obj_data *obj, char_data *actor, int where)
|
|||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
int ret_val;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(obj, OTRIG_WEAR))
|
||||
return 1;
|
||||
|
||||
|
|
@ -825,7 +825,7 @@ int remove_otrigger(obj_data *obj, char_data *actor)
|
|||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
int ret_val;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(obj, OTRIG_REMOVE))
|
||||
return 1;
|
||||
|
||||
|
|
@ -852,7 +852,7 @@ int drop_otrigger(obj_data *obj, char_data *actor)
|
|||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
int ret_val;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(obj, OTRIG_DROP))
|
||||
return 1;
|
||||
|
||||
|
|
@ -879,7 +879,7 @@ int give_otrigger(obj_data *obj, char_data *actor, char_data *victim)
|
|||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
int ret_val;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(obj, OTRIG_GIVE))
|
||||
return 1;
|
||||
|
||||
|
|
@ -906,12 +906,12 @@ void load_otrigger(obj_data *obj)
|
|||
{
|
||||
trig_data *t;
|
||||
int result = 0;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(obj, OTRIG_LOAD))
|
||||
return;
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(obj)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, OTRIG_LOAD) &&
|
||||
if (TRIGGER_CHECK(t, OTRIG_LOAD) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
|
||||
result = script_driver(&obj, t, OBJ_TRIGGER, TRIG_NEW);
|
||||
break;
|
||||
|
|
@ -960,7 +960,7 @@ int leave_otrigger(room_data *room, char_data *actor, int dir)
|
|||
|
||||
if (!valid_dg_target(actor, DG_ALLOW_GODS))
|
||||
return 1;
|
||||
|
||||
|
||||
for (obj = room->contents; obj; obj = obj_next) {
|
||||
obj_next = obj->next_content;
|
||||
if (!SCRIPT_CHECK(obj, OTRIG_LEAVE))
|
||||
|
|
@ -980,7 +980,7 @@ int leave_otrigger(room_data *room, char_data *actor, int dir)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return final;
|
||||
}
|
||||
|
||||
|
|
@ -989,7 +989,7 @@ int consume_otrigger(obj_data *obj, char_data *actor, int cmd)
|
|||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
int ret_val;
|
||||
|
||||
|
||||
if (!SCRIPT_CHECK(obj, OTRIG_CONSUME))
|
||||
return 1;
|
||||
|
||||
|
|
@ -1030,7 +1030,7 @@ void time_otrigger(obj_data *obj)
|
|||
return;
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(obj)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, OTRIG_TIME) &&
|
||||
if (TRIGGER_CHECK(t, OTRIG_TIME) &&
|
||||
(time_info.hours == GET_TRIG_NARG(t))) {
|
||||
sprintf(buf, "%d", time_info.hours);
|
||||
add_var(&GET_TRIG_VARS(t), "time", buf, 0);
|
||||
|
|
@ -1086,7 +1086,7 @@ int enter_wtrigger(struct room_data *room, char_data *actor, int dir)
|
|||
return 1;
|
||||
|
||||
for (t = TRIGGERS(SCRIPT(room)); t; t = t->next) {
|
||||
if (TRIGGER_CHECK(t, WTRIG_ENTER) &&
|
||||
if (TRIGGER_CHECK(t, WTRIG_ENTER) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
|
||||
if (dir>=0 && dir < NUM_OF_DIRS)
|
||||
add_var(&GET_TRIG_VARS(t), "direction", (char *)dirs[rev_dir[dir]], 0);
|
||||
|
|
@ -1113,7 +1113,7 @@ int command_wtrigger(char_data *actor, char *cmd, char *argument)
|
|||
/* prevent people we like from becoming trapped :P */
|
||||
if (!valid_dg_target(actor, 0))
|
||||
return 0;
|
||||
|
||||
|
||||
room = &world[IN_ROOM(actor)];
|
||||
for (t = TRIGGERS(SCRIPT(room)); t; t = t->next) {
|
||||
if (!TRIGGER_CHECK(t, WTRIG_COMMAND))
|
||||
|
|
@ -1132,11 +1132,11 @@ int command_wtrigger(char_data *actor, char *cmd, char *argument)
|
|||
add_var(&GET_TRIG_VARS(t), "arg", argument, 0);
|
||||
skip_spaces(&cmd);
|
||||
add_var(&GET_TRIG_VARS(t), "cmd", cmd, 0);
|
||||
|
||||
|
||||
return script_driver(&room, t, WLD_TRIGGER, TRIG_NEW);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1178,14 +1178,14 @@ int drop_wtrigger(obj_data *obj, char_data *actor)
|
|||
trig_data *t;
|
||||
char buf[MAX_INPUT_LENGTH];
|
||||
int ret_val;
|
||||
|
||||
|
||||
if (!actor || !SCRIPT_CHECK(&world[IN_ROOM(actor)], WTRIG_DROP))
|
||||
return 1;
|
||||
|
||||
room = &world[IN_ROOM(actor)];
|
||||
for (t = TRIGGERS(SCRIPT(room)); t; t = t->next)
|
||||
for (t = TRIGGERS(SCRIPT(room)); t; t = t->next)
|
||||
if (TRIGGER_CHECK(t, WTRIG_DROP) &&
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
|
||||
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
|
||||
ADD_UID_VAR(buf, t, actor, "actor", 0);
|
||||
ADD_UID_VAR(buf, t, obj, "object", 0);
|
||||
ret_val = script_driver(&room, t, WLD_TRIGGER, TRIG_NEW);
|
||||
|
|
@ -1194,7 +1194,7 @@ int drop_wtrigger(obj_data *obj, char_data *actor)
|
|||
else
|
||||
return ret_val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue