From: Mario Date: Tue, 14 Jul 2020 07:56:35 +0000 (+1000) Subject: Merge branch 'master' into Mario/gametypes X-Git-Tag: xonotic-v0.8.5~855^2~3 X-Git-Url: https://git.xonotic.org/?a=commitdiff_plain;h=be255d5426e17de0dc4beb8c423e780ebd9e617b;hp=08d6d22d3dc48e03c7444c6cb0bf0aafa1f8b978;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into Mario/gametypes --- diff --git a/.tx/merge-base b/.tx/merge-base index 1f86186fc..25aec9d46 100644 --- a/.tx/merge-base +++ b/.tx/merge-base @@ -1 +1 @@ -Sat Jul 11 07:23:51 CEST 2020 +Mon Jul 13 07:23:53 CEST 2020 diff --git a/common.ja_JP.po b/common.ja_JP.po index 134e38145..c102ee387 100644 --- a/common.ja_JP.po +++ b/common.ja_JP.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: Xonotic\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-07 07:23+0200\n" -"PO-Revision-Date: 2020-07-10 18:07+0000\n" +"PO-Revision-Date: 2020-07-12 22:38+0000\n" "Last-Translator: LegendGuard\n" "Language-Team: Japanese (Japan) (http://www.transifex.com/team-xonotic/" "xonotic/language/ja_JP/)\n" @@ -1312,7 +1312,7 @@ msgstr "デスマッチ (DM)" #: qcsrc/common/mapinfo.qh:115 msgid "Score as many frags as you can" -msgstr "できるだけ多くの削除を得点する" +msgstr "できるだけ多くの削除を得点して" #: qcsrc/common/mapinfo.qh:128 msgid "Last Man Standing" @@ -3318,6 +3318,7 @@ msgstr "" msgid "" "^BG%s%s^K1 almost dodged ^BG%s^K1's Overkill Rocket Propelled Chainsaw%s%s" msgstr "" +"^BG%s%s^K1 は ^BG%s^K1 のオーバーキルロケット推進チェーンソー%s%sをほぼ避けた" #: qcsrc/common/notifications/all.inc:490 #, c-format @@ -3477,6 +3478,8 @@ msgid "" "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n" "^BGMake some defensive scores before trying again." msgstr "" +"^BGあなたは取るしようとして^F2失敗した回数が多すぎる^BGため、\n" +"旗から^F1守っていた^BG。再試行する前にいくつかの防御得点を作成してください。" #: qcsrc/common/notifications/all.inc:549 msgid "^BGYou captured the ^TC^TT^BG flag!" diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index 99456bd3e..f08378b6a 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -133,6 +133,9 @@ void CSQCPlayer_ModelAppearance_PostUpdate(entity this) } void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) { + int cm = this.forceplayermodels_savecolormap; + cm = (cm >= 1024) ? cm : (entcs_GetClientColors(cm - 1) + 1024); + if(MUTATOR_CALLHOOK(ForcePlayermodels_Skip, this, islocalplayer)) goto skipforcemodels; @@ -193,9 +196,6 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) // apply it bool isfriend; - int cm; - cm = this.forceplayermodels_savecolormap; - cm = (cm >= 1024) ? cm : (entcs_GetClientColors(cm - 1) + 1024); if(teamplay) isfriend = (cm == 1024 + 17 * myteam); @@ -227,6 +227,11 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) this.skin = this.forceplayermodels_saveskin; } + LABEL(skipforcemodels) + + if(MUTATOR_CALLHOOK(ForcePlayercolors_Skip, this, islocalplayer)) + goto skipforcecolors; + // forceplayercolors too if(teamplay) { @@ -280,7 +285,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) this.colormap = player_localnum + 1; } - LABEL(skipforcemodels) + LABEL(skipforcecolors) if((this.csqcmodel_effects & CSQCMODEL_EF_RESPAWNGHOST) && !autocvar_cl_respawn_ghosts_keepcolors) { diff --git a/qcsrc/client/mutators/events.qh b/qcsrc/client/mutators/events.qh index c324732b2..23bbe00d8 100644 --- a/qcsrc/client/mutators/events.qh +++ b/qcsrc/client/mutators/events.qh @@ -194,13 +194,20 @@ MUTATOR_HOOKABLE(DrawViewModel, EV_DrawViewModel); /** Called when updating the view's liquid contents, return true to disable the standard checks and apply your own */ MUTATOR_HOOKABLE(HUD_Contents, EV_NO_ARGS); -/** Return true to disable player model/color forcing */ +/** Return true to disable player model forcing */ #define EV_ForcePlayermodels_Skip(i, o) \ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ /** is local */ i(bool, MUTATOR_ARGV_1_bool) \ /**/ MUTATOR_HOOKABLE(ForcePlayermodels_Skip, EV_ForcePlayermodels_Skip); +/** Return true to disable player color forcing */ +#define EV_ForcePlayercolors_Skip(i, o) \ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /** is local */ i(bool, MUTATOR_ARGV_1_bool) \ + /**/ +MUTATOR_HOOKABLE(ForcePlayercolors_Skip, EV_ForcePlayercolors_Skip); + /** Called when damage info is received on the client, useful for playing explosion effects */ #define EV_DamageInfo(i, o) \ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index b9dc7c3d2..29588f8ac 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -210,12 +210,12 @@ float Obituary_WeaponDeath( return true; } -bool frag_centermessage_override(entity attacker, entity targ, int deathtype, int kill_count_to_attacker, int kill_count_to_target) +bool frag_centermessage_override(entity attacker, entity targ, int deathtype, int kill_count_to_attacker, int kill_count_to_target, string attacker_name) { if(deathtype == DEATH_FIRE.m_id) { Send_Notification(NOTIF_ONE, attacker, MSG_CHOICE, CHOICE_FRAG_FIRE, targ.netname, kill_count_to_attacker, (IS_BOT_CLIENT(targ) ? -1 : CS(targ).ping)); - Send_Notification(NOTIF_ONE, targ, MSG_CHOICE, CHOICE_FRAGGED_FIRE, attacker.netname, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping)); + Send_Notification(NOTIF_ONE, targ, MSG_CHOICE, CHOICE_FRAGGED_FIRE, attacker_name, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping)); return true; } @@ -230,16 +230,25 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en // Declarations float notif_firstblood = false; float kill_count_to_attacker, kill_count_to_target; + bool notif_anonymous = false; + string attacker_name = attacker.netname; // Set final information for the death targ.death_origin = targ.origin; string deathlocation = (autocvar_notification_server_allows_location ? NearestLocation(targ.death_origin) : ""); + // Abort now if a mutator requests it + if (MUTATOR_CALLHOOK(ClientObituary, inflictor, attacker, targ, deathtype, attacker.(weaponentity))) { CS(targ).killcount = 0; return; } + notif_anonymous = M_ARGV(5, bool); + + if(notif_anonymous) + attacker_name = "Anonymous player"; + #ifdef NOTIFICATIONS_DEBUG Debug_Notification( sprintf( "Obituary(%s, %s, %s, %s = %d);\n", - attacker.netname, + attacker_name, inflictor.netname, targ.netname, Deathtype_Name(deathtype), @@ -300,8 +309,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en CS(attacker).killcount = 0; Send_Notification(NOTIF_ONE, attacker, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAG, targ.netname); - Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAGGED, attacker.netname); - Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(targ.team, INFO_DEATH_TEAMKILL), targ.netname, attacker.netname, deathlocation, CS(targ).killcount); + Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAGGED, attacker_name); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(targ.team, INFO_DEATH_TEAMKILL), targ.netname, attacker_name, deathlocation, CS(targ).killcount); // In this case, the death message will ALWAYS be "foo was betrayed by bar" // No need for specific death/weapon messages... @@ -365,14 +374,14 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en targ, MSG_CHOICE, CHOICE_TYPEFRAGGED, - attacker.netname, + attacker_name, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping) ); } - else if(!frag_centermessage_override(attacker, targ, deathtype, kill_count_to_attacker, kill_count_to_target)) + else if(!frag_centermessage_override(attacker, targ, deathtype, kill_count_to_attacker, kill_count_to_target, attacker_name)) { Send_Notification( NOTIF_ONE, @@ -388,7 +397,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en targ, MSG_CHOICE, CHOICE_FRAGGED, - attacker.netname, + attacker_name, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), @@ -400,8 +409,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en if(deathtype == DEATH_BUFF.m_id) f3 = buff_FirstFromFlags(STAT(BUFFS, attacker)).m_id; - if (!Obituary_WeaponDeath(targ, true, deathtype, targ.netname, attacker.netname, deathlocation, CS(targ).killcount, kill_count_to_attacker)) - Obituary_SpecialDeath(targ, true, deathtype, targ.netname, attacker.netname, deathlocation, CS(targ).killcount, kill_count_to_attacker, f3); + if (!Obituary_WeaponDeath(targ, true, deathtype, targ.netname, attacker_name, deathlocation, CS(targ).killcount, kill_count_to_attacker)) + Obituary_SpecialDeath(targ, true, deathtype, targ.netname, attacker_name, deathlocation, CS(targ).killcount, kill_count_to_attacker, f3); } } diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 8044eaf8e..88d531ae9 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -261,6 +261,7 @@ void cvar_changes_init() BADCVAR("g_ca"); BADCVAR("g_ca_teams"); BADCVAR("g_conquest"); + BADCVAR("g_conquest_teams"); BADCVAR("g_ctf"); BADCVAR("g_cts"); BADCVAR("g_dotc"); @@ -288,6 +289,8 @@ void cvar_changes_init() BADCVAR("g_runematch"); BADCVAR("g_shootfromeye"); BADCVAR("g_snafu"); + BADCVAR("g_survival"); + BADCVAR("g_survival_not_dm_maps"); BADCVAR("g_tdm"); BADCVAR("g_tdm_on_dm_maps"); BADCVAR("g_tdm_teams"); diff --git a/qcsrc/server/mutators/events.qh b/qcsrc/server/mutators/events.qh index a310c6cca..35a8f6fd9 100644 --- a/qcsrc/server/mutators/events.qh +++ b/qcsrc/server/mutators/events.qh @@ -90,6 +90,17 @@ MUTATOR_HOOKABLE(PlayerDies, EV_PlayerDies); /**/ MUTATOR_HOOKABLE(PlayerDied, EV_PlayerDied); +/** called when showing an obituary for the player. return true to show nothing (workarounds may be needed) */ +#define EV_ClientObituary(i, o) \ + /** inflictor */ i(entity, MUTATOR_ARGV_0_entity) \ + /** attacker */ i(entity, MUTATOR_ARGV_1_entity) \ + /** target */ i(entity, MUTATOR_ARGV_2_entity) \ + /** deathtype */ i(float, MUTATOR_ARGV_3_float) \ + /** wep entity */ i(entity, MUTATOR_ARGV_4_entity) \ + /** anonymous killer*/ o(bool, MUTATOR_ARGV_5_bool) \ + /**/ +MUTATOR_HOOKABLE(ClientObituary, EV_ClientObituary); + /** allows overriding the frag centerprint messages */ #define EV_FragCenterMessage(i, o) \ /** attacker */ i(entity, MUTATOR_ARGV_0_entity) \ diff --git a/scripts/cellammo.Shader b/scripts/cellammo.Shader deleted file mode 100644 index 94b1c8878..000000000 --- a/scripts/cellammo.Shader +++ /dev/null @@ -1,9 +0,0 @@ -cellammo -{ - dpreflectcube cubemaps/default/sky - dpoffsetmapping - 0.5 match8 128 - { - map textures/items/cellammo - rgbgen lightingDiffuse - } -} \ No newline at end of file diff --git a/scripts/cellammo.shader b/scripts/cellammo.shader new file mode 100644 index 000000000..0d6197cf7 --- /dev/null +++ b/scripts/cellammo.shader @@ -0,0 +1,9 @@ +cellammo +{ + dpreflectcube cubemaps/default/sky + dpoffsetmapping - 0.5 match8 128 + { + map textures/items/cellammo + rgbgen lightingDiffuse + } +} \ No newline at end of file