NSItem: handle health/armor/ammo drops outside Touch.
New cmds: giveInventoryItem, removeInventoryItem, removeAllInventoryItems
This commit is contained in:
parent
760bc4a8fa
commit
935c0fd543
5 changed files with 70 additions and 107 deletions
|
@ -236,13 +236,6 @@ CMD_ListModelFramegroups(void)
|
||||||
print("} framegroups_e;\n");
|
print("} framegroups_e;\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
CMD_ListInventory(void)
|
|
||||||
{
|
|
||||||
NSNavAI_ListInventory((NSNavAI)pSeat->m_ePlayer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
Cmd_Parse
|
Cmd_Parse
|
||||||
|
@ -452,84 +445,47 @@ Cmd_Parse(string sCMD)
|
||||||
case "-menu_right":
|
case "-menu_right":
|
||||||
pSeat->m_iInputReload = false;
|
pSeat->m_iInputReload = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* client aliases for server commands */
|
/* client aliases for server commands */
|
||||||
case "addBot":
|
case "addBot":
|
||||||
localcmd(sprintf("sv addBot %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "killAllBots":
|
case "killAllBots":
|
||||||
localcmd("sv killAllBots\n");
|
|
||||||
break;
|
|
||||||
case "resetAllBotsGoals":
|
case "resetAllBotsGoals":
|
||||||
localcmd("sv resetAllBotsGoals\n");
|
|
||||||
break;
|
|
||||||
case "killClass":
|
case "killClass":
|
||||||
localcmd(sprintf("sv killClass %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "killMovables":
|
case "killMovables":
|
||||||
localcmd("sv killMovables\n");
|
|
||||||
break;
|
|
||||||
case "trigger":
|
case "trigger":
|
||||||
localcmd(sprintf("sv trigger %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "input":
|
case "input":
|
||||||
localcmd(sprintf("sv input %s %s %s\n", argv(1), argv(2), argv(3)));
|
|
||||||
break;
|
|
||||||
case "listBotProfiles":
|
case "listBotProfiles":
|
||||||
localcmd("sv listBotProfiles\n");
|
|
||||||
break;
|
|
||||||
case "listTargets":
|
case "listTargets":
|
||||||
localcmd("sv listTargets\n");
|
|
||||||
break;
|
|
||||||
case "teleport":
|
case "teleport":
|
||||||
localcmd(sprintf("sv teleport %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "teleportToClass":
|
case "teleportToClass":
|
||||||
localcmd(sprintf("sv teleportToClass %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "respawnEntities":
|
case "respawnEntities":
|
||||||
localcmd("sv respawnEntities\n");
|
|
||||||
break;
|
|
||||||
case "spawnDef":
|
case "spawnDef":
|
||||||
localcmd(sprintf("sv spawn %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case "nodeAdd":
|
case "nodeAdd":
|
||||||
localcmd(sprintf("sv way addsingle %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "nodeDel":
|
case "nodeDel":
|
||||||
localcmd(sprintf("sv way delete %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "nodeFlags":
|
case "nodeFlags":
|
||||||
localcmd(sprintf("sv way link %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "nodeLink":
|
case "nodeLink":
|
||||||
localcmd(sprintf("sv way connect1 %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "nodeRadius":
|
case "nodeRadius":
|
||||||
localcmd(sprintf("sv way radius %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "nodeOffset":
|
case "nodeOffset":
|
||||||
localcmd(sprintf("sv way move %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "nodeUnlink":
|
case "nodeUnlink":
|
||||||
localcmd(sprintf("sv way unlink1 %s\n", argv(1)));
|
|
||||||
break;
|
|
||||||
case "traceMaterial":
|
case "traceMaterial":
|
||||||
localcmd("sv traceMaterial\n");
|
localcmd(sprintf("sv %s\n", sCMD));
|
||||||
break;
|
break;
|
||||||
|
/* client aliases for client commands */
|
||||||
|
case "listInventory":
|
||||||
|
case "giveInventoryItem":
|
||||||
|
case "removeInventoryItem":
|
||||||
|
case "removeAllInventoryItems":
|
||||||
|
case "listAmmo":
|
||||||
|
localcmd(sprintf("cmd %s\n", sCMD));
|
||||||
|
break;
|
||||||
|
|
||||||
case "listClientEntityDef":
|
case "listClientEntityDef":
|
||||||
EntityDef_DebugList();
|
EntityDef_DebugList();
|
||||||
break;
|
break;
|
||||||
case "listServerEntityDef":
|
case "listServerEntityDef":
|
||||||
localcmd("sv listEntityDef\n");
|
localcmd("sv listEntityDef\n");
|
||||||
break;
|
break;
|
||||||
case "listInventory":
|
|
||||||
CMD_ListInventory();
|
|
||||||
break;
|
|
||||||
case "listAmmo":
|
|
||||||
Ammo_DebugList();
|
|
||||||
break;
|
|
||||||
case "bobup":
|
case "bobup":
|
||||||
break;
|
break;
|
||||||
case "bobdn":
|
case "bobdn":
|
||||||
|
@ -635,6 +591,10 @@ Cmd_Init(void)
|
||||||
registercommand("weapnext");
|
registercommand("weapnext");
|
||||||
registercommand("weapprev");
|
registercommand("weapprev");
|
||||||
|
|
||||||
|
registercommand("giveInventoryItem");
|
||||||
|
registercommand("removeInventoryItem");
|
||||||
|
registercommand("removeAllInventoryItems");
|
||||||
|
|
||||||
/* voting */
|
/* voting */
|
||||||
registercommand("vote");
|
registercommand("vote");
|
||||||
registercommand("callvote");
|
registercommand("callvote");
|
||||||
|
|
|
@ -59,6 +59,24 @@ Cmd_ParseClientCommand(NSClient sender, string cmd, int commandArguments)
|
||||||
msg = sprintf("we have %s minutes remaining", timestring);
|
msg = sprintf("we have %s minutes remaining", timestring);
|
||||||
bprint(PRINT_CHAT, msg);
|
bprint(PRINT_CHAT, msg);
|
||||||
break;
|
break;
|
||||||
|
case "listInventory":
|
||||||
|
NSNavAI_ListInventory((NSNavAI)self);
|
||||||
|
break;
|
||||||
|
case "giveInventoryItem":
|
||||||
|
NSNavAI player = (NSNavAI)self;
|
||||||
|
player.GiveItem(argv(1));
|
||||||
|
break;
|
||||||
|
case "removeInventoryItem":
|
||||||
|
NSNavAI player = (NSNavAI)self;
|
||||||
|
player.RemoveItem(argv(1));
|
||||||
|
break;
|
||||||
|
case "removeAllInventoryItems":
|
||||||
|
NSNavAI player = (NSNavAI)self;
|
||||||
|
player.RemoveAllItems(false);
|
||||||
|
break;
|
||||||
|
case "listAmmo":
|
||||||
|
Ammo_DebugList();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
clientcommand(sender, cmd);
|
clientcommand(sender, cmd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,12 +241,6 @@ Cmd_ParseServerCommand(void)
|
||||||
case "traceMaterial":
|
case "traceMaterial":
|
||||||
CMD_TraceMaterial();
|
CMD_TraceMaterial();
|
||||||
break;
|
break;
|
||||||
case "listPlayerInventory":
|
|
||||||
NSNavAI_ListInventory((NSNavAI)self);
|
|
||||||
break;
|
|
||||||
case "listInventory":
|
|
||||||
NSNavAI_ListInventory((NSNavAI)self);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
return (false);
|
return (false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,7 +203,6 @@ void
|
||||||
NSItem::Touch(entity eToucher)
|
NSItem::Touch(entity eToucher)
|
||||||
{
|
{
|
||||||
NSClientPlayer pl = (NSClientPlayer)eToucher;
|
NSClientPlayer pl = (NSClientPlayer)eToucher;
|
||||||
bool removeItem = false;
|
|
||||||
|
|
||||||
if (eToucher.classname != "player") {
|
if (eToucher.classname != "player") {
|
||||||
return;
|
return;
|
||||||
|
@ -216,47 +215,8 @@ NSItem::Touch(entity eToucher)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* don't remove if AddItem fails */
|
/* don't remove if AddItem fails */
|
||||||
if (m_bInvCarry) {
|
string itemToAdd = (m_strInvWeapon) ? m_strInvWeapon : classname;
|
||||||
string itemToAdd = (m_strInvWeapon) ? m_strInvWeapon : classname;
|
pl.GiveItem(itemToAdd);
|
||||||
|
|
||||||
if (pl.GiveItem(itemToAdd) == true) {
|
|
||||||
removeItem = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* proceed */
|
|
||||||
if (m_iGiveHealth > 0i) {
|
|
||||||
if (pl.GetHealth() < 100) {
|
|
||||||
//Damage_Apply(pl, this, -m_iGiveHealth, 0, DMG_GENERIC);
|
|
||||||
pl.health = bound(0, pl.health + m_iGiveHealth, pl.max_health);
|
|
||||||
removeItem = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_iGiveArmor > 0i) {
|
|
||||||
if (pl.armor < 100) {
|
|
||||||
pl.armor += (float)m_iGiveArmor;
|
|
||||||
removeItem = true;
|
|
||||||
|
|
||||||
if (pl.armor > 100) {
|
|
||||||
pl.armor = 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_AMMO_TYPES; i++) {
|
|
||||||
if (m_GiveAmmo[i] > 0i && pl.GiveAmmo(i, m_GiveAmmo[i]) == true) {
|
|
||||||
removeItem = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (removeItem == false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logging_Pickup(pl, this, __NULL__);
|
|
||||||
StartSoundDef(m_sndAcquire, CHAN_ITEM, true);
|
|
||||||
|
|
||||||
UseTargets(pl, TRIG_TOGGLE, m_flDelay);
|
UseTargets(pl, TRIG_TOGGLE, m_flDelay);
|
||||||
|
|
||||||
if (real_owner || m_iWasDropped == 1 || cvar("sv_playerslots") == 1) {
|
if (real_owner || m_iWasDropped == 1 || cvar("sv_playerslots") == 1) {
|
||||||
|
@ -265,8 +225,6 @@ NSItem::Touch(entity eToucher)
|
||||||
Disappear();
|
Disappear();
|
||||||
ScheduleThink(PickupRespawn, 30.0f);
|
ScheduleThink(PickupRespawn, 30.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
OnPickup();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -550,7 +508,7 @@ void
|
||||||
NSItem::RemovedFromInventory(void)
|
NSItem::RemovedFromInventory(void)
|
||||||
{
|
{
|
||||||
#ifdef SERVER
|
#ifdef SERVER
|
||||||
BecomePickup();
|
//BecomePickup();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -565,6 +523,32 @@ void
|
||||||
NSItem::_AddedCallback(void)
|
NSItem::_AddedCallback(void)
|
||||||
{
|
{
|
||||||
#ifdef SERVER
|
#ifdef SERVER
|
||||||
|
NSNavAI pl = (NSNavAI)owner;
|
||||||
|
|
||||||
|
if (m_iGiveHealth > 0i) {
|
||||||
|
if (pl.GetHealth() < 100) {
|
||||||
|
//Damage_Apply(pl, this, -m_iGiveHealth, 0, DMG_GENERIC);
|
||||||
|
pl.health = bound(0, pl.health + m_iGiveHealth, pl.max_health);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_iGiveArmor > 0i) {
|
||||||
|
if (pl.armor < 100) {
|
||||||
|
pl.armor += (float)m_iGiveArmor;
|
||||||
|
|
||||||
|
if (pl.armor > 100) {
|
||||||
|
pl.armor = 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < MAX_AMMO_TYPES; i++) {
|
||||||
|
pl.GiveAmmo(i, m_GiveAmmo[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Logging_Pickup(pl, this, __NULL__);
|
||||||
|
StartSoundDef(m_sndAcquire, CHAN_ITEM, true);
|
||||||
|
OnPickup();
|
||||||
Disappear();
|
Disappear();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -689,6 +689,8 @@ NSNavAI::GiveItem(string itemName)
|
||||||
NSItem linkedList = __NULL__;
|
NSItem linkedList = __NULL__;
|
||||||
NSItem lastItem = __NULL__;
|
NSItem lastItem = __NULL__;
|
||||||
|
|
||||||
|
bool canCarry stof(EntityDef_GetKeyValue(itemName, "inv_carry")) ? true : false;
|
||||||
|
|
||||||
/* we do not have an item yet. */
|
/* we do not have an item yet. */
|
||||||
if (!m_itemList) {
|
if (!m_itemList) {
|
||||||
m_itemList = (NSItem)EntityDef_CreateClassname(itemName);
|
m_itemList = (NSItem)EntityDef_CreateClassname(itemName);
|
||||||
|
@ -747,6 +749,11 @@ NSNavAI::GiveItem(string itemName)
|
||||||
SwitchToExactWeapon((NSWeapon)linkedList);
|
SwitchToExactWeapon((NSWeapon)linkedList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* items (not weapons) may not be added permanently by default */
|
||||||
|
if (canCarry == false && linkedList.IsWeapon() == false) {
|
||||||
|
RemoveItem(itemName);
|
||||||
|
}
|
||||||
|
|
||||||
return (true);
|
return (true);
|
||||||
#else
|
#else
|
||||||
return (false);
|
return (false);
|
||||||
|
|
Loading…
Reference in a new issue