ACHTUNG: AM 2.50.37 oder höher ist zu benutzen !!!
Für alle die schon ein wenig mit der neuen Beta 37 bzw. 45 von Adminmod experimentiert haben oder dies vorhaben habe ich hier eine neue Version des
plugin_logd_lastscout.
Folgende Features wurden ergänzt/erweitert:
vault.ini:
ls_dstyle <x>
x = 0: Anzeige der letzten beiden Player wie in v3.0
x = 1: Anzeige der verbleibenden HP der beiden letzten Player (für alle sichtbar)
x = 2: Anzeige der verbleibenden HP der beiden letzten Player (nur für Tote sichtbar, lebende Player sehen den Schriftzug wie bei x = 0
ls_style <x>
Kann nun auch in der vault.ini vordefiniert werden.
ls_sound <x>
Kann nun auch in der vault.ini vordefiniert werden.
Befehle im Spiel:
admin_ls_dstyle <x>
admin_ls_style <x>
admin_lsaudio_off
admin_lsaudio_on
admin_ls_off
admin_ls_on
Bei der Benutzung eines solchen Befehls wird der entsprechende Eintrag sofort in die vault.ini geschrieben.
Wird vor dem Kompilieren CHATMSG mit 1 definiert:
...
#define CHATMSG 1
...
so werden die Center-/Typesaynachrichten zusätzlich noch im Chat angezeigt.
Code:
/**********************************************************************
** Biohazards Last Scout Plugin v 4.0 *************
*** August 30th 2002 (plugin_logd_lastscout.sma) ************
**** INFO: Wishs good luck to the last man of a team in ***********
***** the current round. It acts on Kills, Teamkills, Dis- **********
****** connection and Suicide. Also works with PodBot 2.5 *********
******* ********
******** Thanks to f[SAM]t for this fine idea ! *******
********* This version plays an additional sound to the looser ******
********** of an '1 vs 1' - battle (Greetz to Ne0z3d for this) *****
*********** THX to Schnuffer for his idea to show the remaining ****
************ HP of the last two players ! ***
************* ATTENTION: AM 2.50.37 or higher is needed !!! **
**********************************************************************/
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_CONSOLE 131072
//////////////////// BEGIN USER SETTINGS ////////////////////
#define ACCESS_LS 1024 // Access level for LastScout commands
#define SHOW_TIME 5 // Duration for showing center-/typesay messages
#define MAX_WAV_LENGTH 30 // Max. namelength of wavefiles in vault.ini
#define DEBUG 0 // 1 - Debug mode on, 0 - Debug mode off
#define CHATMSG 1 // Show chatmessages among center-/typesay messages
//////////////////// END USER SETTINGS ////////////////////
new STRING_VERSION[MAX_DATA_LENGTH] = "4.0";
new sGoodLuckWav[MAX_WAV_LENGTH + 1];
new sWinnerWav[MAX_WAV_LENGTH + 1];
new sLooserWav[MAX_WAV_LENGTH + 1];
new LastMan_CT[MAX_NAME_LENGTH];
new LastMan_T[MAX_NAME_LENGTH];
new bMode = 0;
new bEnabled;
new bAudio;
new Style;
new DuelStyle;
new Anzahl_T;
new Anzahl_CT;
public admin_war(HLCommand,HLData,HLUserName,UserIndex)
{
new Command[MAX_COMMAND_LENGTH];
new Data[MAX_DATA_LENGTH];
new User[MAX_NAME_LENGTH];
new Value;
convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
convert_string(HLData,Data,MAX_DATA_LENGTH);
convert_string(HLUserName,User,MAX_NAME_LENGTH);
Value = strtonum(Data);
if (Value == 1) {
if (bEnabled != 0) {
bEnabled = 0;
selfmessage("LASTSCOUT: Plugin deactivated. Reactivate with 'admin_war 0'");
}
else selfmessage("LASTSCOUT: Plugin already deactivated");
} else if (Value == 0) {
if (bEnabled != 1) {
bEnabled = 1;
selfmessage("LASTSCOUT: Plugin reactivated");
}
else selfmessage("LASTSCOUT: Plugin already activated");
} else {
selfmessage("Value has to be 0 or 1 !");
}
return PLUGIN_HANDLED;
}
public admin_ls_off(HLCommand, HLData, HLUserName, UserIndex)
{
new User[MAX_NAME_LENGTH];
new Text[MAX_TEXT_LENGTH];
convert_string(HLUserName, User, MAX_NAME_LENGTH);
if (bEnabled != 0) {
bEnabled = 0;
set_vaultnumdata("ls_enabled", 0);
say("LASTSCOUT: Plugin has been disabled <<<");
snprintf(Text, MAX_TEXT_LENGTH, "Last Scout Plugin has been disabled by %s", User);
log(Text);
} else
selfmessage("LASTSCOUT: Plugin already disabled");
return PLUGIN_HANDLED;
}
public admin_ls_on(HLCommand, HLData, HLUserName, UserIndex)
{
new User[MAX_NAME_LENGTH];
new Text[MAX_TEXT_LENGTH];
convert_string(HLUserName, User, MAX_NAME_LENGTH);
if (bEnabled != 1) {
bEnabled = 1;
set_vaultnumdata("ls_enabled", 1);
say("LASTSCOUT: Plugin has been enabled <<<");
snprintf(Text, MAX_TEXT_LENGTH, "Last Scout Plugin has been enabled by %s", User);
log(Text);
} else
selfmessage("LASTSCOUT: Plugin already enabled");
return PLUGIN_HANDLED;
}
public admin_lsaudio_off(HLCommand, HLData, HLUserName, UserIndex)
{
new User[MAX_NAME_LENGTH];
convert_string(HLUserName, User, MAX_NAME_LENGTH);
if (bAudio != 0) {
bAudio = 0;
set_vaultnumdata("ls_Audio", 0);
selfmessage("LASTSCOUT: Sound has been disabled");
} else
selfmessage("LASTSCOUT: Sound is already disabled");
return PLUGIN_HANDLED;
}
public admin_lsaudio_on(HLCommand, HLData, HLUserName, UserIndex)
{
new User[MAX_NAME_LENGTH];
convert_string(HLUserName, User, MAX_NAME_LENGTH);
if (bAudio != 1) {
bAudio = 1;
set_vaultnumdata("ls_Audio", 1);
selfmessage("LASTSCOUT: Sound has been enabled");
}
else
selfmessage("LASTSCOUT: Sound is already enabled");
return PLUGIN_HANDLED;
}
public admin_ls_style(HLCommand,HLData,HLUserName,UserIndex)
{
new Command[MAX_COMMAND_LENGTH];
new Data[MAX_DATA_LENGTH];
new User[MAX_NAME_LENGTH];
new Value;
convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
convert_string(HLData,Data,MAX_DATA_LENGTH);
convert_string(HLUserName,User,MAX_NAME_LENGTH);
Value = strtonum(Data);
if (Value == 1) {
Style = 1; // Centersy
set_vaultnumdata("ls_style", 1);
selfmessage("LASTSCOUT: Style changed to 'Centersay'");
}
else if (Value == 2) {
Style = 2; // Typesay
set_vaultnumdata("ls_style", 2);
selfmessage("LASTSCOUT: Style changed to 'Typesay'");
}
else if (Value == 0) {
Style = 0; // disabled
set_vaultnumdata("ls_style", 0);
selfmessage("LASTSCOUT: Style changed to 'disabled'");
}
else {
selfmessage("Value has to be a number between 0 and 2 !");
}
return PLUGIN_HANDLED;
}
public admin_ls_dstyle(HLCommand,HLData,HLUserName,UserIndex)
{
new Command[MAX_COMMAND_LENGTH];
new Data[MAX_DATA_LENGTH];
new User[MAX_NAME_LENGTH];
new Value;
convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
convert_string(HLData,Data,MAX_DATA_LENGTH);
convert_string(HLUserName,User,MAX_NAME_LENGTH);
Value = strtonum(Data);
if (Value == 1) {
DuelStyle = 1;
set_vaultnumdata("ls_duelstyle", 1);
selfmessage("LASTSCOUT: DuelStyle changed to 'Show HP (ALL)'");
}
else if (Value == 2) {
DuelStyle = 2;
set_vaultnumdata("ls_duelstyle", 2);
selfmessage("LASTSCOUT: DuelStyle changed to 'Show HP (DEAD)'");
}
else if (Value == 0) {
DuelStyle = 0;
set_vaultnumdata("ls_duelstyle", 0);
selfmessage("LASTSCOUT: DuelStyle changed to 'Not showing HP'");
}
else {
selfmessage("Value has to be a number between 0 and 2 !");
}
return PLUGIN_HANDLED;
}
public ls_HandleWorld(HLCommand,HLData,HLUserName,UserIndex)
{
if (!bEnabled) {
return PLUGIN_CONTINUE;
}
new Params[MAX_DATA_LENGTH];
convert_string(HLData,Params,MAX_DATA_LENGTH);
switch ( Params[6] )
{
case 'S':
{
bMode = 0;
return PLUGIN_CONTINUE;
}
}
return PLUGIN_CONTINUE;
}
public ls_HandleKill(HLCommand,HLData,HLUserName,UserIndex)
{
ls_LastScout();
return PLUGIN_CONTINUE;
}
public ls_HandleDisconnect(dName, dUID, dWonid, sTeam)
{
ls_LastScout();
return PLUGIN_CONTINUE;
}
public ls_HandleSuicide(sName, sUID, sWonid, sTeam, sWeapon)
{
ls_LastScout();
return PLUGIN_CONTINUE;
}
ls_LastScout()
{
if (!bEnabled)
return PLUGIN_CONTINUE;
Anzahl_T = 0;
Anzahl_CT = 0;
ls_GetPlayerCount();
if (bMode == 0) {
if ((Anzahl_T == 1) && (Anzahl_CT > 1)) {
ls_ShowHim(1, LastMan_T, "");
bMode = 1;
}
else if ((Anzahl_CT == 1) && (Anzahl_T > 1)) {
ls_ShowHim(2, LastMan_CT, "");
bMode = 1;
}
}
if (bMode != 2) {
if ((Anzahl_CT == 1) && (Anzahl_T == 1)) {
ls_ShowHim(0, LastMan_T, LastMan_CT);
bMode = 2;
}
}
if (bAudio == 1) {
if ((Anzahl_CT == 1) && (Anzahl_T == 0)) {
ls_MakeNoise(LastMan_CT, LastMan_T);
bMode = 2;
}
else if ((Anzahl_CT == 0) && (Anzahl_T == 1)) {
ls_MakeNoise(LastMan_T, LastMan_CT);
bMode = 2;
}
}
return PLUGIN_CONTINUE;
}
ls_GetPlayerCount()
{
new maxplayers = maxplayercount();
new i;
new Target[MAX_NAME_LENGTH];
new sAuthId[MAX_AUTHID_LENGTH];
new Team;
new Dead;
for(i=1; i<=maxplayers; i++) {
strinit(Target);
if (playerinfo(i, Target, MAX_NAME_LENGTH, _, sAuthId, Team, Dead))
{
if ((Dead == 0) && (Team == 1)) {
Anzahl_T ++;
strcpy(LastMan_T, Target, MAX_NAME_LENGTH);
}
else if ((Dead == 0) && (Team == 2)) {
Anzahl_CT ++;
strcpy(LastMan_CT, Target, MAX_NAME_LENGTH);
}
}
}
}
ls_MakeNoise(Winner[]= "", Looser[] = "")
{
new maxplayers = maxplayercount();
new i;
new Target[MAX_NAME_LENGTH];
new sAuthId[MAX_AUTHID_LENGTH];
for(i=1; i<=maxplayers; i++) {
strinit(Target);
if (playerinfo(i, Target, MAX_NAME_LENGTH, _, sAuthId)) {
if ((strcmp(Target, Winner) == 0) && (strcmp(sAuthId, "BOT") != 0)) {
playsound(Winner, sWinnerWav);
}
else if ((strcmp(Target, Looser) == 0) && (strcmp(sAuthId, "BOT") != 0)) {
playsound(Looser, sLooserWav);
}
}
}
}
ls_ShowHim(Team, sLastMan[MAX_NAME_LENGTH], sLastMan2[MAX_NAME_LENGTH])
{
new TextMessage[MAX_TEXT_LENGTH];
new Name[MAX_NAME_LENGTH];
new iUserID;
new sAuthId[MAX_AUTHID_LENGTH];
new maxplayers = maxplayercount();
new i;
new iLastManHealth;
new iLastMan2Health;
new Target[MAX_NAME_LENGTH];
if (Team != 0) {
new Digit = random(2);
if (Digit == 0)
snprintf(TextMessage, MAX_TEXT_LENGTH, "%s: I hope you still have a healthpack", sLastMan);
else if (Digit == 1)
snprintf(TextMessage, MAX_TEXT_LENGTH, "%s: All your teammates were killed. Good luck !", sLastMan);
else if (Digit == 2)
snprintf(TextMessage, MAX_TEXT_LENGTH, "%s: Now you are alone. Have fun !", sLastMan);
}
if (Team == 0) {
get_userHealth(sLastMan, iLastManHealth);
get_userHealth(sLastMan2, iLastMan2Health);
if (DuelStyle == 0)
snprintf(TextMessage, MAX_TEXT_LENGTH, "%s vs %s", sLastMan, sLastMan2);
else if (DuelStyle == 1)
snprintf(TextMessage, MAX_TEXT_LENGTH, "%s (%i) vs %s (%i)", sLastMan, iLastManHealth, sLastMan2, iLastMan2Health);
else if (DuelStyle == 2) {
for(i=1; i<=maxplayers; i++) {
strinit(Target);
if (playerinfo(i, Target, MAX_NAME_LENGTH, _, sAuthId)) {
if ((strcmp(Target, sLastMan) == 0) || (strcmp(Target, sLastMan2) == 0)) {
snprintf(TextMessage, MAX_TEXT_LENGTH, "%s vs %s", sLastMan, sLastMan2);
#if CHATMSG
messageex(Target, TextMessage, print_chat);
#endif
if (Style == 1)
messageex(Target, TextMessage, print_pretty);
else if (Style == 2)
messageex(Target, TextMessage, print_tty);
} else {
snprintf(TextMessage, MAX_TEXT_LENGTH, "%s (%i) vs %s (%i)", sLastMan, iLastManHealth, sLastMan2, iLastMan2Health);
#if CHATMSG
messageex(Target, TextMessage, print_chat);
#endif
if (Style == 1)
messageex(Target, TextMessage, print_pretty);
else if (Style == 2)
messageex(Target, TextMessage, print_tty);
}
}
}
}
if (DuelStyle != 2) {
if (Style == 1)
centersay(TextMessage, SHOW_TIME, 20, 255, 20);
else if (Style == 2)
typesay(TextMessage, SHOW_TIME, 20, 255, 20);
#if CHATMSG
say(TextMessage);
#endif
}
}
else if (Team == 1) {
if (Style == 1)
centersay(TextMessage, SHOW_TIME, 255, 20, 20);
else if (Style == 2)
typesay(TextMessage, SHOW_TIME, 255, 20, 20);
#if CHATMSG
say(TextMessage);
#endif
}
else if (Team == 2) {
if (Style == 1)
centersay(TextMessage, SHOW_TIME, 20, 20, 255);
else if (Style == 2)
typesay(TextMessage, SHOW_TIME, 20, 20, 255);
#if CHATMSG
say(TextMessage);
#endif
}
if (bAudio == 1) {
for(i=1; i<=maxplayers; i++) {
strinit(Name);
if (playerinfo(i, Name, MAX_NAME_LENGTH, iUserID, sAuthId)) {
if ((strcmp(Name, sLastMan) == 0) && (strcmp(sAuthId, "BOT") != 0)) {
playsound(Name, sGoodLuckWav);
}
else if ((strcmp(Name, sLastMan2) == 0) && (strcmp(sAuthId, "BOT") != 0)) {
playsound(Name, sGoodLuckWav);
}
}
}
}
}
ls_initialize()
{
new iDuelStyle;
new iStyle;
new iAudio;
new iWar;
new iEnabled;
if (get_vaultnumdata("ls_duelstyle", iDuelStyle) == 1) {
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: Vault.ini - ls_duelstyle^n");
printf("DEBUG: (Integer):^t%d^n", iDuelStyle);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
DuelStyle = iDuelStyle;
} else {
DuelStyle = 1;
set_vaultnumdata("ls_duelstyle", 1);
}
if (get_vaultnumdata("ls_style", iStyle) == 1) {
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: Vault.ini - ls_style^n");
printf("DEBUG: (Integer):^t%d^n", iStyle);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
Style = iStyle;
} else {
Style = 1;
set_vaultnumdata("ls_style", 1);
}
if (get_vaultnumdata("ls_audio", iAudio) == 1) {
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: Vault.ini - ls_audio^n");
printf("DEBUG: (Integer):^t%d^n", iAudio);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
if (iAudio == 0) {
bAudio = 0;
} else {
bAudio = 1;
}
} else {
bAudio = 1;
set_vaultnumdata("ls_audio", 1);
}
if (get_vaultnumdata("war", iWar) == 1) {
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: Vault.ini - war^n");
printf("DEBUG: (Integer):^t%d^n", iWar);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
if (iWar == 1) {
bEnabled = 0;
return PLUGIN_HANDLED;
}
}
if (get_vaultnumdata("ls_enabled", iEnabled) == 1) {
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: Vault.ini - ls_enabled^n");
printf("DEBUG: (Integer):^t%d^n", iEnabled);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
if (iEnabled == 1) {
bEnabled = 1;
} else {
bEnabled = 0;
}
} else {
bEnabled = 0;
set_vaultnumdata("ls_enabled", 0);
}
if (get_vaultdata("ls_goodluckwav", sGoodLuckWav, MAX_WAV_LENGTH) == 1) {
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: Vault.ini - ls_goodluckwav^n");
printf("DEBUG: (String):^t%s^n", sGoodLuckWav);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
} else {
strcpy(sGoodLuckWav, "misc/force.wav", MAX_WAV_LENGTH);
set_vaultdata("ls_goodluckwav", "misc/force.wav");
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: ls_goodluckwav does not exist^n");
printf("DEBUG: using default^n");
printf("DEBUG: (String):^t%s^n", sGoodLuckWav);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
}
if (get_vaultdata("ls_winnerwav", sWinnerWav, MAX_WAV_LENGTH) == 1) {
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: Vault.ini - ls_winnerwav^n");
printf("DEBUG: (String):^t%s^n", sWinnerWav);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
} else {
strcpy(sWinnerWav, "misc/theone.wav", MAX_WAV_LENGTH);
set_vaultdata("ls_winnerwav", "misc/theone.wav");
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: ls_winnerwav does not exist^n");
printf("DEBUG: using default^n");
printf("DEBUG: (String):^t%s^n", sWinnerWav);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
}
if (get_vaultdata("ls_looserwav", sLooserWav, MAX_WAV_LENGTH) == 1) {
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: Vault.ini - ls_looserwav^n");
printf("DEBUG: (String):^t%s^n", sLooserWav);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
} else {
strcpy(sLooserWav, "misc/suck.wav", MAX_WAV_LENGTH);
set_vaultdata("ls_looserwav", "misc/suck.wav");
///////////////////////////// DEBUG START //////////////////////////////
#if DEBUG
printf("^nDEBUG: -----------------------------^n");
printf("DEBUG: ls_looserwav does not exist^n");
printf("DEBUG: using default^n");
printf("DEBUG: (String):^t%s^n", sLooserWav);
printf("DEBUG: -----------------------------^n");
#endif
////////////////////////////// DEBUG END ///////////////////////////////
}
return PLUGIN_CONTINUE;
}
public plugin_init()
{
plugin_registerinfo("Biohazards LastScout Plugin ","Wishs good luck to the last man standing.",STRING_VERSION);
plugin_registercmd("ls_HandleKill", "ls_HandleKill", ACCESS_CONSOLE);
plugin_registercmd("ls_HandleWorld", "ls_HandleWorld", ACCESS_CONSOLE);
plugin_registercmd("ls_HandleDisconnect", "ls_HandleDisconnect", ACCESS_CONSOLE);
plugin_registercmd("ls_HandleSuicide", "ls_HandleSuicide", ACCESS_CONSOLE);
plugin_registercmd("admin_ls_off", "admin_ls_off", ACCESS_LS, "admin_ls_off: Turns off LastScout plugin.");
plugin_registercmd("admin_ls_on", "admin_ls_on", ACCESS_LS, "admin_ls_on: Turns on LastScout plugin.");
plugin_registercmd("admin_lsaudio_off", "admin_lsaudio_off", ACCESS_LS, "admin_lsaudio_off: No audio in LastScout plugin.");
plugin_registercmd("admin_lsaudio_on", "admin_lsaudio_on", ACCESS_LS, "admin_lsaudio_on: Use audio in LastScout plugin.");
plugin_registercmd("admin_ls_style", "admin_ls_style", ACCESS_LS, "admin_ls_style: Sets the style of messages for LastScout plugin.");
plugin_registercmd("admin_ls_dstyle", "admin_ls_dstyle", ACCESS_LS, "admin_ls_dstyle: Sets the style of 1-vs-1 messages for LastScout plugin.");
plugin_registercmd("admin_war", "admin_war", ACCESS_LS, "admin_war: Deactivates LastScout plugin for a clanwar.");
exec( "logd_reg 57 admin_command ls_HandleKill" );
exec( "logd_reg 62 admin_command ls_HandleWorld" );
exec( "logd_reg 52 admin_command ls_HandleDisconnect" );
exec( "logd_reg 53 admin_command ls_HandleSuicide" );
ls_initialize();
return PLUGIN_CONTINUE;
}
Entweder ihr kopiert den Quellcode hier und kompiliert ihn selber, oder aber ihr ladet euch alles zusammen als ZIP herunter:
www.ekclan.de/plugins/plugin_logd_lastscout_v4_0.zip
Viel Spaß damit... Bio