16.01.2017, 22:29
I'm keeping a list of my suggestions (some of them I have already mentioned), but I'll go ahead and post it anyway.
» Returning 0 under OnPlayerTakeDamage should negate all damage
Let's say you want to implement your own damage system (more precisely: handle death events your way). Currently, the only reliable way to achieve invulnerability is by setting the player's health very high. The problem with that is, that you can't base a damage system on this, since the health bars will always be shown to be full. Slice bypassed this with showing the player a custom textdraw-based health bar and sending fake health data to all players. That way, a player can have a health bar displaying anything below full HP and still be invulnerable.
» Create3DProgressBar(...)
This is an alternative to returning 0 under OnPlayerTakeDamage. Scripters could just use ShowNameTags(0) to hide all nametags, health and armor bars and attach a 3D progress bar to every player. Player's health could be set to infinity, and the serverside progress bar could display something else.
» "letterspacing" parameter for 3D text labels
This is the second alternative to returning 0 under OnPlayerTakeDamage. This parameter would effectively allow scripters to create character-based progress bars in 3D space. By moving the characters of a 3D text label closer together, one could create the illusion of a progress bar and keep it fairly small in size. With the current letter spacing, in order to make the bars somewhat accurate, they turn out way too long.
» OnVehicleTakeDamage(...) (+ returning 0 negating all damage)
Allows for custom vehicle damage system, e.g. damage unoccupied vehicles, damage vehicles with a passenger but no driver.
» OnTextDrawHover(...) & OnPlayerTextDrawHover(...)
Great for static tooltips.
» Mapicon macros for the chat and for 3D text labels
Adds to visual language.
» AttachMapiconToPlayer(...), AttachMapiconToVehicle(...), AttachMapiconToObject(...)
Of course, this can be done by setting a mapicon to a player's position under OnPlayerUpdate. But why not, considering you could have also argued that way about moving an object?
» Split ShowNameTags into Show/HideHealthBars(...), Show/HideArmourBars(...) and Show/HideNameTags(...)
» Split ShowPlayerNameTagForPlayer into Show/HidePlayerHealthBarForPlayer(...), Show/HidePlayerArmourBarForPlayer(...) and Show/HidePlayerNameTagForPlayer(...)
Adds some more customizability.
» SetPlayerCameraMode(...), TogglePlayerCameraMode(...)
Can already be done by attaching the player's camera to an object, but why not have it this way if there already are camera modes?
» GetPlayerLungCapacity(...) and SetPlayerLungCapacity(...)
Underwater gameplay is not exactly where this game shines, but nevertheless, this opens up a ton of new possibilities.
» GetPlayerStamina(...) and SetPlayerStamina(...)
Constantly having to kill myself off to recharge my stamina made me want to ask for this.
» SetPlayerMaxHealth(...)
Health levels from singleplayer with extended health bar size.
» EnableTeargasCoughing()
Why not make it optional?
» EnableVehicleDirt()
Why not make it optional?
» Returning 0 under OnPlayerTakeDamage should negate all damage
Let's say you want to implement your own damage system (more precisely: handle death events your way). Currently, the only reliable way to achieve invulnerability is by setting the player's health very high. The problem with that is, that you can't base a damage system on this, since the health bars will always be shown to be full. Slice bypassed this with showing the player a custom textdraw-based health bar and sending fake health data to all players. That way, a player can have a health bar displaying anything below full HP and still be invulnerable.
» Create3DProgressBar(...)
This is an alternative to returning 0 under OnPlayerTakeDamage. Scripters could just use ShowNameTags(0) to hide all nametags, health and armor bars and attach a 3D progress bar to every player. Player's health could be set to infinity, and the serverside progress bar could display something else.
» "letterspacing" parameter for 3D text labels
This is the second alternative to returning 0 under OnPlayerTakeDamage. This parameter would effectively allow scripters to create character-based progress bars in 3D space. By moving the characters of a 3D text label closer together, one could create the illusion of a progress bar and keep it fairly small in size. With the current letter spacing, in order to make the bars somewhat accurate, they turn out way too long.
» OnVehicleTakeDamage(...) (+ returning 0 negating all damage)
Allows for custom vehicle damage system, e.g. damage unoccupied vehicles, damage vehicles with a passenger but no driver.
» OnTextDrawHover(...) & OnPlayerTextDrawHover(...)
Great for static tooltips.
» Mapicon macros for the chat and for 3D text labels
Adds to visual language.
» AttachMapiconToPlayer(...), AttachMapiconToVehicle(...), AttachMapiconToObject(...)
Of course, this can be done by setting a mapicon to a player's position under OnPlayerUpdate. But why not, considering you could have also argued that way about moving an object?
» Split ShowNameTags into Show/HideHealthBars(...), Show/HideArmourBars(...) and Show/HideNameTags(...)
» Split ShowPlayerNameTagForPlayer into Show/HidePlayerHealthBarForPlayer(...), Show/HidePlayerArmourBarForPlayer(...) and Show/HidePlayerNameTagForPlayer(...)
Adds some more customizability.
» SetPlayerCameraMode(...), TogglePlayerCameraMode(...)
Can already be done by attaching the player's camera to an object, but why not have it this way if there already are camera modes?
» GetPlayerLungCapacity(...) and SetPlayerLungCapacity(...)
Underwater gameplay is not exactly where this game shines, but nevertheless, this opens up a ton of new possibilities.
» GetPlayerStamina(...) and SetPlayerStamina(...)
Constantly having to kill myself off to recharge my stamina made me want to ask for this.
» SetPlayerMaxHealth(...)
Health levels from singleplayer with extended health bar size.
» EnableTeargasCoughing()
Why not make it optional?
» EnableVehicleDirt()
Why not make it optional?