X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Ft_items.qc;h=f5b3b2c19f7122bc0cfbe45cf10b1dfa8e9e0f22;hb=4faf95050c3c1a7a6963ff7fa768d6c87b3e7bc6;hp=5e03def2447d5132661edd66caa031f681b32f3e;hpb=7a4866076767a953350ca4c384c2802f07c4c255;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/t_items.qc b/qcsrc/common/t_items.qc index 5e03def24..f5b3b2c19 100644 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@ -134,10 +134,17 @@ void Item_PreDraw(entity this) } float alph; vector org = getpropertyvec(VF_ORIGIN); - if(!checkpvs(org, this)) // this makes sense as long as we don't support recursive warpzones - alph = 0; - else if(this.fade_start) - alph = bound(0, (this.fade_end - vlen(org - this.origin - 0.5 * (this.mins + this.maxs))) / (this.fade_end - this.fade_start), 1); + //if(!checkpvs(org, this)) // this makes sense as long as we don't support recursive warpzones + //alph = 0; // this shouldn't be needed, since items behind walls are culled anyway + if(this.fade_start) + { + if(vdist(org - this.origin, >, this.fade_end)) + alph = 0; // save on some processing + else if(vdist(org - this.origin, <, this.fade_start)) + alph = 1; // more processing saved + else + alph = bound(0, (this.fade_end - vlen(org - this.origin - 0.5 * (this.mins + this.maxs))) / (this.fade_end - this.fade_start), 1); + } else alph = 1; //printf("%v <-> %v\n", view_origin, this.origin + 0.5 * (this.mins + this.maxs)); @@ -227,14 +234,14 @@ NET_HANDLE(ENT_CLIENT_ITEM, bool isnew) string _fn2 = substring(_fn, 0 , strlen(_fn) -4); this.draw = ItemDrawSimple; - if(fexists(sprintf("%s%s.md3", _fn2, autocvar_cl_simpleitems_postfix))) - this.mdl = strzone(sprintf("%s%s.md3", _fn2, autocvar_cl_simpleitems_postfix)); - else if(fexists(sprintf("%s%s.dpm", _fn2, autocvar_cl_simpleitems_postfix))) - this.mdl = strzone(sprintf("%s%s.dpm", _fn2, autocvar_cl_simpleitems_postfix)); - else if(fexists(sprintf("%s%s.iqm", _fn2, autocvar_cl_simpleitems_postfix))) - this.mdl = strzone(sprintf("%s%s.iqm", _fn2, autocvar_cl_simpleitems_postfix)); - else if(fexists(sprintf("%s%s.mdl", _fn2, autocvar_cl_simpleitems_postfix))) - this.mdl = strzone(sprintf("%s%s.mdl", _fn2, autocvar_cl_simpleitems_postfix)); + if(fexists(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".md3"))) + this.mdl = strzone(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".md3")); + else if(fexists(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".dpm"))) + this.mdl = strzone(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".dpm")); + else if(fexists(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".iqm"))) + this.mdl = strzone(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".iqm")); + else if(fexists(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".mdl"))) + this.mdl = strzone(strcat(_fn2, autocvar_cl_simpleitems_postfix, ".mdl")); else { this.draw = ItemDraw; @@ -695,7 +702,7 @@ float Item_GiveTo(entity item, entity player) // if the player is using their best weapon before items are given, they // probably want to switch to an even better weapon after items are given - if(player.autoswitch) + if(CS(player).autoswitch) { for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) { @@ -868,7 +875,7 @@ LABEL(pickup) _sound (toucher, (this.itemdef.instanceOfPowerup ? CH_TRIGGER_SINGLE : CH_TRIGGER), (this.item_pickupsound ? this.item_pickupsound : Sound_fixpath(this.item_pickupsound_ent)), VOL_BASE, ATTEN_NORM); if (this.classname == "droppedweapon") - delete (this); + delete(this); else if (this.spawnshieldtime) { entity e; @@ -1024,25 +1031,27 @@ float ammo_pickupevalfunc(entity player, entity item) rating = item.bot_pickupbasevalue; } + float noammorating = 0.5; + if ((need_shells) && (item.ammo_shells) && (player.ammo_shells < g_pickup_shells_max)) - c = item.ammo_shells / player.ammo_shells; + c = item.ammo_shells / max(noammorating, player.ammo_shells); if ((need_nails) && (item.ammo_nails) && (player.ammo_nails < g_pickup_nails_max)) - c = item.ammo_nails / player.ammo_nails; + c = item.ammo_nails / max(noammorating, player.ammo_nails); if ((need_rockets) && (item.ammo_rockets) && (player.ammo_rockets < g_pickup_rockets_max)) - c = item.ammo_rockets / player.ammo_rockets; + c = item.ammo_rockets / max(noammorating, player.ammo_rockets); if ((need_cells) && (item.ammo_cells) && (player.ammo_cells < g_pickup_cells_max)) - c = item.ammo_cells / player.ammo_cells; + c = item.ammo_cells / max(noammorating, player.ammo_cells); if ((need_plasma) && (item.ammo_plasma) && (player.ammo_plasma < g_pickup_plasma_max)) - c = item.ammo_plasma / player.ammo_plasma; + c = item.ammo_plasma / max(noammorating, player.ammo_plasma); if ((need_fuel) && (item.ammo_fuel) && (player.ammo_fuel < g_pickup_fuel_max)) - c = item.ammo_fuel / player.ammo_fuel; + c = item.ammo_fuel / max(noammorating, player.ammo_fuel); - rating *= min(2, c); + rating *= min(c, 2); if(wpn) rating += wpn.bot_pickupbasevalue * 0.1; return rating; @@ -1170,7 +1179,7 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default if(!have_pickup_item(this)) { startitem_failed = true; - delete (this); + delete(this); return; } @@ -1208,7 +1217,7 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default // target_give not yet supported; maybe later print("removed targeted ", this.classname, "\n"); startitem_failed = true; - remove (this); + delete(this); return; } */ @@ -1364,7 +1373,7 @@ spawnfunc(item_rockets) spawnfunc(item_bullets) { - if(!weaponswapping && autocvar_sv_q3acompat_machineshotgunswap && + if(!weaponswapping && autocvar_sv_q3acompat_machineshotgunswap && (this.classname != "droppedweapon")) { weaponswapping = true; @@ -1721,7 +1730,7 @@ float GiveItems(entity e, float beginarg, float endarg) int _switchweapon = 0; - if(e.autoswitch) + if(CS(e).autoswitch) { for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) {