From 97e7713b729981081e3001db2c2e7b152298b109 Mon Sep 17 00:00:00 2001 From: "Hello=)" Date: Wed, 10 Apr 2024 20:52:45 +0300 Subject: Boss Actions: add permissions checks. Boss/event spells are GM >= 40 by default. --- world/map/npc/magic/_procedures.txt | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt index c50f0ab5..601d5b15 100644 --- a/world/map/npc/magic/_procedures.txt +++ b/world/map/npc/magic/_procedures.txt @@ -97,36 +97,47 @@ L_Return: // this function is call()-only // Custom version of checks for Dungeon Masters boss "powerups". -// Both GMs and player eventers MAY eventually call boss powerups. -// That's why GM Lv check removed, some things relaxed. -// Its up to powerup "spell" itself to check who can call it or why. +// Both GMs and player eventers MAY eventually call "boss powerups". +// By default, only GMs >= 40 can use BossPowers, but: +// - If someone abuses BossPowers, setting #BOSS_POWERS_DISABLED = 1 on them locks them out. +// - Some (trusted) player can be allowed to invoke this by setting #IS_EVENTER = 42 on them. +// On TMWA these changes need GM Lv 80 to issue @setvar, so access can only be changed by Lv 80. +// Advantage of this permissions system is: no need to shuffle GM levels, nor there's need to restart server. function|script|boss_powerup_checks { set .@flags, getarg(0); set .@nonmagic, .@flags & (1<<0); - if ($BOSS_KILLSWITCH) goto L_Killswitch; // If things go wrong direction, boss powers can be disabled. - if(HIDDEN) goto L_Hidden; // can not cast with @hide - if(@_M_BLOCK) goto L_Blocked; // check if last debuff ended - if(Hp < 1) goto L_Dead; // can not cast when dead - return 0; + if ($BOSS_KILLSWITCH) goto L_Killswitch; // If things go wrong, boss powers can be completely disabled. + if (#BOSS_POWERS_DISABLED) goto L_Killswitch; // If someone abuses BossPowers they can get DENY flag set. + if (HIDDEN) goto L_Hidden; // can not cast with @hide + if (@_M_BLOCK) goto L_Blocked; // check if last debuff ended + if (Hp < 1) goto L_Dead; // can not cast when dead + if (GM >= 40) goto L_Allowed; // GM >= 40 can use boss actions + if (#IS_EVENTER == 42) goto L_Allowed; // Trusted player(s) could be allowed to access Eventer "magic": + // Use @setvar #IS_EVENTER 0 42 Nick (GM Lv 80 command) to do it. + smsg SMSG_FAILURE, "BossPowers: Only few of mere mortals may try to enter the twilight zone"; + return 1; // Not allowed by default. + +L_Allowed: + return 0; // Whoever gets here allowed to invoke BossPowers spells L_Killswitch: smsg SMSG_FAILURE, "BossPowers: disabled by kill switch!"; - return 7; + return 2; L_Hidden: smsg SMSG_FAILURE, "BossPowers: can't be used when hidden!"; - return 1; + return 3; L_Blocked: smsg SMSG_FAILURE, "BossPowers: cooldown is in effect. Please wait."; - return 2; + return 4; L_Dead: smsg SMSG_FAILURE, "BossPowers: you're dead!"; - return 3; + return 5; } function|script|elt_damage -- cgit v1.2.3-70-g09d2