From: Mario Date: Fri, 7 Apr 2017 04:05:38 +0000 (+0000) Subject: Merge branch 'amade/small-fixes' into 'master' X-Git-Tag: xonotic-v0.8.5~2843 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=2f215c603bf1b4dd44b9d166180f535c88602e9f;hp=-c Merge branch 'amade/small-fixes' into 'master' Amade/small fixes See merge request !412 --- 2f215c603bf1b4dd44b9d166180f535c88602e9f diff --combined qcsrc/common/t_items.qc index 5490478baf,ffaa59fd0f..3151d7cdb1 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@@ -58,8 -58,7 +58,7 @@@ void Item_SetAlpha(entity this this.alpha = -1; } - if(!veh_hud) - if(this.ItemStatus & ITS_STAYWEP) + if((!veh_hud) && (this.ItemStatus & ITS_STAYWEP)) { this.colormod = this.glowmod = autocvar_cl_weapon_stay_color; this.alpha = autocvar_cl_weapon_stay_alpha; @@@ -449,28 -448,30 +448,30 @@@ void Item_Show (entity e, float mode e.spawnshieldtime = 1; e.ItemStatus &= ~ITS_AVAILABLE; } - else { - bool nostay = def.instanceOfWeaponPickup ? !!(def.m_weapon.weapons & 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) - { - // make the item translucent and not touchable - e.model = e.mdl; - e.solid = SOLID_TRIGGER; // can STILL be picked up! - e.effects |= EF_STARDUST; - e.spawnshieldtime = 0; // field indicates whether picking it up may give you anything other than the weapon - e.ItemStatus |= (ITS_AVAILABLE | ITS_STAYWEP); - } else { - //setmodel(e, "null"); - e.solid = SOLID_NOT; - e.colormod = '0 0 0'; - //e.glowmod = e.colormod; - e.spawnshieldtime = 1; - e.ItemStatus &= ~ITS_AVAILABLE; - }} + bool nostay = def.instanceOfWeaponPickup ? !!(def.m_weapon.weapons & 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) + { + // make the item translucent and not touchable + e.model = e.mdl; + e.solid = SOLID_TRIGGER; // can STILL be picked up! + e.effects |= EF_STARDUST; + e.spawnshieldtime = 0; // field indicates whether picking it up may give you anything other than the weapon + e.ItemStatus |= (ITS_AVAILABLE | ITS_STAYWEP); + } + else + { + //setmodel(e, "null"); + e.solid = SOLID_NOT; + e.colormod = '0 0 0'; + //e.glowmod = e.colormod; + e.spawnshieldtime = 1; + e.ItemStatus &= ~ITS_AVAILABLE; + } + } if (def.m_glow) e.ItemStatus |= ITS_GLOW; @@@ -509,7 -510,7 +510,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) || (this.weapons & WEPSET_SUPERWEAPONS)) { float t = Item_ItemsTime_UpdateTime(this, 0); Item_ItemsTime_SetTime(this, t); @@@ -537,6 -538,7 +538,6 @@@ void Item_RespawnCountdown (entity this this.count += 1; if(this.count == 1) { - MUTATOR_CALLHOOK(Item_RespawnCountdown, string_null, '0 0 0'); do { { entity wi = Weapons_from(this.weapon); @@@ -555,11 -557,10 +556,11 @@@ } } } while (0); + bool mutator_returnvalue = MUTATOR_CALLHOOK(Item_RespawnCountdown, this); if(this.waypointsprite_attached) { GameItem def = this.itemdef; - if (Item_ItemsTime_SpectatorOnly(def)) + if (Item_ItemsTime_SpectatorOnly(def) && !mutator_returnvalue) WaypointSprite_UpdateRule(this.waypointsprite_attached, 0, SPRITERULE_SPECTATOR); WaypointSprite_UpdateBuildFinished(this.waypointsprite_attached, time + ITEM_RESPAWN_TICKS); } @@@ -594,18 -595,15 +595,18 @@@ 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) && (t - ITEM_RESPAWN_TICKS) > 0) + if ((Item_ItemsTime_Allow(e.itemdef) || (e.weapons & 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.count = 0; - t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime); - Item_ItemsTime_SetTime(e, t); - Item_ItemsTime_SetTimesForAllPlayers(); + if(Item_ItemsTime_Allow(e.itemdef) || (e.weapons & WEPSET_SUPERWEAPONS)) + { + t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime); + Item_ItemsTime_SetTime(e, t); + Item_ItemsTime_SetTimesForAllPlayers(); + } } else { @@@ -613,13 -611,6 +614,13 @@@ e.nextthink = time; e.scheduledrespawntime = time + t; e.wait = time + t; + + if(Item_ItemsTime_Allow(e.itemdef) || (e.weapons & WEPSET_SUPERWEAPONS)) + { + t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime); + Item_ItemsTime_SetTime(e, t); + Item_ItemsTime_SetTimesForAllPlayers(); + } } } @@@ -637,7 -628,7 +638,7 @@@ void Item_ScheduleRespawn(entity e void Item_ScheduleInitialRespawn(entity e) { Item_Show(e, 0); - Item_ScheduleRespawnIn(e, game_starttime - time + ((e.respawntimestart) ? e.respawntimestart : ITEM_RESPAWNTIME_INITIAL(e))); + Item_ScheduleRespawnIn(e, max(0, game_starttime - time) + ((e.respawntimestart) ? e.respawntimestart : ITEM_RESPAWNTIME_INITIAL(e))); } float Item_GiveAmmoTo(entity item, entity player, .float ammotype, float ammomax, float mode) @@@ -883,7 -874,7 +884,7 @@@ LABEL(pickup } }); e = RandomSelection_chosen_ent; - + Item_Show(e, 1); // reset its state so it is visible (extra sendflags doesn't matter, this happens anyway) } else e = this; @@@ -1012,7 -1003,6 +1013,6 @@@ float ammo_pickupevalfunc(entity player switch(it.ammo_field) { - case ammo_shells: need_shells = true; break; case ammo_shells: need_shells = true; break; case ammo_nails: need_nails = true; break; case ammo_rockets: need_rockets = true; break; @@@ -1024,29 -1014,22 +1024,22 @@@ rating = item.bot_pickupbasevalue; } - if (need_shells) - if (item.ammo_shells) - if (player.ammo_shells < g_pickup_shells_max) + if ((need_shells) && (item.ammo_shells) && (player.ammo_shells < g_pickup_shells_max)) c = item.ammo_shells / player.ammo_shells; - if (need_nails) - if (item.ammo_nails) - if (player.ammo_nails < g_pickup_nails_max) + + if ((need_nails) && (item.ammo_nails) && (player.ammo_nails < g_pickup_nails_max)) c = item.ammo_nails / player.ammo_nails; - if (need_rockets) - if (item.ammo_rockets) - if (player.ammo_rockets < g_pickup_rockets_max) + + if ((need_rockets) && (item.ammo_rockets) && (player.ammo_rockets < g_pickup_rockets_max)) c = item.ammo_rockets / player.ammo_rockets; - if (need_cells) - if (item.ammo_cells) - if (player.ammo_cells < g_pickup_cells_max) + + if ((need_cells) && (item.ammo_cells) && (player.ammo_cells < g_pickup_cells_max)) c = item.ammo_cells / player.ammo_cells; - if (need_plasma) - if (item.ammo_plasma) - if (player.ammo_plasma < g_pickup_plasma_max) + + if ((need_plasma) && (item.ammo_plasma) && (player.ammo_plasma < g_pickup_plasma_max)) c = item.ammo_plasma / player.ammo_plasma; - if (need_fuel) - if (item.ammo_fuel) - if (player.ammo_fuel < g_pickup_fuel_max) + + if ((need_fuel) && (item.ammo_fuel) && (player.ammo_fuel < g_pickup_fuel_max)) c = item.ammo_fuel / player.ammo_fuel; rating *= min(2, c); @@@ -1064,16 -1047,17 +1057,17 @@@ float healtharmor_pickupevalfunc(entit float itemarmor = item.armorvalue; float itemhealth = item.health; + if(item.item_group) { itemarmor *= min(4, item.item_group_count); itemhealth *= min(4, item.item_group_count); } - if (itemarmor) - if (player.armorvalue < item.max_armorvalue) + + if (itemarmor && (player.armorvalue < item.max_armorvalue)) c = itemarmor / max(1, player.armorvalue * 2/3 + player.health * 1/3); - if (itemhealth) - if (player.health < item.max_health) + + if (itemhealth && (player.health < item.max_health)) c = itemhealth / max(1, player.health); rating *= min(2, c); @@@ -1370,9 -1354,8 +1364,8 @@@ spawnfunc(item_rockets spawnfunc(item_bullets) { - if(!weaponswapping) - if(autocvar_sv_q3acompat_machineshotgunswap) - if(this.classname != "droppedweapon") + if(!weaponswapping && autocvar_sv_q3acompat_machineshotgunswap && + (this.classname != "droppedweapon")) { weaponswapping = true; spawnfunc_item_shells(this); @@@ -1395,9 -1378,8 +1388,8 @@@ spawnfunc(item_plasma spawnfunc(item_shells) { - if(!weaponswapping) - if(autocvar_sv_q3acompat_machineshotgunswap) - if(this.classname != "droppedweapon") + if(!weaponswapping && autocvar_sv_q3acompat_machineshotgunswap && + (this.classname != "droppedweapon")) { weaponswapping = true; spawnfunc_item_bullets(this); @@@ -1479,10 -1461,9 +1471,9 @@@ void target_items_use(entity this, enti return; } - if (!IS_PLAYER(actor)) - return; - if(IS_DEAD(actor)) + if (!IS_PLAYER(actor) || IS_DEAD(actor)) return; + if(trigger.solid == SOLID_TRIGGER) { EXACTTRIGGER_TOUCH(this, trigger); @@@ -1499,7 -1480,7 +1490,7 @@@ spawnfunc(target_items) { - int n, j; + int n; string s; this.use = target_items_use; @@@ -1517,7 -1498,7 +1508,7 @@@ } else { - for(j = 0; j < n; ++j) + for(int j = 0; j < n; ++j) { if (argv(j) == "unlimited_ammo") this.items |= IT_UNLIMITED_AMMO; else if(argv(j) == "unlimited_weapon_ammo") this.items |= IT_UNLIMITED_WEAPON_AMMO; @@@ -1601,7 -1582,7 +1592,7 @@@ //print(this.netname, "\n"); n = tokenize_console(this.netname); - for(j = 0; j < n; ++j) + for(int j = 0; j < n; ++j) { FOREACH(Weapons, it != WEP_Null && W_UndeprecateName(argv(j)) == it.netname, { it.wr_init(it); @@@ -1926,11 -1907,7 +1917,11 @@@ float GiveItems(entity e, float beginar { .entity weaponentity = weaponentities[slot]; if(_switchweapon & BIT(slot)) - W_SwitchWeapon_Force(e, w_getbestweapon(e, weaponentity), weaponentity); + { + Weapon wep = w_getbestweapon(e, weaponentity); + if(wep != e.(weaponentity).m_switchweapon) + W_SwitchWeapon_Force(e, wep, weaponentity); + } } } diff --combined qcsrc/common/util.qc index c0997bf73a,118d60d23f..91d68f1ba1 --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@@ -24,10 -24,9 +24,9 @@@ */ vector real_origin(entity ent) { - entity e; vector v = ((ent.absmin + ent.absmax) * 0.5); + entity e = ent.tag_entity; - e = ent.tag_entity; while(e) { v = v + ((e.absmin + e.absmax) * 0.5); @@@ -326,7 -325,7 +325,7 @@@ float compressShortVector(vector vec STATIC_INIT(compressShortVector) { float l = 1; - float f = pow(2, 1/8); + float f = (2 ** (1/8)); int i; for(i = 0; i < 128; ++i) { @@@ -414,11 -413,11 +413,11 @@@ string fixPriorityList(string order, fl string mapPriorityList(string order, string(string) mapfunc) { string neworder; - float i, n; + float n; n = tokenize_console(order); neworder = ""; - for(i = 0; i < n; ++i) + for(float i = 0; i < n; ++i) neworder = strcat(neworder, mapfunc(argv(i)), " "); return substring(neworder, 0, strlen(neworder) - 1); @@@ -426,15 -425,12 +425,12 @@@ string swapInPriorityList(string order, float i, float j) { - string s; - float w, n; - - n = tokenize_console(order); + float n = tokenize_console(order); if(i >= 0 && i < n && j >= 0 && j < n && i != j) { - s = ""; - for(w = 0; w < n; ++w) + string s = ""; + for(float w = 0; w < n; ++w) { if(w == i) s = strcat(s, argv(j), " "); @@@ -672,7 -668,6 +668,6 @@@ bool isCaretEscaped(string theText, flo int skipIncompleteTag(string theText, float pos, int len) { - int i = 0, ch = 0; int tag_start = -1; if(substring(theText, pos - 1, 1) == "^") @@@ -680,7 -675,7 +675,7 @@@ if(isCaretEscaped(theText, pos - 1) || pos >= len) return 0; - ch = str2chr(theText, pos); + int ch = str2chr(theText, pos); if(ch >= '0' && ch <= '9') return 1; // ^[0-9] color code found else if (ch == 'x') @@@ -690,7 -685,7 +685,7 @@@ } else { - for(i = 2; pos - i >= 0 && i <= 4; ++i) + for(int i = 2; pos - i >= 0 && i <= 4; ++i) { if(substring(theText, pos - i, 2) == "^x") { @@@ -784,8 -779,7 +779,7 @@@ string find_last_color_code(string s if (start == -1) // no caret found return ""; int len = strlen(s)-1; - int i; - for(i = len; i >= start; --i) + for(int i = len; i >= start; --i) { if(substring(s, i, 1) != "^") continue;