Have PosOkPlayer take PlayerStruct as input (#2430)

This commit is contained in:
Anders Jenbo 2021-07-20 01:30:35 +02:00 committed by GitHub
commit 8ba3bbb6a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 173 additions and 186 deletions

View file

@ -45,7 +45,7 @@ struct TMegaPkt {
byte data[32000];
TMegaPkt()
: spaceLeft(sizeof(data))
: spaceLeft(sizeof(data))
{
}
};
@ -609,14 +609,14 @@ DWORD OnSyncData(TCmd *pCmd, int pnum)
return sync_update(pnum, (const byte *)pCmd);
}
DWORD OnWalk(TCmd *pCmd, int pnum)
DWORD OnWalk(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdLoc *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
ClrPlrPath(Players[pnum]);
MakePlrPath(pnum, { p->x, p->y }, true);
Players[pnum].destAction = ACTION_NONE;
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
ClrPlrPath(player);
MakePlrPath(player, { p->x, p->y }, true);
player.destAction = ACTION_NONE;
}
return sizeof(*p);
@ -670,14 +670,14 @@ DWORD OnAddVitality(TCmd *pCmd, int pnum)
return sizeof(*p);
}
DWORD OnGotoGetItem(TCmd *pCmd, int pnum)
DWORD OnGotoGetItem(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdLocParam1 *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
MakePlrPath(pnum, { p->x, p->y }, false);
Players[pnum].destAction = ACTION_PICKUPITEM;
Players[pnum].destParam1 = p->wParam1;
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
MakePlrPath(player, { p->x, p->y }, false);
player.destAction = ACTION_PICKUPITEM;
player.destParam1 = p->wParam1;
}
return sizeof(*p);
@ -736,14 +736,14 @@ DWORD OnGetItem(TCmd *pCmd, int pnum)
return sizeof(*p);
}
DWORD OnGotoAutoGetItem(TCmd *pCmd, int pnum)
DWORD OnGotoAutoGetItem(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdLocParam1 *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
MakePlrPath(pnum, { p->x, p->y }, false);
Players[pnum].destAction = ACTION_PICKUPAITEM;
Players[pnum].destParam1 = p->wParam1;
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
MakePlrPath(player, { p->x, p->y }, false);
player.destAction = ACTION_PICKUPAITEM;
player.destParam1 = p->wParam1;
}
return sizeof(*p);
@ -884,15 +884,15 @@ DWORD OnRespawnItem(TCmd *pCmd, int pnum)
return sizeof(*p);
}
DWORD OnAttackTile(TCmd *pCmd, int pnum)
DWORD OnAttackTile(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdLoc *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
MakePlrPath(pnum, { p->x, p->y }, false);
Players[pnum].destAction = ACTION_ATTACK;
Players[pnum].destParam1 = p->x;
Players[pnum].destParam2 = p->y;
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
MakePlrPath(player, { p->x, p->y }, false);
player.destAction = ACTION_ATTACK;
player.destParam1 = p->x;
player.destParam2 = p->y;
}
return sizeof(*p);
@ -996,33 +996,27 @@ DWORD OnTargetSpellTile(TCmd *pCmd, int pnum)
return sizeof(*p);
}
DWORD OnOperateObjectTile(TCmd *pCmd, int pnum)
DWORD OnOperateObjectTile(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdLocParam1 *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
if (Objects[p->wParam1]._oSolidFlag || Objects[p->wParam1]._oDoorFlag)
MakePlrPath(pnum, { p->x, p->y }, false);
else
MakePlrPath(pnum, { p->x, p->y }, true);
Players[pnum].destAction = ACTION_OPERATE;
Players[pnum].destParam1 = p->wParam1;
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
MakePlrPath(player, { p->x, p->y }, !Objects[p->wParam1]._oSolidFlag && !Objects[p->wParam1]._oDoorFlag);
player.destAction = ACTION_OPERATE;
player.destParam1 = p->wParam1;
}
return sizeof(*p);
}
DWORD OnDisarm(TCmd *pCmd, int pnum)
DWORD OnDisarm(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdLocParam1 *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
if (Objects[p->wParam1]._oSolidFlag || Objects[p->wParam1]._oDoorFlag)
MakePlrPath(pnum, { p->x, p->y }, false);
else
MakePlrPath(pnum, { p->x, p->y }, true);
Players[pnum].destAction = ACTION_DISARM;
Players[pnum].destParam1 = p->wParam1;
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
MakePlrPath(player, { p->x, p->y }, !Objects[p->wParam1]._oSolidFlag && !Objects[p->wParam1]._oDoorFlag);
player.destAction = ACTION_DISARM;
player.destParam1 = p->wParam1;
}
return sizeof(*p);
@ -1040,29 +1034,29 @@ DWORD OnOperateObjectTelekinesis(TCmd *pCmd, int pnum)
return sizeof(*p);
}
DWORD OnAttackMonster(TCmd *pCmd, int pnum)
DWORD OnAttackMonster(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdParam1 *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
Point position = Monsters[p->wParam1].position.future;
if (Players[pnum].position.tile.WalkingDistance(position) > 1)
MakePlrPath(pnum, position, false);
Players[pnum].destAction = ACTION_ATTACKMON;
Players[pnum].destParam1 = p->wParam1;
if (player.position.tile.WalkingDistance(position) > 1)
MakePlrPath(player, position, false);
player.destAction = ACTION_ATTACKMON;
player.destParam1 = p->wParam1;
}
return sizeof(*p);
}
DWORD OnAttackPlayer(TCmd *pCmd, int pnum)
DWORD OnAttackPlayer(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdParam1 *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
MakePlrPath(pnum, Players[p->wParam1].position.future, false);
Players[pnum].destAction = ACTION_ATTACKPLR;
Players[pnum].destParam1 = p->wParam1;
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
MakePlrPath(player, Players[p->wParam1].position.future, false);
player.destAction = ACTION_ATTACKPLR;
player.destParam1 = p->wParam1;
}
return sizeof(*p);
@ -1218,14 +1212,14 @@ DWORD OnHealOther(TCmd *pCmd, int pnum)
return sizeof(*p);
}
DWORD OnTalkXY(TCmd *pCmd, int pnum)
DWORD OnTalkXY(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdLocParam1 *)pCmd;
if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) {
MakePlrPath(pnum, { p->x, p->y }, false);
Players[pnum].destAction = ACTION_TALK;
Players[pnum].destParam1 = p->wParam1;
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
MakePlrPath(player, { p->x, p->y }, false);
player.destAction = ACTION_TALK;
player.destParam1 = p->wParam1;
}
return sizeof(*p);
@ -2013,7 +2007,6 @@ Point GetItemPosition(Point position)
int xx = position.x + l;
if (CanPut({ xx, yy }))
return { xx, yy };
}
}
}
@ -2507,11 +2500,13 @@ DWORD ParseCmd(int pnum, TCmd *pCmd)
if (sgwPackPlrOffsetTbl[pnum] != 0 && sbLastCmd != CMD_ACK_PLRINFO && sbLastCmd != CMD_SEND_PLRINFO)
return 0;
auto &player = Players[pnum];
switch (pCmd->bCmd) {
case CMD_SYNCDATA:
return OnSyncData(pCmd, pnum);
case CMD_WALKXY:
return OnWalk(pCmd, pnum);
return OnWalk(pCmd, player);
case CMD_ADDSTR:
return OnAddStrength(pCmd, pnum);
case CMD_ADDDEX:
@ -2521,13 +2516,13 @@ DWORD ParseCmd(int pnum, TCmd *pCmd)
case CMD_ADDVIT:
return OnAddVitality(pCmd, pnum);
case CMD_GOTOGETITEM:
return OnGotoGetItem(pCmd, pnum);
return OnGotoGetItem(pCmd, player);
case CMD_REQUESTGITEM:
return OnRequestGetItem(pCmd, pnum);
case CMD_GETITEM:
return OnGetItem(pCmd, pnum);
case CMD_GOTOAGETITEM:
return OnGotoAutoGetItem(pCmd, pnum);
return OnGotoAutoGetItem(pCmd, player);
case CMD_REQUESTAGITEM:
return OnRequestAutoGetItem(pCmd, pnum);
case CMD_AGETITEM:
@ -2541,7 +2536,7 @@ DWORD ParseCmd(int pnum, TCmd *pCmd)
case CMD_RESPAWNITEM:
return OnRespawnItem(pCmd, pnum);
case CMD_ATTACKXY:
return OnAttackTile(pCmd, pnum);
return OnAttackTile(pCmd, player);
case CMD_SATTACKXY:
return OnStandingAttackTile(pCmd, pnum);
case CMD_RATTACKXY:
@ -2553,15 +2548,15 @@ DWORD ParseCmd(int pnum, TCmd *pCmd)
case CMD_TSPELLXY:
return OnTargetSpellTile(pCmd, pnum);
case CMD_OPOBJXY:
return OnOperateObjectTile(pCmd, pnum);
return OnOperateObjectTile(pCmd, player);
case CMD_DISARMXY:
return OnDisarm(pCmd, pnum);
return OnDisarm(pCmd, player);
case CMD_OPOBJT:
return OnOperateObjectTelekinesis(pCmd, pnum);
case CMD_ATTACKID:
return OnAttackMonster(pCmd, pnum);
return OnAttackMonster(pCmd, player);
case CMD_ATTACKPID:
return OnAttackPlayer(pCmd, pnum);
return OnAttackPlayer(pCmd, player);
case CMD_RATTACKID:
return OnRangedAttackMonster(pCmd, pnum);
case CMD_RATTACKPID:
@ -2581,7 +2576,7 @@ DWORD ParseCmd(int pnum, TCmd *pCmd)
case CMD_HEALOTHER:
return OnHealOther(pCmd, pnum);
case CMD_TALKXY:
return OnTalkXY(pCmd, pnum);
return OnTalkXY(pCmd, player);
case CMD_DEBUG:
return OnDebug(pCmd);
case CMD_NEWLVL: