X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ft_items.qc;h=f4ed4f1bf423e83e62be4463a76e0ab9a72aaac6;hp=039d27da351f284a3766d9684a6bbf2c45838b72;hb=5aab6120acfc624751d20a695d1b911b3e919831;hpb=164d3e92e91b91d8f6960ee6442f4906dffb418d diff --git a/qcsrc/common/t_items.qc b/qcsrc/common/t_items.qc index 039d27da3..f4ed4f1bf 100644 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@ -15,7 +15,7 @@ #include "constants.qh" #include #include - #include "triggers/subs.qh" + #include "mapobjects/subs.qh" #include "util.qh" #include @@ -50,13 +50,8 @@ void Item_SetAlpha(entity this) } else { - if (autocvar_cl_ghost_items_color) - { - this.alpha = autocvar_cl_ghost_items; - this.colormod = this.glowmod = autocvar_cl_ghost_items_color; - } - else - this.alpha = -1; + this.alpha = autocvar_cl_ghost_items; + this.colormod = this.glowmod = autocvar_cl_ghost_items_color; } if((!veh_hud) && (this.ItemStatus & ITS_STAYWEP)) @@ -401,39 +396,12 @@ bool have_pickup_item(entity this) if(autocvar_g_pickup_items == 0) return false; if(g_weaponarena) - if(this.weapons || this.itemdef.instanceOfAmmo) // no item or ammo pickups in weaponarena + if(STAT(WEAPONS, this) || this.itemdef.instanceOfAmmo) // no item or ammo pickups in weaponarena return false; } return true; } -/* -float Item_Customize() -{ - if(this.spawnshieldtime) - return true; - if(this.weapons & ~other.weapons) - { - this.colormod = '0 0 0'; - this.glowmod = this.colormod; - this.alpha = 0.5 + 0.5 * g_ghost_items; // halfway more alpha - return true; - } - else - { - if(g_ghost_items) - { - this.colormod = stov(autocvar_g_ghost_items_color); - this.glowmod = this.colormod; - this.alpha = g_ghost_items; - return true; - } - else - return false; - } -} -*/ - void Item_Show (entity e, float mode) { e.effects &= ~(EF_ADDITIVE | EF_STARDUST | EF_FULLBRIGHT | EF_NODEPTHTEST); @@ -457,7 +425,7 @@ void Item_Show (entity e, float mode) } else { - bool nostay = def.instanceOfWeaponPickup ? !!(def.m_weapon.weapons & WEPSET_SUPERWEAPONS) : false // no weapon-stay on superweapons + bool nostay = def.instanceOfWeaponPickup ? !!(def.m_weapon.m_wepset & WEPSET_SUPERWEAPONS) : false // no weapon-stay on superweapons || e.team // weapon stay isn't supported for teamed weapons ; if(def.instanceOfWeaponPickup && !nostay && g_weapon_stay) @@ -517,7 +485,7 @@ void Item_Respawn (entity this) sound(this, CH_TRIGGER, this.itemdef.m_respawnsound, VOL_BASE, ATTEN_NORM); // play respawn sound setorigin(this, this.origin); - if (Item_ItemsTime_Allow(this.itemdef) || (this.weapons & WEPSET_SUPERWEAPONS)) + if (Item_ItemsTime_Allow(this.itemdef) || (STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS)) { float t = Item_ItemsTime_UpdateTime(this, 0); Item_ItemsTime_SetTime(this, t); @@ -602,13 +570,13 @@ void Item_RespawnThink(entity this) void Item_ScheduleRespawnIn(entity e, float t) { // if the respawn time is longer than 10 seconds, show a waypoint, otherwise, just respawn normally - if ((Item_ItemsTime_Allow(e.itemdef) || (e.weapons & WEPSET_SUPERWEAPONS) || MUTATOR_CALLHOOK(Item_ScheduleRespawn, e, t)) && (t - ITEM_RESPAWN_TICKS) > 0) + if ((Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS) || MUTATOR_CALLHOOK(Item_ScheduleRespawn, e, t)) && (t - ITEM_RESPAWN_TICKS) > 0) { setthink(e, Item_RespawnCountdown); e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS); e.scheduledrespawntime = e.nextthink + ITEM_RESPAWN_TICKS; e.item_respawncounter = 0; - if(Item_ItemsTime_Allow(e.itemdef) || (e.weapons & WEPSET_SUPERWEAPONS)) + if(Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS)) { t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime); Item_ItemsTime_SetTime(e, t); @@ -622,7 +590,7 @@ void Item_ScheduleRespawnIn(entity e, float t) e.scheduledrespawntime = time + t; e.wait = time + t; - if(Item_ItemsTime_Allow(e.itemdef) || (e.weapons & WEPSET_SUPERWEAPONS)) + if(Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS)) { t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime); Item_ItemsTime_SetTime(e, t); @@ -733,7 +701,7 @@ void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names, FOREACH(Weapons, it != WEP_Null, { // Finding a weapon which player doesn't have. - if (!(receiver.weapons & it.m_wepset) && (it.netname == weapon)) + if (!(STAT(WEAPONS, receiver) & it.m_wepset) && (it.netname == weapon)) { RandomSelection_AddEnt(it, 1, 1); break; @@ -744,7 +712,7 @@ void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names, { return; } - receiver.weapons |= RandomSelection_chosen_ent.m_wepset; + STAT(WEAPONS, receiver) |= RandomSelection_chosen_ent.m_wepset; if (RandomSelection_chosen_ent.ammo_type == RESOURCE_NONE) { continue; @@ -806,7 +774,7 @@ float Item_GiveTo(entity item, entity player) if(player.(weaponentity).m_switchweapon == w_getbestweapon(player, weaponentity)) _switchweapon |= BIT(slot); - if(!(player.weapons & WepSet_FromWeapon(player.(weaponentity).m_switchweapon))) + if(!(STAT(WEAPONS, player) & WepSet_FromWeapon(player.(weaponentity).m_switchweapon))) _switchweapon |= BIT(slot); } } @@ -822,8 +790,8 @@ float Item_GiveTo(entity item, entity player) if (item.itemdef.instanceOfWeaponPickup) { WepSet w; - w = item.weapons; - w &= ~player.weapons; + w = STAT(WEAPONS, item); + w &= ~STAT(WEAPONS, player); if (w || (item.spawnshieldtime && item.pickup_anyway > 0)) { @@ -1013,7 +981,7 @@ void Item_Reset(entity this) { WaypointSprite_Kill(this.waypointsprite_attached); } - if (this.itemdef.instanceOfPowerup || (this.weapons & WEPSET_SUPERWEAPONS)) // do not spawn powerups initially! + if (this.itemdef.instanceOfPowerup || (STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS)) // do not spawn powerups initially! { Item_ScheduleInitialRespawn(this); } @@ -1072,7 +1040,7 @@ float generic_pickupevalfunc(entity player, entity item) {return item.bot_pickup float weapon_pickupevalfunc(entity player, entity item) { // See if I have it already - if(player.weapons & item.weapons) + if(STAT(WEAPONS, player) & STAT(WEAPONS, item)) { // If I can pick it up if(!item.spawnshieldtime) @@ -1083,7 +1051,7 @@ float weapon_pickupevalfunc(entity player, entity item) // reduce weapon value if bot already got a good arsenal float c = 1; int weapons_value = 0; - FOREACH(Weapons, it != WEP_Null && (player.weapons & it.m_wepset), { + FOREACH(Weapons, it != WEP_Null && (STAT(WEAPONS, player) & it.m_wepset), { weapons_value += it.bot_pickupbasevalue; }); c -= bound(0, weapons_value / 20000, 1) * 0.5; @@ -1117,7 +1085,7 @@ float ammo_pickupevalfunc(entity player, entity item) else { FOREACH(Weapons, it != WEP_Null, { - if(!(player.weapons & (it.m_wepset))) + if(!(STAT(WEAPONS, player) & (it.m_wepset))) continue; switch(it.ammo_type) @@ -1135,23 +1103,23 @@ float ammo_pickupevalfunc(entity player, entity item) float noammorating = 0.5; - if ((need_shells) && (item.ammo_shells) && (player.ammo_shells < g_pickup_shells_max)) - c = item.ammo_shells / max(noammorating, player.ammo_shells); + if ((need_shells) && (item.ammo_shells) && (GetResourceAmount(player, RESOURCE_SHELLS) < g_pickup_shells_max)) + c = item.ammo_shells / max(noammorating, GetResourceAmount(player, RESOURCE_SHELLS)); - if ((need_nails) && (item.ammo_nails) && (player.ammo_nails < g_pickup_nails_max)) - c = item.ammo_nails / max(noammorating, player.ammo_nails); + if ((need_nails) && (item.ammo_nails) && (GetResourceAmount(player, RESOURCE_BULLETS) < g_pickup_nails_max)) + c = item.ammo_nails / max(noammorating, GetResourceAmount(player, RESOURCE_BULLETS)); - if ((need_rockets) && (item.ammo_rockets) && (player.ammo_rockets < g_pickup_rockets_max)) - c = item.ammo_rockets / max(noammorating, player.ammo_rockets); + if ((need_rockets) && (item.ammo_rockets) && (GetResourceAmount(player, RESOURCE_ROCKETS) < g_pickup_rockets_max)) + c = item.ammo_rockets / max(noammorating, GetResourceAmount(player, RESOURCE_ROCKETS)); - if ((need_cells) && (item.ammo_cells) && (player.ammo_cells < g_pickup_cells_max)) - c = item.ammo_cells / max(noammorating, player.ammo_cells); + if ((need_cells) && (item.ammo_cells) && (GetResourceAmount(player, RESOURCE_CELLS) < g_pickup_cells_max)) + c = item.ammo_cells / max(noammorating, GetResourceAmount(player, RESOURCE_CELLS)); - if ((need_plasma) && (item.ammo_plasma) && (player.ammo_plasma < g_pickup_plasma_max)) - c = item.ammo_plasma / max(noammorating, player.ammo_plasma); + if ((need_plasma) && (item.ammo_plasma) && (GetResourceAmount(player, RESOURCE_PLASMA) < g_pickup_plasma_max)) + c = item.ammo_plasma / max(noammorating, GetResourceAmount(player, RESOURCE_PLASMA)); - if ((need_fuel) && (item.ammo_fuel) && (player.ammo_fuel < g_pickup_fuel_max)) - c = item.ammo_fuel / max(noammorating, player.ammo_fuel); + if ((need_fuel) && (item.ammo_fuel) && (GetResourceAmount(player, RESOURCE_FUEL) < g_pickup_fuel_max)) + c = item.ammo_fuel / max(noammorating, GetResourceAmount(player, RESOURCE_FUEL)); rating *= min(c, 2); if(wpn) @@ -1210,7 +1178,7 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default this.item_pickupsound_ent = pickupsound; if(def.m_iteminit) - def.m_iteminit(this); + def.m_iteminit(def, this); if(!this.respawntime) // both need to be set { @@ -1233,7 +1201,7 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default } if(weaponid) - this.weapons = WepSet_FromWeapon(Weapons_from(weaponid)); + STAT(WEAPONS, this) = WepSet_FromWeapon(Weapons_from(weaponid)); this.flags = FL_ITEM | itemflags; IL_PUSH(g_items, this); @@ -1542,7 +1510,7 @@ spawnfunc(target_items) s = W_UndeprecateName(argv(j)); if(s == it.netname) { - this.weapons |= (it.m_wepset); + STAT(WEAPONS, this) |= (it.m_wepset); if(this.spawnflags == 0 || this.spawnflags == 2) it.wr_init(it); break; @@ -1595,7 +1563,7 @@ spawnfunc(target_items) if(this.health != 0) this.netname = sprintf("%s %s%d %s", this.netname, valueprefix, max(0, this.health), "health"); if(this.armorvalue != 0) this.netname = sprintf("%s %s%d %s", this.netname, valueprefix, max(0, this.armorvalue), "armor"); FOREACH(Buffs, it != BUFF_Null, this.netname = sprintf("%s %s%d %s", this.netname, itemprefix, !!(STAT(BUFFS, this) & (it.m_itemid)), it.m_name)); - FOREACH(Weapons, it != WEP_Null, this.netname = sprintf("%s %s%d %s", this.netname, itemprefix, !!(this.weapons & (it.m_wepset)), it.netname)); + FOREACH(Weapons, it != WEP_Null, this.netname = sprintf("%s %s%d %s", this.netname, itemprefix, !!(STAT(WEAPONS, this) & (it.m_wepset)), it.netname)); } this.netname = strzone(this.netname); //print(this.netname, "\n"); @@ -1614,30 +1582,30 @@ float GiveWeapon(entity e, float wpn, float op, float val) { WepSet v0, v1; WepSet s = WepSet_FromWeapon(Weapons_from(wpn)); - v0 = (e.weapons & s); + v0 = (STAT(WEAPONS, e) & s); switch(op) { case OP_SET: if(val > 0) - e.weapons |= s; + STAT(WEAPONS, e) |= s; else - e.weapons &= ~s; + STAT(WEAPONS, e) &= ~s; break; case OP_MIN: case OP_PLUS: if(val > 0) - e.weapons |= s; + STAT(WEAPONS, e) |= s; break; case OP_MAX: if(val <= 0) - e.weapons &= ~s; + STAT(WEAPONS, e) &= ~s; break; case OP_MINUS: if(val > 0) - e.weapons &= ~s; + STAT(WEAPONS, e) &= ~s; break; } - v1 = (e.weapons & s); + v1 = (STAT(WEAPONS, e) & s); return (v0 != v1); } @@ -1855,7 +1823,7 @@ float GiveItems(entity e, float beginarg, float endarg) FOREACH(Weapons, it != WEP_Null, { POSTGIVE_WEAPON(e, it, SND_WEAPONPICKUP, SND_Null); if(!(save_weapons & (it.m_wepset))) - if(e.weapons & (it.m_wepset)) + if(STAT(WEAPONS, e) & (it.m_wepset)) it.wr_init(it); }); POSTGIVE_VALUE(e, strength_finished, 1, SND_POWERUP, SND_POWEROFF); @@ -1871,7 +1839,7 @@ float GiveItems(entity e, float beginarg, float endarg) POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND_MEGAHEALTH, SND_Null); if(e.superweapons_finished <= 0) - if(e.weapons & WEPSET_SUPERWEAPONS) + if(STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS) e.superweapons_finished = autocvar_g_balance_superweapons_time; if(e.strength_finished <= 0) @@ -1891,7 +1859,7 @@ float GiveItems(entity e, float beginarg, float endarg) { .entity weaponentity = weaponentities[slot]; if(e.(weaponentity).m_weapon != WEP_Null || slot == 0) - if(!(e.weapons & WepSet_FromWeapon(e.(weaponentity).m_switchweapon))) + if(!(STAT(WEAPONS, e) & WepSet_FromWeapon(e.(weaponentity).m_switchweapon))) _switchweapon |= BIT(slot); }