Merge branch 'cheat-giveitem' into 'master'

"kartgiveitem" -> "give " plus convenience features

See merge request KartKrew/Kart!723
This commit is contained in:
Sal 2022-10-08 20:02:36 +00:00
commit 8b58a7563a
3 changed files with 55 additions and 55 deletions

View file

@ -83,7 +83,6 @@ static void Got_ExitLevelcmd(UINT8 **cp, INT32 playernum);
static void Got_SetupVotecmd(UINT8 **cp, INT32 playernum);
static void Got_ModifyVotecmd(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_Addfilecmd(UINT8 **cp, INT32 playernum);
static void Got_Pause(UINT8 **cp, INT32 playernum);
@ -620,14 +619,13 @@ const char *netxcmdnames[MAXNETXCMD - 1] =
"ACCEPTPARTYINVITE", // XD_ACCEPTPARTYINVITE
"LEAVEPARTY", // XD_LEAVEPARTY
"CANCELPARTYINVITE", // XD_CANCELPARTYINVITE
"GIVEITEM", // XD_GIVEITEM
"CHEAT", // XD_CHEAT
"ADDBOT", // XD_ADDBOT
"DISCORD", // XD_DISCORD
"PLAYSOUND", // XD_PLAYSOUND
"SCHEDULETASK", // XD_SCHEDULETASK
"SCHEDULECLEAR", // XD_SCHEDULECLEAR
"AUTOMATE", // XD_AUTOMATE
"CHEAT", // XD_CHEAT
};
// =========================================================================
@ -674,8 +672,6 @@ void D_RegisterServerCommands(void)
RegisterNetXCmd(XD_MODIFYVOTE, Got_ModifyVotecmd);
RegisterNetXCmd(XD_PICKVOTE, Got_PickVotecmd);
RegisterNetXCmd(XD_GIVEITEM, Got_GiveItemcmd);
RegisterNetXCmd(XD_SCHEDULETASK, Got_ScheduleTaskcmd);
RegisterNetXCmd(XD_SCHEDULECLEAR, Got_ScheduleClearcmd);
RegisterNetXCmd(XD_AUTOMATE, Got_Automatecmd);
@ -736,7 +732,7 @@ void D_RegisterServerCommands(void)
COM_AddCommand("downloads", Command_Downloads_f);
COM_AddCommand("kartgiveitem", Command_KartGiveItem_f);
COM_AddCommand("give", Command_KartGiveItem_f);
COM_AddCommand("schedule_add", Command_Schedule_Add);
COM_AddCommand("schedule_clear", Command_Schedule_Clear);
@ -2069,6 +2065,11 @@ void D_Cheat(INT32 playernum, INT32 cheat, ...)
case CHEAT_DEVMODE:
COPY(WRITEUINT32, UINT32);
break;
case CHEAT_GIVEITEM:
COPY(WRITESINT8, int);
COPY(WRITEUINT8, unsigned int);
break;
}
#undef COPY
@ -5389,41 +5390,6 @@ static void Got_PickVotecmd(UINT8 **cp, INT32 playernum)
Y_SetupVoteFinish(pick, level);
}
static void Got_GiveItemcmd(UINT8 **cp, INT32 playernum)
{
int item;
int amt;
item = READSINT8 (*cp);
amt = READUINT8 (*cp);
if (
( !CV_CheatsEnabled() ) ||
( item < KITEM_SAD || item >= NUMKARTITEMS )
)
{
CONS_Alert(CONS_WARNING,
M_GetText ("Illegal give item received from %s\n"),
player_names[playernum]);
if (server)
SendKick(playernum, KICK_MSG_CON_FAIL);
return;
}
K_StripItems(&players[playernum]);
players[playernum].itemroulette = 0;
players[playernum].itemtype = item;
players[playernum].itemamount = amt;
CV_CheaterWarning(
playernum,
(amt != 1) // FIXME: we should have actual KITEM_ name array
? va("kartgiveitem %s %d", cv_kartdebugitem.PossibleValue[item+1].strvalue, amt)
: va("kartgiveitem %s", cv_kartdebugitem.PossibleValue[item+1].strvalue)
);
}
static void Got_ScheduleTaskcmd(UINT8 **cp, INT32 playernum)
{
char command[MAXTEXTCMD];
@ -5683,6 +5649,35 @@ static void Got_Cheat(UINT8 **cp, INT32 playernum)
break;
}
case CHEAT_GIVEITEM: {
SINT8 item = READSINT8(*cp);
UINT8 amt = READUINT8(*cp);
item = max(item, KITEM_SAD);
item = min(item, NUMKARTITEMS - 1);
K_StripItems(player);
// Cancel roulette if rolling
player->itemroulette = 0;
player->itemtype = item;
player->itemamount = amt;
if (amt == 0)
{
CV_CheaterWarning(playernum, "delete my items");
}
else
{
// FIXME: we should have actual KITEM_ name array
const char *itemname = cv_kartdebugitem.PossibleValue[1 + item].strvalue;
CV_CheaterWarning(playernum, va("give item %s x%d", itemname, amt));
}
break;
}
case NUMBER_OF_CHEATS:
break;
}
@ -5844,11 +5839,9 @@ static void Command_Archivetest_f(void)
*/
static void Command_KartGiveItem_f(void)
{
char buf[2];
int ac;
const char *name;
int item;
INT32 item;
const char * str;
@ -5860,7 +5853,7 @@ static void Command_KartGiveItem_f(void)
if (ac < 2)
{
CONS_Printf(
"kartgiveitem <item> [amount]: Give yourself an item\n"
"give <item> [amount]: Give yourself an item\n"
);
}
else
@ -5875,26 +5868,33 @@ static void Command_KartGiveItem_f(void)
}
else
{
for (i = 0; ( str = kartdebugitem_cons_t[i].strvalue ); ++i)
/* first check exact match */
if (!CV_CompleteValue(&cv_kartdebugitem, &name, &item))
{
if (strcasecmp(name, str) == 0)
CONS_Printf("\x83" "Autocomplete:\n");
/* then do very loose partial matching */
for (i = 0; ( str = kartdebugitem_cons_t[i].strvalue ); ++i)
{
item = kartdebugitem_cons_t[i].value;
break;
if (strcasestr(str, name) != NULL)
{
CONS_Printf("\x83\t%s\n", str);
item = kartdebugitem_cons_t[i].value;
}
}
}
}
if (item < NUMKARTITEMS)
{
buf[0] = item;
INT32 amt;
if (ac > 2)
buf[1] = atoi(COM_Argv(2));
amt = atoi(COM_Argv(2));
else
buf[1] = 1;/* default to one quantity */
amt = (item != KITEM_NONE);/* default to one quantity, or zero, if KITEM_NONE */
SendNetXCmd(XD_GIVEITEM, buf, 2);
D_Cheat(consoleplayer, CHEAT_GIVEITEM, item, amt);
}
else
{

View file

@ -196,14 +196,13 @@ typedef enum
XD_ACCEPTPARTYINVITE, // 29
XD_LEAVEPARTY, // 30
XD_CANCELPARTYINVITE, // 31
XD_GIVEITEM, // 32
XD_CHEAT, // 32
XD_ADDBOT, // 33
XD_DISCORD, // 34
XD_PLAYSOUND, // 35
XD_SCHEDULETASK, // 36
XD_SCHEDULECLEAR, // 37
XD_AUTOMATE, // 38
XD_CHEAT, // 39
MAXNETXCMD
} netxcmd_t;

View file

@ -30,6 +30,7 @@ typedef enum {
CHEAT_HURT,
CHEAT_RELATIVE_TELEPORT,
CHEAT_DEVMODE,
CHEAT_GIVEITEM,
NUMBER_OF_CHEATS
} cheat_t;