Give item command

This commit is contained in:
James R 2019-10-07 12:39:38 -07:00
parent 2a330f1976
commit 833c8e2bed
3 changed files with 132 additions and 3 deletions

View file

@ -68,6 +68,7 @@ static void Got_ExitLevelcmd(UINT8 **cp, INT32 playernum);
static void Got_SetupVotecmd(UINT8 **cp, INT32 playernum); static void Got_SetupVotecmd(UINT8 **cp, INT32 playernum);
static void Got_ModifyVotecmd(UINT8 **cp, INT32 playernum); static void Got_ModifyVotecmd(UINT8 **cp, INT32 playernum);
static void Got_PickVotecmd(UINT8 **cp, INT32 playernum); static void Got_PickVotecmd(UINT8 **cp, INT32 playernum);
static void Got_GiveItemcmd(UINT8 **cp, INT32 playernum);
static void Got_RequestAddfilecmd(UINT8 **cp, INT32 playernum); static void Got_RequestAddfilecmd(UINT8 **cp, INT32 playernum);
#ifdef DELFILE #ifdef DELFILE
static void Got_Delfilecmd(UINT8 **cp, INT32 playernum); static void Got_Delfilecmd(UINT8 **cp, INT32 playernum);
@ -190,6 +191,8 @@ static void Command_Archivetest_f(void);
#endif #endif
#endif #endif
static void Command_KartGiveItem_f(void);
// ========================================================================= // =========================================================================
// CLIENT VARIABLES // CLIENT VARIABLES
// ========================================================================= // =========================================================================
@ -388,6 +391,17 @@ static CV_PossibleValue_t kartdebugitem_cons_t[] =
consvar_t cv_kartdebugitem = {"kartdebugitem", "0", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, kartdebugitem_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartdebugitem = {"kartdebugitem", "0", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, kartdebugitem_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t kartdebugamount_cons_t[] = {{1, "MIN"}, {255, "MAX"}, {0, NULL}}; static CV_PossibleValue_t kartdebugamount_cons_t[] = {{1, "MIN"}, {255, "MAX"}, {0, NULL}};
consvar_t cv_kartdebugamount = {"kartdebugamount", "1", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, kartdebugamount_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartdebugamount = {"kartdebugamount", "1", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, kartdebugamount_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartdebug_giveitem = {
"kartdebug_giveitem",
/* :mhm: */
#ifdef DEVELOP
"Yes",
#else
"No",
#endif
CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP,
CV_YesNo,
};
consvar_t cv_kartdebugshrink = {"kartdebugshrink", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartdebugshrink = {"kartdebugshrink", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartdebugdistribution = {"kartdebugdistribution", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartdebugdistribution = {"kartdebugdistribution", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartdebughuddrop = {"kartdebughuddrop", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartdebughuddrop = {"kartdebughuddrop", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
@ -568,6 +582,8 @@ void D_RegisterServerCommands(void)
RegisterNetXCmd(XD_MODIFYVOTE, Got_ModifyVotecmd); RegisterNetXCmd(XD_MODIFYVOTE, Got_ModifyVotecmd);
RegisterNetXCmd(XD_PICKVOTE, Got_PickVotecmd); RegisterNetXCmd(XD_PICKVOTE, Got_PickVotecmd);
RegisterNetXCmd(XD_GIVEITEM, Got_GiveItemcmd);
// Remote Administration // Remote Administration
CV_RegisterVar(&cv_dummyjoinpassword); CV_RegisterVar(&cv_dummyjoinpassword);
COM_AddCommand("joinpassword", Command_ChangeJoinPassword_f); COM_AddCommand("joinpassword", Command_ChangeJoinPassword_f);
@ -626,6 +642,8 @@ void D_RegisterServerCommands(void)
#endif #endif
#endif #endif
COM_AddCommand("kartgiveitem", Command_KartGiveItem_f);
// for master server connection // for master server connection
AddMServCommands(); AddMServCommands();
@ -5299,6 +5317,41 @@ static void Got_PickVotecmd(UINT8 **cp, INT32 playernum)
Y_SetupVoteFinish(pick, level); Y_SetupVoteFinish(pick, level);
} }
static void Got_GiveItemcmd(UINT8 **cp, INT32 playernum)
{
int item;
int amt;
INT32 *kartstuff;
item = READSINT8 (*cp);
amt = READUINT8 (*cp);
if (
( netgame && ! cv_kartdebug_giveitem.value ) ||
( item < KITEM_SAD || item >= NUMKARTITEMS )
)
{
CONS_Alert(CONS_WARNING,
M_GetText ("Illegal give item received from %s\n"),
player_names[playernum]);
if (server)
{
XBOXSTATIC UINT8 buf[2];
buf[0] = (UINT8)playernum;
buf[1] = KICK_MSG_CON_FAIL;
SendNetXCmd(XD_KICK, &buf, 2);
}
return;
}
kartstuff = players[playernum].kartstuff;
kartstuff[k_itemtype] = item;
kartstuff[k_itemamount] = amt;
}
/** Prints the number of displayplayers[0]. /** Prints the number of displayplayers[0].
* *
* \todo Possibly remove this; it was useful for debugging at one point. * \todo Possibly remove this; it was useful for debugging at one point.
@ -5462,6 +5515,80 @@ static void Command_Archivetest_f(void)
#endif #endif
#endif #endif
/** Give yourself an, optional quantity or one of, an item.
*
* \sa cv_kartdebug_giveitem
*/
static void Command_KartGiveItem_f(void)
{
char buf[2];
int ac;
const char *name;
int item;
const char * str;
int i;
/* Allow always in local games. */
if (! netgame || cv_kartdebug_giveitem.value)
{
ac = COM_Argc();
if (ac < 2)
{
CONS_Printf(
"kartgiveitem <item> [amount]: Give yourself an item\n"
);
}
else
{
item = NUMKARTITEMS;
name = COM_Argv(1);
if (isdigit(*name) || *name == '-')
{
item = atoi(name);
}
else
{
for (i = 0; ( str = kartdebugitem_cons_t[i].strvalue ); ++i)
{
if (strcasecmp(name, str) == 0)
{
item = kartdebugitem_cons_t[i].value;
break;
}
}
}
if (item < NUMKARTITEMS)
{
buf[0] = item;
if (ac > 2)
buf[1] = atoi(COM_Argv(2));
else
buf[1] = 1;/* default to one quantity */
SendNetXCmd(XD_GIVEITEM, buf, 2);
}
else
{
CONS_Alert(CONS_WARNING,
"No item matches '%s'\n",
name);
}
}
}
else
{
CONS_Alert(CONS_NOTICE,
"The server does not allow this.\n");
}
}
/** Makes a change to ::cv_forceskin take effect immediately. /** Makes a change to ::cv_forceskin take effect immediately.
* *
* \sa Command_SetForcedSkin_f, cv_forceskin, forcedskin * \sa Command_SetForcedSkin_f, cv_forceskin, forcedskin

View file

@ -125,7 +125,7 @@ extern consvar_t cv_kartusepwrlv;
extern consvar_t cv_votetime; extern consvar_t cv_votetime;
extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugshrink, cv_kartdebugdistribution, cv_kartdebughuddrop; extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebug_giveitem, cv_kartdebugshrink, cv_kartdebugdistribution, cv_kartdebughuddrop;
extern consvar_t cv_kartdebugcheckpoint, cv_kartdebugnodes, cv_kartdebugcolorize; extern consvar_t cv_kartdebugcheckpoint, cv_kartdebugnodes, cv_kartdebugcolorize;
extern consvar_t cv_itemfinder; extern consvar_t cv_itemfinder;
@ -179,9 +179,10 @@ typedef enum
XD_PICKVOTE, // 24 XD_PICKVOTE, // 24
XD_REMOVEPLAYER,// 25 XD_REMOVEPLAYER,// 25
XD_POWERLEVEL, // 26 XD_POWERLEVEL, // 26
XD_GIVEITEM, // 27
#ifdef HAVE_BLUA #ifdef HAVE_BLUA
XD_LUACMD, // 27 XD_LUACMD, // 28
XD_LUAVAR, // 28 XD_LUAVAR, // 29
#endif #endif
MAXNETXCMD MAXNETXCMD
} netxcmd_t; } netxcmd_t;

View file

@ -585,6 +585,7 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_kartdebugitem); CV_RegisterVar(&cv_kartdebugitem);
CV_RegisterVar(&cv_kartdebugamount); CV_RegisterVar(&cv_kartdebugamount);
CV_RegisterVar(&cv_kartdebugshrink); CV_RegisterVar(&cv_kartdebugshrink);
CV_RegisterVar(&cv_kartdebug_giveitem);
CV_RegisterVar(&cv_kartdebugdistribution); CV_RegisterVar(&cv_kartdebugdistribution);
CV_RegisterVar(&cv_kartdebughuddrop); CV_RegisterVar(&cv_kartdebughuddrop);