initial commit

This commit is contained in:
2024-06-23 23:14:28 -04:00
commit 31fcea4705
6 changed files with 152 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.env

12
go.mod Normal file
View File

@@ -0,0 +1,12 @@
module github.com/araxiaonline/endgame-item-generator
go 1.22.4
replace github.com/araxiaonline/endgame-item-generator/models => ./models
require github.com/go-sql-driver/mysql v1.8.1
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/joho/godotenv v1.5.1 // indirect
)

6
go.sum Normal file
View File

@@ -0,0 +1,6 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=

49
main.go Normal file
View File

@@ -0,0 +1,49 @@
package main
import (
"log"
"github.com/araxiaonline/endgame-item-generator/models"
_ "github.com/go-sql-driver/mysql"
"github.com/joho/godotenv"
)
func main() {
godotenv.Load()
models.Connect()
bosses, err := models.DB.GetBosses(189)
if err != nil {
log.Fatal(err)
}
for _, boss := range bosses {
log.Println(boss)
}
defer models.DB.Close()
// var rows *sql.Rows
// rows, err = DB.Query("SELECT name, entry FROM item_template where name like 'Hypnotic B%';")
// if err != nil {
// log.Fatal(err)
// }
// for rows.Next() {
// var name string
// var entry int
// err := rows.Scan(&name, &entry)
// if err != nil {
// log.Fatal(err)
// }
// fmt.Println(name, entry)
// }
// rows.Close()
// defer db.Close()
}

27
models/connect.go Normal file
View File

@@ -0,0 +1,27 @@
package models
import (
"database/sql"
"os"
_ "github.com/go-sql-driver/mysql"
)
type Database struct {
client *sql.DB
}
var DB Database
func Connect() {
var connString string = os.Getenv("DB_USER") + ":" + os.Getenv("DB_PASSWORD") + "@tcp(" + os.Getenv("DB_HOST") + ")/" + os.Getenv("DB_NAME")
var err error
DB.client, err = sql.Open("mysql", connString)
if err != nil {
panic(err.Error())
}
}
func (db Database) Close() {
db.client.Close()
}

56
models/map.go Normal file
View File

@@ -0,0 +1,56 @@
package models
import (
"errors"
// "database/sql"
_ "github.com/go-sql-driver/mysql"
)
type Boss struct {
entry int
name string
scriptName string
xpMultiplier int
}
func (db Database) GetBosses(mapId int) ([]Boss, error) {
if mapId == 0 {
return nil, errors.New("mapId cannot be 0")
}
var bosses []Boss
var sql string
// 540 is pre-classic dungeons so XP Multiplier is best way to determine bosses / rare mobs
if mapId < 540 {
sql = `
SELECT ct.entry, ct.name, ct.ScriptName, ct.ExperienceModifier from acore_world.creature c
join acore_world.creature_template ct ON(c.id1 = ct.entry) where map = ? and ExperienceModifier >= 2;
`
} else {
sql = `
SELECT ct.entry, ct.name, ct.ScriptName, ct.ExperienceModifier from acore_world.creature c
join acore_world.creature_template ct ON(c.id1 = ct.entry) where map = ? and ct.ScriptName Like 'boss_%'
`
}
rows, err := db.client.Query(sql, mapId)
if err != nil {
return nil, err
}
for rows.Next() {
var boss Boss
err := rows.Scan(&boss.entry, &boss.name, &boss.scriptName, &boss.xpMultiplier)
if err != nil {
return nil, err
}
bosses = append(bosses, boss)
}
print(len(bosses))
return bosses, nil
}