- Posts: 3
- Thank you received: 0
Order in ADD_FOLLOWER
- kogan
- Topic Author
- Offline
- New Member
-
Less
More
2 years 8 months ago #9775
by kogan
Order in ADD_FOLLOWER was created by kogan
Hi,
anyone can help me to order followers in ADD_FOLLOWERS to follow squence and not to reverse?
Currently last followed enters always first now.
I tried to change it but got stuck here. Only the last 2 follow now :-(
void add_follower(struct char_data *ch, struct char_data *leader)
{
struct follow_type *k, *j;
struct char_data *l = leader;
if (ch->master) {
core_dump();
return;
}
ch->master = leader;
CREATE(k, struct follow_type, 1);
if (!l->followers) {
k->follower = ch;
k->next = NULL;
leader->followers = k;
} else {
while (l->followers->next) {
l->followers = l->followers->next;
}
k->follower = ch;
k->next = l->followers->next;
leader->followers->next = k;
}
act("You now follow $N.", FALSE, ch, 0, leader, TO_CHAR);
if (CAN_SEE(leader, ch))
act("$n starts following you.", TRUE, ch, 0, leader, TO_VICT);
act("$n starts to follow $N.", TRUE, ch, 0, leader, TO_NOTVICT);
}
Thanks for your assistane.
anyone can help me to order followers in ADD_FOLLOWERS to follow squence and not to reverse?
Currently last followed enters always first now.
I tried to change it but got stuck here. Only the last 2 follow now :-(
void add_follower(struct char_data *ch, struct char_data *leader)
{
struct follow_type *k, *j;
struct char_data *l = leader;
if (ch->master) {
core_dump();
return;
}
ch->master = leader;
CREATE(k, struct follow_type, 1);
if (!l->followers) {
k->follower = ch;
k->next = NULL;
leader->followers = k;
} else {
while (l->followers->next) {
l->followers = l->followers->next;
}
k->follower = ch;
k->next = l->followers->next;
leader->followers->next = k;
}
act("You now follow $N.", FALSE, ch, 0, leader, TO_CHAR);
if (CAN_SEE(leader, ch))
act("$n starts following you.", TRUE, ch, 0, leader, TO_VICT);
act("$n starts to follow $N.", TRUE, ch, 0, leader, TO_NOTVICT);
}
Thanks for your assistane.
Please Log in or Create an account to join the conversation.
- thomas
-
- Offline
- Administrator
-
Less
More
- Posts: 818
- Thank you received: 159
2 years 8 months ago - 2 years 8 months ago #9776
by thomas
Replied by thomas on topic Order in ADD_FOLLOWER
I suggest you surround your code with [ code] tags - it makes it easier to read.
Here's an attempt at browser code for helping you out:
Here's an attempt at browser code for helping you out:
void add_follower(struct char_data *ch, struct char_data *leader)
{
struct follow_type *k, *j;
struct char_data *l = leader;
if (ch->master) {
core_dump();
return;
}
ch->master = leader;
CREATE(k, struct follow_type, 1);
k->follower = ch;
k->next = NULL;
if (!l->followers) {
leader->followers = k;
} else {
j = l->followers;
while (j->next) {
j = j->next;
}
j->next = k;
}
act("You now follow $N.", FALSE, ch, 0, leader, TO_CHAR);
if (CAN_SEE(leader, ch))
act("$n starts following you.", TRUE, ch, 0, leader, TO_VICT);
act("$n starts to follow $N.", TRUE, ch, 0, leader, TO_NOTVICT);
}
Last edit: 2 years 8 months ago by thomas. Reason: readability
Please Log in or Create an account to join the conversation.
- cunning
- Offline
- Premium Member
-
Less
More
- Posts: 141
- Thank you received: 18
2 years 6 months ago - 2 years 6 months ago #9785
by cunning
Replied by cunning on topic Order in ADD_FOLLOWER
I did this inside of handler.c - I made a change to char_from_room()
void char_from_room(struct char_data *ch)
{
struct char_data *temp, *i;
if (ch == NULL || !VALID_ROOM_RNUM(IN_ROOM(ch))) {
log("SYSERR: Extracting char from room NOWHERE. (char_from_room)");
exit(1);
}
if (GET_EQ(ch, WEAR_LIGHT))
if (GET_OBJ_TYPE(GET_EQ(ch, WEAR_LIGHT)) == ITEM_LIGHT)
if (GET_OBJ_VAL(GET_EQ(ch, WEAR_LIGHT), 2)) /* Light is ON */
world[IN_ROOM(ch)].light--;
if (ch == world[IN_ROOM(ch)].people) {
world[IN_ROOM(ch)].people = ch->next_in_room;
} else {
if (world[IN_ROOM(ch)].people) {
for (i = world[IN_ROOM(ch)].people; i != NULL && i->next_in_room != ch ; i = i->next_in_room)
; // KEEP THIS OR LOOP away! it will crash the game without it going into a loop- AP
if (i != NULL)
i->next_in_room = ch->next_in_room;
}
}
if (FIGHTING(ch)) {
if (FIGHTING(FIGHTING(ch)) == ch)
stop_fighting(FIGHTING(ch));
stop_fighting(ch);
}
REMOVE_FROM_LIST(ch, world[IN_ROOM(ch)].people, next_in_room);
IN_ROOM(ch) = NOWHERE;
ch->next_in_room = NULL;
}
Last edit: 2 years 6 months ago by cunning.
Please Log in or Create an account to join the conversation.
Time to create page: 0.091 seconds