Sign in to follow this  
Followers 0
Myriad

[Idea] BUILDIN(getplayerdata) - feedback needed

2 posts in this topic

Hi all,

For the longest time I've been creating custom script commands simply so I can read a value from struct map_session_data{}. For example, I wanted to return the value of sd->state.showzeny, so I created a simple buildin just for that purpose.It would go something like this:
 

BUILDIN(read_showzeny)
{
    struct map_session_data *sd =  script->rid2sd(st);

    if (sd != NULL)
        script_pushint(st, sd->state.showzeny);
    else
        script_pushint(st, -1);

    return true;
}

Seems not bad, right? But then it got me thinking. I'm creating all these script commands for one simple action. Surely there's a better way? That's when I stumbled across the getunitdata() command.

Then it came to me - create a script command which can fetch this data for a player.

The Goal

Create a script command which can fetch the data which map_session_data provides. It would work similar to getunitdata():
*getplayerdata(<account id>, <DataType>{,<Variable>})
Maybe also setplayerdata()?

Helped needed: The one thing is, not all the stuff in there is useful. Maybe it would be best to selectively choose what can be retrieved as data? I made a list for this stuff. Let me know what you think.

Spoiler
/**
 * Player Data Types
 */
enum script_player_data_types {
	PDT_STORAGEFLAG = 0,
	PDT_SHOWDELAY,
	PDT_SHOWEXP,
	PDT_SHOWZENY,
	PDT_NOASK,
	PDT_TRADING,
	PDT_DEAL_LOCKED,
	PDT_SIZE,
	PDT_NIGHT,
	PDT_KILER,
	PDT_KILLABLE,
	PDT_NOKS,
	PDT_AUTOLOOT,
	PDT_NO_WEAPON_DAMAGE,
	PDT_NO_MAGIC_DAMAGE,
	PDT_NO_MISC_DAMAGE,
	PDT_RESTART_FULL_RECOVER,
	PDT_NO_CASTCANCEL,
	PDT_NO_CASTCANCEL2,
	PDT_NO_SIZEFIX,
	PDT_NO_GEMSTONE,
	PDT_INTRAVISION,
	PDT_PERFECT_HIDING,
	PDT_NO_KNOCKBACK,
	PDT_BONUS_COMA,
	PDT_HEAD_DIR,
	PDT_NPC_TIMER_ID,
	PDT_CHAT_ID,
	PDT_IDLETIME,
	PDT_FOLLOWTARGET,
	PDT_EMOTIONLASTTIME,
	PDT_INVINCIBLE_TIMER,
	PDT_CANLOG_TICK,
	PDT_CANUSEITEM_TICK,
	PDT_CANUSECASHFOOD_TICK,
	PDT_CANEQUIP_TICK,
	PDT_CANTALK_TICK,
	PDT_CANSKILL_TICK,
	PDT_CANSENDMAIL_TICK,
	PDT_KS_FLOODPROTECT_KICK,
	PDT_DISGUISE,
	PDT_POTION_SUCCESS_COUNTER,
	PDT_MISSION_COUNT,
	PDT_MISSION_MOBID,
	PDT_DIE_COUNTER,
	PDT_DEVOTION,
	PDT_TRADE_PARTNER,
	PDT_GUILDSPY,
	PDT_PARTYSPY,
	PDT_HATE_MOB,
	PDT_PVP_TIMER,
	PDT_PVP_POINT,
	PDT_PVP_RANK,
	PDT_PVP_LASTUSERS,
	PDT_PVP_WON,
	PDT_PVP_LOST,
	PDT_EVENTCOUNT,
	PDT_FAKENAME,
	PDT_DUEL_GROUP,
	PDT_DUEL_INVITE,
	PDT_CASHPOINTS,
	PDT_KAFRAPOINTS,
	PDT_RENTAL_TIMER,
	PDT_NPC_IDLE_TIMER,
	PDT_NPC_IDLE_TICK,
	PDT_FRIEND_REQ,
	PDT_FONTCOLOR,
	PDT_MAX
};

 

 

Share this post


Link to post
Share on other sites

if there is no demand, no need to pull request
but if plugin ... well anyone can release whatever you want ...

 

though, do you know most of the meaning of this constants ?
even I only understand about 80% of them

 

PDT_DIE_COUNTER,

PC_DIE_COUNTER

	PDT_CASHPOINTS,
	PDT_KAFRAPOINTS,

#CASHPOINTS and #KAFRAPOINTS

PDT_HEAD_DIR,

where is unit direction ?

PDT_IDLETIME,

*checkidle() script command

PDT_MISSION_MOBID,

I'm quite sure this should be in array

 

most of them are useless ... although some of it already in my To-Do list...
like the setunitsize, I failed to clean it before

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0