mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-02 19:42:05 -04:00
start of work moving commands to lua
This commit is contained in:
parent
1159c75ab8
commit
57b9d5ab99
@ -455,7 +455,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
return; // catch any invalid warps here
|
return; // catch any invalid warps here
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doWeather(ConnectedPlayer client, string weatherID, string value)
|
private void DoWeather(ConnectedPlayer client, string weatherID, string value)
|
||||||
{
|
{
|
||||||
ushort weather = Convert.ToUInt16(weatherID);
|
ushort weather = Convert.ToUInt16(weatherID);
|
||||||
|
|
||||||
@ -499,18 +499,55 @@ namespace FFXIVClassic_Map_Server
|
|||||||
|
|
||||||
internal bool DoCommand(string input, ConnectedPlayer client)
|
internal bool DoCommand(string input, ConnectedPlayer client)
|
||||||
{
|
{
|
||||||
|
if (!input.Any())
|
||||||
|
return false;
|
||||||
|
|
||||||
input.Trim();
|
input.Trim();
|
||||||
if (input.StartsWith("!"))
|
input = input.StartsWith("!") ? input.Substring(1) : input;
|
||||||
input = input.Substring(1);
|
|
||||||
|
var split = input.Split('"')
|
||||||
|
.Select((str, index) => index % 2 == 0
|
||||||
|
? str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
|
||||||
|
: new String[] { str }
|
||||||
|
)
|
||||||
|
.SelectMany(str => str).ToArray();
|
||||||
|
|
||||||
String[] split = input.Split(' ');
|
|
||||||
split = split.Select(temp => temp.ToLower()).ToArray(); // Ignore case on commands
|
split = split.Select(temp => temp.ToLower()).ToArray(); // Ignore case on commands
|
||||||
split = split.Where(temp => temp != "").ToArray(); // strips extra whitespace from commands
|
|
||||||
|
|
||||||
// Debug
|
var cmd = split?.ElementAt(0);
|
||||||
//SendMessage(client, string.Join(",", split));
|
|
||||||
|
|
||||||
if (split.Length >= 1)
|
if (cmd.Any())
|
||||||
|
{
|
||||||
|
// if client isnt null, take player to be the player actor
|
||||||
|
var player = client?.GetActor();
|
||||||
|
|
||||||
|
if (cmd.Equals("help"))
|
||||||
|
{
|
||||||
|
// if there's another string after this, take it as the command we want the description for
|
||||||
|
if (split.Length > 1)
|
||||||
|
{
|
||||||
|
LuaEngine.RunGMCommand(player, split[1], null, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// print out all commands
|
||||||
|
foreach (var str in Directory.GetFiles("./scripts/commands/gm/"))
|
||||||
|
{
|
||||||
|
var c = str.Replace(".lua", "");
|
||||||
|
c = c.Replace("./scripts/commands/gm/", "");
|
||||||
|
|
||||||
|
LuaEngine.RunGMCommand(player, c, null, true);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
LuaEngine.RunGMCommand(player, cmd.ToString(), split.ToArray());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Debug
|
||||||
|
//SendMessage(client, string.Join(",", split));
|
||||||
|
|
||||||
|
if (split.Length >= 1)
|
||||||
{
|
{
|
||||||
#region !help
|
#region !help
|
||||||
if (split[0].Equals("help"))
|
if (split[0].Equals("help"))
|
||||||
@ -582,7 +619,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
doWeather(client, split[2], split[3]);
|
DoWeather(client, split[2], split[3]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -622,7 +659,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
client.GetActor().SendInstanceUpdate();
|
client.GetActor().SendInstanceUpdate();
|
||||||
client.QueuePacket(BasePacket.CreatePacket(SendMessagePacket.BuildPacket(client.actorID, client.actorID, SendMessagePacket.MESSAGE_TYPE_GENERAL_INFO, "", String.Format("Reseting zone {0}...", client.GetActor().zoneId)), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(SendMessagePacket.BuildPacket(client.actorID, client.actorID, SendMessagePacket.MESSAGE_TYPE_GENERAL_INFO, "", String.Format("Reseting zone {0}...", client.GetActor().zoneId)), true, false));
|
||||||
}
|
}
|
||||||
Server.GetWorldManager().reloadZone(client.GetActor().zoneId);
|
Server.GetWorldManager().ReloadZone(client.GetActor().zoneId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -464,7 +464,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
LuaEngine.OnZoneIn(player);
|
LuaEngine.OnZoneIn(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reloadZone(uint zoneId)
|
public void ReloadZone(uint zoneId)
|
||||||
{
|
{
|
||||||
if (!zoneList.ContainsKey(zoneId))
|
if (!zoneList.ContainsKey(zoneId))
|
||||||
return;
|
return;
|
||||||
|
@ -95,7 +95,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
{
|
{
|
||||||
SubPacket spawnPacket;
|
SubPacket spawnPacket;
|
||||||
|
|
||||||
spawnPacket = SetActorPositionPacket.BuildPacket(actorId, playerActorId, 0xFFFFFFFF, positionX, positionY, positionZ, rotation, spawnType, false);
|
spawnPacket = SetActorPositionPacket.BuildPacket(actorId, playerActorId, 0xFFFFFFFF, positionX, positionY, positionZ, rotation, spawnType, false);
|
||||||
|
|
||||||
//return SetActorPositionPacket.BuildPacket(actorId, playerActorId, -211.895477f, 190.000000f, 29.651011f, 2.674819f, SetActorPositionPacket.SPAWNTYPE_PLAYERWAKE);
|
//return SetActorPositionPacket.BuildPacket(actorId, playerActorId, -211.895477f, 190.000000f, 29.651011f, 2.674819f, SetActorPositionPacket.SPAWNTYPE_PLAYERWAKE);
|
||||||
|
|
||||||
@ -335,7 +335,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
className = className.Substring(0, 20 - zoneName.Length);
|
className = className.Substring(0, 20 - zoneName.Length);
|
||||||
}
|
}
|
||||||
catch (ArgumentOutOfRangeException e)
|
catch (ArgumentOutOfRangeException e)
|
||||||
{}
|
{ }
|
||||||
|
|
||||||
//Convert actor number to base 63
|
//Convert actor number to base 63
|
||||||
string classNumber = Utils.ToStringBase63(actorNumber);
|
string classNumber = Utils.ToStringBase63(actorNumber);
|
||||||
@ -349,6 +349,34 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
actorName = String.Format("{0}_{1}_{2}@{3:X3}{4:X2}", className, zoneName, classNumber, zoneId, privLevel);
|
actorName = String.Format("{0}_{1}_{2}@{3:X3}{4:X2}", className, zoneName, classNumber, zoneId, privLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<float> GetPos()
|
||||||
|
{
|
||||||
|
List<float> pos = new List<float>();
|
||||||
|
|
||||||
|
pos.Add(positionX);
|
||||||
|
pos.Add(positionY);
|
||||||
|
pos.Add(positionZ);
|
||||||
|
pos.Add(rotation);
|
||||||
|
pos.Add(zoneId);
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetPos(float x, float y, float z, float rot = 0, uint zoneId = 0)
|
||||||
|
{
|
||||||
|
oldPositionX = positionX;
|
||||||
|
oldPositionY = positionY;
|
||||||
|
oldPositionZ = positionZ;
|
||||||
|
oldRotation = rotation;
|
||||||
|
|
||||||
|
positionX = x;
|
||||||
|
positionY = y;
|
||||||
|
positionZ = z;
|
||||||
|
rotation = rot;
|
||||||
|
|
||||||
|
// todo: handle zone?
|
||||||
|
zone.BroadcastPacketAroundActor(this, MoveActorToPositionPacket.BuildPacket(this.actorId, this.actorId, x, y, z, rot, moveState));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,7 +292,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
{
|
{
|
||||||
if (a is Player)
|
if (a is Player)
|
||||||
{
|
{
|
||||||
if (((Player)a).customDisplayName.Equals(name))
|
if (((Player)a).customDisplayName.ToLower().Equals(name.ToLower()))
|
||||||
return (Player)a;
|
return (Player)a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using FFXIVClassic.Common;
|
using FFXIVClassic_Map_Server.packets;
|
||||||
using FFXIVClassic_Map_Server.packets;
|
|
||||||
using FFXIVClassic_Map_Server.actors.director;
|
using FFXIVClassic_Map_Server.actors.director;
|
||||||
using FFXIVClassic_Map_Server.Actors;
|
using FFXIVClassic_Map_Server.Actors;
|
||||||
using FFXIVClassic_Map_Server.dataobjects;
|
using FFXIVClassic_Map_Server.dataobjects;
|
||||||
@ -12,6 +11,7 @@ using MoonSharp.Interpreter.Loaders;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace FFXIVClassic_Map_Server.lua
|
namespace FFXIVClassic_Map_Server.lua
|
||||||
{
|
{
|
||||||
@ -42,7 +42,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
if (script == null)
|
if (script == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
DynValue result = script.Call(script.Globals["init"], target);
|
DynValue result = RunScript(script, script.Globals["init"], target);
|
||||||
List<LuaParam> lparams = LuaUtils.CreateLuaParamList(result);
|
List<LuaParam> lparams = LuaUtils.CreateLuaParamList(result);
|
||||||
return lparams;
|
return lparams;
|
||||||
}
|
}
|
||||||
@ -95,7 +95,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onEventStarted").IsNil())
|
if (!script.Globals.Get("onEventStarted").IsNil())
|
||||||
script.Call(script.Globals["onEventStarted"], objects.ToArray());
|
RunScript(script, script.Globals["onEventStarted"], objects.ToArray());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -117,7 +117,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onSpawn").IsNil())
|
if (!script.Globals.Get("onSpawn").IsNil())
|
||||||
script.Call(script.Globals["onSpawn"], player, target);
|
RunScript(script, script.Globals["onSpawn"], player, target);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -159,7 +159,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onEventUpdate").IsNil())
|
if (!script.Globals.Get("onEventUpdate").IsNil())
|
||||||
script.Call(script.Globals["onEventUpdate"], objects.ToArray());
|
RunScript(script, script.Globals["onEventUpdate"], objects.ToArray());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -180,7 +180,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onZoneIn").IsNil())
|
if (!script.Globals.Get("onZoneIn").IsNil())
|
||||||
script.Call(script.Globals["onZoneIn"], player);
|
RunScript(script, script.Globals["onZoneIn"], player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,7 +195,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onBeginLogin").IsNil())
|
if (!script.Globals.Get("onBeginLogin").IsNil())
|
||||||
script.Call(script.Globals["onBeginLogin"], player);
|
RunScript(script, script.Globals["onBeginLogin"], player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,28 +210,174 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onLogin").IsNil())
|
if (!script.Globals.Get("onLogin").IsNil())
|
||||||
script.Call(script.Globals["onLogin"], player);
|
RunScript(script, script.Globals["onLogin"], player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region RunGMCommand
|
||||||
|
public static void RunGMCommand(Player player, String cmd, string[] param, bool help = false)
|
||||||
|
{
|
||||||
|
// load from scripts/commands/gm/ directory
|
||||||
|
var path = String.Format("./scripts/commands/gm/{0}.lua", cmd.ToString().ToLower());
|
||||||
|
|
||||||
|
// check if the file exists
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
// load global functions
|
||||||
|
Script script = LoadGlobals();
|
||||||
|
|
||||||
|
// see if this script has any syntax errors
|
||||||
|
try
|
||||||
|
{
|
||||||
|
script.DoFile(path);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Program.Log.Error("LuaEngine.RunGMCommand: {0}.", e.Message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// can we run this script
|
||||||
|
if (!script.Globals.Get("onTrigger").IsNil())
|
||||||
|
{
|
||||||
|
// can i run this command
|
||||||
|
var permissions = 0;
|
||||||
|
|
||||||
|
// parameter types (string, integer, double, float)
|
||||||
|
var parameters = "";
|
||||||
|
var description = "!" + cmd + ": ";
|
||||||
|
|
||||||
|
// get the properties table
|
||||||
|
var res = script.Globals.Get("properties");
|
||||||
|
|
||||||
|
// make sure properties table exists
|
||||||
|
if (!res.IsNil())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// returns table if one is found
|
||||||
|
var table = res.Table;
|
||||||
|
|
||||||
|
// find each key/value pair
|
||||||
|
foreach (var pair in table.Pairs)
|
||||||
|
{
|
||||||
|
if (pair.Key.String == "permissions")
|
||||||
|
{
|
||||||
|
permissions = (int)pair.Value.Number;
|
||||||
|
}
|
||||||
|
else if (pair.Key.String == "parameters")
|
||||||
|
{
|
||||||
|
parameters = pair.Value.String;
|
||||||
|
}
|
||||||
|
else if (pair.Key.String == "description")
|
||||||
|
{
|
||||||
|
description = pair.Value.String;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) { Program.Log.Error("LuaEngine.RunGMCommand: " + e.Message); return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// if this isnt a console command, make sure player exists
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
if (permissions > 0 && !player.isGM)
|
||||||
|
{
|
||||||
|
Program.Log.Info("LuaEngine.RunGMCommand: {0}'s GM level is too low to use command {1}.", player.actorName, cmd);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// i hate to do this, but cant think of a better way to keep !help
|
||||||
|
else if (help)
|
||||||
|
{
|
||||||
|
player.SendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, String.Format("[Commands] [{0}]", cmd), description);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (help)
|
||||||
|
{
|
||||||
|
Program.Log.Info("[Commands] [{0}]: {1}", cmd, description);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// we'll push our lua params here
|
||||||
|
List<object> LuaParam = new List<object>();
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
for (; i < parameters.Length; ++i)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// convert chat parameters to command parameters
|
||||||
|
switch (parameters[i])
|
||||||
|
{
|
||||||
|
case 'i':
|
||||||
|
LuaParam.Add(Convert.ChangeType(param[i + 1], typeof(int)));
|
||||||
|
continue;
|
||||||
|
case 'd':
|
||||||
|
LuaParam.Add(Convert.ChangeType(param[i + 1], typeof(double)));
|
||||||
|
continue;
|
||||||
|
case 'f':
|
||||||
|
LuaParam.Add(Convert.ChangeType(param[i + 1], typeof(float)));
|
||||||
|
continue;
|
||||||
|
case 's':
|
||||||
|
LuaParam.Add(param[i + 1]);
|
||||||
|
continue;
|
||||||
|
default:
|
||||||
|
Program.Log.Info("LuaEngine.RunGMCommand: {0} unknown parameter {1}.", path, parameters[i]);
|
||||||
|
LuaParam.Add(param[i + 1]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (e is IndexOutOfRangeException) break;
|
||||||
|
LuaParam.Add(param[i + 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// the script can double check the player exists, we'll push them anyways
|
||||||
|
LuaParam.Insert(0, player);
|
||||||
|
// push the arg count too
|
||||||
|
LuaParam.Insert(1, i);
|
||||||
|
|
||||||
|
// run the script
|
||||||
|
RunScript(script, script.Globals["onTrigger"], LuaParam.ToArray());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Program.Log.Error("LuaEngine.RunGMCommand: Unable to find script {0}", path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public static Script LoadScript(string filename)
|
public static Script LoadScript(string filename)
|
||||||
{
|
{
|
||||||
Script script = new Script();
|
Script script = LoadGlobals();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
script.DoFile(filename);
|
||||||
|
}
|
||||||
|
catch (SyntaxErrorException e)
|
||||||
|
{
|
||||||
|
Program.Log.Error("LUAERROR: {0}.", e.DecoratedMessage);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return script;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Script LoadGlobals(Script script = null)
|
||||||
|
{
|
||||||
|
script = script ?? new Script();
|
||||||
|
|
||||||
|
// register and load all global functions here
|
||||||
((FileSystemScriptLoader)script.Options.ScriptLoader).ModulePaths = FileSystemScriptLoader.UnpackStringPaths("./scripts/?;./scripts/?.lua");
|
((FileSystemScriptLoader)script.Options.ScriptLoader).ModulePaths = FileSystemScriptLoader.UnpackStringPaths("./scripts/?;./scripts/?.lua");
|
||||||
script.Globals["GetWorldManager"] = (Func<WorldManager>)Server.GetWorldManager;
|
script.Globals["GetWorldManager"] = (Func<WorldManager>)Server.GetWorldManager;
|
||||||
script.Globals["GetStaticActor"] = (Func<string, Actor>)Server.GetStaticActors;
|
script.Globals["GetStaticActor"] = (Func<string, Actor>)Server.GetStaticActors;
|
||||||
script.Globals["GetWorldMaster"] = (Func<Actor>)Server.GetWorldManager().GetActor;
|
script.Globals["GetWorldMaster"] = (Func<Actor>)Server.GetWorldManager().GetActor;
|
||||||
script.Globals["GetItemGamedata"] = (Func<uint, Item>)Server.GetItemGamedata;
|
script.Globals["GetItemGamedata"] = (Func<uint, Item>)Server.GetItemGamedata;
|
||||||
|
|
||||||
try
|
script.Options.DebugPrint = s => { Program.Log.Debug(s); };
|
||||||
{
|
|
||||||
script.DoFile(filename);
|
|
||||||
}
|
|
||||||
catch(SyntaxErrorException e)
|
|
||||||
{
|
|
||||||
Program.Log.Error("LUAERROR: {0}.", e.DecoratedMessage);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +403,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onTalked").IsNil())
|
if (!script.Globals.Get("onTalked").IsNil())
|
||||||
script.Call(script.Globals["onTalked"], player, npc);
|
RunScript(script, script.Globals["onTalked"], player, npc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -278,12 +424,154 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onCommand").IsNil())
|
if (!script.Globals.Get("onCommand").IsNil())
|
||||||
script.Call(script.Globals["onCommand"], player, command);
|
RunScript(script, script.Globals["onCommand"], player, command);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SendError(player, String.Format("ERROR: Could not find script for director {0}.", director.GetName()));
|
SendError(player, String.Format("ERROR: Could not find script for director {0}.", director.GetName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#region RunScript
|
||||||
|
//
|
||||||
|
// Summary:
|
||||||
|
// Calls the specified function.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// function:
|
||||||
|
// The Lua/MoonSharp function to be called
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// The return value(s) of the function call.
|
||||||
|
//
|
||||||
|
// Exceptions:
|
||||||
|
// T:System.ArgumentException:
|
||||||
|
// Thrown if function is not of DataType.Function
|
||||||
|
public static DynValue RunScript(Script script, DynValue function)
|
||||||
|
{
|
||||||
|
DynValue res = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res = script.Call(function);
|
||||||
|
}
|
||||||
|
catch (InterpreterException e)
|
||||||
|
{
|
||||||
|
Program.Log.Error(e.DecoratedMessage);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Summary:
|
||||||
|
// Calls the specified function.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// function:
|
||||||
|
// The Lua/MoonSharp function to be called
|
||||||
|
//
|
||||||
|
// Exceptions:
|
||||||
|
// T:System.ArgumentException:
|
||||||
|
// Thrown if function is not of DataType.Function
|
||||||
|
public static DynValue RunScript(Script script, object function)
|
||||||
|
{
|
||||||
|
DynValue res = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res = script.Call(function);
|
||||||
|
}
|
||||||
|
catch (InterpreterException e)
|
||||||
|
{
|
||||||
|
Program.Log.Error(e.DecoratedMessage);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Summary:
|
||||||
|
// Calls the specified function.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// function:
|
||||||
|
// The Lua/MoonSharp function to be called
|
||||||
|
//
|
||||||
|
// args:
|
||||||
|
// The arguments to pass to the function.
|
||||||
|
//
|
||||||
|
// Exceptions:
|
||||||
|
// T:System.ArgumentException:
|
||||||
|
// Thrown if function is not of DataType.Function
|
||||||
|
public static DynValue RunScript(Script script, object function, params object[] args)
|
||||||
|
{
|
||||||
|
DynValue res = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res = script.Call(function, args);
|
||||||
|
}
|
||||||
|
catch (InterpreterException e)
|
||||||
|
{
|
||||||
|
Program.Log.Error(e.DecoratedMessage);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Summary:
|
||||||
|
// Calls the specified function.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// function:
|
||||||
|
// The Lua/MoonSharp function to be called
|
||||||
|
//
|
||||||
|
// args:
|
||||||
|
// The arguments to pass to the function.
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// The return value(s) of the function call.
|
||||||
|
//
|
||||||
|
// Exceptions:
|
||||||
|
// T:System.ArgumentException:
|
||||||
|
// Thrown if function is not of DataType.Function
|
||||||
|
public static DynValue RunScript(Script script, DynValue function, params DynValue[] args)
|
||||||
|
{
|
||||||
|
DynValue res = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res = script.Call(function, args);
|
||||||
|
}
|
||||||
|
catch (InterpreterException e)
|
||||||
|
{
|
||||||
|
Program.Log.Error(e.DecoratedMessage);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Summary:
|
||||||
|
// Calls the specified function.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// function:
|
||||||
|
// The Lua/MoonSharp function to be called
|
||||||
|
//
|
||||||
|
// args:
|
||||||
|
// The arguments to pass to the function.
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// The return value(s) of the function call.
|
||||||
|
//
|
||||||
|
// Exceptions:
|
||||||
|
// T:System.ArgumentException:
|
||||||
|
// Thrown if function is not of DataType.Function
|
||||||
|
public static DynValue RunScript(Script script, DynValue function, params object[] args)
|
||||||
|
{
|
||||||
|
DynValue res = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res = script.Call(function, args);
|
||||||
|
}
|
||||||
|
catch (InterpreterException e)
|
||||||
|
{
|
||||||
|
Program.Log.Error(e.DecoratedMessage);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
9
data/scripts/commands/gm/command - Copy (2).lua
Normal file
9
data/scripts/commands/gm/command - Copy (2).lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "",
|
||||||
|
description = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player)
|
||||||
|
|
||||||
|
end;
|
9
data/scripts/commands/gm/command - Copy (3).lua
Normal file
9
data/scripts/commands/gm/command - Copy (3).lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "",
|
||||||
|
description = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player)
|
||||||
|
|
||||||
|
end;
|
9
data/scripts/commands/gm/command - Copy (4).lua
Normal file
9
data/scripts/commands/gm/command - Copy (4).lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "",
|
||||||
|
description = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player)
|
||||||
|
|
||||||
|
end;
|
9
data/scripts/commands/gm/command - Copy (5).lua
Normal file
9
data/scripts/commands/gm/command - Copy (5).lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "",
|
||||||
|
description = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player)
|
||||||
|
|
||||||
|
end;
|
9
data/scripts/commands/gm/command - Copy (6).lua
Normal file
9
data/scripts/commands/gm/command - Copy (6).lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "",
|
||||||
|
description = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player)
|
||||||
|
|
||||||
|
end;
|
9
data/scripts/commands/gm/command - Copy (7).lua
Normal file
9
data/scripts/commands/gm/command - Copy (7).lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "",
|
||||||
|
description = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player)
|
||||||
|
|
||||||
|
end;
|
22
data/scripts/commands/gm/giveitem.lua
Normal file
22
data/scripts/commands/gm/giveitem.lua
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "ssss",
|
||||||
|
description = "adds <item> <qty> to <location> for <target>. <qty> and <location> are optional, item is added to user if <target> is nil",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, item, qty, location, target)
|
||||||
|
local sender = "[giveitem] ";
|
||||||
|
player = GetWorldManager():GetPCInWorld(target) or player;
|
||||||
|
if player then
|
||||||
|
item = tonumber(item) or nil;
|
||||||
|
qty = tonumber(qty) or 1;
|
||||||
|
location = tonumber(itemtype) or INVENTORY_NORMAL;
|
||||||
|
|
||||||
|
if item then
|
||||||
|
player:GetInventory(location):AddItem(item, qty);
|
||||||
|
player:SendMessage(MSG_TYPE_SYSTEM_ERROR, "[giveitem] ", string.format("Added item %u to %s", item, player:GetName());
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
end;
|
19
data/scripts/commands/gm/graphic.lua
Normal file
19
data/scripts/commands/gm/graphic.lua
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "sssss",
|
||||||
|
description = [[changes appearance for equipment in <slot>. Parameters: <slot> <wId> <eId> <vId> <cId>,
|
||||||
|
idk what any of those mean either]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, slot, wId, eId, vId, cId)
|
||||||
|
slot = tonumber(slot) or 0;
|
||||||
|
wId = tonumber(wId) or 0;
|
||||||
|
eId = tonumber(eId) or 0;
|
||||||
|
vId = tonumber(vId) or 0;
|
||||||
|
cId = tonumber(cId) or 0;
|
||||||
|
|
||||||
|
if player then
|
||||||
|
player:GraphicChange(slot, wId, eId, vId, cId);
|
||||||
|
player:SendAppearance();
|
||||||
|
end;
|
||||||
|
end;
|
10
data/scripts/commands/gm/music.lua
Normal file
10
data/scripts/commands/gm/music.lua
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "s",
|
||||||
|
description = "plays music <id> to player",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, music)
|
||||||
|
music = tonumber(music) or 0;
|
||||||
|
player:ChangeMusic(music);
|
||||||
|
end;
|
22
data/scripts/commands/gm/mypos.lua
Normal file
22
data/scripts/commands/gm/mypos.lua
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "",
|
||||||
|
description = "prints your current in-game position (different to map coords)",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player)
|
||||||
|
local pos = player:GetPos();
|
||||||
|
local x = pos[0];
|
||||||
|
local y = pos[1];
|
||||||
|
local z = pos[2];
|
||||||
|
local rot = pos[3];
|
||||||
|
local zone = pos[4];
|
||||||
|
|
||||||
|
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
|
||||||
|
local sender = "[mypos] ";
|
||||||
|
local message = string.format("current position X:%d Y:%d Z:%d (Rotation: %d) Zone:%d", x, y, z, rot, zone);
|
||||||
|
|
||||||
|
player:SendMessage(messageID, sender, message);
|
||||||
|
end;
|
23
data/scripts/commands/gm/reloadzone.lua
Normal file
23
data/scripts/commands/gm/reloadzone.lua
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "s",
|
||||||
|
description = "reloads <zone>",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, zone)
|
||||||
|
if not zone or tonumber(zone) == 0 then
|
||||||
|
printf("%s is not a valid zone!", zone);
|
||||||
|
return;
|
||||||
|
end;
|
||||||
|
|
||||||
|
zone = tonumber(zone);
|
||||||
|
|
||||||
|
if player then
|
||||||
|
local messageID = MSG_TYPE_SYSTEM_ERROR;
|
||||||
|
player:SendMessage(messageID, "[reloadzones] ", string.format("Reloading zone: %u", zone));
|
||||||
|
end;
|
||||||
|
|
||||||
|
GetWorldManager():ReloadZone(zone);
|
||||||
|
end;
|
9
data/scripts/commands/gm/test.lua
Normal file
9
data/scripts/commands/gm/test.lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "sss",
|
||||||
|
description = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc)
|
||||||
|
-- todo: change weather
|
||||||
|
end;
|
78
data/scripts/commands/gm/warp.lua
Normal file
78
data/scripts/commands/gm/warp.lua
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "sssssss",
|
||||||
|
description = [[
|
||||||
|
<zone> |
|
||||||
|
<zone> <x> <y> <z> |
|
||||||
|
<x> <y> <z> <zone> <privateArea> <target name>.
|
||||||
|
]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, p1, p2, p3, p4, privateArea, firstName, lastName)
|
||||||
|
|
||||||
|
if firstName then
|
||||||
|
if lastName then
|
||||||
|
player = GetWorldManager():GetPCInWorld(firstName.." "..lastName) or nil;
|
||||||
|
else
|
||||||
|
player = GetWorldManager():GetPCInWorld(firstName) or nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if not player then
|
||||||
|
printf("[Command] [warp] error! No target or player specified!");
|
||||||
|
return;
|
||||||
|
end;
|
||||||
|
|
||||||
|
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
|
||||||
|
local sender = "[warp] ";
|
||||||
|
|
||||||
|
-- we're getting a list/array from c# so 0 index
|
||||||
|
local pos = player:GetPos();
|
||||||
|
local player_x = pos[0];
|
||||||
|
local player_y = pos[1];
|
||||||
|
local player_z = pos[2];
|
||||||
|
local player_rot = pos[3];
|
||||||
|
local player_zone = pos[4];
|
||||||
|
|
||||||
|
local worldManager = GetWorldManager();
|
||||||
|
|
||||||
|
-- treat this as a predefined warp list
|
||||||
|
if argc == 1 then
|
||||||
|
zone = tonumber(p1) or player_zone;
|
||||||
|
player:SendMessage(messageID, sender, string.format("warping to zone:%u", zone));
|
||||||
|
worldManager:DoZoneChange(player, zone);
|
||||||
|
|
||||||
|
elseif argc >= 3 then
|
||||||
|
|
||||||
|
if argc == 3 then
|
||||||
|
local x = tonumber(applyPositionOffset(p1, player_x)) or player_x;
|
||||||
|
local y = tonumber(applyPositionOffset(p2, player_y)) or player_y;
|
||||||
|
local z = tonumber(applyPositionOffset(p3, player_z)) or player_z;
|
||||||
|
|
||||||
|
player:SendMessage(messageID, sender, string.format("setting coordinates X:%d Y:%d Z:%d within current zone (%d)", x, y, z, player_zone));
|
||||||
|
worldManager:DoPlayerMoveInZone(player, x, y, z, 0x0F);
|
||||||
|
else
|
||||||
|
local zone = tonumber(applyPositionOffset(p1, player_zone)) or player_zone;
|
||||||
|
local x = tonumber(applyPositionOffset(p2, player_x)) or player_x;
|
||||||
|
local y = tonumber(applyPositionOffset(p3, player_y)) or player_y;
|
||||||
|
local z = tonumber(applyPositionOffset(p4, player_z)) or player_z;
|
||||||
|
if privateArea == "" then privateArea = nil end;
|
||||||
|
player:SendMessage(messageID, sender, string.format("setting coordinates X:%d Y:%d Z:%d to new zone (%d) private area:%s", x, y, z, zone, privateArea or "unspecified"));
|
||||||
|
worldManager:DoZoneChange(player, zone, privateArea, 0x0F, x, y, z, 0.00);
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
player:SendMessage(messageID, sender, "Unknown parameters! Usage: "..properties.description);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function applyPositionOffset(str, offset)
|
||||||
|
local s = str;
|
||||||
|
print(s);
|
||||||
|
if s:find("@") then
|
||||||
|
s = tonumber(s:sub(s:find("@") + 1, s:len())) + offset;
|
||||||
|
end
|
||||||
|
return s;
|
||||||
|
end;
|
@ -4,7 +4,7 @@ Globals referenced in all of the lua scripts
|
|||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
--ACTOR STATES
|
-- ACTOR STATES
|
||||||
|
|
||||||
ACTORSTATE_PASSIVE = 0;
|
ACTORSTATE_PASSIVE = 0;
|
||||||
ACTORSTATE_DEAD1 = 1;
|
ACTORSTATE_DEAD1 = 1;
|
||||||
@ -13,3 +13,49 @@ ACTORSTATE_DEAD2 = 3;
|
|||||||
ACTORSTATE_SITTING_ONOBJ = 11;
|
ACTORSTATE_SITTING_ONOBJ = 11;
|
||||||
ACTORSTATE_SITTING_ONFLOOR = 13;
|
ACTORSTATE_SITTING_ONFLOOR = 13;
|
||||||
ACTORSTATE_MOUNTED = 15;
|
ACTORSTATE_MOUNTED = 15;
|
||||||
|
|
||||||
|
|
||||||
|
-- MESSAGE
|
||||||
|
MESSAGE_TYPE_NONE = 0;
|
||||||
|
MESSAGE_TYPE_SAY = 1;
|
||||||
|
MESSAGE_TYPE_SHOUT = 2;
|
||||||
|
MESSAGE_TYPE_TELL = 3;
|
||||||
|
MESSAGE_TYPE_PARTY = 4;
|
||||||
|
MESSAGE_TYPE_LINKSHELL1 = 5;
|
||||||
|
MESSAGE_TYPE_LINKSHELL2 = 6;
|
||||||
|
MESSAGE_TYPE_LINKSHELL3 = 7;
|
||||||
|
MESSAGE_TYPE_LINKSHELL4 = 8;
|
||||||
|
MESSAGE_TYPE_LINKSHELL5 = 9;
|
||||||
|
MESSAGE_TYPE_LINKSHELL6 = 10;
|
||||||
|
MESSAGE_TYPE_LINKSHELL7 = 11;
|
||||||
|
MESSAGE_TYPE_LINKSHELL8 = 12;
|
||||||
|
|
||||||
|
MESSAGE_TYPE_SAY_SPAM = 22;
|
||||||
|
MESSAGE_TYPE_SHOUT_SPAM = 23;
|
||||||
|
MESSAGE_TYPE_TELL_SPAM = 24;
|
||||||
|
MESSAGE_TYPE_CUSTOM_EMOTE = 25;
|
||||||
|
MESSAGE_TYPE_EMOTE_SPAM = 26;
|
||||||
|
MESSAGE_TYPE_STANDARD_EMOTE = 27;
|
||||||
|
MESSAGE_TYPE_URGENT_MESSAGE = 28;
|
||||||
|
MESSAGE_TYPE_GENERAL_INFO = 29;
|
||||||
|
MESSAGE_TYPE_SYSTEM = 32;
|
||||||
|
MESSAGE_TYPE_SYSTEM_ERROR = 33;
|
||||||
|
|
||||||
|
-- INVENTORY
|
||||||
|
INVENTORY_NORMAL = 0x0000; --Max 0xC8
|
||||||
|
INVENTORY_LOOT = 0x0004; --Max 0xA
|
||||||
|
INVENTORY_MELDREQUEST = 0x0005; --Max 0x04
|
||||||
|
INVENTORY_BAZAAR = 0x0007; --Max 0x0A
|
||||||
|
INVENTORY_CURRENCY = 0x0063; --Max 0x140
|
||||||
|
INVENTORY_KEYITEMS = 0x0064; --Max 0x500
|
||||||
|
INVENTORY_EQUIPMENT = 0x00FE; --Max 0x23
|
||||||
|
INVENTORY_EQUIPMENT_OTHERPLAYER = 0x00F9; --Max 0x23
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function printf(s, ...)
|
||||||
|
print(s:format(...));
|
||||||
|
end;
|
Loading…
Reference in New Issue
Block a user