De:Chapter 2
Contents
spheretables.scp
Spheretables.scp ist die allererste Datei, die beim Start von Sphere genau nach der Sphere.ini eingelesen wird. Deshalb ist sie äusserst wichtig. Viele weitere Einstellungen werden innerhalb dieser Datei vorgenommen und das macht sie so wichtig. Deshalb wird diese Datei hier nun erklärt und aufgeschlüsselt:
== [RESOURCES] ==
Öffnet man diese Datei, fällt einem als erstes eine Liste von Dateien ins Auge. Diese Liste ist durch das [RESOURCE]-Tag markiert und sieht so aus:
[RESOURCES]
scripts/sphere_defs.scp
scripts/sphere_book.scp
scripts/sphere_backward_compatibility.scp
scripts/sphere_events_human.scp
scripts/sphere_events_npcs.scp
scripts/npcs/
...
Hier wird eingestellt, welche und in welcher Reihenfolge Skriptdateien von Sphere geladen werden. Manchmal sollten hier Änderungen mit äusserster Vorsicht vorgenommen werden. Dateien mit DEFNAMES, REGIONS und anderen global benutzten Einstellungen sollten als erstes geladen werden, um Fehler beim Start von Sphere zu vermeiden (obgleich diese Fehler oftmals den Server nicht beeinträchtigen). Beispielsweise wurde in Kapitel 1 das Goldskript behandelt:
TYPE=t_gold
Weiss Sphere aus der nicht, was t_gold bedeutet, dann wird eine Fehlermeldung ausgegeben. Deshalb sollte vor dem Goldskript auf alle Fälle zuerst sphere_defs.scp geladen werden, in der t_gold definiert wurde.
Skripte mit Itemdefinitionen sollten von Skripten mit Templatedefinitionen geladen werden und danach dann Characterdefinitionen. Andere Dateien folgen danach, aber diese Dateien sollten auf jeden Fall in dieser Reihenfolge sein. Der Loot von Monstern benötigt Templates und die wiederum Items und solange Sphere keine Dateien mit Templates oder Items geladen hat, werden hunderte Fehler ausgegeben, die dann korrigiert werden müssen.
Anmerkung: Es können ganze Ordner angegeben werden, es muss nicht jede einzelne Datei in der Liste aufgeführt werden. Deshalb enthält die Liste beispielsweise scripts/ am ende von [RESOURCE], damit alle Skripte dieses Ordner geladen werden, die noch nicht aufgeführt wurden.
== [OBSCENE] ==
Die nächste Sektion ist selbsterklären: [OBSCENE]. Hier werden unerlaubte Namen aufgeführt. Versucht ein Spieler seinem Charakter einen Namen aus der Liste zu geben, dann wird ihm mitgeteilt, dass er einen anderen wählen soll.
== [NOTOTITLES] ==
Hier werden Titel definiert, die basierend auf dem Karmawert eines Spielers angezeigt werden. Diese Sektion sollte nicht angerührt werden, denn fehlt hier eine Zeile wird Sphere nicht mehr starten - diese Zeilen sollten höchstens geändert werden. This defines the title that will be shown related to the player's karma. Do not touch this section. If you remove a line inadvertently, your server WILL NOT RUN. Only change them.
== [PLEVEL X] ==
Dieser Abschnitt legt fest, welche Befehle mit welchen Accountrechten (PLEVEL) ausgeführt werden können. Jeder nichtgelistete Befehl wird automatisch mit PLEVEL 4 eingeordnet. Das gilt auch für selbstgeschriebene Funktionen (siehe Kapitel 6). Wie man sieht, gibt es eine große Liste an Befehlen und Funktionen.
Anmerkung: Es muss nicht jede selbstgeschriebene Funktion in diese Liste, da jederzeit weitere [PLEVEL]-Sektionen in anderen Skripten angelegt werden können, obgleich es natürlich organisatorisch besser wäre, diese würden zentral gehalten.
== [RUNES] ==
Das ist die Liste der Worte, die gesagt werden, wenn ein Spruch gezaubert wird (An, Lor, In, usw.). Sie können geändert werden, aber das kann durchaus sehr verwirren. =P
Sphere.ini
Sphere.ini enthält alle internen Einstellungen des Sphere Emulators. Um einen Shard zu konfigurieren sollte hier begonnen werden. Um die Datei besser zu erklären, wurden Kommentare in fetter Schrift eingefügt.
//****************************************************************************
// SPHERE by : Menasoft 1997-2003
// www.sphereserver.com
// All SPHERE script files and formats are copyright Menasoft & Partners.
// This file may be freely edited for personal use, but may not be distributed
// in whole or in part, in any format without express written permission from
// Menasoft & Partners. All donations and contributions
// become the property of Menasoft & Partners.
//****************************************************************************
///////////////////////////////////////////////////////////////
//////// General Information
///////////////////////////////////////////////////////////////
[SPHERE]
// Name of your Sphere shard
ServName=WarAngel's Test Centre
// The IP of your server, this will be 127.0.0.1 almost always
ServIP=127.0.0.1
// The port of your server, this is 2593 by default
ServPort=2593
// Admin's contact email
AdminEmail=warangel999@msn.com
// Web page for this server
URL=www.myshard.com Replace www.myshard.com with your shard's URL'
// GMT offset, from -12 to +12 [London=0, EST=5, etc]
TimeZone=-5 Östliche Zeitzone (US & Canada). Sollte passend eingestellt werden.
// Official staff language
Lang=English
// Start this as a system service on Win2000, XP, NT
NTService=0 Wird diese Einstellung aktiviert, ist kein Zugriff auf die Konsole mehr möglich.
// MySql configuration.
//MYSQL=0 Auf =1 wird MySQL aktiviert.
//MySqlHost=localhost Wird fast immer localhost sein, ausser MySQL läuft auf einen anderen Rechner als der Shard.
//MySqlUser=
//MySqlPassword=
//MySqlDatabase=
///////////////////////////////////////////////////////////////
//////// File Locations
///////////////////////////////////////////////////////////////
// Directory where spheretables.scp is located, from there we will
// load any additional scripts
ScpFiles=scripts/
// Where your sphereworld.scp and spherechars.scp are located
WorldSave=save/
// Where your sphereaccu.scp and sphereacct.scp is located
AcctFiles=accounts/
// Where your UO installation is located. This need: map0.mul, statics0.mul,
// staidx0.mul, multi.mul, multi.idx, hues.mul, tiledata.mul.
// Optional files: verdata.mul, mapX.mul/staticsX.mul/staidxX.mul for higher
// maps support (Malas, etc).
//
// Note that if not set, sphere will scan windows registry to auto-detect it
//MulFiles=mul/
// Where your log files will be saved by sphere
Log=logs/
///////////////////////////////////////////////////////////////
//////// World Save Information
///////////////////////////////////////////////////////////////
// How often for Sphere to save your world (minutes)
SavePeriod=20
// How many backup levels to keep. Each level means 7 backups done for it.
// So, 10*7 = 70 backup saves will be storied.
BackupLevels=10
// On would save in the background quietly over a longer period of time, and not interrupt the game
// Off would notify "World save has been initiated" and save faster, but pause the game momentarily
SaveBackground=0
///////////////////////////////////////////////////////////////
//////// Account Management
///////////////////////////////////////////////////////////////
//Code for servers account application process
// 0=Closed, // Closed. Not accepting more.
// 2=Free, // Anyone can just log in and create a full account.
// 3=GuestAuto, // You get to be a guest and are automatically sent email with u're new password.
// 4=GuestTrial, // You get to be a guest til u're accepted for full by an Admin.
// 6=Unspecified, // Not specified.
// To enable auto account you must set this to 2
AccApp=0
// Store password hashed with MD5 MD5 ist eine Verschlüsselungsmethode zur Speicherung von Passwörtern. Mehr Information: hier
Md5Passwords=0
// local ip is assumed to be the admin
LocalIPAdmin=1
// Number of chars allowed per account
MaxCharsPerAccount=5
// Min time for a char to exist before delete allowed (in seconds)
MinCharDeleteTime=3*24*60
// Max number of Guest accounts allowed
GuestsMax=0
///////////////////////////////////////////////////////////////
//////// Client Management
///////////////////////////////////////////////////////////////
// What client protocol version used
// Comment out the ClientVersion line to allow any client that is supported.
//ClientVersion=2.0.3
// Set this to 0 to block login to encrypted clients Normalerweise benutzen Clients Verschlüsselung.
UseCrypt=1
// Set this to 1 to allow login to unencrypted clients Klappt mit Tools wie bspw.: UO Rice und UOGateway die Verschlüsselung eines Clients zu entfernen
UseNoCrypt=0
// Maximum total open connections to server
ClientMax=256
// Maximum open connections to server per IP
ClientMaxIP=16
// Maximum total (not-in-game) connections to server
ConnectingMax=32
// Maximum total simultaneous (not-in-game) connections to server per IP
ConnectingMax=8
// How long logged out clients linger in seconds
ClientLinger=15
// Walk limiting code: buffer size (in tenths of second)
WalkBuffer=75
// Walk limiting code: regen speed (%)
WalkRegen=25
// Only commands issued by this plevel and higher will be logged
CommandLog=0 0 bedeutet, dass alle Befehle geloggt werden.
// Prefix for ingame commands
CommandPrefix=.
// Use the built in http server
UseHttp=1
// Use the built in god port
UseGodPort=0 This is for use with the God client
// Default setting for all accounts specifying default resdisp. Recommended
// specifying at least 1 (T2A) here.
//AutoResDisp=0 0=autmatisch herausfinden, 1=T2A, 2=LBR, 3=AoS, 4=SE, 5=ML
// Default setting for new accounts specifying default priv level
//AutoPrivFlags=010
///////////////////////////////////////////////////////////////
//////// Game Mechanics
///////////////////////////////////////////////////////////////
// Do not allow entering under roof being on horse?
MountHeight=0
// Archery does not work if too close (0 = not checked)
ArcheryMinDist=2
// Maximum Distance for Archery
ArcheryMaxDist=15
// Speed scale factor for weapons Formel ist: VERZÖGERUNG = SPEEDSCALEFACTOR /((DEX + 100) * SPEED)
SpeedScaleFactor=15000
// This is the percent of max weight at which stamina is lost half the time
// (200 = no effect)
StaminaLossAtWeight=150
// Weight penalty for running +N% of max carry weight (0 = no effect)
RunningPenalty=50
// Show people joining/leaving the server
ArriveDepartMsg=1
// Are house and boat keys newbied automatically
AutoNewbieKeys=1
// Maximum number of items allowed in bank
BankMaxItems=1000
// Maximum weight in stones allowed in bank
BankMaxWeight=1000
// If 1 vendors will take gold only from backpack
PayFromPackOnly=0 Wenn 0, dann nehmen Händler auch Geld vom Bankfach.
// Disable weather effects?
NoWeather=1
// Default light level in dungeons
DungeonLight=27 0 ist am helssten, 30 ist am dunkelsten
// Day light level 0-30 0 ist am helssten, 30 ist am dunkelsten
LightDay=0
// Night light level 0-30
LightNight=25
// Wool Regen Time (in minutes)
WoolGrowthTime=30
// Suppress player speech with 75% of capital letters
SuppressCapitals=0
// Extra combat flags to control the fight (default:0, 0.55i compatible)
// COMBAT_NODIRCHANGE 00001 // not rotate player when fighting (like was in 0.51a)
// COMBAT_FACECOMBAT 00002 // allow faced combat only (recommended)
//CombatFlags=0 Sind beide aktiviert, dann bedeutet das, dass der Spieler den Gegner ansehen muss, um ihn zu treffen.
///////////////////////////////////////////////////////////////
//////// NPC/Item/Player Management
///////////////////////////////////////////////////////////////
// Distance in tiles before an NPC that's wandered too far from it's home will teleport back
LostNPCTeleport=50
// Wether PCs get a resurrection robe when they get resurrected.
NoResRobe=0
// Time for a NPC corpse to decay mins
CorpseNPCDecay=10
// Time for a playercorpse to decay mins
CorpsePlayerDecay=15
// Base decay time in minutes for items
DecayTimer=30
// Put [NPC] tags over chars oder [TAME], wenn der NPC gezähmt wurde
CharTags=0
// Flip dropped items
FlipDroppedItems=0
// Monsters run when scared of death
MonsterFear=0
// Monsters may fight each other
MonsterFight=0
// Percent setting of the all NPC move rate, default 100
MoveRate=100
// Do players receive sounds
GenericSounds=1
// Max number of items to sell to one person at once
VendorMaxSell=255
// Max level npc trainers can go
NPCTrainMax=300 300 ist 30.0 skill
// Percent of own ability npcs can train to
NPCTrainPercent=30
// Max level of skill trainable on dummies, archery butte ect..
SkillPracticeMax=300 300 ist 30.0 skill
// Max skill player's will start with on skills they haven't chosen during char create
MaxBaseSkill=200 Hier eine 0, damit Spieler mit keinen Skills ausser den gewählten beginnen.
// Time in seconds for hitpoint regeneration
Regen0=40
// Time in seconds for mana regeneration
Regen1=20
// Time in seconds for stamina regeneration
Regen2=10
// Time in minutes for food regeneration
// 1*60*24 = 1 day of real life time
Regen3=1*60*24
// Speech block associated to players
SpeechSelf=spk_player
// Speech block associated to pets
SpeechPet=spk_pet
// When player skills/stats goes this times more than skillclass allowed, drop
// them to skillclass level. Setting this to 0 disables the action.
OverSkillMultiply=2
// NPC AI settings
// NPC_AI_PATH 0001 NPC pathfinding
// NPC_AI_FOOD 0002 NPC food search (objects + grass) Sorgt dafür, dass NPCs nach Essen bzw Gras suchen (siehe FOODTYPE)
// NPC_AI_EXTRA 0004 NPC magics, combat, etc
//NPCAI=0
///////////////////////////////////////////////////////////////
//////// Crime/Murder/Karma/Fame/Guard Settings
///////////////////////////////////////////////////////////////
// Karma when player goes from good to neutral (from -10000 to 10000)
PlayerNeutral=-2000
// How many minutes are criminals flagged for
CriminalTimer=3
// Times a player can snoop before becoming a criminal
SnoopCriminal=20
// Seconds time to decay a murder count (default 8*60*60 is 8 hours)
MurderDecayTime=8*60*60
// Amount of murders before we get title
MurderMinCount=1
// Looting or carving a blue player is a crime
LootingIsaCrime=1
// Flag players criminal for helping criminals?
HelpingCriminalsIsaCrime=1
// How long do guards linger about in minutes
GuardLinger=3
// Will guards kill instantly or follow normal combat rules
GuardsInstantKill=1
// Limits the MAXHITS/MAXMANA/MAXSTAM changes
// STAT_FLAG_NORMAL 0x00 // MAX* status allowed (default)
// STAT_FLAG_DENYMAX 0x01 // MAX* denied
// STAT_FLAG_DENYMAXP 0x02 // .. for players
// STAT_FLAG_DENYMAXN 0x04 // .. for npcs
StatsFlags=0
///////////////////////////////////////////////////////////////
//////// Server Mechanics
///////////////////////////////////////////////////////////////
// Experimental flags
// Flags for options that affect server behaviour and which might affect compatibility
// See the revisions.txt file for more details on this
// EF_DiagonalWalkCheck = 00000001
// EF_UNICODE = 00000002 // No on Linux Bringt UNICODE Korrekturen
// EF_Scripts_Ret_Strings = 00000004
// EF_New_Triggers = 00000008
// EF_Scripts_Parse_Verbs = 00000010
// EF_Intrinsic_Locals = 00000020 //Erlaubt locals anders zu nutzen. Beispielsweise kann statt <local.x> auch nur <x> benutzt werden.
// EF_Item_Strict_Comparison = 00000040 //Sorgt dafür, dass gleiche Items nicht mehr verglichen werden, wie Stoff, Leder, Fell, Holz, Bretter, Pfeile und Bolzen.
// EF_WalkCheck = 00000100 //Behebt viele Hauseinbruchsbugs und ähnliche Probleme.
// EF_Script_Profiler = 00000400
// EF_Size_Optimise = 00000800
// EF_Minimize_Triggers = 00001000 //Minimize trigger calls (use only 0.51 triggers)
Experimental=00000
// Option flags
// Flags for options that affect server behaviour but not compatibility
// See the revisions.txt file for more details on this
// OF_Magic_IgnoreAR = 00000001 //Magieschaden ignoriert Rüstung (AR)?
// OF_Magic_CanHarmSelf = 00000002 //Kann sich ein Spieler mit Magie selbst verletzen? (einen Magic Arrow auf sich abfeuern, um Lähmung (Paralyze) zu beenden?)
// OF_Magic_StackStats = 00000004
// OF_Archery_CanMove = 00000010 //Kann ein Spieler laufen und schiessen gleichzeitig?
// OF_Magic_PreCast = 00000020 //Funktionieren Zauber mit pre-cast oder ist der Spieler solange er zaubert unfähig herumzulaufen?
// OF_Items_AutoName = 00000040
// OF_FileCommands = 00000080 //Aktiviert Befehle zur Dateiverarbeitung, wie writefile usw
// OF_NoItemNaming = 00000100 //Verhindert die Benennung von Gegenständen mit "crafted by"
// OF_NoHouseMuteSpeech = 00000200 //Können sich spieler in und ausserhalb von Häusern gegenseitig hören?
// OF_Multithreaded = 00000400 //Nicht setzen, solange der Server läuft!!! (Macht *Nix Server instabil) Lässt die Verarbeitung von Accounts auf einem anderen Thread laufen
// OF_Advanced_LOS = 00000800
// OF_Flood_Protection = 00001000
OptionFlags=0200
// FeatureT2A, used to control T2A expansion features ( default 03 )
// FEATURE_T2A_UPDATE 01 // Monster and Lost lands
// FEATURE_T2A_CHAT 02 // In game chat
FeatureT2A = 03
// FeatureLBR, used to control LBR expansion features ( default 0 )
// FEATURE_LBR_UPDATE 01 // Lbr Monsters
// FEATURE_LBR_SOUND 02 // MP3 instead of MIDI
FeatureLBR = 0
// FeatureAOS, used to control AOS expansion features ( default 0 )
// Enabling one of them automagically enables AoS basic features
// FEATURE_AOS_UPDATE 01 // Basic AoS feature
// FEATURE_AOS_POPUP 02 // Popup infos
// FEATURE_AOS_DAMAGE 04 // Damage shown on hit
// FEATURE_AOS_PALNECRO 08 // Fightbook and Paladin/Necro on char creation
// FEATURE_AOS_TOOLTIP 010 // Tooltips
FeatureAOS = 0
// FeatureSE, used to control SE expansion features ( default 0 )
// FEATURE_SE_UPDATE 01 // Basic SE features
// FEATURE_SE_NINJASAM 02 // Ninja and Samurai
FeatureSE = 0
// FeatureML, used to control ML expansion features ( default 0 )
// FEATURE_ML_UPDATE 01 // Basic ML features
FeatureML = 0
// In game effects to turn on and off
// Messages echoed to the server console while in debug mode
// DEBUGF_NPC_EMOTE = 0x0001
// DEBUGF_ADVANCE_STATS = 0x0002
// DEBUGF_WALKCODES = 0x0080 // try the new walk code checking stuff
// DEBUGF_NPCAI = 0x0100 // some NPC AI debugging
// DEBUGF_EXP = 0x0200 // experience gain/loss
// DEBUGF_LEVEL = 0x0400 // experience level changes
DebugFlags=0
// Console Hears all that is said on the server
HearAll=1
// Secure mode attempts to ignore errors, protect from accidently shutdowns
Secure=1
// Value from 1 to 32, set sectors inactive when unused to conserve resources
SectorSleep=10
// Disconnect inactive socket in x min
DeadSocketTime=5
// Always force a full garbage collection on save
ForceGarbageCollect=1
// Time before restarting when server appears hung (in seconds)
FreezeRestartTime=60
// Length of the game world minute in real world in seconds
GameMinuteLength=60
// Bit Mask of the subjects you want to log when logging is on
// LOGM_ACCOUNTS 0x00080
// LOGM_SAVE 0x00200 // world save status.
// LOGM_CLIENTS_LOG 0x00400 // all clients as they log in and out.
// LOGM_GM_PAGE 0x00800 // player gm pages.
// LOGM_PLAYER_SPEAK 0x01000 // All that the players say.
// LOGM_GM_CMDS 0x02000 // Log all GM commands.
// LOGM_CHEAT 0x04000 // Probably an exploit !
// LOGM_KILLS 0x08000 // Log player combat results.
// LOGM_HTTP 0x10000
// 01ffff log everything
LogMask=01ec80
// Amount of time to keep map data cached in sec
MapCacheTime=120
// Max NPC chars for a sector to prevent lag
MaxComplexity=32
// Amount of items in one tile so start showing "too many items here"
MaxItemComplexity=25
// Amount of items in one sector to start showing "x items too complex"
MaxSectorComplexity=1024
// Limit the number of cycles the while/for loop can proceed. Setting this to
// zero disables the limitation
MaxLoopTimes=0
///////////////////////////////////////////////////////////////
//////// Magic/Effects Settings
///////////////////////////////////////////////////////////////
// Allow casting while equipped
EquippedCast=1
// Words of power for player using magic
WOPPlayer=1
// Words of power for staff using magic
WOPStaff=0
// Reagents lost if magic fails
ReagentLossFail=0
// Magic requires reagents
ReagentsRequired=0
// What % of hitpoints players will resurrect with. Note, that if you set this
// too low, people with little STR will have problems resurrecting.
HitPointPercentOnRez=33
// How many % of hits will the character loose when starving. 0 disables
//HitsHungerLoss=0
// Amount of skill of lock picking needed to unlock a magically locked door
MagicUnlockDoor=900
// Teleport effect for GMs and players. Setting 0 disables the effect
TeleportEffectStaff=03709
TeleportEffectPlayers=0372a
///////////////////////////////////////////////////////////////
//////// Experience and Level system
///////////////////////////////////////////////////////////////
// Enable experience system
//ExperienceSystem=0
// Experience system settings:
// 0001 gain experience in combat
// 0002 gain experience in crafts
// 0004 allow experience to go down
// 0008 limit experience decrease by a range witheen a current level
// 0010 auto-init EXP/LEVEL for NPCs if not set in @Create
// 0020 allow trigger @ExpChange
// 0040 allow trigger @ExpLevelChange
//ExperienceMode=0
// If combat experience gain is allowed, use these percents for gaining exp in
// Player versus Monster and Player versus Player combats. Value 0 disables gain.
//ExperienceKoefPVM=100
//ExperienceKoefPVP=100
// Enable levels system (as a part of experience system)
//LevelSystem=0
// Level system settings:
// linear = 0 (each NextLevelAt exp will give a level up)
// double = 1 (you need (NextLevelAt * (level+1)) to get a level up)
//LevelMode=1
// Amount of experience to raise to the next level
//LevelNextAt=0
///////////////////////////////////////////////////////////////
//////// Webpage Settings
///////////////////////////////////////////////////////////////
// Note, that you can catch error codes by creating sphere404.htm and so on
// for all HTTP error codes sphere support.
[WEBPAGE 1]
// Determines what html file is used as base for the status page
WebPageSrc=scripts\web\spherestatusbase.html
// Determines where the status page is saved
WebPageFile=scripts\web\status.html
// In seconds, how often the status file is updated
WebPageUpdate=60
// Required PLevel to view this page (0 = anyone, 6 = admins only)
PLevel=0
///////////////////////////////////////////////////////////////
//////// Abuse Control
///////////////////////////////////////////////////////////////
// Block these ips from the server
// 255 is a wildcard, so 255.255.255.255 disables anyone connecting.
[BlockIP]
//123.34.45.56
//123.45.56.78
///////////////////////////////////////////////////////////////
//////// Connection Information
///////////////////////////////////////////////////////////////
//First line should be the name of your shard (this is what people see when they connect)
//Second line should be the IP of your shard (this is almost always 127.0.0.1)
//Third line should be the port of your shard (this should be whatever ServPort is set to)
//Uncomment next 3 lines below this if you have a router
//First line should be a name different than your shard name above this
//Second line should be your real/external IP (www.whatismyip.com)
//Third line should be the shard port (this should be whatever ServPort is set to)
[SERVERS]
WarAngel's Test Centre
127.0.0.1
2593
//External
//my.ip.goes.here
//2593
[EOF]
MAPx Ist zwar nicht in sphere.ini, kann aber genutzt weden (siehe REVISIONS.txt). Und zwar so:
MAPx=max_x,max_y,sector_size,real_map_number.
Beispiel: MAP1=7168,4096,512,-1
setzt die Größe von map1 auf 7168,4096, die Sektorgröße von map1 auf 512 und die -1 bedeutet, dass die Standarddatei für diese map benutzt wird.
Anderes Beispiel:
MAP50=7168,4096,64,3
Aktiviert die Map mit nummer 50, die eine Größe von 7168,4096, eine Sektorgröße von 64 hat und map3.mul, statics3.mul und staidx3.mul als Dateien benutzt.
sphere_region.scp
Dieses Skript stellt Orte auf der Karte ein und defniert, was bspw. dort an Metallen oder Holz abgebaut werden kann, was passiert, wenn diese Orte betreten werden und weiteres. Es enthält zudem Resource-Sektionen, die so aufgebaut sind:
[REGIONRESOURCE x]
Diese Sektion enthält den Skill, der benötigt wird, um diese Resource abzubauen, welche Resource der Spieler erhält und wie lange es dauert, damit sie "nachwächst". Ein Beispiel hierfür (es gibt einen Kommentar mit "//t_tree", der aber klar sein sollte, wenn das vorherige Kapitel über defnames gelesen wurde).
[REGIONRESOURCE mr_tree]
// lumberjacking default
// t_tree
SKILL=1.0,80.0
AMOUNT=9,30
REAP=i_log
REGEN=60*60*10
Diese Sektion definiert eine Resource, etwas das gesammelt werden kann. Es vergleicht Skill und Menge. Das bedeutet, dass mit Skill 1.0 maximal 9 i_log und mit Skill 80.ß maximal 30 i_log gesammelt werden können. Alles danach ist nur eine Erhöhung der Chance auf 30 i_log. In der SKILL-Zeile wird also eine Unter- und eine Obergrenze festgelegt, die AMOUNT-Zeile macht selbiges für die Mengen.
Was bringt uns das? Die Zeile: REAP=i_log. Das sagt dem Server, er soll i_log Items erstellen, wenn diese Resource gebraucht wird. Es kann hier alles stehen, was man auf seinem Shard sammelbar machen möchte.
Die nächste Zeile, REGEN, legt in Sekunden fest, wie lange es dauert, damit diese Resource wieder neu abgebaut werden kann. In diesem Beispiel sind das 60*60*10 Sekunden, also 10 Stunden. Als GM können die Punkte wahrgenommen werden, an denen Spieler geschürft oder abgeholz haben, denn dort liegen kleine Kristalle am Boden. Sie sehen wie Spawnpunkte aus, aber sind in Wahrheit Resourcenmarkierungen. Sie markieren, wo eine spezielle Resource geholt werden kann, wie viel geholt werden kann und welchen Typ die Resource hat. Sie haben zudem einen TIMER, der runterzählt (von bspw 36000) und der dann dafür sorgt, dass der Kristall bei 0 gelöscht wird.
[REGIONTYPE r_default_rock t_rock]
//Random rocks
RESOURCES=100.0 mr_nothing
RESOURCES=500.0 mr_iron
//RESOURCES=6.0 mr_rusty
//RESOURCES=6.0 mr_old_copper
//RESOURCES=6.0 mr_dull_copper
//RESOURCES=4.5 mr_bronze
RESOURCES=5.0 mr_copper
RESOURCES=2.0 mr_gold
RESOURCES=1.0 mr_rose
RESOURCES=2.0 mr_agapite
RESOURCES=1.0 mr_bloodrock
RESOURCES=1.0 mr_silver
RESOURCES=0.5 mr_verite
RESOURCES=0.2 mr_Valorite
RESOURCES=0.1 mr_mytheril
RESOURCES=0.1 mr_blackrock
RESOURCES=0.1 mr_diamond
Wow? Was sind das für Dinge? mr_iron, mr_agapite? Das ist nirgendwo in der Datei. Auch in sphere_defs.scp findet man diese Definitionen nicht, man muss in sphereitem_ore.scp nachsehen.
RESOURCES=50.0 mr_iron
Das sieht irgendwie bekannt aus. Würde es noch mehr, wenns so aussehen würde?
RESOURCES={ mr_iron 50 mr_copper 5 mr_gold 2 mr_rose 2 ...etc... }
Möchte wetten, dass es das würde, wenn die vorherigen Lektionen in Kapitel 1 gelesen wurden. Das ist eine gewichtete Liste von Resourcen. In einem etwas anderen Format, als die für Template genutzte Version, aber sie funktioniert genau so. Das ist der einzige Ort in allen Skripten, in denen Kommazahlen genutzt werden können, wie bspw 0.1 und 0.2. Eigentlich stimmt das nur halb, aber Sphere verdeckt erfolgreich, solange in jeder RESOURECE-Zeile eine Kommazahl steht. (Im übrigen sollte nicht ein RESOURCES mit einer Zufallsauswahl geskriptet werden. Sphere wird das nicht richtig auswerten, es sollte dieses Format genutzt werden.)
[REGIONTYPE r_default_rock t_rock] Bedeutet: r_default t_rock legt einen Defname für einen REGIONTYPE fest, der in anderen Skripten benutzt werden kann (im nächsten Abschnitt bspw. =P). t_rock ist ein Defname (siehe sphere_defs.scp) für Stein, was für Sphere festlegt wo Spieler welche Resource sammeln können (sollte es auf t_water geändert werden, kann im Wasser Erz geschürft werden, was sicher nicht ganz so beabsichtigt ist.)
Hoffentlich erklärt das sphere-resion.scp für jeden. Im nächsten Abschnitt wird gezeigt, wie REGIONTYPE-Einstellungen benutzt werden, damit die Resourcen auch wirklich im Spiel vorhanden sind.
sphere_mapX.scp
Willkommen zur einfachsten Datei in Sphere: spheremap.scp. Diese Datei ist vollständig fertiggestellt für die Standardmap. Es ist sehr selten, dass diese Datei verändert werden muss.
Eine Anmerkung, die gleich zu Anfang gesagt werden muss: wird diese Datei verändert, muss der Server neu gestartet werden, damit die Änderung auch übernommen wird. Sollte das innerhalb eine Resyncs passieren, wirds viele Fehler geben.
Diese Sektion zeigt, wie neue Regionen erstellt werden können, zu denen man mit dem .go Befehl reisen kann.
Es gibt momentan 5 Dateien in den Standardskripten, eine für jede Map (Felucca, Trammel, Ilshenar, Malas und Tokuno) die von 0 bis 4 durchnummeriert sind (sphere_map0.scp, sphere_map1.scp usw).
Ich benutze die Region Felucca als ein Beispiel für dieses Tutorial und hier das Skript dafür:
[AREADEF a_world]
NAME=Felucca
EVENTS=r_default,r_default_rock,r_default_water,r_default_tree,r_default_grass
GROUP=ALLMAP
P=1323,1624,55,0
RECT=0,0,6144,4096,0
Diese Zeilen bedeuten:
[AREADEF somedef]: Wie in allen anderen Skripten ist das ein Defname - nur hier für eine Region auf dem Server.
Name: Diese Zeile enthält einen Namen für die Region, der angezeigt wird, wenn der .where Befehl im Spiel benutzt wird. Zudem kann .go "Region Name" dafür benutzt werden, um dort hin zu reisen (keine zwei Regionen sollten den selben Namen haben, ansonsten wird hier einiges an Fehlern produziert).
Events: Hier wird festgelegt, was alles in der Regeion passiert und welche Resourcen hier abbaubar sind (siehe den Abschnitt über REGEIONTYPE - diese können hier als EVENT benutzt werden). Neben den Resourcen können hier auch Trigger benutzt werden, die von den EVENTS aufgerufen werden können (wahrscheinlich bemerkt man hier, dass die REGIONTYPE-Sektionen nur Ereignisse für Regionen sind :P), wie beispielsweise @Enter und andere (siehe Triggers).
Group: Das ist eine Axiseinstellung, die im Travelmenü Regionen gruppiert.
P: Das ist der Ort, an den man mit .go "Region Name" gelangt. Jede Region hat eine solche Angabe und sie liegt normalerweise mitten in der Region oder an einem passenden ort. Wenn eine eigene Region erstellt wird, sollte ein solcher Punkt angegeben werden.
RainChance: Legt die Chance auf Regeion in der Region fest (Rainchance=50 gibt eine 50% Wahrescheinlichkeit) der Rest bedeutet, dass es zu 50% schneit.
Rect: Gibt die Grenzen der Region als Koordinaten an. Die ersten zwei Zahlen sind die Koordinaten des oberen linken Punktes und die zweiten der untere linke Punkt eines Rechtecks. Im Fall von Felucca ist das 0,0 bis 6144,4096 (RECT=0,0,6144,4096). Mit 56b kann auch ein fünfter Wert angegeben werden, nämlich die Karte, auf der die Region liegt, also RECT=0,0,6144,4096,0 (kann auch weggelassen werden, dann wird standardmäßig 0 verwendet - soll das nicht Map 0 sein, dann muss ein Wert angegeben werden, sonst gibts Fehler).
Flags: Regionenflags bestimmen, was in einer Region los ist. Sie beschreiben, ob eine Region bewacht ist, welche Magie genutzt werden kann, wer hier wen verletzen kann und ob es hier regnen kann. Soll das verwendet werden, dann so:
Diese Zeile hinzufügen:
FLAGS=#
Natürlich sollte statt # eine Zahl verwendet werden! Wo diese nummern stehen? Es gibt vordefinierte, aber es gibt eine Liste.
Beispielsweise für eine bewachte und gesicherte Region, sehen sie so aus:
- region_flag_safe (02000)
- region_flag_safe (02000)
- +
- region_flag_guarded (04000)
- region_flag_guarded (04000)
- =
- 06000
- 06000
Das wars. Die FLAGS werden auf 06000 gesetzt. "Aber, aber ... hiess es nicht, dass DEFNAMEs die Eingabe von Zahlen unnötig machen?" (siehe Kapitel 1.) Natürlich, deshalb geht das auch ohne Zahlen und zwar so:
FLAGS=region_flag_safe|region_flag_guarded
Das wars. Die Region ist bewacht und sicher.
Aus Sicht eines Admins ist das aber keine gute Idee. Eine derartige Region verhindert, dass Wachen wirklich jemanden töten können, sie rufen sich gegenseitig und werden zu keiner Handlung fähig sein und letztendlich Lag verursachen. Einfach glauben und keine Region mit diesen beiden Flags erstellen.
Hier ist die Liste der möglichen Flags (stehen auch in sphere_defs.scp und können sich von Zeit zu Zeit ändern):
[DEFNAME region_flags]
region_antimagic_all 00001 // keine Magie möglich hier.
region_antimagic_recall_in 00002 // kein Teleport,Recall hier her, keine Markierung von Runen.
region_antimagic_recall_out 00004 // kein Recall nach draussen von hier aus.
region_antimagic_gate 00008 // keine Gatezauber hier hin oder hier raus.
region_antimagic_teleport 00010 // kein Teleport hier her.
region_antimagic_damage 00020 // Keine "böse" Magie hier.
region_flag_ship 00040 // Das hier ist ein Schiff - Schiffsbefehle klappen hier.
region_flag_nobuilding 00080 // kein Gebäude in diesem Areal
region_flag_globalname 00100 // Sicherstellen, dass der Name global gilt.
region_flag_announce 00200 // Ankündigung an alle, dass diese Region betreten wird.
region_flag_insta_logout 00400 // Instant Logout erlaubt. (Hotel?)
region_flag_underground 00800 // Dungeon Areal. (kein Wetter)
region_flag_nodecay 01000 // Items am Boden werden nie gelöscht.
region_flag_safe 02000 // Diese Region sichert vor jedem Schaden.
region_flag_guarded 04000 // siehe tag.guardowner
region_flag_no_pvp 08000 // Spieler können sich nicht direkt Schaden.
Und das wars mit der sphere_mapX.scp Datei.
sphere_book.scp
Spherebook.scp ist eine der sinnlosesten Dateien, die zu finden ist. Wie oft liest man schon die Tips auf einem Shard, wenn man einloggt? Ich weiss, dass die meisten Spieler diese Rollen einfach wegklicken. Aber der Inhalt ist in dieser Datei festgelegt. Und Bücher - hab ich die erwähnt? Diese fast-unmöglich-zu-schreiben, selten benutzten Speicherverschwender?
[SCROLL SCROLL_MOTD]
[SCROLL SCROLL_NEWBIE]
[SCROLL SCROLL_GUEST]
Das sind die Sektionen, die Nachrichten definiert, wenn man einloggt. Alles, das hier nach diesen Tags steht, wird in einer Nachricht auftauchen. Welche Leerzeichen wo gebraucht werden, muss mit vielen Tests herausgefunden werden. Braucht etwas Zeit und es gibt keine echte Möglichkeit das gut zu erklären. Einfach versuchen. Achtung: es gibt hier keine Zeilenumbrüche - oder zumindest gabs in der Vergangenheit keine.
[TIP X]
Richtig. Das sind Tips, die es beim Start gibt. "Krieg ist für Kinder und alles Leben ungesund." ist einer davon. Sehr passend.
[BOOK title]
[BOOK title x]
Erstellt ein Buch mit DEFNAME Titel. Es legt eine Seitenzahl x nach dem DEFNAME fest und fügt Text auf einer bestimmten Seite hinzu. Sieht man die Beispielbücher an, kann man erahnen, wie das klappt. Die größte Schwierigkeit dieser Bücher ist die benutzte Schriftart im Spiel, so dass man nicht wirklich weiss, wieviele Zeichen es für eine Zeile oder Seite braucht. Beispielsweise passen mehr 'i's als 'w's oder 'm's in eine Zeile, weil diese Buchstaben größer sind. Ein Absatz kann mit der TAB Taste eingefügt werden.
sphere_name.scp
Eine einfache Datei. Es enthält eine Liste von Namen unter Sektionen mit verschiedenen DEFNAMEs. Die Namen sind wichtig, nicht der Inhalt, da man wahrscheinlich nie eine eigene Liste von Namen anlegen wird. Ich benutze diesen Emulator seit Jahren und habe nie diese Datei verändert.
Um auf die Liste der Namen zugreifen zu können, benutzt man das hier:
NAME=#NAMES_HUMANMALE
Das ersetzt automatisch auf einen Zufallsnamen aus der Liste NAMES_HUMANMALE.
Um eine Liste von Namen zu erstellen, sieht das so aus:
[NAMES EIN_DEFNAME]
ANZAHL_DER_NAMEN
NAMEN
Beispielsweise:
[NAMES NAMES_SPECIAL]
2
Hil
Hol
Schwierig, hm? Eigentlich wollte ich dafür keinen Abschnitt schreiben ...
sphere_newb.scp
Ich habs getan - kein eitler Humor unter diesem Titel! :)
Auf jeden Fall ist diese Datei oft Gegenstand vieler Fragen. "Wie sorge ich dafür, dass meine Spieler mit 10000 Gold anfangen?" oder "Wie gebe ich allen Schmieden 800 Barren?" Ich sag nicht, dass das sinnvoll wäre, aber in dieser Datei können solche Dinge geregelt werden.
[NEWBIE MALE_DEFAULT]
// Male Generic Starting Clothes
ITEMNEWBIE=i_shirt_plain
COLOR=colors_all
ITEMNEWBIE=random_pants
COLOR=colors_neutral
ITEMNEWBIE=random_shoes
COLOR=colors_neutral
ITEMNEWBIE=i_dagger
ITEMNEWBIE=i_candle
ITEMNEWBIE=i_book_sm
ITEMNEWBIE=i_gold,100
So sieht ein typisches Skript aus. Wie eine große Template, nicht wahr? Dafür gibts einen Grund. Es ist ein Template, es steht nur ITEMNEWBIE statt ITEM drin. In Kapitel 1 steht über Templates alles, was man wissen muss und genau so funktioniert das auch hier.
Das einzige wichtige in diesen Sektionen ist: alles MUSS einen eindeutigen Namen haben, den der Server finden kann. Es kann keine weitere Newbie-Sektion hinzugüfgt werden, so sehr das auch gewollt werden würde - sorry.
sphere_skill.scp (SKILLCLASSES)
Skill Klassen legen fest, wie weit Skills/Stats gesteigert werden können und es können zudem Trigger angelegt werden. Ein Skillclass Skript sieht so aus:
[SKILLCLASS 0]
// undeclared class.
// max skills for players of this skill class.
// might want this to be all 50.0 to make people declare a class?
DEFNAME=Class_undeclared
NAME=undeclared
// EVENTS=e_ClassUndeclared
STATSUM=300
SKILLSUM=10000.0
STR=100
INT=100
DEX=100
ALCHEMY=100.0
ANATOMY=100.0
ITEMID=100.0
ARMSLORE=100.0
and so on...
Um es zu verstehen:
EVENTS: Bedeutet, dass jeder mit dieser Skillclass auch die hier angegebenen Ereignisse auslöst. (mehrere EVENTS werden mit Komma getrennt, bspw: EVENTS=e_1,e_2 usw).
STATSUM: Gibt eine Obergrenze für die Summe der Stats an. Bspw: ich hab 100 Str, 100 Dex und 100 Int, dann hab ich 300 und damit STATSUM erreicht, ich kann nicht mehr erreichen (außer mit magischen Gegenständen und sowas).
SKILLSUM: Wie STATSUM, nur für Skills.
STR/DEX/INT: Obergrenze für einen spezifischen Stat (außer mit magischen Gegenständen und sowas).
ALCHEMY: Wie STR/DEX/INT, nur für Skills (in diesem Fall Alchemy, aber kann auch jeder andere sein).
sphere_serv_triggers.scp
Diese Datei enthält spezielle Trigger "Functions", die vom Server bei bestimmten Ereignissen aufgerufen werden. Darunter gibt es eine Liste von Funktionen, die in dieser Datei gefunden werden und manche haben auch eine Erklärung dabei:
f_onaccount_login
Wird aufgerufen, wenn ein Client das Passwort eingegeben hat.
- ARGS --> Benutzername des Clients, der einloggen möchte
- ARGO --> Referenz zum Client selbst
- RETURN 0 --> nichts tun (also Login weiterlaufen lassen)
- RETURN 1 --> die Verbindung zum Client trennen
f_onaccount_delete
Diese Funktion wird aufgerufen, bevor ein Account gelöscht wird.
- ARGS --> Benutername des Accounts
- RETURN 0 --> Löschen zulassen
- RETURN 1 --> Löschen verhindern
f_onchar_create
f_onchar_delete
f_onserver_start
f_onserver_save
f_onserver_save_ok
f_onserver_save_fail
f_onserver_save_finished
f_onserver_exit
f_onserver_blockip