Sourcemod Plugins

From Empires Wiki
Revision as of 22:55, 19 March 2017 by Neoony (talk | contribs)
Jump to navigation Jump to search
~Fixme
Everything, making a crude start page right now.

Home > Sourcemod Plugins

Compiling from Source

Thanks to people smarter than me, compiling from source is pretty easy.
Take your source-file or source-text and pop it in this: http://www.sourcemod.net/compiler.php
Download your compiled plugin, and put it in your sourcemod/plugins folder.

Or you can use spcomp.exe inside your sourcemod folders (\addons\sourcemod\scripting\spcomp.exe) (for windows)
Just drag and drop your source-file onto the .exe.

Sourcemod offsets and signatures

Calculating updated sourcemod vtable offsets: https://forums.empiresmod.com/index.php?threads/calculating-updated-sourcemod-vtable-offsets.20571/
Updated game.empires.txt for sdkhooks (16.3.2017 emp 2.11.3): https://forums.empiresmod.com/index.php?attachments/game-empires-txt.1358/

If you have issues with invalid signatures.
Example:

L 03/18/2017 - 00:02:51: [SDKTOOLS] Invalid detour address passed - Disabling detour to prevent crashes
L 03/18/2017 - 00:02:51: [SM] Exception reported: Entity Outputs are disabled - See error logs for details

Replace the linux signatures in sdkhooks and sdktools files with the mac signatures.
This is rather temporary fix and needs testing
Example:

/* CBaseEntityOutput::FireOutput */
	"#default"
	{
		"Signatures"
		{
			"FireOutput"
			{
				"library"	"server"
				"windows"	"\x55\x8B\xEC\x81\x2A\x2A\x2A\x2A\x2A\xA1\x2A\x2A\x2A\x2A\x33\xC5\x89\x45\x2A\x8B\x45\x2A\x53\x56\x8B\x2A\x2A\x57\x8B\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\xC7"
				"linux"		"@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
				"mac"		"@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
			}
		}
	}

End of Round AllTalk

Original Plugin: https://forums.alliedmods.net/showthread.php?p=1246351

#pragma semicolon 1

#include <sourcemod>

#define PLUGIN_VERSION "1.0.2"

new Handle:cvar_round_end_enabled = INVALID_HANDLE;
new Handle:cvar_bomb_enabled = INVALID_HANDLE;
new Handle:cvar_announce = INVALID_HANDLE;
new Handle:cvar_alltalk = INVALID_HANDLE;

new alltalk_being_changed_by_us = false;
new okay_to_disable_alltalk = false;

public Plugin:myinfo = {
  name = "Round-End Alltalk",
  author = "Mister_Magotchi",
  description = "Turns sv_alltalk on at round end or when all Terrorists are dead (in CS:S).",
  version = PLUGIN_VERSION,
  url = "https://forums.alliedmods.net/showthread.php?t=133016"
};

public OnPluginStart() {
  CreateConVar(
    "sm_round_end_alltalk_version",
    PLUGIN_VERSION,
    "Round-End Alltalk Version",
    FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD
  );
  cvar_round_end_enabled = CreateConVar(
    "sm_round_end_alltalk_round",
    "1",
    "Toggles whether alltalk is on at round end",
    FCVAR_PLUGIN
  );
  cvar_bomb_enabled = CreateConVar(
    "sm_round_end_alltalk_bomb",
    "0",
    "Toggles whether alltalk is on when all Terrorists are dead",
    FCVAR_PLUGIN
  );
  cvar_announce = CreateConVar(
    "sm_round_end_alltalk_announce",
    "1",
    "Toggles whether changes to sv_alltalk are announced in chat",
    FCVAR_PLUGIN
  );
  cvar_alltalk = FindConVar("sv_alltalk");
  SetConVarFlags(cvar_alltalk, GetConVarFlags(cvar_alltalk)&~FCVAR_NOTIFY);

  HookConVarChange(cvar_alltalk, AlltalkChanged);
  HookEvent("round_start", OnRoundStart);
  HookEvent("player_death", OnPlayerDeath);
  HookEvent("game_end", OnRoundEnd);
  AutoExecConfig(true, "round-end-alltalk");
}

TurnAlltalkOn () {
//  PrintToChatAll("Alltalk: DEBUG1");
  if (!GetConVarBool(cvar_alltalk)) {
    okay_to_disable_alltalk = true;
    alltalk_being_changed_by_us = true;
    SetConVarBool(cvar_alltalk, true);
  }
}

public AlltalkChanged (Handle:convar, const String:oldValue[], const String:newValue[]) {
//  PrintToChatAll("Alltalk: DEBUG2");
  new bool:announce = GetConVarBool(cvar_announce);
  if (StringToInt(newValue)) {
    if (announce) {
      PrintToChatAll("Alltalk is now on.");
    }
    if (alltalk_being_changed_by_us) {
      alltalk_being_changed_by_us = false;
    }
    else {
      okay_to_disable_alltalk = false;
    }
  }
  else {
    if (announce) {
      PrintToChatAll("Alltalk is now off.");
    }
  }
}

public OnRoundStart (Handle:event, const String:name[], bool:dontBroadcast) {
//  PrintToChatAll("Alltalk: DEBUG3");
  if (okay_to_disable_alltalk) {
    SetConVarBool(cvar_alltalk, false);
  }
}

public OnPlayerDeath (Handle:event, const String:name[], bool:dontBroadcast) {
//  PrintToChatAll("Alltalk: DEBUG4");
  if (GetConVarBool(cvar_bomb_enabled)) {
    new client;
    new bool:terrorists_dead = true;
    for (client = MaxClients; 0 < client; client--) {
      if (IsClientInGame(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2) {
        terrorists_dead = false;
        break;
      }
    }
    if (terrorists_dead) {
      TurnAlltalkOn();
    }
  }
}

public OnRoundEnd (Handle:event, const String:name[], bool:dontBroadcast) {
//  PrintToChatAll("Alltalk: DEBUG5");
  if (GetConVarBool(cvar_round_end_enabled)) {
    TurnAlltalkOn();
  }
}

Chat Triggers

Plugin link: https://forums.alliedmods.net/showthread.php?p=585758
Adds commandlist.txt functionality (From Mani) to SourceMod.
You can easily define chat commands (e.g. !unstuck), to be linked to console commands.

Advertisements 2.0

Plugin link: https://forums.alliedmods.net/showthread.php?t=155705
Simple advertisements plugin. It supports center, chat, hint, menu and top messages.

SourceBans++

(Not tested yet) Plugin link: https://sbpp.github.io/
Unofficial more updated version of SourceBans.
-SourceBans++ is a majorly improved version of SourceBans 1.4.11 which was developed by GameConnect.
Those major improvements include a new design, more stable web application, login via steam account and much more community made customizations.

SourceBot

Original Plugin link: https://forums.alliedmods.net/showthread.php?p=883997
Fixed version by Neoony: https://www.dropbox.com/s/akkdgbrdq0wfw2i/SourceBot%20-%20EmpiresFix%20by%20Neoony.rar?dl=0
EDIT: You dont have to use this fix, if you fix the signatures as noted in offsets category above. And this should be better option.
(Leave empty model path in config, for the bot to not float around)
SourceBot is a bot that you install into your server. You can set it to give helpful server info, or give it a personality, from the things it says.
It floats around the server greeting the players. It has feelings about each player it encounters, and remembers what it feels about each one.

Execute Configs

Plugin link: https://forums.alliedmods.net/showthread.php?t=67620
This plugin executes configs when there are either a certain amount of clients on, a certain event occurs, a certain round starts or when there are a certain amount of minutes left on the map.
You can use this to disable alltalk above x clients, or to change the map when the timelimit hits, etc.