Giter Site home page Giter Site logo

vsh2-devs / vs-saxton-hale-2 Goto Github PK

View Code? Open in Web Editor NEW
49.0 12.0 16.0 45.77 MB

VSH2 is a rewrite of the original VSH, meant to combine the best of VSH and FF2.

Home Page: https://forums.alliedmods.net/showthread.php?t=286701

SourcePawn 99.80% Batchfile 0.01% PowerShell 0.12% Shell 0.07%
vsh bosses sourcepawn add-bosses

vs-saxton-hale-2's Introduction

VSH2 Logo by Nergal/Assyrianic

Current STABLE Version: 2.0.5

Master Build Status

Current DEVELOPMENT Version: 2.13.0

Develop Build Status

Current DEVELOPMENT STATUS updated 12/6/23

Transitioning devs, documenting and testing 2.13 for final fixes for release.

VSH2 Addons Repository

NOTICE: This readme will be updated soon. Thank you for your patience!

VSH2 is a rewrite of VSH1. VSH1 and FF2 both had a very bad gamemode framework using shoddy, hacky coding. I could even go as far to say they probably had no framework at all nor any real structure to its code.

VSH2 actually has a structured, event-based framework which combines the best features of both FF2 and VSH1 by not only having multiplayer boss support but also to make it easier to add new bosses and give them truly unique abilities & mechanics through giving the developer full, uninhibited control by code rather than strictly config files.

FF2's purpose was to be very easy to add bosses in a generic, cookie-cutter manner. Of course there's a trade off: FF2 is alot more difficult, if not impossible, to truly customize boss mechanics & abilities without having to recode parts of FF2 itself. VSH2, since it requires at least some experience with SourcePawn, is somewhat more difficult for a newbie to create new bosses than if they were to use FF2 but choosing VSH2 rewards taking the harder route by allowing you to control damn near every individual boss behavior and logic.

If you do require help in setting up the bosses or at least need some info on the API for boss building, then take advantage of VSH2's vast API by having a look at the VSH2 wiki

NB: VSH2 will work perfectly fine as-is out of the box as a VSH1 replacement, but it was designed with capable SourcePawn developers in mind to make the most out of the coded-from-scratch framework!

Why VSH2?

  • VSH2 was created to facilitate easier boss additions to a VSH-esque gamemode while having extensive customisation capabilities, even more so than FF2.
  • VSH2 operates through a series of Event Handling functions across different Boss, non-Boss actions, and clear cut API which allows developers to control boss code at will and with ease.
  • VSH2's game state is controlled through a singleton instance of the VSHGameMode methodmap which allows for easier management of the entire gamemode's state.
  • VSH2 has a vast API to build bosses as wide reaching as your imagination and TF2's limitations!
  • 'ConfigMap' allows you to not only have the power of VSH2's API but have FF2-like configuration for a powerful combination of customization through code and config alike.

How do I get set up?

  • VSH2 uses the same map configurations as FF2 and VSH1 and this is for compatibility reasons.
  • Dependencies: TF2Items, MoreColors, ConfigMap (MoreColors + ConfigMap are part of VSH2 repo).
  • Optional Dependencies: TF2Attributes, SteamTools
  • Compile the VSH2 script code with spcomp or upload the prebuild SMX binaries; which ever method you use, move the SMX binaries to your server's SourceMod 'plugins' directory (addons/sourcemod/plugins).
  • Move the config files into addons/sourcemod/configs. Make sure to keep the folder structure that's in the configs.
  • Move the translations folder into the server translation folder.
  • Read the Wiki to get started making your own boss!
  • If you're moving from FF2 to VSH2, we also have the VSH2-FF2 Compatibility Engine, use this FF2 subplugin library, courtesy of 01Pollux

Credits

Contribution Rules

Code Format:

  • Use New sourcepawn syntax (sourcemod 1.7+).

  • Statements that require parentheses (such as 'if' statements) should have each side of the parentheses spaced out with the beginning parens touching the construct keyword, e.g. construct( code/expression ).

  • Single line comments that convey a message must have 3 slashes: ///.

  • Multi-line comments that convey a message should have an extra beginning star: /**.

  • Properties, functions, & methods smaller than 30 lines of code should have the beginning { brace in K&R C style, for example: ret func() {.

  • Local variable names should be in snake_case.

  • Property names must have a single-letter prefix of their type.

  • Functions, methods, methodmaps, enums, enum values, must be named in PascalCase. Pascal_Case is also acceptable.

  • Enum values used as flags may be upper-case.

  • Named constants rules:

    • Integer constants should be placed in an enum, anonymous enum is fine.
    • Float constants that don't have a fractional part (like: 1.0) should be enum constants that are added with 0.0 at their location(s) of use.
    • Float constants that do have a fraction part (like: 3.14) should be preprocessor defines.
    • string literals should be preprocessor defines.
  • Chained if statements aren't bad but if the data is only ever be one thing at a time, use if-else if statements.

    • if you do if-else if statements on a single piece of data, use a switch statement.
  • Bit fields/flags lets you use a single int as 32 bools. Useful if an element can be multiple aspects at once.

    • 1 << n where n is from 0 to 31.
    • To reverse the above operation. use IntLog2 in int_log.inc: n == IntLog2(1 << n)
  • No pre-increments ++i, i--, Post-Increments only i++, i--

vs-saxton-hale-2's People

Contributors

01pollux avatar assyrianic avatar batfoxkid avatar bottiger1 avatar faxmac avatar hotococoaco avatar joinedsenses avatar mikedekokkie avatar mitchdizzle avatar pheubel avatar scags avatar sopmub avatar starblaster64 avatar tolikcorp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vs-saxton-hale-2's Issues

crazy idea - using an internal interpreter to make sub-sub-plugins for the mod?

basically when VSH2 is running, it'll control boss code through an interpreter to a folder and it will run code according to the boss it is for.

Think the idea of QuakeC for the Quake engine. This idea is basically an alternative to give not only coding power to newbies and server operators but it'll match against FF2's config system by having an easy scripting language.

I'm thinking it'll be a very simple and easy to learn scripting sub-language too.

Name Change?

I was thinking, instead of having the name as "Vs. Saxton Hale 2", it should be renamed to "Super VS. Saxton Hale" aka Super VSH or "Freak Fortress 1" ? lol.

Idea is to set a new name to differentiate it from the original VSH even though it sorta stems from it but the purpose is to emphasize that VSH2 is very different and built with a different purpose.

Errors when all players leave server with VSH2 running

Getting several errors when all players leave a server while VSH2 is running. Lots of invalid client errors.

L 09/25/2016 - 12:55:11: [SM] Exception reported: Invalid client index 0
L 09/25/2016 - 12:55:11: [SM] Blaming: vsh2.smx()
L 09/25/2016 - 12:55:11: [SM] Call stack trace:
L 09/25/2016 - 12:55:11: [SM] [0] ThrowError
L 09/25/2016 - 12:55:11: [SM] [1] Line 40, C:\hlserver\tf\addons\sourcemod\scripting\include\morecolors.inc::CPrintToChat()
L 09/25/2016 - 12:55:11: [SM] [2] Line 1367, modules/handler.sp::_SkipBossPanel()
L 09/25/2016 - 12:55:11: [SM] [4] Call_Finish
L 09/25/2016 - 12:55:11: [SM] [5] Line 639, modules/stocks.inc::DoThink()
L 09/25/2016 - 12:55:11: [SM] Exception reported: Invalid client index 0
L 09/25/2016 - 12:55:11: [SM] Blaming: vsh2.smx()
L 09/25/2016 - 12:55:11: [SM] Call stack trace:
L 09/25/2016 - 12:55:11: [SM] [0] ThrowError
L 09/25/2016 - 12:55:11: [SM] [1] Line 40, C:\hlserver\tf\addons\sourcemod\scripting\include\morecolors.inc::CPrintToChat()
L 09/25/2016 - 12:55:11: [SM] [2] Line 1367, modules/handler.sp::_SkipBossPanel()
L 09/25/2016 - 12:55:11: [SM] [4] Call_Finish
L 09/25/2016 - 12:55:11: [SM] [5] Line 639, modules/stocks.inc::DoThink()
L 09/25/2016 - 12:55:25: [SM] Exception reported: Client index 0 is invalid
L 09/25/2016 - 12:55:25: [SM] Blaming: vsh2.smx()
L 09/25/2016 - 12:55:25: [SM] Call stack trace:
L 09/25/2016 - 12:55:25: [SM] [0] AreClientCookiesCached
L 09/25/2016 - 12:55:25: [SM] [1] Line 110, modules/base.sp::BaseFighter.iPresetType.get()
L 09/25/2016 - 12:55:25: [SM] [2] Line 398, modules/gamemode.sp::VSHGameMode.GetBossType()
L 09/25/2016 - 12:55:25: [SM] [3] Line 135, modules/events.sp::RoundStart()

weird middle-of-round fake boss interrupt

uncommonly, sometimes the mod bugs out and the person to be the boss has the model applied but doesn't lose their items or have any boss code running, so it looks like a normal player with a boss model on them and their class weapons.

Bosses suiciding as soon as the round starts

I think the VSH1 code to block boss suiciding and joining red team should work in this case.

I was going to do the code myself but I'm tied as I need to remake my server since my community owner wiped it >_>

Cannot evaluate the square root of a negative number (val: -x)

L 09/04/2016 - 11:59:21: [SM] Exception reported: Cannot evaluate the square root of a negative number (val:-51.000000)
L 09/04/2016 - 11:59:21: [SM] Blaming: vsh2.smx()
L 09/04/2016 - 11:59:21: [SM] Call stack trace:
L 09/04/2016 - 11:59:21: [SM] [0] SquareRoot
L 09/04/2016 - 11:59:21: [SM] [1] Line 656, modules/base.sp::BaseBoss.GiveRage()
L 09/04/2016 - 11:59:21: [SM] [2] Line 734, modules/handler.sp::ManageHurtPlayer()
L 09/04/2016 - 11:59:21: [SM] [3] Line 79, modules/events.sp::PlayerHurt()

Error: Entity index 0 is not a valid client (ManageOnBossTakeDamage)

This happens every time someone uses a specific weapon (taken from the context of the code)

L 12/10/2016 - 13:21:41: [SM] Exception reported: Entity index 0 is not a valid client
L 12/10/2016 - 13:21:41: [SM] Blaming: customPlugins/vsh2.smx
L 12/10/2016 - 13:21:41: [SM] Call stack trace:
L 12/10/2016 - 13:21:41: [SM]   [0] GetPlayerWeaponSlot
L 12/10/2016 - 13:21:41: [SM]   [1] Line 515, modules/handler.sp::ManageOnBossTakeDamage
L 12/10/2016 - 13:21:41: [SM]   [2] Line 647, vsh2.sp::OnTakeDamage

The fix for this is easy, find GetPlayerWeaponSlot(Hale, TFWeaponSlot_Melee); and replace with GetPlayerWeaponSlot(victim.index, TFWeaponSlot_Melee);

Some sounds not precached

Unsure of what sounds aren't being precached, but my test server console is being spammed with
SV_StartSound: not precached (0) from time to time.

Bugs with Demoman targe

  1. Targe will break on hit even if Demoman under ubercharge.
  2. Arrows don't break targe on hit and do damage even if targe is not broken.

Latest dev version.

Error: Cowardly refusing to add invalid attribute index "0" to an item (BaseFighter.SpawnWeapon)

Sometimes when spawning new weapons, this happens.

L 12/10/2016 - 17:02:47: [SM] Exception reported: Cowardly refusing to add invalid attribute index "0" to an item.
L 12/10/2016 - 17:02:47: [SM] Blaming: customPlugins/vsh2.smx
L 12/10/2016 - 17:02:47: [SM] Call stack trace:
L 12/10/2016 - 17:02:47: [SM]   [0] TF2Items_SetAttribute
L 12/10/2016 - 17:02:47: [SM]   [1] Line 179, vsh2.sp::TF2Item.SetAttribute
L 12/10/2016 - 17:02:47: [SM]   [2] Line 321, modules/base.sp::BaseFighter.SpawnWeapon
L 12/10/2016 - 17:02:47: [SM]   [3] Line 1477, modules/handler.sp::PrepPlayers
L 12/10/2016 - 17:02:47: [SM]   [5] Call_Finish
L 12/10/2016 - 17:02:47: [SM]   [6] Line 639, modules/stocks.inc::DoThink

The exact cause I'm not sure of, but I'm willing to bet it's ExplodeString returning 1 instead of 0 for some odd reason, either way I'd say it's better to be on the safe side and always ensure that count here is always divides evenly by 2. Which can be done by appending changing ExplodeString(att, " ; ", atts, 32, 32); into ExplodeString(att, " ; ", atts, 32, 32) & (~1);, it uses the bitwise operators to simply strip away uneven numbers if needed, as always just subtracting 1 wont work whereas always doing this will.

'Unusual' rounds

Something I remember being a cool feature of the old OzFur VSH:Remake servers was that they had these randomly (though pretty uncommom) occuring 'Unusual' rounds. They would apply some unique round modifier for the current boss. Examples: http://vssaxtonhale.wikia.com/wiki/Unusual_Bosses
Obviously this would be an optional feature, with a CVAR. It could even just be a framework for round modifiers for server developers.

Error: Property "m_nPlayerCond" not found (entity 241/trigger_hurt) (ManageOnBossTakeDamage)

When a boss takes damage by sources not caused by entities > MaxClients, most notably trigger_hurts, the following happens.

L 12/10/2016 - 14:58:56: [SM] Exception reported: Property "m_nPlayerCond" not found (entity 241/trigger_hurt)
L 12/10/2016 - 14:58:56: [SM] Blaming: customPlugins/vsh2.smx
L 12/10/2016 - 14:58:56: [SM] Call stack trace:
L 12/10/2016 - 14:58:56: [SM]   [0] GetEntProp
L 12/10/2016 - 14:58:56: [SM]   [1] Line 539, E:\Sourcemod\include\tf2_stocks.inc::TF2_IsPlayerInCondition
L 12/10/2016 - 14:58:56: [SM]   [2] Line 360, modules/handler.sp::ManageOnBossTakeDamage
L 12/10/2016 - 14:58:56: [SM]   [3] Line 647, vsh2.sp::OnTakeDamage

A fix would be to cut it short by changing if (attacker <= 0) to if (attacker <= 0 || attacker > MaxClients)

Error: Client index -1 is invalid (ManageFighterThink)

This happens when there's an engineer.

L 12/10/2016 - 15:02:49: [SM] Exception reported: Client index -1 is invalid
L 12/10/2016 - 15:02:49: [SM] Blaming: customPlugins/vsh2.smx
L 12/10/2016 - 15:02:49: [SM] Call stack trace:
L 12/10/2016 - 15:02:49: [SM]   [0] GetClientTeam
L 12/10/2016 - 15:02:49: [SM]   [1] Line 1900, modules/handler.sp::ManageFighterThink
L 12/10/2016 - 15:02:49: [SM]   [2] Line 564, vsh2.sp::Timer_PlayerThink

The enemy check on this line should at least be enemy > 0 and would be better off as enemy > 0 and enemy <= MaxClients .

Change Demoman Shield Crits to scale by Charge meter

Instead of full on 100% crits (which in most cases, is extremely OP for the Demoman), how about having it scale up from no-crits, to mini-crits, and finally regular crits proportionally to the charge meter?

0-35% would be no buff, 35-85% would be minicrits, 85+% would be crits (percentages subject to change under testing, of course), and a broken shield would be crits/minicrits (since they're vulnerable without the shield escape the crits aren't as OP in that case).

EDIT: Add optional CVAR as well, perhaps.

Client index 0 is invalid [vsh2.sp]

L 09/04/2016 - 11:38:32: [SM] Exception reported: Client index 0 is invalid
L 09/04/2016 - 11:38:32: [SM] Blaming: vsh2.smx()
L 09/04/2016 - 11:38:32: [SM] Call stack trace:
L 09/04/2016 - 11:38:32: [SM] [0] GetClientUserId
L 09/04/2016 - 11:38:32: [SM] [1] Line 67, modules/base.sp::BaseFighter.BaseFighter()
L 09/04/2016 - 11:38:32: [SM] [2] Line 557, modules/base.sp::BaseBoss.BaseBoss()
L 09/04/2016 - 11:38:32: [SM] [3] Line 624, C:\hlserver\tf\addons\sourcemod\scripting\vsh2.sp::OnTakeDamage()

Stop engineer from announcing every time he builds

minor issue is that every time an engineer builds, he (idiotically) yells about what he's building and gives away his position. This small code hopefully should silence so that engineers don't screw themselves over.

#include <sourcemod>
#include <sdktools>

char samples[][] = {
    "engineer_autobuildingsentry",
    "engineer_autobuildingteleporter",
    "engineer_autobuildingdispenser",
    "engineer_sentrymoving",
    "engineer_sentrypacking",
    "engineer_sentryplanting"
};

public Plugin myinfo = {
    name = "Block Engineer Announcements",
    author = "Powerlord",
    description = "Shh, I'm buildin' a sentry.",
    version = "1.1",
    url = "https://forums.alliedmods.net/showthread.php?t=191220"
}

public OnPluginStart()
{
    AddNormalSoundHook(EngySoundHook);
}

public Action EngySoundHook(int clients[64], int& numClients, char sample[PLATFORM_MAX_PATH], int& entity, int& channel, float& volume, int& level, int& pitch, int& flags)
{
    int size = sizeof(samples);
    for (int i=0; i<size; i++) {
        if (StrContains(sample, samples[i], false) > -1)
            return Plugin_Handled;
    }
    return Plugin_Continue;
}

Switch to VSH1's method of precaching custom content

I just realized VSH2 isn't using VSH1's PrepareModel/Material/Sound (and other such functions) stocks, which combine adding to the downloads table and precaching into one function.
While I'm addressing #26 I'll work this as well.

Implement some features from BBG's custom FF2 fork?

With the recent closing of BBG's TF2 servers, Shadow93/Koishi has decided to release the source code for their custom FF2 fork to the public.
No harm in browsing through it for any nice features to add to VSH2.

Compile issue

Putting this here for recording purposes, since I've already mentioned it twice before.

The plugin currently will not compile unless you add "modules/" to the path of every #include that references a file within that folder.

Use new Hale/Vagineer models by default

Why not just use the newer models by default? It seems kind of strange to be supporting the older models at all, considering you can't even headshot the old Vagineer model.

remake respawn ticket system from FF2 subplugin for VSH2

apparently, the original creator of vsh and ff2 made a respawn ticket subplugin which was created to address the apparent issues of people getting bored because they died very quickly and had to wait for a new round.

I was thinking of adding that as an internal feature managed by the gamemode manager and enabled by cvar.

as far as I know, the mechanics for the respawn ticket was that RED team had a limited number of respawns that was shared by everybody and each person could stake a claim to the tickets unless they were all used up.

Each claimed "ticket" was then called on a timer to respawn the ticket claimers all at one time.

https://forums.alliedmods.net/showthread.php?t=257728

Error: Client is not in game (ManageDisconnect)

Sometimes the following shows up in our error logs

L 12/10/2016 - 11:56:15: [SM] Exception reported: Client 1 is not in game
L 12/10/2016 - 11:56:15: [SM] Blaming: customPlugins/vsh2.smx
L 12/10/2016 - 11:56:15: [SM] Call stack trace:
L 12/10/2016 - 11:56:15: [SM]   [0] IsPlayerAlive
L 12/10/2016 - 11:56:15: [SM]   [1] Line 90, modules/handler.sp::ManageDisconnect
L 12/10/2016 - 11:56:15: [SM]   [2] Line 438, vsh2.sp::OnClientDisconnect

A possible fix is to add IsClientInGame prior to IsPlayerAlive, or around depending on what should be run only when the client is In Game, in ManageDisconnect in handler.sp. A client disconnecting does not equate to them being in-game, it only means they were at least connected.

Modify Cap Points

Would it be worth borrowing some Arena:Respawn code to make caps not an instant win on the first cap (maybe after 3 caps or something)?
Or is this the sort of thing that should just be left to server operators.
I'm asking because I just finished a working (albeit kind of spaghetti-coded) version of Chdata's unimplemented Cap Point idea that did effects on cap rather than win the round in my branch of VSH1.

replace methodmap global vars with StringMap equivalent

This is an enhance that I'm planning myself to do, basically gonna replace the backing variables for the methodmaps with StringMaps (aka dictionaries) for the sake of organization and faster code updating.

The benefit to this is that, since dictionaries have O(1) time for all necessary operations in this case, we won't lose much needed speed performance.

I'm putting this as an issue so I can remind myself to do it.

Compiler Warnings (Tag Mismatch and Symbol is Never Used)

Compiling vsh2.sp...
SourcePawn Compiler 1.8.0.5967
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2015 AlliedModders LLC

modules/handler.sp(101) : warning 213: tag mismatch
modules/handler.sp(118) : warning 213: tag mismatch
modules/handler.sp(118) : warning 213: tag mismatch
modules/handler.sp(126) : warning 213: tag mismatch
modules/handler.sp(153) : warning 213: tag mismatch
modules/handler.sp(169) : warning 213: tag mismatch
modules/handler.sp(183) : warning 213: tag mismatch
modules/handler.sp(197) : warning 213: tag mismatch
modules/handler.sp(221) : warning 213: tag mismatch
modules/handler.sp(279) : warning 213: tag mismatch
modules/handler.sp(293) : warning 213: tag mismatch
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnBossDealDamage"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnBossHealthCheck"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnBossJarated"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnBossKillBuilding"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnBossMedicCall"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnBossPickUpItem"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnBossTakeDamage"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnBossTaunt"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnControlPointCapped"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnHookSound"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnLastPlayer"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnMessageIntro"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnMusic"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnPlayerAirblasted"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnPlayerKilled"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnPrepRedTeam"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnRedPlayerThink"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnRoundEndInfo"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnUberDeployed"
vsh2.sp(1400) : warning 203: symbol is never used: "Call_OnVariablesReset"

add support for medieval mode.

Original VSH had a planned thing for medieval mode maps or servers but was never implemented.

The original mechanic was that medieval mode maps/servers would give players 3 lives since it was melee only.

RoundEnd bugging out

occasionally and sometimes frequently, the RoundEnd code doesn't run. Problem with this is that the boss' queue points don't return to 0 and the person who was the boss when this occurs infinitely becomes the boss unless they reset their queue points manually.

Enhanced Class/Boss Info Panels

I've been considering this idea for a while, and decided it can't hurt to put it here.

So historically the info panels for class and boss information have been a bit messy, and also restricted by a character limit.

I was thinking that for the class info panels, we could do something like what Custom Weapons 3 does custom weapon info. Split it into weapon slots and passive class abilities (like the optional life regen CVAR), and have a seperate section for the current boss, so you can see what you're fighting against.

Instead of the current message that pops up at the start of a round, a menu will display with your currently equipped weapons and class.
Perhaps as an extra feature add an extra menu that you can use to browse all weapons/classes.

Haven't thought about the boss panels too much, but I guess it could just be set up in 3 categories for boss devs to work with however they want; Weapon(s), abilities, and stats (like if the boss has less HP or multiple lives). Also maybe a bio section, like VSH1 sorta kinda has.
Again, potentially have it be possible to look through all the boss panels of bosses currently in the server with another command.

I don't know if using translation files or leaving in the plugin itself would be more convenient for developers to edit for this, personally not a fan of translation files but it would allow for multi-language support for devs.

I don't know if this would be too much effort for not much gain, but I think the people who do read the class/boss info panels would appreciate it.

Error: Client index is not valid (StunHHH)

Happens sometimes when playing as HHH, special conditions I didn't feel like looking into.

L 12/10/2016 - 15:42:47: [SM] Exception reported: Client index 64 is not valid
L 12/10/2016 - 15:42:47: [SM] Blaming: customPlugins/vsh2.smx
L 12/10/2016 - 15:42:47: [SM] Call stack trace:
L 12/10/2016 - 15:42:47: [SM]   [0] TF2_StunPlayer
L 12/10/2016 - 15:42:47: [SM]   [1] Line 347, modules/bosses/hhh.sp::StunHHH
L 12/10/2016 - 15:42:47: [SM]   [3] Call_Finish
L 12/10/2016 - 15:42:47: [SM]   [4] Line 639, modules/stocks.inc::DoThink

The cause is using userid where index should be used, change userid in TF2_StunPlayer(userid, ...) to client.

Fix TF2Attributes not being an Optional dependency

So it IS optional on compile, but it is not optional to NOT run the TF2Attbs plugin if VSH2 was compiled with it.

To fix it, we just need to make a copy paste of the SteamTools enabled bool for TF2Attbs, then apply it in the same way VSH1 has done.

Realtime player damage listing in HUD

basically if you know the plugin called "haledmg on", this is the same thing but making it internal and hardcoded to the plugin. I'll add a cvar that turns it off or on with on being default.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.