commit 31fcea470525e3570a2879214956288d8ec6d6f3 Author: Ben Carter Date: Sun Jun 23 23:14:28 2024 -0400 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30bd623 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.env + diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f7cd361 --- /dev/null +++ b/go.mod @@ -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 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..0ff43a5 --- /dev/null +++ b/go.sum @@ -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= diff --git a/main.go b/main.go new file mode 100644 index 0000000..81e3d16 --- /dev/null +++ b/main.go @@ -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() +} diff --git a/models/connect.go b/models/connect.go new file mode 100644 index 0000000..f3ee2d2 --- /dev/null +++ b/models/connect.go @@ -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() +} diff --git a/models/map.go b/models/map.go new file mode 100644 index 0000000..d83373c --- /dev/null +++ b/models/map.go @@ -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 +}