From 52a10115275a1ebed5a9dffb6a5ad4e617054076 Mon Sep 17 00:00:00 2001 From: cclecle Date: Wed, 27 Jul 2022 00:54:39 +0200 Subject: [PATCH] first commit --- Help/SendTo.txt | 238 ++++++++++++++++++++++++++++++++++++++ Help/SendTo_INIFormat.txt | 56 +++++++++ Readme.md | 2 + Redirect/SendTo_v07c.u.uz | Bin 0 -> 10583 bytes Run.sh | 143 +++++++++++++++++++++++ System/SendTo_v07c.u | Bin 0 -> 35283 bytes 6 files changed, 439 insertions(+) create mode 100644 Help/SendTo.txt create mode 100644 Help/SendTo_INIFormat.txt create mode 100644 Readme.md create mode 100644 Redirect/SendTo_v07c.u.uz create mode 100644 Run.sh create mode 100644 System/SendTo_v07c.u diff --git a/Help/SendTo.txt b/Help/SendTo.txt new file mode 100644 index 0000000..4373a7f --- /dev/null +++ b/Help/SendTo.txt @@ -0,0 +1,238 @@ +------------------------------- +SendTo_v07 by {LSN}Meindratheal +------------------------------- +Note: There is also a version of this that works with Nexgen112. If you are running +Nexgen then I would advise you to use NexgenSendToWebsite112 instead. + +----------- +What Is It? +----------- +SendTo enables you to add extra say commands to link to Internet pages, other +servers, and the like. +This is the next incarnation of SendToWebsite. It was renamed because websites +are not the only place you can SendTo now. + + +----------------------- +Installing from scratch +----------------------- +1. Ensure your server is properly shut down. + +2. Copy the following files to your server's System folder: + SendTo_v07c.u + +3. If your server uses file redirect, upload SendTo_v07c.u.uz + to the redirect file server. + +4. Open your server's INI file, and add the following lines to [Engine.GameEngine]: + + ServerPackages=SendTo_v07c + + If you are using this as a ServerActor, also add this: + + ServerActors=SendTo_v07c.STWActor + + or + + ServerActors=SendTo_v07c.STWActorExt + + depending on whether you want the configuration to be help within the server's + INI file, or externally in SendTo.ini + + Otherwise, add this to your server's mutator line: + + SendTo_v07c.STWMut + + or + + SendTo_v07c.STWMutExt + + depending on whether you want the configuration to be help within the server's + INI file, or externally in SendTo.ini + + +5. Enter the details for each command, using the correct format (see Format) + +6. Save the changes to the INI file and restart the server. + +-------------------------------- +Upgrading from SendTo_v07a +-------------------------------- +1. Ensure your server is properly shut down. + +2. Copy the following files to your server's System folder: + SendTo_v07c.u + +3. If your server uses file redirect, upload SendTo_v07c.u.uz + to the redirect file server. + +4. Open your server's INI file, and replace the following in [Engine.GameEngine]: + + ServerPackages=SendTo_v07b + + changes to + + ServerPackages=SendTo_v07c + + + If you are using this as a ServerActor, also change this: + + ServerActors=SendTo_v07b.STWActor + + to + + ServerActors=SendTo_v07c.STWActor + + or + + ServerActors=SendTo_v07b.STWActorExt + + to + + ServerActors=SendTo_v07c.STWActorExt + + + depending on whether you want the configuration to be held within the server's + INI file, or externally in SendTo.ini + + Otherwise, in your server's mutator line, change this: + + SendTo_v07b.STWMut + + to + + SendTo_v07c.STWMut + + or + + SendTo_v07b.STWMutExt + + to + + SendTo_v07c.STWMutExt + + depending on whether you want the configuration to be help within the server's + INI file, or externally in SendTo.ini + + +5. If you are using the server's configuration file, rename the part in your server's INI + titled [SendTo_v07b.STWMut] to [SendTo_v07c.STWMut] . + Otherwise, rename the part in SendTo.ini titled [SendTo_v07b.STWMutExt] to [SendTo_v07c.STWMutExt]. + +6. Save the changes to the INI file(s) and restart the server. + + +---------------- +List of Commands +---------------- +These are the currently supported commands. + +!STWHelp Shows the commands you specify. + +Of course, the extra commands you add in will be supported. +If they weren't, this would be useless :D + +Your custom commands can either be called by saying them exactly as written in the +configuration, or by typing 'mutate STW ' in the console. + + +------ +Format +------ +If you run this mod once, it will create a new section at the bottom of your +server's INI file. Edit this to your liking. + +Generic Settings: + + bShowHelpMessage=True Shows a message saying + 'say !STWHelp for a list of available commands.' + bShowCommandsOnJoin=True Shows the messages for all commands with bAdvertise + set. + +Per-Command Settings: + + bAdvertise[0]=1 Set to 0 if you don't want this to be shown anywhere, + in the help, e.g. for an admin-only forum. + bHideCmd[0]=0 Set this to 1 if you don't want the command to be + broadcast. For example, if you have an admin forum + with !A as the command, and bHideCmd is 1 for this + then no-one else will see the !A message when someone + says it. This does not stop people using it though! + Message[0]= The help message. Make sure it tells users what the + command actually is (e.g. 'Type !F to visit the forum'). + If bAdvertise is 0 for this command, then Message can + be left blank. + LongCmd[0]= The long version of the command (e.g. !Forum). Must be + preceded by an exclamation mark (!) + ShortCmd[0]= The short version of the command (e.g. !F). Must be + preceded by an exclamation mark (!) + TargetURL[0]= The actual web address to link to (e.g. www.UnrealAdmin.org). + If you are linking to a UT server, it must be written as + unreal://: + +You can have up to 64 different command lists, and you may have multiple commands linking to +the same website. + +For a quick template, look at the INIFormat.txt file. + +WARNING: Although conflicts are checked for and warned about for custom commands, there is no +such checking for Nexgen commands or similar. Therefore, it is up to you to make sure commands +don't conflict with other mods. + + +------- +Contact +------- +You can find me on the UnrealAdmin.org and UT99.org forums, under the name +'Meindratheal'. I am not the best at writing UnrealScript, since I can only +do it in my spare time, but I am willing to try to make a mod for people, +so if you have any reasonable requests then ask away! + + +------- +Credits +------- +Daan 'Defrost' Scheerens: First and formemost, for creating such a brilliant + server controller, and for leaving the code intact. + I have learnt most of my coding from Nexgen, so I + thank you. I have used a few bits and pieces from + Nexgen, notably the say command detection. +iloveut99: The code you showed me was helpful in writing this. +back4more: The suggestions you gave were good, so I implemented them +The UnrealWiki: The Offline Wiki has been invaluable for me, however + old it may be. It has been the other key element in + my UScript learning. Thanks go out to all contributors! +The UnrealAdmins forum: I wrote this for you guys, and I think it might actually + be quite useful to people. Nice idea! + +Other: Please do not re-compile the SendTo_v07c package, as +it may cause version mismatches. Source code is included so +you can see how it works. If you do recompile it, then a) make +a post in the forum thread on UnrealAdmin saying what you changed +(it might be a major bug, it might just be preference) b) make +sure you give it a new, non-generic name, and c) keep me credited! + +--------- +Changelog +--------- +Version 0.7c: +--¤Fixed the external configuration loader + +Version 0.7b: +--¤Removed some old debugging code +--¤Added the option to use an external configuration (choose the correct ServerActor) + +Version 0.7a: +--¤Fixed bHideCmd not working (I think) + +Version 0.7: +--¤Fixed a few minor bugs +--¤Added the 'ListLinks' command +--¤Changed the list size to 64 + +Version 0.6: +--¤Brought it roughly on par with the Nexgen version. + Fixed bugs with validation, URL's and the bHidden flag. + +Version 0.5: +--¤Initial release. \ No newline at end of file diff --git a/Help/SendTo_INIFormat.txt b/Help/SendTo_INIFormat.txt new file mode 100644 index 0000000..d702af9 --- /dev/null +++ b/Help/SendTo_INIFormat.txt @@ -0,0 +1,56 @@ +;You can paste this into your server's INI file and it should work with no changes. +;However, you should change it to meet your requirements. + +[SendTo_v07c.STWMut] +bAdvertise[0]=1 +bAdvertise[1]=0 +bAdvertise[2]=1 +bAdvertise[3]=1 +bAdvertise[4]=0 +bAdvertise[5]=0 +bAdvertise[6]=1 +bAdvertise[7]=1 +bHideCmd[0]=0 +bHideCmd[1]=1 +bHideCmd[2]=0 +bHideCmd[3]=0 +bHideCmd[4]=0 +bHideCmd[5]=0 +bHideCmd[6]=0 +bHideCmd[7]=0 +Message[0]=Say !Forum to go to the forum. +Message[1]=Say !Admin to go to the admin area. +Message[2]=Say !Apply to apply to join our clan. +Message[3]=Say !Google to load google :D +Message[4]= +Message[5]= +Message[6]=Say !Server1 to go to the server at 127.0.0.1:7777 +Message[7]=Say !Server2 to go to the server at 127.0.0.1:7800 +LongCmd[0]=!Forum +LongCmd[1]=!Admin +LongCmd[2]=!Apply +LongCmd[3]=!Google +LongCmd[4]= +LongCmd[5]= +LongCmd[6]=!Server1 +LongCmd[7]=!Server2 +ShortCmd[0]=!F +ShortCmd[1]=!A +;These commands will conflict. The first in the list takes precedence. +ShortCmd[2]=!A +ShortCmd[3]=!G +ShortCmd[4]= +ShortCmd[5]= +ShortCmd[6]=!1 +ShortCmd[7]=!2 +TargetURL[0]=www.test.com/Forum +TargetURL[1]=://www.test.com/Admin +TargetURL[2]=HTTP://www.test.com/Apply +TargetURL[3]=http://www.google.com +TargetURL[4]= +TargetURL[5]= +TargetURL[6]=unreal://127.0.0.1:7777 +TargetURL[7]=unreal://127.0.0.1:7800 +bShowCommandsOnJoin=True +bShowHelpMessage=True +DeathsForWelcome=0 \ No newline at end of file diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..e826032 --- /dev/null +++ b/Readme.md @@ -0,0 +1,2 @@ +# SendTo Release GIT repository + diff --git a/Redirect/SendTo_v07c.u.uz b/Redirect/SendTo_v07c.u.uz new file mode 100644 index 0000000000000000000000000000000000000000..c39bd113646038c5b989d9733720c7e529aa23a4 GIT binary patch literal 10583 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 literal 0 HcmV?d00001 diff --git a/Run.sh b/Run.sh new file mode 100644 index 0000000..3d347da --- /dev/null +++ b/Run.sh @@ -0,0 +1,143 @@ +#!/bin/bash +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +OUTPUT_DIR="$2" +CFG_FILE="$3" +DEFAULT_CFG_FILE=UnrealTournament.ini +function add_iniKeyEx() { + crudini --set $OUTPUT_DIR/System/$1 $2 __$3 $4 + # Warning: ugly hack with sed to allow multiple key instances + to remove space around '=' + sed -i "s/[[:space:]]*__$(echo $3 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')[[:space:]]*=[[:space:]]*/$(echo $3 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')=/g" $OUTPUT_DIR/System/$1 +} +function set_iniKeyEx() { + crudini --set $OUTPUT_DIR/System/$1 $2 $3 $4 +} +# !!Warning!! section is not considered +function del_iniKeyEx() { + sed -i "/[[:space:]]*$(echo $3 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')[[:space:]]*=[[:space:]]*$(echo $4 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')/d" $OUTPUT_DIR/System/$1 +} +function add_iniKey() { + add_iniKeyEx $CFG_FILE $1 $2 $3 +} +function set_iniKey() { + set_iniKeyEx $CFG_FILE $1 $2 $3 +} +# !!Warning!! section is not considered +function del_iniKey() { + del_iniKeyEx $CFG_FILE $1 $2 $3 +} +function add_ServerPackage() { + add_iniKey 'Engine.GameEngine' ServerPackages $1 + add_iniKey 'XC_Engine.XC_GameEngine' ServerPackages $1 +} +function del_ServerPackage() { + del_iniKey 'Engine.GameEngine' ServerPackages $1 + del_iniKey 'XC_Engine.XC_GameEngine' ServerPackages $1 +} +function add_ServerActors() { + add_iniKey 'Engine.GameEngine' ServerActors $1 + add_iniKey 'XC_Engine.XC_GameEngine' ServerActors $1 +} +function del_ServerActors() { + del_iniKey 'Engine.GameEngine' ServerActors $1 + del_iniKey 'XC_Engine.XC_GameEngine' ServerActors $1 +} +function getmodprefix() { + UFile=$(find $OUTPUT_DIR/System -type f -iname "SendTo_v*.u" -exec basename {} \;) + BaseName="${UFile%.*}" + echo "$BaseName" +} +function install() { + rsync -a $SCRIPT_DIR/System/ $OUTPUT_DIR/System/ --exclude '.git' + rsync -a $SCRIPT_DIR/Helps/ $OUTPUT_DIR/Helps/ --exclude '.git' + + echo install ok +} +function enable() { + BaseName="$(getmodprefix)" + add_ServerPackage $BaseName + add_ServerActors "$BaseName.STWActorExt" + + echo enable ok +} +function disable() { + BaseName="$(getmodprefix)" + del_ServerPackage $BaseName + del_ServerActors "$BaseName.STWActorExt" + + echo disable ok +} +function show_help() { + echo + echo "Usage: $0 { getmodprefix | install | enable | disable } [] [ ]" + echo +} +function check_cfg_file_config() { + if [ $# -eq 4 ] + then + echo "CFG_FILE is unset, setting it to $DEFAULT_CFG_FILE" + CFG_FILE=$DEFAULT_CFG_FILE + elif [ $# -eq 5 ] + then + echo "CFG_FILE is set to '$CFG_FILE'" + else + echo "Wrong number of arguments" + show_help + exit 9999 # die with error code 9999 + fi + if [ ! -f $OUTPUT_DIR/System/$CFG_FILE ] + then + echo "$OUTPUT_DIR/System/$CFG_FILE does not exist" + show_help + exit 9999 # die with error code 9999 + fi +} +function check_cfg_file_gen() { + if [ -z ${CFG_FILE} ] + then + echo "CFG_FILE is unset, setting it to $DEFAULT_CFG_FILE" + CFG_FILE=$DEFAULT_CFG_FILE + else + echo "CFG_FILE is set to '$CFG_FILE'" + fi + if [ ! -f $OUTPUT_DIR/System/$CFG_FILE ] + then + echo "$OUTPUT_DIR/System/$CFG_FILE does not exist" + show_help + exit 9999 # die with error code 9999 + fi +} +function check_game_dir() { + ### Check if a directory does not exist ### + if [ -z $OUTPUT_DIR ] + then + echo "incorrect " + show_help + exit 9999 # die with error code 9999 + fi +} +case "$1" in + 'getmodprefix') + check_game_dir + getmodprefix + ;; + 'install') + check_game_dir "$@" + install "$@" + ;; + 'enable') + check_game_dir "$@" + check_cfg_file_gen "$@" + disable "$@" + enable "$@" + ;; + 'disable') + check_game_dir "$@" + check_cfg_file_gen "$@" + disable "$@" + ;; + *) + show_help + exit 1 + ;; +esac +exit 0 diff --git a/System/SendTo_v07c.u b/System/SendTo_v07c.u new file mode 100644 index 0000000000000000000000000000000000000000..5ddc6f068bdece53c330fea0cc5bd41212320d33 GIT binary patch literal 35283 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 literal 0 HcmV?d00001