Issue reading custom state in plugin

bWolfie

I'm the man
Messages
850
Points
0
Location
Alberta, Midgard
Github
bWolfie
Emulator
Hello, I am trying to create a piece of code using a plugin which will return 0;

I started by creating my struct player_data, which contain state my_state, intended to be set and red as ssd->state.my_state (1st code box)

I set my_state using an atcommand and it seems to set ok. But when I'm trying to bring it up in the following code (2nd code box), ssd->state.my_state is returning 0 even though I am sure it is really set to 1 after using my atcommand.

Looking for help thank you.

Code:
struct player_data {
	struct {
		unsigned short my_state : 1;
	} state;
}
Code:
if (target && target->type == BL_PC) {
	struct map_session_data *sd = BL_CAST(BL_PC, target);
	if (sd) {
		struct player_data *ssd;
		if (!(ssd = getFromMSD(sd, 0))) {
			CREATE(ssd, struct player_data, 1);
			addToMSD(sd, ssd, 0, true);
		}
		if (ssd && ssd->state.my_state == 1)
			return 0;
	}
}
 
if my_state == 1 you returning 0, but you said you want return 1

if you mean what my_state is not 1, try to check is you really save it correct in atcommand. after save in same command, read it back and check.

 
This is my atcommand. I thought it was working since the clif->message is displaying correct message when I use it.

// @my_state - sets state.my_state
ACMD(my_state)
{
struct player_data *ssd;
if ((ssd = getFromMSD(sd, 0)) == NULL) {
CREATE(ssd, struct player_data, 1);
addToMSD(sd, ssd, 0, true);
}

ssd->state.my_state = !ssd->state.my_state;
clif->message(fd, msg_fd(fd, (ssd->state.my_state) ? 1553: 1554)); // my_state mode [enabled/disabled].

return true;
}




When I mean return 0, I mean function is returning 0. It's not relevant to issue.
ssd->state.my_state should return 1 after using my atcommand, but it's always returning 0 (I tested using ShowDebug("%d", ssd->state.my_state); in my 2nd code box)

Edit: I tested by returning each ssd, and it seems they are not the same ssd?
I.e. the ssd in the @my_state command is not the same as the one in my function.

 
Last edited by a moderator:
I can only retry what i said before

try to check is you really save it correct in atcommand. after save in same command, read it back and check.

 
Yup the atcommand is setting it correctly.

But when I use it in my function, it is not checking the same ssd.

That is, the ssd are not the same.
Imagine atcommand is using sd 1111 and ssd 1234
But function is using sd 1111 and ssd 1235.

 
I mean check in one function is it works in correct way. at first call addToMSD, set your flag, then getFromMSD, and check your flag

All this in one function

 
Back
Top