Chris Miles 0550fcfd3f
[GM Commands] Split GM Commands Into Separate Files (#1766)
* Split GM commands into their own files

* Code cleanup
2021-11-14 22:48:47 -06:00

184 lines
6.3 KiB
Go

package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"sort"
"strings"
)
func main() {
// zone/command.cpp
commands, err := os.ReadFile("./zone/command.cpp")
if err != nil {
log.Fatal(err)
}
commandsString := string(commands)
s := strings.Split(commandsString, "void command_")
commandFiles := []string{}
if len(s) > 1 {
startListing := false
for i, chunk := range s {
if strings.Contains(chunk, "logcommand(Client *c") {
startListing = true
}
// get function name
functionName := ""
nameSplit := strings.Split(chunk, "(Client")
if len(nameSplit) > 0 {
functionName = strings.TrimSpace(nameSplit[0])
}
if startListing &&
len(s[i-1]) > 0 &&
!strings.Contains(s[i-1], "#ifdef") &&
!strings.Contains(chunk, "#ifdef") &&
!strings.Contains(chunk, "#ifdef BOTS") &&
!strings.Contains(chunk, "#ifdef EQPROFILE") &&
!strings.Contains(functionName, "bot") &&
!strings.Contains(functionName, "help") &&
!strings.Contains(functionName, "findaliases") {
fmt.Println(functionName)
// build command file name
commandFile := fmt.Sprintf("zone/gm_commands/%v.cpp", functionName)
// append command file nam eto list
commandFiles = append(commandFiles, commandFile)
includes := ""
if strings.Contains(chunk, "Client") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../client.h\"")
}
if strings.Contains(chunk, "parse->") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../quest_parser_collection.h\"")
}
if strings.Contains(chunk, "worldserver.") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../worldserver.h\"")
includes = fmt.Sprintf("%v%v\n", includes, "extern WorldServer worldserver;")
}
if strings.Contains(chunk, "RegionType") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../water_map.h\"")
}
if strings.Contains(chunk, "Corpse") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../corpse.h\"")
}
if strings.Contains(chunk, "Object") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../object.h\"")
}
if strings.Contains(chunk, "DoorManipulation") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"door_manipulation.h\"")
}
if strings.Contains(chunk, "Group") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../groups.h\"")
}
if strings.Contains(chunk, "httplib") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../common/http/httplib.h\"")
}
if strings.Contains(chunk, "guild_mgr") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../guild_mgr.h\"")
}
if strings.Contains(chunk, "expedition") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../expedition.h\"")
}
if strings.Contains(chunk, "DataBucket::") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../data_bucket.h\"")
}
if strings.Contains(chunk, "file_exists") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../common/file_util.h\"")
}
if strings.Contains(chunk, "std::thread") {
includes = fmt.Sprintf("%v%v\n", includes, "#include <thread>")
}
if strings.Contains(chunk, "Door") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../doors.h\"")
}
if strings.Contains(chunk, "NOW_INVISIBLE") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../string_ids.h\"")
}
if strings.Contains(chunk, "Expansion::") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../common/content/world_content_service.h\"")
}
if strings.Contains(chunk, "MobMovementManager::") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../mob_movement_manager.h\"")
}
if strings.Contains(chunk, "MobStuckBehavior::") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../mob_movement_manager.h\"")
}
if strings.Contains(chunk, "ReloadAllPatches") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../common/patches/patches.h\"")
}
if strings.Contains(chunk, "ProfanityManager") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../common/profanity_manager.h\"")
}
if strings.Contains(chunk, "npc_scale_manager") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../npc_scale_manager.h\"")
}
if strings.Contains(chunk, "g_Math") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../fastmath.h\"")
includes = fmt.Sprintf("%v%v\n", includes, "extern FastMath g_Math;")
}
if strings.Contains(chunk, "raid") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../raids.h\"")
}
if strings.Contains(chunk, "Raid") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../raids.h\"")
}
if strings.Contains(chunk, "GetOS") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../common/serverinfo.h\"")
}
if strings.Contains(chunk, "LANG_") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../common/languages.h\"")
}
if strings.Contains(chunk, "ServerOP_Shared") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../common/shared_tasks.h\"")
}
if strings.Contains(chunk, "title_manager") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../titles.h\"")
}
if strings.Contains(chunk, "CatchSignal") {
includes = fmt.Sprintf("%v%v\n", includes, "#include \"../../world/main.h\"")
}
// build the contents of the command file
commandString := fmt.Sprintf("%v\nvoid command_%v", includes, chunk)
//write file contents
err := ioutil.WriteFile(commandFile, []byte(commandString), 0777)
if err != nil {
fmt.Println(err)
}
commandOnly := fmt.Sprintf("void command_%v", chunk)
commandsString = strings.ReplaceAll(commandsString, commandOnly, "")
}
}
// rewrite commands.cpp with functions removed
err := ioutil.WriteFile("zone/command.cpp", []byte(commandsString), 0777)
if err != nil {
fmt.Println(err)
}
fmt.Println("# CmakeLists")
// sort a-z
sort.Slice(commandFiles, func(i, j int) bool {
return commandFiles[i] < commandFiles[j]
})
for _, file := range commandFiles {
file = strings.ReplaceAll(file, "zone/", "")
fmt.Println(file)
}
}
//fmt.Print(string(commands))
}