bWolfie
I'm the man
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.
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.
Code:
/**
* 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
};