Exemple #1
0
func CharacterInventory(w http.ResponseWriter, r *http.Request) {
	var err error

	if !isTemplateLoaded {
		err = LoadTemplates()
		if err != nil {
			log.Println("Error loading templates:", err.Error())
			//TODO: exit properly
			return
		}
	}

	config, err := eqemuconfig.GetConfig()
	if err != nil {
		log.Println("Error loading Config:", err.Error())
		//TODO: exit properly
		return
	}

	db, err := database.Connect(config)
	if err != nil {
		log.Println("Error connecting to DB:", err.Error())
		//TODO: exit properly
		return
	}
	defer db.Close()

	type Index struct {
		Name string
		*Site
		Character *character.CharacterOutput
	}

	resp := Index{
		Name: "Testing2",
		Site: SiteInit(),
		//Character: &character.CharacterOutput{}, //Name: "Testing!", Id: 123},
	}
	params := r.URL.Query()
	id := params.Get("cid")
	if len(id) == 0 {
		//log.Println("Empty ID!")

		id = "2"
	}

	resp.Character, err = character.GetById(db, id)

	if err != nil {
		log.Println("Error getting ID from DB:", err.Error())
		return
	}
	//resp := someStruct{}
	err = contentTemplate["character/inventory"].Execute(w, resp)
	if err != nil {
		log.Println("Error executing index", err.Error())
	}

}
Exemple #2
0
func ActionAdd(w http.ResponseWriter, r *http.Request) {
	log.Println("add!")
	var err error

	type Index struct {
		Status    int
		Message   string
		Inventory []*inventory.InventoryOutput
	}

	resp := Index{
		Status:  0,
		Message: "Unkown Error.",
	}
	resp.Message = "Add to character inventory"
	params, err := parseEventParameters(r)

	if err != nil {
		resp.Message = err.Error()
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding:", err.Error())
		}
		return
	}

	config, err := eqemuconfig.GetConfig()
	if err != nil {
		log.Println("Error getting config", err.Error())
		return
	}

	db, err := database.Connect(config)
	if err != nil {
		log.Println("Error connecting to DB:", err.Error())
		//TODO: exit properly
		return
	}

	err = inventory.ActionAdd(db, params)
	if err != nil {
		resp.Message = "Failed to add action: " + err.Error()
		log.Println("Failed to add action:" + err.Error())
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding post fail:", err.Error())
		}
		return
	}

	resp.Status = 1
	resp.Message = "Added action successfully."
	//resp.Message = fmt.Sprintf("There are %d inventory items.", len(inv))
	err = json.NewEncoder(w).Encode(resp)
	if err != nil {
		log.Println("Error requesting RestIndex:", err.Error())
	}
}
Exemple #3
0
func Load() (cfg *eqemuconfig.Config, err error) {
	if config != nil {
		cfg = config
		return
	}
	if config, err = eqemuconfig.GetConfig(); err != nil {
		return
	}
	cfg = config
	return
}
Exemple #4
0
func Start(addr string) (err error) {

	config, err := eqemuconfig.GetConfig()
	if err != nil {
		log.Println("Error loading config:", err.Error())
		fmt.Println("Press enter to exit.")
		exit := ""
		fmt.Scan(&exit)
		os.Exit(1)
	}
	//Do a quick DB test
	_, err = database.Connect(config)
	if err != nil {
		log.Println("Error connecting to DB:", err.Error())
		fmt.Println("Press enter to exit.")
		exit := ""
		fmt.Scan(&exit)
		os.Exit(1)
	}

	template.LoadTemplates()
	//r := pat.New()

	http.HandleFunc("/", Index)
	http.HandleFunc("/item/", template.ItemIndex)
	http.HandleFunc("/character/", template.CharacterSearch)
	http.HandleFunc("/character/search/", template.CharacterSearch)
	http.HandleFunc("/character/inventory/", template.CharacterInventory)

	http.HandleFunc("/map/editor/", template.MapEditor)

	http.HandleFunc("/item/editor/", template.ItemEditor)
	http.HandleFunc("/rest/", rest.Index)
	http.HandleFunc("/rest/item/getbyid", rest.ItemGetById)
	http.HandleFunc("/rest/item/searchbyname", rest.ItemSearchByName)
	http.HandleFunc("/rest/inventory/getbycharacterid", rest.InventoryGetByCharacterId)
	http.HandleFunc("/rest/inventory/add", inventory.ActionAdd)
	http.HandleFunc("/rest/inventory/move", inventory.ActionMove)
	http.HandleFunc("/rest/inventory/remove", inventory.ActionRemove)
	http.HandleFunc("/rest/inventory/update", inventory.ActionUpdate)

	http.HandleFunc("/rest/map/getbyshortname/", rest.MapGetByShortname)

	//http.Handle("/", r)
	log.Println("Started Web Server on", addr)
	go openBrowser(addr)
	err = http.ListenAndServe(addr, nil)
	fmt.Println("Press enter to exit.")
	exit := ""
	fmt.Scan(&exit)
	os.Exit(1)
	return
}
Exemple #5
0
func CharacterSearch(w http.ResponseWriter, r *http.Request) {

	type Index struct {
		Name string
		*Site
		Characters      []*character.CharacterOutput
		LastSearchQuery string
	}

	resp := Index{
		Name: "Testing2",
		Site: SiteInit(),
		//Character: &character.CharacterOutput{}, //Name: "Testing!", Id: 123},

	}

	params := r.URL.Query()
	name := params.Get("name")
	resp.LastSearchQuery = name

	if len(name) > 0 {

		config, err := eqemuconfig.GetConfig()
		if err != nil {
			log.Println("Error loading Config:", err.Error())
			//TODO: exit properly
			return
		}

		db, err := database.Connect(config)
		if err != nil {
			log.Println("Error connecting to DB:", err.Error())
			//TODO: exit properly
			return
		}
		defer db.Close()

		characters, err := character.FindAllByName(db, name)
		if err != nil {
			log.Println("Error finding all names", err.Error())
			return
		}
		resp.Characters = characters

	}
	err := contentTemplate["character/search"].Execute(w, resp)
	if err != nil {
		log.Println("Error executing search", err.Error())
	}
	return
}
Exemple #6
0
func MapGetByShortname(w http.ResponseWriter, r *http.Request) {
	var err error

	type Index struct {
		*Site
		Lines []Line
		Mobs  []Mob
		Grids []Grid
	}

	resp := Index{
		Site: SiteInit(),
	}

	if r.Method != "POST" {
		resp.Message = "Only POST methods are accepted."
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding post fail:", err.Error())
		}
		return
	}

	name := r.FormValue("name")
	if len(name) == 0 {
		resp.Message = "Post value of name required."
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding:", err.Error())
		}
		return
	}

	//bMap, err := ioutil.ReadFile(fmt.Sprintf("webserver/rest/map/%s_1.txt", name))

	bMap, err := Asset(fmt.Sprintf("rest/map/%s_1.txt", name))
	if err != nil {
		resp.Message = "Error finding map: " + err.Error()
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error decoding json:", err.Error())
		}
		return
	}

	reader := csv.NewReader(strings.NewReader(string(bMap)))
	records, err := reader.ReadAll()
	if err != nil {
		log.Fatal(err)
	}

	//iterate each entry
	for _, record := range records {

		entries := strings.Split(record[0], " ")
		drawType := entries[0]
		if drawType == "L" {
			line := Line{}
			line.X1, err = strconv.ParseFloat(strings.TrimSpace(entries[1]), 64) //entries[1]), 64)
			line.Y1, err = strconv.ParseFloat(strings.TrimSpace(record[1]), 64)
			line.X2, err = strconv.ParseFloat(strings.TrimSpace(record[3]), 64)
			line.Y2, err = strconv.ParseFloat(strings.TrimSpace(record[4]), 64)

			line.X1 += 2000
			line.Y1 += 2000
			line.X2 += 2000
			line.Y2 += 2000

			line.X1 /= 5
			line.Y1 /= 5
			line.X2 /= 5
			line.Y2 /= 5
			//outData += fmt.Sprintf("svg.line(g, %f, %f, %f, %f);\n", line.x1, line.y1, line.x2, line.y2)
			resp.Lines = append(resp.Lines, line)
		}
	}

	config, err := eqemuconfig.GetConfig()
	if err != nil {
		log.Println("Error getting config", err.Error())
		return
	}

	db, err := database.Connect(config)
	if err != nil {
		log.Println("Error connecting to DB:", err.Error())
		//TODO: exit properly
		return
	}

	npcs, err := spawn.GetSpawnsByZone(db, name)
	if err != nil {
		log.Println("Error getting npcs:", err.Error())
	}

	for _, npc := range npcs {
		mob := Mob{
			X:        -npc.X,
			Y:        -npc.Y,
			Pathgrid: npc.Pathgrid,
		}
		mob.X += 2000
		mob.Y += 2000
		mob.X /= 5
		mob.Y /= 5
		resp.Mobs = append(resp.Mobs, mob)
	}

	grids, err := grid.GetGridsByZone(db, name)
	if err != nil {
		log.Println("Error getting grids:", err.Error())
	}

	lastIndex := 0
	gridPack := Grid{}

	for _, grid := range grids {
		if lastIndex != grid.Gridid {
			resp.Grids = append(resp.Grids, gridPack)
			lastIndex = grid.Gridid
			gridPack = Grid{}
			gridPack.Index = grid.Gridid
		}

		newEntry := GridEntry{
			X:     -grid.X,
			Y:     -grid.Y,
			Z:     grid.Z,
			Pause: grid.Pause,
		}
		//newEntry.X += 2000
		//newEntry.Y += 2000
		newEntry.X /= 50
		newEntry.Y /= 50

		gridPack.Entries = append(gridPack.Entries, newEntry)
	}
	if len(grids) > 0 {
		resp.Grids = append(resp.Grids, gridPack)
	}

	//log.Println(resp.Grids)

	resp.Status = 1
	resp.Message = "Here's the map"
	err = json.NewEncoder(w).Encode(resp)
	if err != nil {
		log.Println("Error requesting RestIndex:", err.Error())
	}
}
Exemple #7
0
func ItemSearchByName(w http.ResponseWriter, r *http.Request) {
	var err error

	type Index struct {
		*Site
		Items []*item.ItemOutput
	}

	resp := Index{
		Site: SiteInit(),
	}
	resp.Message = "Search for item by name"

	if r.Method != "POST" {
		resp.Message = "Only POST methods are accepted."
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding post fail:", err.Error())
		}
		return
	}

	name := r.FormValue("name")
	if len(name) == 0 {
		resp.Message = "Post value of name required."
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding:", err.Error())
		}
		return
	}

	strOffset := r.FormValue("offset")
	offset, err := strconv.ParseInt(strOffset, 10, 64)
	if err != nil {
		offset = 0
	}
	if offset < 0 {
		offset = 0
	}
	if offset > 1000 {
		offset = 1000
	}

	strLimit := r.FormValue("limit")
	limit, err := strconv.ParseInt(strLimit, 10, 64)
	if err != nil {
		limit = 0
	}
	if limit < 0 {
		limit = 0
	}
	if limit > 30 {
		limit = 30
	}

	config, err := eqemuconfig.GetConfig()
	if err != nil {
		log.Println("Error getting config", err.Error())
		return
	}

	db, err := database.Connect(config)
	if err != nil {
		log.Println("Error connecting to DB:", err.Error())
		//TODO: exit properly
		return
	}

	items, err := item.SearchByName(db, name, limit, offset)
	if err != nil {
		resp.Message = "Failed to get inventory: " + err.Error()
		log.Println("Failed to get inventory:" + err.Error())
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding post fail:", err.Error())
		}
		return
	}

	resp.Items = items
	resp.Status = 1
	resp.Message = fmt.Sprintf("There are %d items.", len(items))
	err = json.NewEncoder(w).Encode(resp)
	if err != nil {
		log.Println("Error requesting RestIndex:", err.Error())
	}
}
Exemple #8
0
func startService() {
	log.Println("Starting DiscordEQ v0.41")
	var option string
	//Load config
	config, err := eqemuconfig.GetConfig()
	if err != nil {
		applog.Error.Println("Error while loading eqemu_config.xml to start:", err.Error())
		fmt.Println("press a key then enter to exit.")

		fmt.Scan(&option)
		os.Exit(1)
	}
	if config.Discord.RefreshRate == 0 {
		config.Discord.RefreshRate = 10
	}
	if strings.ToLower(config.World.Tcp.Telnet) != "enabled" {
		log.Println("Telnet must be enabled for this tool to work. Check your eqemuconfig.xml, and please adjust.")
		fmt.Println("press a key then enter to exit.")
		fmt.Scan(&option)
		os.Exit(1)
	}

	if config.Discord.Username == "" {
		applog.Error.Println("I don't see a username set in your <discord><username> section of eqemu_config.xml, please adjust.")
		fmt.Println("press a key then enter to exit.")
		fmt.Scan(&option)
		os.Exit(1)
	}

	if config.Discord.Password == "" {
		applog.Error.Println("I don't see a password set in your <discord><password> section of eqemu_config.xml, please adjust.")
		fmt.Println("press a key then enter to exit.")
		fmt.Scan(&option)
		os.Exit(1)
	}

	if config.Discord.ServerID == "" {
		applog.Error.Println("I don't see a serverid set in your <discord><serverid> section of eqemuconfig.xml, please adjust.")
		fmt.Println("press a key then enter to exit.")
		fmt.Scan(&option)
		os.Exit(1)
	}

	if config.Discord.ChannelID == "" {
		applog.Error.Println("I don't see a channelid set in your <discord><channelid> section of eqemuconfig.xml, please adjust.")
		fmt.Println("press a key then enter to exit.")
		fmt.Scan(&option)
		os.Exit(1)
	}
	disco := discord.Discord{}
	err = disco.Connect(config.Discord.Username, config.Discord.Password)
	if err != nil {
		applog.Error.Println("Error connecting to discord:", err.Error())
		fmt.Println("press a key then enter to exit.")
		fmt.Scan(&option)
		os.Exit(1)
	}
	go listenToDiscord(config, &disco)
	go listenToOOC(config, &disco)
	select {}
}
Exemple #9
0
func InventoryGetByCharacterId(w http.ResponseWriter, r *http.Request) {
	var err error

	type Index struct {
		*Site
		Inventory []*inventory.InventoryOutput
	}

	resp := Index{
		Site: SiteInit(),
	}
	resp.Message = "Get inventory by character ID"

	if r.Method != "POST" {
		resp.Message = "Only POST methods are accepted."
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding post fail:", err.Error())
		}
		return
	}

	id := r.FormValue("id")
	if len(id) == 0 {
		resp.Message = "Post value of id required."
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding:", err.Error())
		}
		return
	}

	config, err := eqemuconfig.GetConfig()
	if err != nil {
		log.Println("Error getting config", err.Error())
		return
	}

	db, err := database.Connect(config)
	if err != nil {
		log.Println("Error connecting to DB:", err.Error())
		//TODO: exit properly
		return
	}

	inv, err := inventory.GetByCharacterId(db, id)
	if err != nil {
		resp.Message = "Failed to get inventory: " + err.Error()
		log.Println("Failed to get inventory:" + err.Error())
		err = json.NewEncoder(w).Encode(resp)
		if err != nil {
			log.Println("Error responding post fail:", err.Error())
		}
		return
	}

	resp.Inventory = inv
	resp.Status = 1
	resp.Message = fmt.Sprintf("There are %d inventory items.", len(inv))
	err = json.NewEncoder(w).Encode(resp)
	if err != nil {
		log.Println("Error requesting RestIndex:", err.Error())
	}
}