Compare commits

...

95 Commits

Author SHA1 Message Date
Alex King 0ebc7f9bb6 [Release] 22.43.2 (#4017)
### Bots

* ^mez command spell list fix ([#3998](https://github.com/EQEmu/Server/pull/3998)) @dariusuknuis 2024-01-19

### Code

* Cleanup position methods ([#4015](https://github.com/EQEmu/Server/pull/4015)) @Kinglykrab 2024-01-25

### Commands

* Add `#npcedit set_grid [Grid ID]` to `#npcedit` ([#4004](https://github.com/EQEmu/Server/pull/4004)) @Kinglykrab 2024-01-22

### Crash Fix

* Fix crash when creating Frogloks/Drakkin ([#4016](https://github.com/EQEmu/Server/pull/4016)) @Kinglykrab 2024-01-25
* Reverting PR #3877 ([#3997](https://github.com/EQEmu/Server/pull/3997)) @fryguy503 2024-01-17

### Database

* Drop deprecated item_tick table ([#3977](https://github.com/EQEmu/Server/pull/3977)) @Akkadius 2024-01-14
* Drop item_tick if exists tweak in manifest ([#3985](https://github.com/EQEmu/Server/pull/3985)) @Akkadius 2024-01-15
* Increase max spawngroup name from 50 to 200 ([#3991](https://github.com/EQEmu/Server/pull/3991)) @Akkadius 2024-01-22

### Fixes

* Fix Mercenaries Buffs/Zoning Issues ([#4000](https://github.com/EQEmu/Server/pull/4000)) @Kinglykrab 2024-01-22
* Fix zone database update manifest ([#3972](https://github.com/EQEmu/Server/pull/3972)) @Kinglykrab 2024-01-13
* Fixes to zone idle while empty changes. ([#4006](https://github.com/EQEmu/Server/pull/4006)) @noudess 2024-01-23
* Reversed logic on InLiquid ([#3979](https://github.com/EQEmu/Server/pull/3979)) @fryguy503 2024-01-14

### Instances

* Convert Instance Quest Methods to Repositories ([#4012](https://github.com/EQEmu/Server/pull/4012)) @Kinglykrab 2024-01-25

### Logging

* Force Info category to be always on in file/console logs ([#3990](https://github.com/EQEmu/Server/pull/3990)) @Akkadius 2024-01-22

### Merchants

* Change database structure for merchant slots ([#3974](https://github.com/EQEmu/Server/pull/3974)) @joligario 2024-01-14

### Messages

* Fix disciple message added by previous patch. ([#3986](https://github.com/EQEmu/Server/pull/3986)) @noudess 2024-01-15

### Quest API

* QuestReward should now summon item to the inventory instead of the cursor. ([#3996](https://github.com/EQEmu/Server/pull/3996)) @regneq 2024-01-22

### Repositories

* Add `rank` to reserved words ([#3982](https://github.com/EQEmu/Server/pull/3982)) @Akkadius 2024-01-15
* Fix datetime zero-value save behavior ([#3976](https://github.com/EQEmu/Server/pull/3976)) @Akkadius 2024-01-14

### Spawn2

* Spawn condition value should default spawn_conditions value ([#3980](https://github.com/EQEmu/Server/pull/3980)) @noudess 2024-01-14

### Zoning

* Additional logs for zoning under instance checks ([#3989](https://github.com/EQEmu/Server/pull/3989)) @Akkadius 2024-01-22
2024-01-25 16:30:50 -06:00
Alex King 9ac25338bb [Crash Fix] Fix crash when creating Frogloks/Drakkin (#4016)
* [Crash Fix] Fix crash when creating Frogloks/Drakkin

# Notes
- https://github.com/EQEmu/Server/pull/3920 introduced an issue where we were using `uchar` for `race_selection` and `class_selection` which was not functioning properly within `IsPlayerRace()`.

* Update client.cpp
2024-01-25 06:19:59 -05:00
Alex King e9285fd2ca [Instances] Convert Instance Quest Methods to Repositories (#4012)
* [Instances] Convert Instance Quest Methods to Repositories

# Notes
- Convert `UpdateInstanceTimer()` and `GetInstanceTimerByID()` to repositories.
- Cleanup other instance methods.

* Update questmgr.cpp
2024-01-25 05:50:10 -05:00
Alex King 5b85f89c21 [Cleanup] Cleanup position methods (#4015)
# Notes
- Cleanup logic.
2024-01-24 22:47:24 -06:00
Paul Coene 7fed8fc8c8 [Bug Fix] Fixes to zone idle while empty changes. (#4006) 2024-01-22 19:33:00 -05:00
Alex King 26769f40d9 [Commands] Add #npcedit set_grid [Grid ID] to #npcedit (#4004)
* [Commands] Add #npcedit grid_id to #npcedit

# Notes
- Adds `#npcedit grid_id [Grid ID]` to `#npcedit`.

* set_grid
2024-01-22 17:49:18 -05:00
regneq f6148b9b8d [Quest] QuestReward should now summon item to the inventory instead of the cursor. (#3996)
* [forage rule feature] add a rule to disabled using common_food_ids from the list in forage.cpp.  currently set to enabled.

* [Quest] change QuestReward summonitem to SummonItemToInventory.

* add closing brackets in QuestReward functions.
2024-01-22 17:35:15 -05:00
Chris Miles ca1299bf1d [Database] Increase max spawngroup name from 50 to 200 (#3991) 2024-01-22 17:34:54 -05:00
Chris Miles 3fb24dc0a3 [Logging] Force Info category to be always on in file/console logs (#3990) 2024-01-22 17:34:48 -05:00
Chris Miles dcd7bffa54 [Zoning] Additional logs for zoning under instance checks (#3989) 2024-01-22 17:34:41 -05:00
Alex King 5298abe6bc [Bug Fix] Fix Mercenaries Buffs/Zoning Issues (#4000)
# Notes
- Mercenaries were disappearing on zoning because they were saving to slot `1` and being loaded from slot `0`.
- Mercenaries were not displaying properly in group window because of this as well.
- Mercenary buffs were saving even when they did not have any buffs.
2024-01-22 17:34:28 -05:00
dariusuknuis fbc2b7c152 [Bot] ^mez command spell list fix (#3998)
This change will allow necros to cast mez spells when ^mez command is used.
2024-01-19 16:39:14 -05:00
Paul Coene 86705000b0 Push discpline messages under melee->disciplines (#3987)
* Push discpline messages under melee->disciplines

* Added safe_delete()

* Remove fryguy's new message code and fix existing instead
2024-01-19 08:55:26 -05:00
Fryguy 748e37dbdf [Crash Fix] Reverting PR #3877 (#3997)
Reports of #3877 causing crashes on windows. No reports on Linux, but reverting for safety.
2024-01-17 18:22:11 -05:00
Paul Coene 27256215b8 [Messages] Fix disciple message added by previous patch. (#3986) 2024-01-15 14:01:24 -05:00
Chris Miles 59cbe1a152 [Database] Drop item_tick if exists tweak in manifest (#3985) 2024-01-14 23:14:15 -05:00
Chris Miles 3e50427bb7 [Repositories] Add rank to reserved words (#3982)
* [Repositories] Add `rank` to reserved words

* Update zonedb.cpp

* Guild Ranks

---------

Co-authored-by: Kinglykrab <kinglykrab@gmail.com>
2024-01-14 20:58:03 -05:00
Paul Coene 883b3b5826 [Spawn2] Spawn condition value should default spawn_conditions value (#3980)
* [Spawn2] Spawn condition value should default to value in spawn_conditions table

* Formatting changes and {}
2024-01-14 13:50:05 -05:00
Fryguy 135ee6b2b7 [Bug Fix] Reversed logic on InLiquid (#3979)
Thank you @noudness for catching this. Reversed logic on InLiquid check for falling damage.
2024-01-14 11:22:48 -05:00
Akkadius 906879ce2e [Repositories] Revert #3976 - fix character corpses 2024-01-14 03:30:00 -06:00
Chris Miles 8b7aba2769 [Release] 22.43.0 (#3978) 2024-01-14 00:12:26 -06:00
Chris Miles 9303255caa [Database] Drop deprecated item_tick table (#3977) 2024-01-14 00:10:21 -06:00
Chris Miles 14509fcc4e [Repositories] Fix datetime zero-value save behavior (#3976) 2024-01-14 00:10:13 -06:00
JJ e40267b9b8 [Merchants] Change database structure for merchant slots (#3974)
* [Merchants] Change database structure for merchant slots
The `slot` field should be unsigned int. The temp slot is currently limited to 127. The client will limit the visible slots.

* Update version.h
2024-01-13 20:58:46 -05:00
Alex King f3073b463f [Release] 22.42.1 (#3973)
### Fixes

* Fix zone database update manifest ([#3972](https://github.com/EQEmu/Server/pull/3972)) @Kinglykrab 2024-01-13
* quest::processmobswhilezoneempty() fix. ([#3971](https://github.com/EQEmu/Server/pull/3971)) @noudess 2024-01-13
2024-01-13 20:09:01 -05:00
Alex King 5ad4129312 [Bug Fix] Fix zone database update manifest (#3972)
* [Bug Fix] Fix zone database update manifest

# Notes
- Missing comma.

* Update database_update_manifest.cpp
2024-01-13 18:15:01 -05:00
Paul Coene 4b5b29b165 [Bug Fix] quest::processmobswhilezoneempty() fix. (#3971) 2024-01-13 09:37:22 -05:00
Alex King 3b7a138de4 [Release] 22.42.0 (#3970)
### AAs

* Convert Loading of AAs to Repositories ([#3963](https://github.com/EQEmu/Server/pull/3963)) @Kinglykrab 2024-01-13

### Auras

* Convert Get of Auras to Repositories ([#3964](https://github.com/EQEmu/Server/pull/3964)) @Kinglykrab 2024-01-13

### Character

* Character EXP Modifiers in Memory ([#3934](https://github.com/EQEmu/Server/pull/3934)) @Kinglykrab 2024-01-13
* Convert Character Corpses to Repositories ([#3941](https://github.com/EQEmu/Server/pull/3941)) @Kinglykrab 2024-01-13
* Convert Save of Character Languages to Repositories ([#3948](https://github.com/EQEmu/Server/pull/3948)) @Kinglykrab 2024-01-12

### Code

* Cleanup AddCash() and RemoveCash() NPC Methods ([#3957](https://github.com/EQEmu/Server/pull/3957)) @Kinglykrab 2024-01-12
* Cleanup ChangeSize() ([#3959](https://github.com/EQEmu/Server/pull/3959)) @Kinglykrab 2024-01-12
* Cleanup Owner Related Mob Methods ([#3960](https://github.com/EQEmu/Server/pull/3960)) @Kinglykrab 2024-01-13
* Cleanup RandomizeFeatures() ([#3958](https://github.com/EQEmu/Server/pull/3958)) @Kinglykrab 2024-01-12
* Remove GroupCount() and RaidGroupCount() ([#3943](https://github.com/EQEmu/Server/pull/3943)) @Kinglykrab 2024-01-13
* Remove unused Grid methods ([#3944](https://github.com/EQEmu/Server/pull/3944)) @Kinglykrab 2024-01-13

### Commands

* Convert NPC Spawn Methods to Repositories ([#3956](https://github.com/EQEmu/Server/pull/3956)) @Kinglykrab 2024-01-13

### Crash Fix

* Character Creation Class/Race out of Range. ([#3920](https://github.com/EQEmu/Server/pull/3920)) @fryguy503 2024-01-09

### Feat

* Alt Sinister Strike Formula ([#3921](https://github.com/EQEmu/Server/pull/3921)) @fryguy503 2024-01-09

### Feature

* Add Lore Item Trade Error ([#3932](https://github.com/EQEmu/Server/pull/3932)) @fryguy503 2024-01-13
* Rule: UseLiveBlockedMessage Bard Spam ([#3933](https://github.com/EQEmu/Server/pull/3933)) @fryguy503 2024-01-09

### Fixes

* Attack Corpse Skill Up Fix ([#3924](https://github.com/EQEmu/Server/pull/3924)) @fryguy503 2024-01-09
* Fix Issue with SetFlyMode() ([#3961](https://github.com/EQEmu/Server/pull/3961)) @Kinglykrab 2024-01-12
* Harm Touch Critical Ratio ([#3915](https://github.com/EQEmu/Server/pull/3915)) @fryguy503 2024-01-09
* Increase Precision in CheckDoubleAttack ([#3928](https://github.com/EQEmu/Server/pull/3928)) @fryguy503 2024-01-09
* IsOfClientBotMerc() for Discipline Messages ([#3940](https://github.com/EQEmu/Server/pull/3940)) @fryguy503 2024-01-09
* Limit MeleeMitigationEffect to defender if only client. ([#3918](https://github.com/EQEmu/Server/pull/3918)) @fryguy503 2024-01-09
* Rampage Number of Hits Limit ([#3929](https://github.com/EQEmu/Server/pull/3929)) @fryguy503 2024-01-09
* Remove duplicate character_data repository in zonedb.cpp ([#3935](https://github.com/EQEmu/Server/pull/3935)) @Kinglykrab 2024-01-09
* Undead Should Never Flee ([#3926](https://github.com/EQEmu/Server/pull/3926)) @fryguy503 2024-01-09

### Global Loot

* Convert Global Loot to Repositories ([#3962](https://github.com/EQEmu/Server/pull/3962)) @Kinglykrab 2024-01-13

### Ground Spawns

* Convert Ground Spawns to Repositories ([#3967](https://github.com/EQEmu/Server/pull/3967)) @Kinglykrab 2024-01-13

### Horses

* Convert Horses to Repositories ([#3965](https://github.com/EQEmu/Server/pull/3965)) @Kinglykrab 2024-01-13

### Item Ticks

* Remove Item Ticks Code ([#3955](https://github.com/EQEmu/Server/pull/3955)) @Kinglykrab 2024-01-13

### Mercenaries

* Convert Mercenaries to Repositories ([#3947](https://github.com/EQEmu/Server/pull/3947)) @Kinglykrab 2024-01-13

### Merchants

* Convert Clear/Delete/Save of Temporary Merchant Lists to Repositories ([#3945](https://github.com/EQEmu/Server/pull/3945)) @Kinglykrab 2024-01-13

### NPCs

* Convert Load of NPC Emotes to Repositories ([#3954](https://github.com/EQEmu/Server/pull/3954)) @Kinglykrab 2024-01-13

### Objects

* Convert Add/Delete/Update of Objects to Repositories ([#3966](https://github.com/EQEmu/Server/pull/3966)) @Kinglykrab 2024-01-13
* Convert World Containers to Repositories ([#3951](https://github.com/EQEmu/Server/pull/3951)) @Kinglykrab 2024-01-13

### Pets

* Convert Pets to Repositories ([#3968](https://github.com/EQEmu/Server/pull/3968)) @Kinglykrab 2024-01-13

### Repositories

* Add null integer column support, instance_list notes migration, regenerate repositories ([#3969](https://github.com/EQEmu/Server/pull/3969)) @Akkadius 2024-01-13

### Respawns

* Convert Respawn Times to Repositories ([#3949](https://github.com/EQEmu/Server/pull/3949)) @Kinglykrab 2024-01-13

### Rules

* Add rule for bard aggro cap ([#3909](https://github.com/EQEmu/Server/pull/3909)) @fryguy503 2024-01-09
* Allow GMs to silently summon ([#3910](https://github.com/EQEmu/Server/pull/3910)) @fryguy503 2024-01-09
* Bash Two Hander use Shoulders ([#3925](https://github.com/EQEmu/Server/pull/3925)) @fryguy503 2024-01-09
* Classic Spell Data SPA Calc variability ([#3931](https://github.com/EQEmu/Server/pull/3931)) @fryguy503 2024-01-09
* Classic Tracking Skillups ([#3923](https://github.com/EQEmu/Server/pull/3923)) @fryguy503 2024-01-09
* Separate Tradeskill Max Train from Research. ([#3916](https://github.com/EQEmu/Server/pull/3916)) @fryguy503 2024-01-09

### Tasks

* Add Support for Task Window Element Groups ([#3902](https://github.com/EQEmu/Server/pull/3902)) @hgtw 2024-01-09

### Traps

* Convert Load of LDoN Traps/Trap Entries to Repositories ([#3953](https://github.com/EQEmu/Server/pull/3953)) @Kinglykrab 2024-01-13

### Zones

* Convert Get/Set of Zone Timezone to Repositories ([#3946](https://github.com/EQEmu/Server/pull/3946)) @Kinglykrab 2024-01-13
* Convert IDLE_WHEN_EMPTY to a Zone Column ([#3891](https://github.com/EQEmu/Server/pull/3891)) @Kinglykrab 2024-01-13
* Convert SaveZoneCFG to Repositories ([#3950](https://github.com/EQEmu/Server/pull/3950)) @Kinglykrab 2024-01-13
2024-01-13 01:31:56 -06:00
Alex King 742b437f2c [Zones] Convert IDLE_WHEN_EMPTY to a Zone Column (#3891)
* [Rules] Convert IDLE_WHEN_EMPTY to a rule

# Notes
- Converts `IDLE_WHEN_EMPTY` to `Zone:ZonesIdleWhenEmpty` so that we can change this on the fly or on a zone-by-zone basis instead of having to recompile to do this.
- Especially helpful for those using release binaries that do not compile their own source.

* Convert to zone column.

* Update ruletypes.h

* Update ruletypes.h

* Update entity.cpp

* Update entity.cpp

* Rename.

* Update database_update_manifest.cpp

* Update base_zone_repository.h

* Update zone.cpp

* seconds_before_idle

* Update database_update_manifest.cpp

* Getter/Setters/Private

* Update base_zone_repository.h

* IsIdle()/SetIsIdle()

* Update entity.cpp
2024-01-13 01:21:40 -06:00
Alex King d41bd8f963 [Zones] Convert Get/Set of Zone Timezone to Repositories (#3946)
* [Zones] Convert Get/Set of Zone Timezone to Repositories

- Convert `GetZoneTimezone()` and `SetZoneTimeZone()` to repositories.

* Update time_zone.cpp
2024-01-13 00:10:14 -06:00
Alex King 73a099c5ea [Character] Character EXP Modifiers in Memory (#3934)
* Cleanup

* Final push.

* Update zonedb.cpp

* Update zone.h

* Update exp.cpp

* Update zonedb.cpp

---------

Co-authored-by: Chris Miles <akkadius1@gmail.com>
2024-01-13 00:03:36 -06:00
Alex King 77c0eb3998 [Character] Convert Character Corpses to Repositories (#3941)
* asdsa

* Final push

* Update character_corpses_repository.h

* Update character_corpses_repository.h

* Update zonedb.cpp

* Update zonedb.cpp

* Final push

* Update character_corpses_repository.h
2024-01-13 00:02:44 -06:00
Alex King 5d1c59c95f [Merchants] Convert Clear/Delete/Save of Temporary Merchant Lists to Repositories (#3945)
* [Merchants] Convert Clear/Delete/Save of Temporary Merchant Lists to Repositories

- Convert `ClearMerchantTemp()`, `DeleteMerchantTemp()`, and `SaveMerchantTemp()` to repositories.

* Update merchantlist_temp_repository.h
2024-01-12 23:47:25 -06:00
Fryguy 1d7f39c13b [Feature] Add Lore Item Trade Error (#3932)
* DRAFT: [Feature] Add Lore Item Trade Error

I had lots of feedback from players to add feedback when doing player to player trades to include what items were causing the trade block.

I quickly added this check, however if multiple lore items are being traded, this will only output the first. So far it has worked well, but not sure if we want to:

- Expand this to list all lore items in the trade.
- Enable this by default and do not provide a rule?

* Credit to @KinglyKrab for the assist on making this output a list.

Ruled this off but enabled by default.
2024-01-12 23:43:57 -06:00
Alex King 1bb8678abe [Cleanup] Remove GroupCount() and RaidGroupCount() (#3943)
# Notes
- These are unused.
2024-01-12 23:41:21 -06:00
Alex King 47968774d9 [Cleanup] Remove unused Grid methods (#3944)
# Notes
- Remove `AssignGrid()`, `GetGridType()`, `GetGridType2()`, and `GetWaypoints()` as they are unused.
2024-01-12 23:41:06 -06:00
Alex King d7dc717249 [Mercenaries] Convert Mercenaries to Repositories (#3947)
* [Mercenaries] Convert Mercenaries to Repositories

- Convert all Mercenary methods to repositories aside from inner join queries that cannot be converted.

* Update base_merc_subtypes_repository.h

* Update base_merc_subtypes_repository.h

* Regenerate repositories
2024-01-12 23:40:26 -06:00
Alex King 32659426ba [AAs] Convert Loading of AAs to Repositories (#3963)
* [AAs] Convert Loading of AAs to Repositories

- Convert `LoadAlternateAdvancementAbilities()` to repositories.
- Regenerate repositories since a column was added to `aa_ability`.

* Update aa.cpp

* Update aa.cpp
2024-01-12 23:38:13 -06:00
Alex King 238c9fe667 [Global Loot] Convert Global Loot to Repositories (#3962)
* [Global Loot] Convert Global Loot to Repositories

# Notes
- Convert `LoadGlobalLoot()` to repositories.

* Update repository-generator.pl

* Final push.

* Update loottables.cpp

---------

Co-authored-by: Akkadius <akkadius1@gmail.com>
2024-01-12 23:37:26 -06:00
Alex King b9f997015a [Horses] Convert Horses to Repositories (#3965)
* [Horses] Convert Horses to Repositories

# Notes
- Convert `BuildHorseType()` to repositories.
- Removed unused code, parameters, and member variables in horses.

* Update horse.cpp
2024-01-12 23:33:52 -06:00
Alex King 11e2a252e5 [Objects] Convert World Containers to Repositories (#3951)
* [Objects] Convert World Containers to Repositories

- Convert world containers to repositories.

* Update zonedb.cpp
2024-01-12 23:33:37 -06:00
Alex King fc627ed52d [NPCs] Convert Load of NPC Emotes to Repositories (#3954)
* [NPCs] Convert Load of NPC Emotes to Repositories

- Convert `LoadNPCEmotes()` to repositories.

* Cleanup
2024-01-12 23:33:11 -06:00
Alex King 4c028b85f0 [Auras] Convert Get of Auras to Repositories (#3964)
* [Auras] Convert Get of Auras to Repositories

# Notes
- Convert `GetAuraEntry()` to repositories.

* Update aura.cpp
2024-01-12 23:29:43 -06:00
Alex King f1d5e3eedf [Zones] Convert SaveZoneCFG to Repositories (#3950)
* [Zones] Convert SaveZoneCFG to Repositories

# Notes
- Convert `SaveZoneCFG()` to repositories.

* Comment

* safe_heading

* Update zone_data.cpp
2024-01-12 23:28:16 -06:00
Alex King d59531b16f [Item Ticks] Remove Item Ticks Code (#3955)
* [Items] Convert Load of Item Ticks to Repositories

- Convert `LoadItemTicks()` to repositories.

* Remove item tick code.

* Remove repository references.

* Update zone.h
2024-01-12 23:17:00 -06:00
Alex King e182d685d3 [Commands] Convert NPC Spawn Methods to Repositories (#3956)
* [Commands] Convert NPC Spawn Methods to Repositories

# Notes
- Convert `AddNewNPCSpawnGroupCommand()`, `AddNPCTypes()`, `AddSpawnFromSpawnGroup()`, `CreateNewNPCCommand()`, `DeleteSpawnLeaveInNPCTypeTable()`, `DeleteSpawnRemoveFromNPCTypeTable()`, `NPCSpawnDB()`, and `UpdateNPCTypeAppearance()`.

* Regenerate.

* Cleanup.
2024-01-12 23:02:19 -06:00
Alex King 6968a70310 [Cleanup] Cleanup Owner Related Mob Methods (#3960)
* [Cleanup] Cleanup Owner Related Mob Methods

# Notes
- Cleanup `GetOwner()`, `GetOwnerOrSelf()`, `GetUltimateOwner()`, `HasOwner()`, and `IsPet()` methods.

* Update mob.cpp
2024-01-12 22:59:30 -06:00
Alex King 06e8d258e4 [Objects] Convert Add/Delete/Update of Objects to Repositories (#3966)
* [Objects] Convert Add/Delete/Update of Objects to Repositories

- Convert `AddObject()`, `DeleteObject()`, and `UpdateObject()` to repositories.

* Update object_manipulation.cpp

* Update object_manipulation.cpp

* Update object_manipulation.cpp
2024-01-12 22:55:46 -06:00
Alex King 8cb15f9357 [Pets] Convert Pets to Repositories (#3968)
* [Pets] Convert Pets to Repositories

# Notes
- Convert `GetPoweredPetEntry()` to repositories.

* Update pets.cpp
2024-01-12 22:41:56 -06:00
Alex King eb33e5a064 [Ground Spawns] Convert Ground Spawns to Repositories (#3967)
# Notes
- Convert `LoadGroundSpawns()` to repositories.
2024-01-12 22:41:08 -06:00
Alex King 71f78b757e [Respawns] Convert Respawn Times to Repositories (#3949)
* [Respawns] Convert Respawn Times to Repositories

- Convert `respawn_times` based methods to repositories.

* Missed some.

* Comments
2024-01-12 22:38:31 -06:00
Chris Miles 818f833d04 [Repository] Add null integer column support, instance_list notes migration, regenerate repositories (#3969) 2024-01-12 22:23:55 -06:00
Alex King 1238a6ca68 [Traps] Convert Load of LDoN Traps/Trap Entries to Repositories (#3953)
- Convert `LoadLDoNTraps()` and `LoadLDoNTrapEntries()` to repositories.
2024-01-12 20:05:00 -05:00
Alex King 4afc1efb38 [Character] Convert Save of Character Languages to Repositories (#3948)
# Notes
- Convert `SaveCharacterLanguage()` to repositories.
- Was missed in the other languages changes.
2024-01-12 03:30:42 -06:00
Alex King 24eb40d231 [Experience Modifiers] Convert Load of Level Experience Modifiers to Repositories (#3952)
# Notes
- Convert `LoadLevelEXPMods()` to repositories.
2024-01-12 02:46:33 -06:00
Alex King 2475092ed9 [Cleanup] Cleanup AddCash() and RemoveCash() NPC Methods (#3957)
# Notes
- `AddCash()` was `uint16` in C++/Perl and `int` in Lua, fix these to `uint32`.
- Consolidate logic in `AddCash()`.
2024-01-12 01:53:01 -06:00
Alex King 53d6e449c2 [Cleanup] Cleanup ChangeSize() (#3959)
# Notes
- Use `EQ::Clamp()` for logic instead of basic comparsions.
- Rename restriction parameter to `unrestricted`.
2024-01-12 01:51:02 -06:00
Alex King b61649a2a0 [Cleanup] Cleanup RandomizeFeatures() (#3958)
# Notes
- Uses pre-defined constants and cleanup code.
- Move `IsPlayerRace()` check so it's an early return instead of using an `else`.
2024-01-12 01:50:06 -06:00
Alex King ef635cb257 [Bug Fix] Fix Issue with SetFlyMode() (#3961)
# Notes
- Variable and parameter had the same name, meaning this could fail.
2024-01-12 01:35:30 -06:00
Fryguy 62b5f8a488 [Rules] Classic Spell Data SPA Calc variability (#3931)
* [Rules] Classic Spell Data SPA Calc variability

When  using lucy imports of older more classic data, they lack the limit values which provides Focus Random Effectiveness.

Example:

Bazu Plauge (6472) went from a 40 limit to 0 limit on the 2006 lucy import.

Lucy does have limit value data, but it appears the affected SPAs sony handled in source vs in spell data.

* Requested Changes
2024-01-09 05:49:10 -05:00
Fryguy d0e069f4f8 [Bug Fix] Rampage Number of Hits Limit (#3929)
* [Bug Fix] Rampage Number of Hits Limit

Rampage should Hit 1-2 times (Primary / Secondary) should not be Triple/Quadable

* requested name convention changes
2024-01-09 05:48:45 -05:00
Fryguy 1b5b22eeca [Rule] Classic Tracking Skillups (#3923)
* [Rule] Classic Tracking Skillups

Rule: TrackingAutoRefreshSkillUps
Default: True

Disable rule to prevent skillups from happening on auto refresh of tracking window.

* typo
2024-01-09 05:48:35 -05:00
Fryguy 66d9371714 [Bug Fix] Increase Precision in CheckDoubleAttack (#3928)
* [Bug Fix] Increase percision on CheckDoubleAttack.

On DA Checks where class was a non skill based DA Attacker (Bard or BST with granted DA) The DA check was too steep and should not have been dividing by 500 but rather 100. Also adjusted logic percision to use floats so loss of data does not occur.

* logging var names update

* Update attack.cpp

---------

Co-authored-by: Alex King <89047260+Kinglykrab@users.noreply.github.com>
2024-01-08 22:34:41 -06:00
Fryguy 0418dc4aa3 [Bug Fix] Attack Corpse Skill Up Fix (#3924)
* [Bug] Attack Corpse Skillup Fix

Occasions where a corpse will allow skillups from attacks being turned on (even if no damage)

* requested changes
2024-01-08 22:32:18 -06:00
Fryguy f12c87a04a [Feat] Alt Sinister Strike Formula (#3921)
I have been informed that this was proven to be false, but the AA is pretty useless without some adjustment.

Adding this as a rule to allow server owners to adjust as needed.

Update Sinister Strikes
tapatalk.com/groups/monklybusiness43508/leksikon-s-half-assed-guide-to-monkly-aas-oow-incl-t510-s20.html?sid=a9c7745f287f3e89301c960c20f33248

Sinister Strikes:
19 Delay weapon -- Gives a 5 damage bonus to all hits
20 Delay weapon -- Gives a 6 damage bonus to all hits
24 Delay weapon -- Gives a 7 damage bonus to all hits
Given Quarm hammer with maxed non-GoD AAs:
0.7 HPS offhand = 4.9 DPS increase.
2024-01-08 22:31:04 -06:00
Fryguy 97dbf85a4c [Bug Fix] Limit MeleeMitigationEffect to defender if only client. (#3918)
* [Bug] Limit MeleeMitigationEffect to defender if only client.

* Fix MeleeMitigation to properly Add (Substract due to negative values).

* defender fix
2024-01-08 22:30:29 -06:00
Fryguy 46a0cf6b02 [Rule] Separate Tradeskill Max Train from Research. (#3916)
* [Rule] Seperate Tradeskill Max Train from Research.

Different eras had different rules on the max gm trainable skill for Research.

* Phrasing
2024-01-08 22:29:57 -06:00
Fryguy 8f34bd998f [Rule] Add rule for bard aggro cap (#3909)
BardAggroCap - Default 40

Allows adjustment of per song bard aggro cap.
2024-01-08 22:29:24 -06:00
Fryguy 98928aee74 [Rule] Allow GMs to silently summon (#3910)
* [Rule] Allow GMs to silently summon

Disable to silently summon players with #summon.

Converted SummonPC to a MessageString

* Implementing an automatic detection of gm hidden mode and silent summoning.
2024-01-08 22:28:50 -06:00
Fryguy e6dc980315 [Bug Fix] Harm Touch Critical Ratio (#3915)
* [Bug] HT Crit Ratio

This is used to tune and bring HT Crits more in line with the correct values as proven in screenshots.

* requested changes

* mistakenly kept mob::
2024-01-08 22:27:56 -06:00
Fryguy ec465616b4 [Feature] Rule: UseLiveBlockedMessage Bard Spam (#3933)
When using `UseLiveBlockedMessage` rule, bard will get massively spammed when doing aoe songs that are blocked. Not sure it is resonable to try and filter out all stacking messages from songs, but rather just block bards as a whole. I can not think of many cases where bards care of songs land or not when using this rule.
2024-01-08 22:26:10 -06:00
Fryguy 23de0119ff [Bug Fix] Undead Should Never Flee (#3926)
* [Bug Fix] Undead Should Never Flee

Added a hard return on Undead Body Types. They should never flee under any circumstance.

* space
2024-01-08 22:24:57 -06:00
hg f59b4feb94 [Tasks] Add Support for Task Window Element Groups (#3902)
Elements that share a group are placed in the same list section and
separated from other groups with a divider.

Live appears to only use this for optional elements in some tasks and
when used each optional always gets its own group. This might indicate
it's done automatically under certain criteria to ensure optionals are
never grouped with non-optionals regardless of index.

Since groups are available in captures and there's very few tasks that
use this, we don't need to worry about trying to replicate any automatic
behavior since this allows more customization.
2024-01-08 23:24:41 -05:00
Fryguy e035660150 [Crash Fix] Character Creation Class/Race out of Range. (#3920)
* [Crash Fix] Character Creation Class/Race out of Range.

Known bug to crash the world server from character creation.

You can send a packet with a manual race or class entry below 0 or above 255 will cause world crash.

* Requested changes

* Compile fixes and logging change

* Fixed compile issues
2024-01-08 23:24:15 -05:00
Fryguy 472dd71d7f [Rules] Bash Two Hander use Shoulders (#3925)
Rule: BashTwoHanderUseShoulderAC
Default: False

Allows server operators to choose if they want two handed bash to utilize the shoulder armor or not.

Rule: BashACBonusDivisor
Default: 25.0

Allows adjustment for bash AC value contributions. Lower to increase damage.
2024-01-08 23:23:51 -05:00
Fryguy 409b6bf424 [Bug Fix] IsOfClientBotMerc() for Discipline Messages (#3940) 2024-01-08 23:23:09 -05:00
Alex King 9da713a830 [Bug Fix] Remove duplicate character_data repository in zonedb.cpp (#3935)
# Notes
- Must have been a typo from one of my commits where they overlapped in functionality.
2024-01-08 23:22:42 -05:00
Alex King 7d194083aa [Release] 22.41.0 (#3939)
### Bug

* DI Buff Fade ([#3919](https://github.com/EQEmu/Server/pull/3919)) @fryguy503 2024-01-08
* NPCs will now only proc on hit ([#3913](https://github.com/EQEmu/Server/pull/3913)) @fryguy503 2024-01-08
* Pets should not ignore Z axis ([#3912](https://github.com/EQEmu/Server/pull/3912)) @fryguy503 2024-01-08

### Fixes

* Disciplines should show when someone casts them. ([#3901](https://github.com/EQEmu/Server/pull/3901)) @fryguy503 2024-01-08
* Fix Typo in Character Skills loading ([#3937](https://github.com/EQEmu/Server/pull/3937)) @Kinglykrab 2024-01-09
* Fix for HasLockoutByCharacterID ([#3927](https://github.com/EQEmu/Server/pull/3927)) @fryguy503 2024-01-08
* Harm Touch, Improved Harm Touch, and Unholy Touch ([#3904](https://github.com/EQEmu/Server/pull/3904)) @fryguy503 2024-01-08
* Legacy Manaburn should have hard cap. ([#3905](https://github.com/EQEmu/Server/pull/3905)) @fryguy503 2024-01-08
* TGB - Added logic to stop bard errors on group songs. ([#3906](https://github.com/EQEmu/Server/pull/3906)) @fryguy503 2024-01-08
* World Shutdown Filter ([#3930](https://github.com/EQEmu/Server/pull/3930)) @fryguy503 2024-01-08

### Info

* Adding textual feedback when trying to sell alt items back to … ([#3917](https://github.com/EQEmu/Server/pull/3917)) @fryguy503 2024-01-08

### Rules

* Backstab Damage Modifier ([#3908](https://github.com/EQEmu/Server/pull/3908)) @fryguy503 2024-01-08
* Classic Tradeskill Skill Clamp ([#3914](https://github.com/EQEmu/Server/pull/3914)) @fryguy503 2024-01-08
* Classic Triple Attack ([#3903](https://github.com/EQEmu/Server/pull/3903)) @fryguy503 2024-01-08
* Ensure mana taps only effect NPC's that have mana. ([#3907](https://github.com/EQEmu/Server/pull/3907)) @fryguy503 2024-01-08
* Over Taunt Hate ([#3900](https://github.com/EQEmu/Server/pull/3900)) @fryguy503 2024-01-08
* Stun Chance Percent Rule ([#3922](https://github.com/EQEmu/Server/pull/3922)) @fryguy503 2024-01-08
2024-01-08 20:31:13 -06:00
Alex King dd41fc5fcd [Bug Fix] Fix Typo in Character Skills loading (#3937) 2024-01-08 21:18:55 -05:00
Fryguy 6bf36f3e77 [Bug Fix] World Shutdown Filter (#3930)
Moved World Shutdown to the System filter from base yellow.
2024-01-08 12:14:08 -05:00
Fryguy dfb06db17b [Rule] Over Taunt Hate (#3900)
* [Rule] Over taunt hate rule

Rule to add additional hate when taunt succeeds. This can help tune snap aggro on taunt classes. Only works when taunt succeeds and not already top hate.

* Requested Adjustments

* Add default +1 on rule

* Revert back to 0 default on rule with +1 on the standard formula

* formatting fix
2024-01-08 12:11:04 -05:00
Fryguy 3e958c575b [Info] Adding textual feedback when trying to sell alt items back to … (#3917)
* [Info] Adding textual feedback when trying to sell alt items back to vendor when disabled.

* requested changes
2024-01-08 11:34:58 -05:00
Fryguy e5db19965f [Rule] Ensure mana taps only effect NPC's that have mana. (#3907)
* [Rule] Ensure mana taps only effect NPC's that have mana.

* Requested Changes

* fail at the beginning of a cast.

* Fixes
2024-01-08 06:23:54 -05:00
Fryguy ce73f6bfe1 [Bug Fix] Fix for HasLockoutByCharacterID (#3927)
Per HG, this will resolve issues with HasLockoutByCharacterID
2024-01-08 02:45:19 -06:00
Fryguy 700f4645e2 [Rule] Stun Chance Percent Rule (#3922)
Added a rule for server operators to tune the Stun Chance from players when mobs are behind.

DEFAULT: 12
2024-01-08 02:40:01 -06:00
Fryguy 5a7d544c5b [Bug] DI Buff Fade (#3919)
Mistakenly removed BuffFadeBySlot(buffSlot);
2024-01-08 02:06:41 -06:00
Fryguy 0f7f71334a [Rules] Backstab Damage Modifier (#3908)
* [Rules] Backstab Damage Modifier

Added NPCBackstabMod - Default 1.9 - Lower mod = higher backstab.

* Update special_attacks.cpp

corrected math to npc base_damage
2024-01-08 01:58:48 -06:00
Fryguy c731f3f560 [Rule] Classic Tradeskill Skill Clamp (#3914)
Legacy Tradeskills had a 252 clamp regardless of modifier and skill.

Default to 0 to bypass clamp
2024-01-08 01:48:40 -06:00
Fryguy b30fbc70a3 [Bug] NPCs will now only proc on hit (#3913) 2024-01-08 01:47:55 -06:00
Fryguy 195cb80d56 [Bug] Pets should not ignore Z axis (#3912)
Ignoring the Z axis allows you to attack mobs on target from wildly inappropriate Z distances.

Example you can pull mobs to the cy in bothunder from the towers you are under when many 1000's of units away by Z only.
2024-01-08 01:41:51 -06:00
Fryguy b2d5007466 [Bug Fix] TGB - Added logic to stop bard errors on group songs. (#3906)
* [Bug Fix] TGB - Added logic to stop bard errors on group songs.

Occasionally bards would get an error when singing songs with another group member targetted.

* Logic Fix

* Fixed missing brace
2024-01-08 01:27:45 -06:00
Fryguy 47e2eb0acf [Bug Fix] Harm Touch, Improved Harm Touch, and Unholy Touch (#3904)
* [bug] HT / Imp HT / Unholy Touch

Adjusted logic order for HT/Improved HT/Unholy Touch

* Requested Changes
2024-01-07 22:57:34 -05:00
Fryguy c36b3f030b [Bug Fix] Disciplines should show when someone casts them. (#3901)
* [Bug] Discs should show when someone casts them.

* Correction to location

* requested changes

* Additional fixes
2024-01-07 22:17:30 -05:00
Fryguy 2b821e50ff [Rule] Classic Triple Attack (#3903)
* [Rule] Classic Triple Attack

Classic Triple attack pre-dates skill based triple attack.

Originally it was only for a few classes but was expanded to Warrior, Monks, Berserkers and finally rangers for Dragons of Norrath. After which it was converted to a skill based feature.

These were innate starting level 60 and had a flat % to trigger.

* Requested Changes
2024-01-07 22:06:13 -05:00
Fryguy 0aa07e9529 [Bug Fix] Legacy Manaburn should have hard cap. (#3905)
Legacy Manaburn can crit, however normal or crit has same hard cap.

Created a rule to better manage the cap for server owners.
2024-01-07 21:54:14 -05:00
309 changed files with 27032 additions and 11542 deletions
+249
View File
@@ -1,3 +1,252 @@
## [22.43.2] - 1/25/2024
### Bots
* ^mez command spell list fix ([#3998](https://github.com/EQEmu/Server/pull/3998)) @dariusuknuis 2024-01-19
### Code
* Cleanup position methods ([#4015](https://github.com/EQEmu/Server/pull/4015)) @Kinglykrab 2024-01-25
### Commands
* Add `#npcedit set_grid [Grid ID]` to `#npcedit` ([#4004](https://github.com/EQEmu/Server/pull/4004)) @Kinglykrab 2024-01-22
### Crash Fix
* Fix crash when creating Frogloks/Drakkin ([#4016](https://github.com/EQEmu/Server/pull/4016)) @Kinglykrab 2024-01-25
* Reverting PR #3877 ([#3997](https://github.com/EQEmu/Server/pull/3997)) @fryguy503 2024-01-17
### Database
* Drop deprecated item_tick table ([#3977](https://github.com/EQEmu/Server/pull/3977)) @Akkadius 2024-01-14
* Drop item_tick if exists tweak in manifest ([#3985](https://github.com/EQEmu/Server/pull/3985)) @Akkadius 2024-01-15
* Increase max spawngroup name from 50 to 200 ([#3991](https://github.com/EQEmu/Server/pull/3991)) @Akkadius 2024-01-22
### Fixes
* Fix Mercenaries Buffs/Zoning Issues ([#4000](https://github.com/EQEmu/Server/pull/4000)) @Kinglykrab 2024-01-22
* Fix zone database update manifest ([#3972](https://github.com/EQEmu/Server/pull/3972)) @Kinglykrab 2024-01-13
* Fixes to zone idle while empty changes. ([#4006](https://github.com/EQEmu/Server/pull/4006)) @noudess 2024-01-23
* Reversed logic on InLiquid ([#3979](https://github.com/EQEmu/Server/pull/3979)) @fryguy503 2024-01-14
### Instances
* Convert Instance Quest Methods to Repositories ([#4012](https://github.com/EQEmu/Server/pull/4012)) @Kinglykrab 2024-01-25
### Logging
* Force Info category to be always on in file/console logs ([#3990](https://github.com/EQEmu/Server/pull/3990)) @Akkadius 2024-01-22
### Merchants
* Change database structure for merchant slots ([#3974](https://github.com/EQEmu/Server/pull/3974)) @joligario 2024-01-14
### Messages
* Fix disciple message added by previous patch. ([#3986](https://github.com/EQEmu/Server/pull/3986)) @noudess 2024-01-15
### Quest API
* QuestReward should now summon item to the inventory instead of the cursor. ([#3996](https://github.com/EQEmu/Server/pull/3996)) @regneq 2024-01-22
### Repositories
* Add `rank` to reserved words ([#3982](https://github.com/EQEmu/Server/pull/3982)) @Akkadius 2024-01-15
* Fix datetime zero-value save behavior ([#3976](https://github.com/EQEmu/Server/pull/3976)) @Akkadius 2024-01-14
### Spawn2
* Spawn condition value should default spawn_conditions value ([#3980](https://github.com/EQEmu/Server/pull/3980)) @noudess 2024-01-14
### Zoning
* Additional logs for zoning under instance checks ([#3989](https://github.com/EQEmu/Server/pull/3989)) @Akkadius 2024-01-22
## [22.43.1] - 1/14/2024
### Repositories
* Revert #3976 - fix character corpses @Akkadius 2024-01-14
## [22.43.0] - 1/14/2024
### Database
* Drop deprecated item_tick table ([#3977](https://github.com/EQEmu/Server/pull/3977)) @Akkadius 2024-01-14
### Merchants
* Change database structure for merchant slots ([#3974](https://github.com/EQEmu/Server/pull/3974)) @joligario 2024-01-14
### Repositories
* Fix datetime zero-value save behavior ([#3976](https://github.com/EQEmu/Server/pull/3976)) @Akkadius 2024-01-14
### Zones
* Convert IDLE_WHEN_EMPTY to a Zone Column ([#3891](https://github.com/EQEmu/Server/pull/3891)) @Kinglykrab 2024-01-13
## [22.42.1] - 1/13/2024
### Fixes
* Fix zone database update manifest ([#3972](https://github.com/EQEmu/Server/pull/3972)) @Kinglykrab 2024-01-13
* quest::processmobswhilezoneempty() fix. ([#3971](https://github.com/EQEmu/Server/pull/3971)) @noudess 2024-01-13
## [22.42.0] - 1/13/2024
### AAs
* Convert Loading of AAs to Repositories ([#3963](https://github.com/EQEmu/Server/pull/3963)) @Kinglykrab 2024-01-13
### Auras
* Convert Get of Auras to Repositories ([#3964](https://github.com/EQEmu/Server/pull/3964)) @Kinglykrab 2024-01-13
### Character
* Character EXP Modifiers in Memory ([#3934](https://github.com/EQEmu/Server/pull/3934)) @Kinglykrab 2024-01-13
* Convert Character Corpses to Repositories ([#3941](https://github.com/EQEmu/Server/pull/3941)) @Kinglykrab 2024-01-13
* Convert Save of Character Languages to Repositories ([#3948](https://github.com/EQEmu/Server/pull/3948)) @Kinglykrab 2024-01-12
### Code
* Cleanup AddCash() and RemoveCash() NPC Methods ([#3957](https://github.com/EQEmu/Server/pull/3957)) @Kinglykrab 2024-01-12
* Cleanup ChangeSize() ([#3959](https://github.com/EQEmu/Server/pull/3959)) @Kinglykrab 2024-01-12
* Cleanup Owner Related Mob Methods ([#3960](https://github.com/EQEmu/Server/pull/3960)) @Kinglykrab 2024-01-13
* Cleanup RandomizeFeatures() ([#3958](https://github.com/EQEmu/Server/pull/3958)) @Kinglykrab 2024-01-12
* Remove GroupCount() and RaidGroupCount() ([#3943](https://github.com/EQEmu/Server/pull/3943)) @Kinglykrab 2024-01-13
* Remove unused Grid methods ([#3944](https://github.com/EQEmu/Server/pull/3944)) @Kinglykrab 2024-01-13
### Commands
* Convert NPC Spawn Methods to Repositories ([#3956](https://github.com/EQEmu/Server/pull/3956)) @Kinglykrab 2024-01-13
### Crash Fix
* Character Creation Class/Race out of Range. ([#3920](https://github.com/EQEmu/Server/pull/3920)) @fryguy503 2024-01-09
### Feat
* Alt Sinister Strike Formula ([#3921](https://github.com/EQEmu/Server/pull/3921)) @fryguy503 2024-01-09
### Feature
* Add Lore Item Trade Error ([#3932](https://github.com/EQEmu/Server/pull/3932)) @fryguy503 2024-01-13
* Rule: UseLiveBlockedMessage Bard Spam ([#3933](https://github.com/EQEmu/Server/pull/3933)) @fryguy503 2024-01-09
### Fixes
* Attack Corpse Skill Up Fix ([#3924](https://github.com/EQEmu/Server/pull/3924)) @fryguy503 2024-01-09
* Fix Issue with SetFlyMode() ([#3961](https://github.com/EQEmu/Server/pull/3961)) @Kinglykrab 2024-01-12
* Harm Touch Critical Ratio ([#3915](https://github.com/EQEmu/Server/pull/3915)) @fryguy503 2024-01-09
* Increase Precision in CheckDoubleAttack ([#3928](https://github.com/EQEmu/Server/pull/3928)) @fryguy503 2024-01-09
* IsOfClientBotMerc() for Discipline Messages ([#3940](https://github.com/EQEmu/Server/pull/3940)) @fryguy503 2024-01-09
* Limit MeleeMitigationEffect to defender if only client. ([#3918](https://github.com/EQEmu/Server/pull/3918)) @fryguy503 2024-01-09
* Rampage Number of Hits Limit ([#3929](https://github.com/EQEmu/Server/pull/3929)) @fryguy503 2024-01-09
* Remove duplicate character_data repository in zonedb.cpp ([#3935](https://github.com/EQEmu/Server/pull/3935)) @Kinglykrab 2024-01-09
* Undead Should Never Flee ([#3926](https://github.com/EQEmu/Server/pull/3926)) @fryguy503 2024-01-09
### Global Loot
* Convert Global Loot to Repositories ([#3962](https://github.com/EQEmu/Server/pull/3962)) @Kinglykrab 2024-01-13
### Ground Spawns
* Convert Ground Spawns to Repositories ([#3967](https://github.com/EQEmu/Server/pull/3967)) @Kinglykrab 2024-01-13
### Horses
* Convert Horses to Repositories ([#3965](https://github.com/EQEmu/Server/pull/3965)) @Kinglykrab 2024-01-13
### Item Ticks
* Remove Item Ticks Code ([#3955](https://github.com/EQEmu/Server/pull/3955)) @Kinglykrab 2024-01-13
### Mercenaries
* Convert Mercenaries to Repositories ([#3947](https://github.com/EQEmu/Server/pull/3947)) @Kinglykrab 2024-01-13
### Merchants
* Convert Clear/Delete/Save of Temporary Merchant Lists to Repositories ([#3945](https://github.com/EQEmu/Server/pull/3945)) @Kinglykrab 2024-01-13
### NPCs
* Convert Load of NPC Emotes to Repositories ([#3954](https://github.com/EQEmu/Server/pull/3954)) @Kinglykrab 2024-01-13
### Objects
* Convert Add/Delete/Update of Objects to Repositories ([#3966](https://github.com/EQEmu/Server/pull/3966)) @Kinglykrab 2024-01-13
* Convert World Containers to Repositories ([#3951](https://github.com/EQEmu/Server/pull/3951)) @Kinglykrab 2024-01-13
### Pets
* Convert Pets to Repositories ([#3968](https://github.com/EQEmu/Server/pull/3968)) @Kinglykrab 2024-01-13
### Repositories
* Add null integer column support, instance_list notes migration, regenerate repositories ([#3969](https://github.com/EQEmu/Server/pull/3969)) @Akkadius 2024-01-13
### Respawns
* Convert Respawn Times to Repositories ([#3949](https://github.com/EQEmu/Server/pull/3949)) @Kinglykrab 2024-01-13
### Rules
* Add rule for bard aggro cap ([#3909](https://github.com/EQEmu/Server/pull/3909)) @fryguy503 2024-01-09
* Allow GMs to silently summon ([#3910](https://github.com/EQEmu/Server/pull/3910)) @fryguy503 2024-01-09
* Bash Two Hander use Shoulders ([#3925](https://github.com/EQEmu/Server/pull/3925)) @fryguy503 2024-01-09
* Classic Spell Data SPA Calc variability ([#3931](https://github.com/EQEmu/Server/pull/3931)) @fryguy503 2024-01-09
* Classic Tracking Skillups ([#3923](https://github.com/EQEmu/Server/pull/3923)) @fryguy503 2024-01-09
* Separate Tradeskill Max Train from Research. ([#3916](https://github.com/EQEmu/Server/pull/3916)) @fryguy503 2024-01-09
### Tasks
* Add Support for Task Window Element Groups ([#3902](https://github.com/EQEmu/Server/pull/3902)) @hgtw 2024-01-09
### Traps
* Convert Load of LDoN Traps/Trap Entries to Repositories ([#3953](https://github.com/EQEmu/Server/pull/3953)) @Kinglykrab 2024-01-13
### Zones
* Convert Get/Set of Zone Timezone to Repositories ([#3946](https://github.com/EQEmu/Server/pull/3946)) @Kinglykrab 2024-01-13
* Convert IDLE_WHEN_EMPTY to a Zone Column ([#3891](https://github.com/EQEmu/Server/pull/3891)) @Kinglykrab 2024-01-13
* Convert SaveZoneCFG to Repositories ([#3950](https://github.com/EQEmu/Server/pull/3950)) @Kinglykrab 2024-01-13
## [22.41.0] - 1/8/2024
### Bug
* DI Buff Fade ([#3919](https://github.com/EQEmu/Server/pull/3919)) @fryguy503 2024-01-08
* NPCs will now only proc on hit ([#3913](https://github.com/EQEmu/Server/pull/3913)) @fryguy503 2024-01-08
* Pets should not ignore Z axis ([#3912](https://github.com/EQEmu/Server/pull/3912)) @fryguy503 2024-01-08
### Fixes
* Disciplines should show when someone casts them. ([#3901](https://github.com/EQEmu/Server/pull/3901)) @fryguy503 2024-01-08
* Fix Typo in Character Skills loading ([#3937](https://github.com/EQEmu/Server/pull/3937)) @Kinglykrab 2024-01-09
* Fix for HasLockoutByCharacterID ([#3927](https://github.com/EQEmu/Server/pull/3927)) @fryguy503 2024-01-08
* Harm Touch, Improved Harm Touch, and Unholy Touch ([#3904](https://github.com/EQEmu/Server/pull/3904)) @fryguy503 2024-01-08
* Legacy Manaburn should have hard cap. ([#3905](https://github.com/EQEmu/Server/pull/3905)) @fryguy503 2024-01-08
* TGB - Added logic to stop bard errors on group songs. ([#3906](https://github.com/EQEmu/Server/pull/3906)) @fryguy503 2024-01-08
* World Shutdown Filter ([#3930](https://github.com/EQEmu/Server/pull/3930)) @fryguy503 2024-01-08
### Info
* Adding textual feedback when trying to sell alt items back to … ([#3917](https://github.com/EQEmu/Server/pull/3917)) @fryguy503 2024-01-08
### Rules
* Backstab Damage Modifier ([#3908](https://github.com/EQEmu/Server/pull/3908)) @fryguy503 2024-01-08
* Classic Tradeskill Skill Clamp ([#3914](https://github.com/EQEmu/Server/pull/3914)) @fryguy503 2024-01-08
* Classic Triple Attack ([#3903](https://github.com/EQEmu/Server/pull/3903)) @fryguy503 2024-01-08
* Ensure mana taps only effect NPC's that have mana. ([#3907](https://github.com/EQEmu/Server/pull/3907)) @fryguy503 2024-01-08
* Over Taunt Hate ([#3900](https://github.com/EQEmu/Server/pull/3900)) @fryguy503 2024-01-08
* Stun Chance Percent Rule ([#3922](https://github.com/EQEmu/Server/pull/3922)) @fryguy503 2024-01-08
## [22.40.0] - 1/7/2024 ## [22.40.0] - 1/7/2024
### Account ### Account
-2
View File
@@ -230,7 +230,6 @@ SET(repositories
repositories/base/base_inventory_snapshots_repository.h repositories/base/base_inventory_snapshots_repository.h
repositories/base/base_ip_exemptions_repository.h repositories/base/base_ip_exemptions_repository.h
repositories/base/base_items_repository.h repositories/base/base_items_repository.h
repositories/base/base_item_tick_repository.h
repositories/base/base_ldon_trap_entries_repository.h repositories/base/base_ldon_trap_entries_repository.h
repositories/base/base_ldon_trap_templates_repository.h repositories/base/base_ldon_trap_templates_repository.h
repositories/base/base_level_exp_mods_repository.h repositories/base/base_level_exp_mods_repository.h
@@ -408,7 +407,6 @@ SET(repositories
repositories/inventory_snapshots_repository.h repositories/inventory_snapshots_repository.h
repositories/ip_exemptions_repository.h repositories/ip_exemptions_repository.h
repositories/items_repository.h repositories/items_repository.h
repositories/item_tick_repository.h
repositories/ldon_trap_entries_repository.h repositories/ldon_trap_entries_repository.h
repositories/ldon_trap_templates_repository.h repositories/ldon_trap_templates_repository.h
repositories/level_exp_mods_repository.h repositories/level_exp_mods_repository.h
+4 -2
View File
@@ -54,6 +54,7 @@
#include "repositories/zone_repository.h" #include "repositories/zone_repository.h"
#include "zone_store.h" #include "zone_store.h"
#include "repositories/merchantlist_temp_repository.h"
extern Client client; extern Client client;
@@ -1221,8 +1222,9 @@ void Database::GetAccountFromID(uint32 id, char* oAccountName, int16* oStatus) {
*oStatus = Strings::ToInt(row[1]); *oStatus = Strings::ToInt(row[1]);
} }
void Database::ClearMerchantTemp(){ void Database::ClearMerchantTemp()
QueryDatabase("DELETE FROM merchantlist_temp"); {
MerchantlistTempRepository::ClearTemporaryMerchantLists(*this);
} }
bool Database::UpdateName(const char* oldname, const char* newname) { bool Database::UpdateName(const char* oldname, const char* newname) {
+80 -1
View File
@@ -5162,8 +5162,87 @@ ALTER TABLE `tasks`
ADD COLUMN `enabled` smallint NULL DEFAULT 1 AFTER `faction_amount` ADD COLUMN `enabled` smallint NULL DEFAULT 1 AFTER `faction_amount`
)", )",
.content_schema_update = true .content_schema_update = true
},
ManifestEntry{
.version = 9250,
.description = "2023_01_06_task_activities_list_group.sql",
.check = "SHOW COLUMNS FROM `task_activities` LIKE 'list_group'",
.condition = "empty",
.match = "",
.sql = R"(
ALTER TABLE `task_activities`
ADD COLUMN `list_group` TINYINT UNSIGNED NOT NULL DEFAULT '0' AFTER `optional`;
)",
.content_schema_update = true
},
ManifestEntry{
.version = 9251,
.description = "2023_01_12_instance_list_notes.sql",
.check = "SHOW COLUMNS FROM `instance_list` LIKE 'notes'",
.condition = "empty",
.match = "",
.sql = R"(
ALTER TABLE `instance_list`
ADD COLUMN `notes` varchar(50) NOT NULL DEFAULT '' AFTER `never_expires`;
)",
},
ManifestEntry{
.version = 9252,
.description = "2024_01_07_zone_idle_when_empty.sql",
.check = "SHOW COLUMNS FROM `zone` LIKE 'idle_when_empty'",
.condition = "empty",
.match = "",
.sql = R"(
ALTER TABLE `zone`
ADD COLUMN `idle_when_empty` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 AFTER `min_lava_damage`,
ADD COLUMN `seconds_before_idle` int(11) UNSIGNED NOT NULL DEFAULT 60 AFTER `idle_when_empty`;
)",
.content_schema_update = true
},
ManifestEntry{
.version = 9253,
.description = "2024_01_13_merchantlist_slot.sql",
.check = "SHOW COLUMNS FROM `merchantlist` LIKE 'slot'",
.condition = "missing",
.match = "unsigned",
.sql = R"(
ALTER TABLE `merchantlist`
MODIFY COLUMN `slot` int(11) UNSIGNED NOT NULL DEFAULT 0
)",
.content_schema_update = true
},
ManifestEntry{
.version = 9254,
.description = "2024_01_13_merchantlist_temp_slot.sql",
.check = "SHOW COLUMNS FROM `merchantlist_temp` LIKE 'slot'",
.condition = "contains",
.match = "tinyint",
.sql = R"(
ALTER TABLE `merchantlist_temp`
MODIFY COLUMN `slot` int(11) UNSIGNED NOT NULL DEFAULT 0
)"
},
ManifestEntry{
.version = 9255,
.description = "2024_01_13_drop_item_tick_deprecated.sql",
.check = "show tables like 'item_tick'",
.condition = "not_empty",
.match = "",
.sql = R"(
DROP TABLE IF EXISTS item_tick
)"
},
ManifestEntry{
.version = 9256,
.description = "2024_01_16_increase_spawngroup_size.sql",
.check = "SHOW COLUMNS FROM `spawngroup` LIKE 'name'",
.condition = "contains",
.match = "varchar(50)",
.sql = R"(
ALTER TABLE `spawngroup`
MODIFY COLUMN `name` varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '' AFTER `id`;
)"
} }
// -- template; copy/paste this when you need to create a new entry // -- template; copy/paste this when you need to create a new entry
// ManifestEntry{ // ManifestEntry{
// .version = 9228, // .version = 9228,
+2 -1
View File
@@ -562,6 +562,7 @@ std::string EQ::constants::GetEmoteEventTypeName(uint8 emote_event_type)
const std::map<uint8, std::string> &EQ::constants::GetEmoteTypeMap() const std::map<uint8, std::string> &EQ::constants::GetEmoteTypeMap()
{ {
static const std::map<uint8, std::string> emote_type_map = { static const std::map<uint8, std::string> emote_type_map = {
{ EmoteTypes::Say, "Say" },
{ EmoteTypes::Emote, "Emote" }, { EmoteTypes::Emote, "Emote" },
{ EmoteTypes::Shout, "Shout" }, { EmoteTypes::Shout, "Shout" },
{ EmoteTypes::Proximity, "Proximity" } { EmoteTypes::Proximity, "Proximity" }
@@ -572,7 +573,7 @@ const std::map<uint8, std::string> &EQ::constants::GetEmoteTypeMap()
std::string EQ::constants::GetEmoteTypeName(uint8 emote_type) std::string EQ::constants::GetEmoteTypeName(uint8 emote_type)
{ {
if (!EQ::ValueWithin(emote_type, EmoteTypes::Emote, EmoteTypes::Proximity)) { if (!EQ::ValueWithin(emote_type, EmoteTypes::Say, EmoteTypes::Proximity)) {
return std::string(); return std::string();
} }
+1
View File
@@ -350,6 +350,7 @@ namespace EQ
}; };
enum EmoteTypes : uint8 { enum EmoteTypes : uint8 {
Say,
Emote, Emote,
Shout, Shout,
Proximity Proximity
+10 -4
View File
@@ -392,7 +392,7 @@ struct NewZone_Struct {
/*0724*/ uint32 underworld_teleport_index; // > 0 teleports w/ zone point index, invalid succors, if this value is 0, it prevents you from running off edges that would end up underworld /*0724*/ uint32 underworld_teleport_index; // > 0 teleports w/ zone point index, invalid succors, if this value is 0, it prevents you from running off edges that would end up underworld
/*0728*/ uint32 lava_damage; // Seen 50 /*0728*/ uint32 lava_damage; // Seen 50
/*0732*/ uint32 min_lava_damage; // Seen 10 /*0732*/ uint32 min_lava_damage; // Seen 10
/*0736*/ /*0736*/ float safe_heading;
}; };
/* /*
@@ -631,6 +631,12 @@ struct ConsentResponse_Struct {
char zonename[32]; char zonename[32];
}; };
struct NameApproval_Struct {
char name[64];
uint32 race_id;
uint32 class_id;
};
/* /*
** Name Generator Struct ** Name Generator Struct
** Length: 72 bytes ** Length: 72 bytes
@@ -3445,7 +3451,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg; uint32 min_dmg;
uint32 max_dmg; uint32 max_dmg;
}; };
struct Ground_Spawn{ struct GroundSpawn{
float max_x; float max_x;
float max_y; float max_y;
float min_x; float min_x;
@@ -3457,8 +3463,8 @@ struct Ground_Spawn{
uint32 max_allowed; uint32 max_allowed;
uint32 respawntimer; uint32 respawntimer;
}; };
struct Ground_Spawns { struct GroundSpawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow struct GroundSpawn spawn[50]; //Assigned max number to allow
}; };
//struct PetitionBug_Struct{ //struct PetitionBug_Struct{
+2
View File
@@ -701,6 +701,8 @@ EQEmuLogSys *EQEmuLogSys::LoadLogDatabaseSettings()
log_settings[Logs::Crash].log_to_console = static_cast<uint8>(Logs::General); log_settings[Logs::Crash].log_to_console = static_cast<uint8>(Logs::General);
log_settings[Logs::Crash].log_to_gmsay = static_cast<uint8>(Logs::General); log_settings[Logs::Crash].log_to_gmsay = static_cast<uint8>(Logs::General);
log_settings[Logs::Crash].log_to_file = static_cast<uint8>(Logs::General); log_settings[Logs::Crash].log_to_file = static_cast<uint8>(Logs::General);
log_settings[Logs::Info].log_to_file = static_cast<uint8>(Logs::General);
log_settings[Logs::Info].log_to_console = static_cast<uint8>(Logs::General);
return this; return this;
} }
-5
View File
@@ -35,11 +35,6 @@ Core Zone features
*/ */
//Uncomment this to cause a zone to basically idle
//when there are no players in it, mobs stop wandering, etc..
#define IDLE_WHEN_EMPTY
#ifdef EMBPERL #ifdef EMBPERL
//Enable the new XS based perl parser //Enable the new XS based perl parser
#define EMBPERL_XS #define EMBPERL_XS
+3 -3
View File
@@ -3619,7 +3619,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg; uint32 min_dmg;
uint32 max_dmg; uint32 max_dmg;
}; };
struct Ground_Spawn{ struct GroundSpawn{
float max_x; float max_x;
float max_y; float max_y;
float min_x; float min_x;
@@ -3631,8 +3631,8 @@ struct Ground_Spawn{
uint32 max_allowed; uint32 max_allowed;
uint32 respawntimer; uint32 respawntimer;
}; };
struct Ground_Spawns { struct GroundSpawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow struct GroundSpawn spawn[50]; //Assigned max number to allow
}; };
//struct PetitionBug_Struct{ //struct PetitionBug_Struct{
+3 -3
View File
@@ -3556,7 +3556,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg; uint32 min_dmg;
uint32 max_dmg; uint32 max_dmg;
}; };
struct Ground_Spawn{ struct GroundSpawn{
float max_x; float max_x;
float max_y; float max_y;
float min_x; float min_x;
@@ -3568,8 +3568,8 @@ struct Ground_Spawn{
uint32 max_allowed; uint32 max_allowed;
uint32 respawntimer; uint32 respawntimer;
}; };
struct Ground_Spawns { struct GroundSpawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow struct GroundSpawn spawn[50]; //Assigned max number to allow
}; };
//struct PetitionBug_Struct{ //struct PetitionBug_Struct{
+3 -3
View File
@@ -3026,7 +3026,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg; uint32 min_dmg;
uint32 max_dmg; uint32 max_dmg;
}; };
struct Ground_Spawn{ struct GroundSpawn{
float max_x; float max_x;
float max_y; float max_y;
float min_x; float min_x;
@@ -3038,8 +3038,8 @@ struct Ground_Spawn{
uint32 max_allowed; uint32 max_allowed;
uint32 respawntimer; uint32 respawntimer;
}; };
struct Ground_Spawns { struct GroundSpawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow struct GroundSpawn spawn[50]; //Assigned max number to allow
}; };
//struct PetitionBug_Struct{ //struct PetitionBug_Struct{
+3 -3
View File
@@ -2951,7 +2951,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg; uint32 min_dmg;
uint32 max_dmg; uint32 max_dmg;
}; };
struct Ground_Spawn{ struct GroundSpawn{
float max_x; float max_x;
float max_y; float max_y;
float min_x; float min_x;
@@ -2963,8 +2963,8 @@ struct Ground_Spawn{
uint32 max_allowed; uint32 max_allowed;
uint32 respawntimer; uint32 respawntimer;
}; };
struct Ground_Spawns { struct GroundSpawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow struct GroundSpawn spawn[50]; //Assigned max number to allow
}; };
//struct PetitionBug_Struct{ //struct PetitionBug_Struct{
+3 -3
View File
@@ -2604,7 +2604,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg; uint32 min_dmg;
uint32 max_dmg; uint32 max_dmg;
}; };
struct Ground_Spawn{ struct GroundSpawn{
float max_x; float max_x;
float max_y; float max_y;
float min_x; float min_x;
@@ -2616,8 +2616,8 @@ struct Ground_Spawn{
uint32 max_allowed; uint32 max_allowed;
uint32 respawntimer; uint32 respawntimer;
}; };
struct Ground_Spawns { struct GroundSpawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow struct GroundSpawn spawn[50]; //Assigned max number to allow
}; };
//struct PetitionBug_Struct{ //struct PetitionBug_Struct{
+3 -3
View File
@@ -3078,7 +3078,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg; uint32 min_dmg;
uint32 max_dmg; uint32 max_dmg;
}; };
struct Ground_Spawn{ struct GroundSpawn{
float max_x; float max_x;
float max_y; float max_y;
float min_x; float min_x;
@@ -3090,8 +3090,8 @@ struct Ground_Spawn{
uint32 max_allowed; uint32 max_allowed;
uint32 respawntimer; uint32 respawntimer;
}; };
struct Ground_Spawns { struct GroundSpawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow struct GroundSpawn spawn[50]; //Assigned max number to allow
}; };
//struct PetitionBug_Struct{ //struct PetitionBug_Struct{
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_AA_ABILITY_REPOSITORY_H #ifndef EQEMU_BASE_AA_ABILITY_REPOSITORY_H
@@ -33,6 +33,7 @@ public:
int32_t first_rank_id; int32_t first_rank_id;
uint8_t enabled; uint8_t enabled;
int8_t reset_on_death; int8_t reset_on_death;
int8_t auto_grant_enabled;
}; };
static std::string PrimaryKey() static std::string PrimaryKey()
@@ -57,6 +58,7 @@ public:
"first_rank_id", "first_rank_id",
"enabled", "enabled",
"reset_on_death", "reset_on_death",
"auto_grant_enabled",
}; };
} }
@@ -77,6 +79,7 @@ public:
"first_rank_id", "first_rank_id",
"enabled", "enabled",
"reset_on_death", "reset_on_death",
"auto_grant_enabled",
}; };
} }
@@ -117,20 +120,21 @@ public:
{ {
AaAbility e{}; AaAbility e{};
e.id = 0; e.id = 0;
e.name = ""; e.name = "";
e.category = -1; e.category = -1;
e.classes = 131070; e.classes = 131070;
e.races = 65535; e.races = 65535;
e.drakkin_heritage = 127; e.drakkin_heritage = 127;
e.deities = 131071; e.deities = 131071;
e.status = 0; e.status = 0;
e.type = 0; e.type = 0;
e.charges = 0; e.charges = 0;
e.grant_only = 0; e.grant_only = 0;
e.first_rank_id = -1; e.first_rank_id = -1;
e.enabled = 1; e.enabled = 1;
e.reset_on_death = 0; e.reset_on_death = 0;
e.auto_grant_enabled = 0;
return e; return e;
} }
@@ -156,8 +160,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
aa_ability_id aa_ability_id
) )
); );
@@ -166,20 +171,21 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AaAbility e{}; AaAbility e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2])); e.category = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.classes = static_cast<int32_t>(atoi(row[3])); e.classes = row[3] ? static_cast<int32_t>(atoi(row[3])) : 131070;
e.races = static_cast<int32_t>(atoi(row[4])); e.races = row[4] ? static_cast<int32_t>(atoi(row[4])) : 65535;
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5])); e.drakkin_heritage = row[5] ? static_cast<int32_t>(atoi(row[5])) : 127;
e.deities = static_cast<int32_t>(atoi(row[6])); e.deities = row[6] ? static_cast<int32_t>(atoi(row[6])) : 131071;
e.status = static_cast<int32_t>(atoi(row[7])); e.status = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.type = static_cast<int32_t>(atoi(row[8])); e.type = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.charges = static_cast<int32_t>(atoi(row[9])); e.charges = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.grant_only = static_cast<int8_t>(atoi(row[10])); e.grant_only = row[10] ? static_cast<int8_t>(atoi(row[10])) : 0;
e.first_rank_id = static_cast<int32_t>(atoi(row[11])); e.first_rank_id = row[11] ? static_cast<int32_t>(atoi(row[11])) : -1;
e.enabled = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.enabled = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 1;
e.reset_on_death = static_cast<int8_t>(atoi(row[13])); e.reset_on_death = row[13] ? static_cast<int8_t>(atoi(row[13])) : 0;
e.auto_grant_enabled = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
return e; return e;
} }
@@ -227,6 +233,7 @@ public:
v.push_back(columns[11] + " = " + std::to_string(e.first_rank_id)); v.push_back(columns[11] + " = " + std::to_string(e.first_rank_id));
v.push_back(columns[12] + " = " + std::to_string(e.enabled)); v.push_back(columns[12] + " = " + std::to_string(e.enabled));
v.push_back(columns[13] + " = " + std::to_string(e.reset_on_death)); v.push_back(columns[13] + " = " + std::to_string(e.reset_on_death));
v.push_back(columns[14] + " = " + std::to_string(e.auto_grant_enabled));
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
@@ -262,6 +269,7 @@ public:
v.push_back(std::to_string(e.first_rank_id)); v.push_back(std::to_string(e.first_rank_id));
v.push_back(std::to_string(e.enabled)); v.push_back(std::to_string(e.enabled));
v.push_back(std::to_string(e.reset_on_death)); v.push_back(std::to_string(e.reset_on_death));
v.push_back(std::to_string(e.auto_grant_enabled));
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
@@ -305,6 +313,7 @@ public:
v.push_back(std::to_string(e.first_rank_id)); v.push_back(std::to_string(e.first_rank_id));
v.push_back(std::to_string(e.enabled)); v.push_back(std::to_string(e.enabled));
v.push_back(std::to_string(e.reset_on_death)); v.push_back(std::to_string(e.reset_on_death));
v.push_back(std::to_string(e.auto_grant_enabled));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")"); insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
} }
@@ -338,20 +347,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AaAbility e{}; AaAbility e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2])); e.category = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.classes = static_cast<int32_t>(atoi(row[3])); e.classes = row[3] ? static_cast<int32_t>(atoi(row[3])) : 131070;
e.races = static_cast<int32_t>(atoi(row[4])); e.races = row[4] ? static_cast<int32_t>(atoi(row[4])) : 65535;
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5])); e.drakkin_heritage = row[5] ? static_cast<int32_t>(atoi(row[5])) : 127;
e.deities = static_cast<int32_t>(atoi(row[6])); e.deities = row[6] ? static_cast<int32_t>(atoi(row[6])) : 131071;
e.status = static_cast<int32_t>(atoi(row[7])); e.status = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.type = static_cast<int32_t>(atoi(row[8])); e.type = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.charges = static_cast<int32_t>(atoi(row[9])); e.charges = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.grant_only = static_cast<int8_t>(atoi(row[10])); e.grant_only = row[10] ? static_cast<int8_t>(atoi(row[10])) : 0;
e.first_rank_id = static_cast<int32_t>(atoi(row[11])); e.first_rank_id = row[11] ? static_cast<int32_t>(atoi(row[11])) : -1;
e.enabled = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.enabled = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 1;
e.reset_on_death = static_cast<int8_t>(atoi(row[13])); e.reset_on_death = row[13] ? static_cast<int8_t>(atoi(row[13])) : 0;
e.auto_grant_enabled = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -376,20 +386,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AaAbility e{}; AaAbility e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2])); e.category = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.classes = static_cast<int32_t>(atoi(row[3])); e.classes = row[3] ? static_cast<int32_t>(atoi(row[3])) : 131070;
e.races = static_cast<int32_t>(atoi(row[4])); e.races = row[4] ? static_cast<int32_t>(atoi(row[4])) : 65535;
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5])); e.drakkin_heritage = row[5] ? static_cast<int32_t>(atoi(row[5])) : 127;
e.deities = static_cast<int32_t>(atoi(row[6])); e.deities = row[6] ? static_cast<int32_t>(atoi(row[6])) : 131071;
e.status = static_cast<int32_t>(atoi(row[7])); e.status = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.type = static_cast<int32_t>(atoi(row[8])); e.type = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.charges = static_cast<int32_t>(atoi(row[9])); e.charges = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.grant_only = static_cast<int8_t>(atoi(row[10])); e.grant_only = row[10] ? static_cast<int8_t>(atoi(row[10])) : 0;
e.first_rank_id = static_cast<int32_t>(atoi(row[11])); e.first_rank_id = row[11] ? static_cast<int32_t>(atoi(row[11])) : -1;
e.enabled = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.enabled = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 1;
e.reset_on_death = static_cast<int8_t>(atoi(row[13])); e.reset_on_death = row[13] ? static_cast<int8_t>(atoi(row[13])) : 0;
e.auto_grant_enabled = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -448,6 +459,90 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AaAbility &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.category));
v.push_back(std::to_string(e.classes));
v.push_back(std::to_string(e.races));
v.push_back(std::to_string(e.drakkin_heritage));
v.push_back(std::to_string(e.deities));
v.push_back(std::to_string(e.status));
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.charges));
v.push_back(std::to_string(e.grant_only));
v.push_back(std::to_string(e.first_rank_id));
v.push_back(std::to_string(e.enabled));
v.push_back(std::to_string(e.reset_on_death));
v.push_back(std::to_string(e.auto_grant_enabled));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AaAbility> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.category));
v.push_back(std::to_string(e.classes));
v.push_back(std::to_string(e.races));
v.push_back(std::to_string(e.drakkin_heritage));
v.push_back(std::to_string(e.deities));
v.push_back(std::to_string(e.status));
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.charges));
v.push_back(std::to_string(e.grant_only));
v.push_back(std::to_string(e.first_rank_id));
v.push_back(std::to_string(e.enabled));
v.push_back(std::to_string(e.reset_on_death));
v.push_back(std::to_string(e.auto_grant_enabled));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_AA_ABILITY_REPOSITORY_H #endif //EQEMU_BASE_AA_ABILITY_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_AA_RANK_EFFECTS_REPOSITORY_H #ifndef EQEMU_BASE_AA_RANK_EFFECTS_REPOSITORY_H
@@ -120,8 +120,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
aa_rank_effects_id aa_rank_effects_id
) )
); );
@@ -130,11 +131,11 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AaRankEffects e{}; AaRankEffects e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 1;
e.effect_id = static_cast<int32_t>(atoi(row[2])); e.effect_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.base1 = static_cast<int32_t>(atoi(row[3])); e.base1 = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.base2 = static_cast<int32_t>(atoi(row[4])); e.base2 = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
return e; return e;
} }
@@ -266,11 +267,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AaRankEffects e{}; AaRankEffects e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 1;
e.effect_id = static_cast<int32_t>(atoi(row[2])); e.effect_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.base1 = static_cast<int32_t>(atoi(row[3])); e.base1 = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.base2 = static_cast<int32_t>(atoi(row[4])); e.base2 = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -295,11 +296,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AaRankEffects e{}; AaRankEffects e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 1;
e.effect_id = static_cast<int32_t>(atoi(row[2])); e.effect_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.base1 = static_cast<int32_t>(atoi(row[3])); e.base1 = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.base2 = static_cast<int32_t>(atoi(row[4])); e.base2 = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -358,6 +359,70 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AaRankEffects &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.rank_id));
v.push_back(std::to_string(e.slot));
v.push_back(std::to_string(e.effect_id));
v.push_back(std::to_string(e.base1));
v.push_back(std::to_string(e.base2));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AaRankEffects> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.rank_id));
v.push_back(std::to_string(e.slot));
v.push_back(std::to_string(e.effect_id));
v.push_back(std::to_string(e.base1));
v.push_back(std::to_string(e.base2));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_AA_RANK_EFFECTS_REPOSITORY_H #endif //EQEMU_BASE_AA_RANK_EFFECTS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_AA_RANK_PREREQS_REPOSITORY_H #ifndef EQEMU_BASE_AA_RANK_PREREQS_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
aa_rank_prereqs_id aa_rank_prereqs_id
) )
); );
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AaRankPrereqs e{}; AaRankPrereqs e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = static_cast<int32_t>(atoi(row[1])); e.aa_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.points = static_cast<int32_t>(atoi(row[2])); e.points = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
return e; return e;
} }
@@ -250,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AaRankPrereqs e{}; AaRankPrereqs e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = static_cast<int32_t>(atoi(row[1])); e.aa_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.points = static_cast<int32_t>(atoi(row[2])); e.points = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -277,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AaRankPrereqs e{}; AaRankPrereqs e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = static_cast<int32_t>(atoi(row[1])); e.aa_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.points = static_cast<int32_t>(atoi(row[2])); e.points = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -338,6 +339,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AaRankPrereqs &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.rank_id));
v.push_back(std::to_string(e.aa_id));
v.push_back(std::to_string(e.points));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AaRankPrereqs> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.rank_id));
v.push_back(std::to_string(e.aa_id));
v.push_back(std::to_string(e.points));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_AA_RANK_PREREQS_REPOSITORY_H #endif //EQEMU_BASE_AA_RANK_PREREQS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_AA_RANKS_REPOSITORY_H #ifndef EQEMU_BASE_AA_RANKS_REPOSITORY_H
@@ -152,8 +152,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
aa_ranks_id aa_ranks_id
) )
); );
@@ -162,19 +163,19 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AaRanks e{}; AaRanks e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.upper_hotkey_sid = static_cast<int32_t>(atoi(row[1])); e.upper_hotkey_sid = row[1] ? static_cast<int32_t>(atoi(row[1])) : -1;
e.lower_hotkey_sid = static_cast<int32_t>(atoi(row[2])); e.lower_hotkey_sid = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.title_sid = static_cast<int32_t>(atoi(row[3])); e.title_sid = row[3] ? static_cast<int32_t>(atoi(row[3])) : -1;
e.desc_sid = static_cast<int32_t>(atoi(row[4])); e.desc_sid = row[4] ? static_cast<int32_t>(atoi(row[4])) : -1;
e.cost = static_cast<int32_t>(atoi(row[5])); e.cost = row[5] ? static_cast<int32_t>(atoi(row[5])) : 1;
e.level_req = static_cast<int32_t>(atoi(row[6])); e.level_req = row[6] ? static_cast<int32_t>(atoi(row[6])) : 51;
e.spell = static_cast<int32_t>(atoi(row[7])); e.spell = row[7] ? static_cast<int32_t>(atoi(row[7])) : -1;
e.spell_type = static_cast<int32_t>(atoi(row[8])); e.spell_type = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.recast_time = static_cast<int32_t>(atoi(row[9])); e.recast_time = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.expansion = static_cast<int32_t>(atoi(row[10])); e.expansion = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.prev_id = static_cast<int32_t>(atoi(row[11])); e.prev_id = row[11] ? static_cast<int32_t>(atoi(row[11])) : -1;
e.next_id = static_cast<int32_t>(atoi(row[12])); e.next_id = row[12] ? static_cast<int32_t>(atoi(row[12])) : -1;
return e; return e;
} }
@@ -330,19 +331,19 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AaRanks e{}; AaRanks e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.upper_hotkey_sid = static_cast<int32_t>(atoi(row[1])); e.upper_hotkey_sid = row[1] ? static_cast<int32_t>(atoi(row[1])) : -1;
e.lower_hotkey_sid = static_cast<int32_t>(atoi(row[2])); e.lower_hotkey_sid = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.title_sid = static_cast<int32_t>(atoi(row[3])); e.title_sid = row[3] ? static_cast<int32_t>(atoi(row[3])) : -1;
e.desc_sid = static_cast<int32_t>(atoi(row[4])); e.desc_sid = row[4] ? static_cast<int32_t>(atoi(row[4])) : -1;
e.cost = static_cast<int32_t>(atoi(row[5])); e.cost = row[5] ? static_cast<int32_t>(atoi(row[5])) : 1;
e.level_req = static_cast<int32_t>(atoi(row[6])); e.level_req = row[6] ? static_cast<int32_t>(atoi(row[6])) : 51;
e.spell = static_cast<int32_t>(atoi(row[7])); e.spell = row[7] ? static_cast<int32_t>(atoi(row[7])) : -1;
e.spell_type = static_cast<int32_t>(atoi(row[8])); e.spell_type = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.recast_time = static_cast<int32_t>(atoi(row[9])); e.recast_time = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.expansion = static_cast<int32_t>(atoi(row[10])); e.expansion = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.prev_id = static_cast<int32_t>(atoi(row[11])); e.prev_id = row[11] ? static_cast<int32_t>(atoi(row[11])) : -1;
e.next_id = static_cast<int32_t>(atoi(row[12])); e.next_id = row[12] ? static_cast<int32_t>(atoi(row[12])) : -1;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -367,19 +368,19 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AaRanks e{}; AaRanks e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.upper_hotkey_sid = static_cast<int32_t>(atoi(row[1])); e.upper_hotkey_sid = row[1] ? static_cast<int32_t>(atoi(row[1])) : -1;
e.lower_hotkey_sid = static_cast<int32_t>(atoi(row[2])); e.lower_hotkey_sid = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.title_sid = static_cast<int32_t>(atoi(row[3])); e.title_sid = row[3] ? static_cast<int32_t>(atoi(row[3])) : -1;
e.desc_sid = static_cast<int32_t>(atoi(row[4])); e.desc_sid = row[4] ? static_cast<int32_t>(atoi(row[4])) : -1;
e.cost = static_cast<int32_t>(atoi(row[5])); e.cost = row[5] ? static_cast<int32_t>(atoi(row[5])) : 1;
e.level_req = static_cast<int32_t>(atoi(row[6])); e.level_req = row[6] ? static_cast<int32_t>(atoi(row[6])) : 51;
e.spell = static_cast<int32_t>(atoi(row[7])); e.spell = row[7] ? static_cast<int32_t>(atoi(row[7])) : -1;
e.spell_type = static_cast<int32_t>(atoi(row[8])); e.spell_type = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.recast_time = static_cast<int32_t>(atoi(row[9])); e.recast_time = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.expansion = static_cast<int32_t>(atoi(row[10])); e.expansion = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.prev_id = static_cast<int32_t>(atoi(row[11])); e.prev_id = row[11] ? static_cast<int32_t>(atoi(row[11])) : -1;
e.next_id = static_cast<int32_t>(atoi(row[12])); e.next_id = row[12] ? static_cast<int32_t>(atoi(row[12])) : -1;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -438,6 +439,86 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AaRanks &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.upper_hotkey_sid));
v.push_back(std::to_string(e.lower_hotkey_sid));
v.push_back(std::to_string(e.title_sid));
v.push_back(std::to_string(e.desc_sid));
v.push_back(std::to_string(e.cost));
v.push_back(std::to_string(e.level_req));
v.push_back(std::to_string(e.spell));
v.push_back(std::to_string(e.spell_type));
v.push_back(std::to_string(e.recast_time));
v.push_back(std::to_string(e.expansion));
v.push_back(std::to_string(e.prev_id));
v.push_back(std::to_string(e.next_id));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AaRanks> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.upper_hotkey_sid));
v.push_back(std::to_string(e.lower_hotkey_sid));
v.push_back(std::to_string(e.title_sid));
v.push_back(std::to_string(e.desc_sid));
v.push_back(std::to_string(e.cost));
v.push_back(std::to_string(e.level_req));
v.push_back(std::to_string(e.spell));
v.push_back(std::to_string(e.spell_type));
v.push_back(std::to_string(e.recast_time));
v.push_back(std::to_string(e.expansion));
v.push_back(std::to_string(e.prev_id));
v.push_back(std::to_string(e.next_id));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_AA_RANKS_REPOSITORY_H #endif //EQEMU_BASE_AA_RANKS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ACCOUNT_FLAGS_REPOSITORY_H #ifndef EQEMU_BASE_ACCOUNT_FLAGS_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
account_flags_id account_flags_id
) )
); );
@@ -122,7 +123,7 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AccountFlags e{}; AccountFlags e{};
e.p_accid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.p_accid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.p_flag = row[1] ? row[1] : ""; e.p_flag = row[1] ? row[1] : "";
e.p_value = row[2] ? row[2] : ""; e.p_value = row[2] ? row[2] : "";
@@ -250,7 +251,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AccountFlags e{}; AccountFlags e{};
e.p_accid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.p_accid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.p_flag = row[1] ? row[1] : ""; e.p_flag = row[1] ? row[1] : "";
e.p_value = row[2] ? row[2] : ""; e.p_value = row[2] ? row[2] : "";
@@ -277,7 +278,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AccountFlags e{}; AccountFlags e{};
e.p_accid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.p_accid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.p_flag = row[1] ? row[1] : ""; e.p_flag = row[1] ? row[1] : "";
e.p_value = row[2] ? row[2] : ""; e.p_value = row[2] ? row[2] : "";
@@ -338,6 +339,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AccountFlags &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.p_accid));
v.push_back("'" + Strings::Escape(e.p_flag) + "'");
v.push_back("'" + Strings::Escape(e.p_value) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AccountFlags> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.p_accid));
v.push_back("'" + Strings::Escape(e.p_flag) + "'");
v.push_back("'" + Strings::Escape(e.p_value) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ACCOUNT_FLAGS_REPOSITORY_H #endif //EQEMU_BASE_ACCOUNT_FLAGS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ACCOUNT_IP_REPOSITORY_H #ifndef EQEMU_BASE_ACCOUNT_IP_REPOSITORY_H
@@ -116,8 +116,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
account_ip_id account_ip_id
) )
); );
@@ -126,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AccountIp e{}; AccountIp e{};
e.accid = static_cast<int32_t>(atoi(row[0])); e.accid = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.ip = row[1] ? row[1] : ""; e.ip = row[1] ? row[1] : "";
e.count = static_cast<int32_t>(atoi(row[2])); e.count = row[2] ? static_cast<int32_t>(atoi(row[2])) : 1;
e.lastused = row[3] ? row[3] : ""; e.lastused = row[3] ? row[3] : std::time(nullptr);
return e; return e;
} }
@@ -258,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AccountIp e{}; AccountIp e{};
e.accid = static_cast<int32_t>(atoi(row[0])); e.accid = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.ip = row[1] ? row[1] : ""; e.ip = row[1] ? row[1] : "";
e.count = static_cast<int32_t>(atoi(row[2])); e.count = row[2] ? static_cast<int32_t>(atoi(row[2])) : 1;
e.lastused = row[3] ? row[3] : ""; e.lastused = row[3] ? row[3] : std::time(nullptr);
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -286,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AccountIp e{}; AccountIp e{};
e.accid = static_cast<int32_t>(atoi(row[0])); e.accid = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.ip = row[1] ? row[1] : ""; e.ip = row[1] ? row[1] : "";
e.count = static_cast<int32_t>(atoi(row[2])); e.count = row[2] ? static_cast<int32_t>(atoi(row[2])) : 1;
e.lastused = row[3] ? row[3] : ""; e.lastused = row[3] ? row[3] : std::time(nullptr);
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -348,6 +349,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AccountIp &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.accid));
v.push_back("'" + Strings::Escape(e.ip) + "'");
v.push_back(std::to_string(e.count));
v.push_back("'" + Strings::Escape(e.lastused) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AccountIp> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.accid));
v.push_back("'" + Strings::Escape(e.ip) + "'");
v.push_back(std::to_string(e.count));
v.push_back("'" + Strings::Escape(e.lastused) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ACCOUNT_IP_REPOSITORY_H #endif //EQEMU_BASE_ACCOUNT_IP_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseAccountRepository { class BaseAccountRepository {
public: public:
struct Account { struct Account {
@@ -208,25 +207,25 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Account e{}; Account e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.charname = row[2] ? row[2] : ""; e.charname = row[2] ? row[2] : "";
e.sharedplat = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.sharedplat = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.password = row[4] ? row[4] : ""; e.password = row[4] ? row[4] : "";
e.status = static_cast<int32_t>(atoi(row[5])); e.status = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.ls_id = row[6] ? row[6] : ""; e.ls_id = row[6] ? row[6] : "eqemu";
e.lsaccount_id = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.lsaccount_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.gmspeed = static_cast<uint8_t>(strtoul(row[8], nullptr, 10)); e.gmspeed = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.invulnerable = static_cast<int8_t>(atoi(row[9])); e.invulnerable = row[9] ? static_cast<int8_t>(atoi(row[9])) : 0;
e.flymode = static_cast<int8_t>(atoi(row[10])); e.flymode = row[10] ? static_cast<int8_t>(atoi(row[10])) : 0;
e.ignore_tells = static_cast<int8_t>(atoi(row[11])); e.ignore_tells = row[11] ? static_cast<int8_t>(atoi(row[11])) : 0;
e.revoked = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.revoked = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.karma = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.karma = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.minilogin_ip = row[14] ? row[14] : ""; e.minilogin_ip = row[14] ? row[14] : "";
e.hideme = static_cast<int8_t>(atoi(row[15])); e.hideme = row[15] ? static_cast<int8_t>(atoi(row[15])) : 0;
e.rulesflag = static_cast<uint8_t>(strtoul(row[16], nullptr, 10)); e.rulesflag = row[16] ? static_cast<uint8_t>(strtoul(row[16], nullptr, 10)) : 0;
e.suspendeduntil = strtoll(row[17] ? row[17] : "-1", nullptr, 10); e.suspendeduntil = strtoll(row[17] ? row[17] : "-1", nullptr, 10);
e.time_creation = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.time_creation = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.ban_reason = row[19] ? row[19] : ""; e.ban_reason = row[19] ? row[19] : "";
e.suspend_reason = row[20] ? row[20] : ""; e.suspend_reason = row[20] ? row[20] : "";
e.crc_eqgame = row[21] ? row[21] : ""; e.crc_eqgame = row[21] ? row[21] : "";
@@ -419,25 +418,25 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Account e{}; Account e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.charname = row[2] ? row[2] : ""; e.charname = row[2] ? row[2] : "";
e.sharedplat = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.sharedplat = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.password = row[4] ? row[4] : ""; e.password = row[4] ? row[4] : "";
e.status = static_cast<int32_t>(atoi(row[5])); e.status = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.ls_id = row[6] ? row[6] : ""; e.ls_id = row[6] ? row[6] : "eqemu";
e.lsaccount_id = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.lsaccount_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.gmspeed = static_cast<uint8_t>(strtoul(row[8], nullptr, 10)); e.gmspeed = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.invulnerable = static_cast<int8_t>(atoi(row[9])); e.invulnerable = row[9] ? static_cast<int8_t>(atoi(row[9])) : 0;
e.flymode = static_cast<int8_t>(atoi(row[10])); e.flymode = row[10] ? static_cast<int8_t>(atoi(row[10])) : 0;
e.ignore_tells = static_cast<int8_t>(atoi(row[11])); e.ignore_tells = row[11] ? static_cast<int8_t>(atoi(row[11])) : 0;
e.revoked = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.revoked = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.karma = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.karma = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.minilogin_ip = row[14] ? row[14] : ""; e.minilogin_ip = row[14] ? row[14] : "";
e.hideme = static_cast<int8_t>(atoi(row[15])); e.hideme = row[15] ? static_cast<int8_t>(atoi(row[15])) : 0;
e.rulesflag = static_cast<uint8_t>(strtoul(row[16], nullptr, 10)); e.rulesflag = row[16] ? static_cast<uint8_t>(strtoul(row[16], nullptr, 10)) : 0;
e.suspendeduntil = strtoll(row[17] ? row[17] : "-1", nullptr, 10); e.suspendeduntil = strtoll(row[17] ? row[17] : "-1", nullptr, 10);
e.time_creation = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.time_creation = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.ban_reason = row[19] ? row[19] : ""; e.ban_reason = row[19] ? row[19] : "";
e.suspend_reason = row[20] ? row[20] : ""; e.suspend_reason = row[20] ? row[20] : "";
e.crc_eqgame = row[21] ? row[21] : ""; e.crc_eqgame = row[21] ? row[21] : "";
@@ -467,25 +466,25 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Account e{}; Account e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.charname = row[2] ? row[2] : ""; e.charname = row[2] ? row[2] : "";
e.sharedplat = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.sharedplat = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.password = row[4] ? row[4] : ""; e.password = row[4] ? row[4] : "";
e.status = static_cast<int32_t>(atoi(row[5])); e.status = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.ls_id = row[6] ? row[6] : ""; e.ls_id = row[6] ? row[6] : "eqemu";
e.lsaccount_id = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.lsaccount_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.gmspeed = static_cast<uint8_t>(strtoul(row[8], nullptr, 10)); e.gmspeed = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.invulnerable = static_cast<int8_t>(atoi(row[9])); e.invulnerable = row[9] ? static_cast<int8_t>(atoi(row[9])) : 0;
e.flymode = static_cast<int8_t>(atoi(row[10])); e.flymode = row[10] ? static_cast<int8_t>(atoi(row[10])) : 0;
e.ignore_tells = static_cast<int8_t>(atoi(row[11])); e.ignore_tells = row[11] ? static_cast<int8_t>(atoi(row[11])) : 0;
e.revoked = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.revoked = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.karma = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.karma = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.minilogin_ip = row[14] ? row[14] : ""; e.minilogin_ip = row[14] ? row[14] : "";
e.hideme = static_cast<int8_t>(atoi(row[15])); e.hideme = row[15] ? static_cast<int8_t>(atoi(row[15])) : 0;
e.rulesflag = static_cast<uint8_t>(strtoul(row[16], nullptr, 10)); e.rulesflag = row[16] ? static_cast<uint8_t>(strtoul(row[16], nullptr, 10)) : 0;
e.suspendeduntil = strtoll(row[17] ? row[17] : "-1", nullptr, 10); e.suspendeduntil = strtoll(row[17] ? row[17] : "-1", nullptr, 10);
e.time_creation = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.time_creation = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.ban_reason = row[19] ? row[19] : ""; e.ban_reason = row[19] ? row[19] : "";
e.suspend_reason = row[20] ? row[20] : ""; e.suspend_reason = row[20] ? row[20] : "";
e.crc_eqgame = row[21] ? row[21] : ""; e.crc_eqgame = row[21] ? row[21] : "";
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ACCOUNT_REWARDS_REPOSITORY_H #ifndef EQEMU_BASE_ACCOUNT_REWARDS_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
account_rewards_id account_rewards_id
) )
); );
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AccountRewards e{}; AccountRewards e{};
e.account_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.account_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.reward_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.reward_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -250,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AccountRewards e{}; AccountRewards e{};
e.account_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.account_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.reward_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.reward_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -277,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AccountRewards e{}; AccountRewards e{};
e.account_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.account_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.reward_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.reward_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -338,6 +339,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AccountRewards &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.account_id));
v.push_back(std::to_string(e.reward_id));
v.push_back(std::to_string(e.amount));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AccountRewards> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.account_id));
v.push_back(std::to_string(e.reward_id));
v.push_back(std::to_string(e.amount));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ACCOUNT_REWARDS_REPOSITORY_H #endif //EQEMU_BASE_ACCOUNT_REWARDS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ADVENTURE_DETAILS_REPOSITORY_H #ifndef EQEMU_BASE_ADVENTURE_DETAILS_REPOSITORY_H
@@ -136,8 +136,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
adventure_details_id adventure_details_id
) )
); );
@@ -146,15 +147,15 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AdventureDetails e{}; AdventureDetails e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.adventure_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.adventure_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[2])); e.instance_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.count = static_cast<uint16_t>(strtoul(row[3], nullptr, 10)); e.count = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
e.assassinate_count = static_cast<uint16_t>(strtoul(row[4], nullptr, 10)); e.assassinate_count = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.status = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.status = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.time_created = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.time_created = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.time_zoned = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.time_zoned = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.time_completed = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.time_completed = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
return e; return e;
} }
@@ -297,15 +298,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureDetails e{}; AdventureDetails e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.adventure_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.adventure_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[2])); e.instance_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.count = static_cast<uint16_t>(strtoul(row[3], nullptr, 10)); e.count = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
e.assassinate_count = static_cast<uint16_t>(strtoul(row[4], nullptr, 10)); e.assassinate_count = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.status = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.status = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.time_created = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.time_created = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.time_zoned = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.time_zoned = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.time_completed = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.time_completed = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -330,15 +331,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureDetails e{}; AdventureDetails e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.adventure_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.adventure_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[2])); e.instance_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.count = static_cast<uint16_t>(strtoul(row[3], nullptr, 10)); e.count = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
e.assassinate_count = static_cast<uint16_t>(strtoul(row[4], nullptr, 10)); e.assassinate_count = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.status = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.status = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.time_created = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.time_created = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.time_zoned = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.time_zoned = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.time_completed = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.time_completed = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -397,6 +398,78 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AdventureDetails &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.adventure_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.count));
v.push_back(std::to_string(e.assassinate_count));
v.push_back(std::to_string(e.status));
v.push_back(std::to_string(e.time_created));
v.push_back(std::to_string(e.time_zoned));
v.push_back(std::to_string(e.time_completed));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AdventureDetails> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.adventure_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.count));
v.push_back(std::to_string(e.assassinate_count));
v.push_back(std::to_string(e.status));
v.push_back(std::to_string(e.time_created));
v.push_back(std::to_string(e.time_zoned));
v.push_back(std::to_string(e.time_completed));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ADVENTURE_DETAILS_REPOSITORY_H #endif //EQEMU_BASE_ADVENTURE_DETAILS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ADVENTURE_MEMBERS_REPOSITORY_H #ifndef EQEMU_BASE_ADVENTURE_MEMBERS_REPOSITORY_H
@@ -108,8 +108,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
adventure_members_id adventure_members_id
) )
); );
@@ -118,8 +119,8 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AdventureMembers e{}; AdventureMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
return e; return e;
} }
@@ -242,8 +243,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureMembers e{}; AdventureMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -268,8 +269,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureMembers e{}; AdventureMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -328,6 +329,64 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AdventureMembers &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.charid));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AdventureMembers> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.charid));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ADVENTURE_MEMBERS_REPOSITORY_H #endif //EQEMU_BASE_ADVENTURE_MEMBERS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ADVENTURE_STATS_REPOSITORY_H #ifndef EQEMU_BASE_ADVENTURE_STATS_REPOSITORY_H
@@ -144,8 +144,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
adventure_stats_id adventure_stats_id
) )
); );
@@ -154,17 +155,17 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AdventureStats e{}; AdventureStats e{};
e.player_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.player_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.guk_wins = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.guk_wins = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mir_wins = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.mir_wins = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.mmc_wins = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.mmc_wins = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.ruj_wins = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.ruj_wins = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.tak_wins = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.tak_wins = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.guk_losses = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.guk_losses = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.mir_losses = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.mir_losses = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.mmc_losses = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.mmc_losses = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.ruj_losses = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.ruj_losses = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.tak_losses = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.tak_losses = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
return e; return e;
} }
@@ -314,17 +315,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureStats e{}; AdventureStats e{};
e.player_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.player_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.guk_wins = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.guk_wins = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mir_wins = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.mir_wins = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.mmc_wins = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.mmc_wins = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.ruj_wins = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.ruj_wins = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.tak_wins = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.tak_wins = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.guk_losses = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.guk_losses = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.mir_losses = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.mir_losses = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.mmc_losses = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.mmc_losses = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.ruj_losses = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.ruj_losses = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.tak_losses = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.tak_losses = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -349,17 +350,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureStats e{}; AdventureStats e{};
e.player_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.player_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.guk_wins = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.guk_wins = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mir_wins = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.mir_wins = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.mmc_wins = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.mmc_wins = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.ruj_wins = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.ruj_wins = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.tak_wins = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.tak_wins = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.guk_losses = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.guk_losses = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.mir_losses = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.mir_losses = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.mmc_losses = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.mmc_losses = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.ruj_losses = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.ruj_losses = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.tak_losses = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.tak_losses = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -418,6 +419,82 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AdventureStats &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.player_id));
v.push_back(std::to_string(e.guk_wins));
v.push_back(std::to_string(e.mir_wins));
v.push_back(std::to_string(e.mmc_wins));
v.push_back(std::to_string(e.ruj_wins));
v.push_back(std::to_string(e.tak_wins));
v.push_back(std::to_string(e.guk_losses));
v.push_back(std::to_string(e.mir_losses));
v.push_back(std::to_string(e.mmc_losses));
v.push_back(std::to_string(e.ruj_losses));
v.push_back(std::to_string(e.tak_losses));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AdventureStats> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.player_id));
v.push_back(std::to_string(e.guk_wins));
v.push_back(std::to_string(e.mir_wins));
v.push_back(std::to_string(e.mmc_wins));
v.push_back(std::to_string(e.ruj_wins));
v.push_back(std::to_string(e.tak_wins));
v.push_back(std::to_string(e.guk_losses));
v.push_back(std::to_string(e.mir_losses));
v.push_back(std::to_string(e.mmc_losses));
v.push_back(std::to_string(e.ruj_losses));
v.push_back(std::to_string(e.tak_losses));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ADVENTURE_STATS_REPOSITORY_H #endif //EQEMU_BASE_ADVENTURE_STATS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H #ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H
@@ -108,8 +108,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
adventure_template_entry_flavor_id adventure_template_entry_flavor_id
) )
); );
@@ -118,7 +119,7 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AdventureTemplateEntryFlavor e{}; AdventureTemplateEntryFlavor e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.text = row[1] ? row[1] : ""; e.text = row[1] ? row[1] : "";
return e; return e;
@@ -242,7 +243,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureTemplateEntryFlavor e{}; AdventureTemplateEntryFlavor e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.text = row[1] ? row[1] : ""; e.text = row[1] ? row[1] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -268,7 +269,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureTemplateEntryFlavor e{}; AdventureTemplateEntryFlavor e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.text = row[1] ? row[1] : ""; e.text = row[1] ? row[1] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -328,6 +329,64 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AdventureTemplateEntryFlavor &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.text) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AdventureTemplateEntryFlavor> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.text) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H #endif //EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H #ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H
@@ -108,8 +108,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
adventure_template_entry_id adventure_template_entry_id
) )
); );
@@ -118,8 +119,8 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AdventureTemplateEntry e{}; AdventureTemplateEntry e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.template_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.template_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
return e; return e;
} }
@@ -242,8 +243,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureTemplateEntry e{}; AdventureTemplateEntry e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.template_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.template_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -268,8 +269,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureTemplateEntry e{}; AdventureTemplateEntry e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.template_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.template_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -328,6 +329,64 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AdventureTemplateEntry &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.template_id));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AdventureTemplateEntry> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.template_id));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H #endif //EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_REPOSITORY_H #ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_REPOSITORY_H
@@ -232,8 +232,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
adventure_template_id adventure_template_id
) )
); );
@@ -242,38 +243,38 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AdventureTemplate e{}; AdventureTemplate e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "";
e.zone_version = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.zone_version = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_hard = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.is_hard = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.is_raid = static_cast<uint8_t>(strtoul(row[4], nullptr, 10)); e.is_raid = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.min_level = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.min_level = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 1;
e.max_level = static_cast<uint8_t>(strtoul(row[6], nullptr, 10)); e.max_level = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 65;
e.type = static_cast<uint8_t>(strtoul(row[7], nullptr, 10)); e.type = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
e.type_data = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.type_data = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.type_count = static_cast<uint16_t>(strtoul(row[9], nullptr, 10)); e.type_count = row[9] ? static_cast<uint16_t>(strtoul(row[9], nullptr, 10)) : 0;
e.assa_x = strtof(row[10], nullptr); e.assa_x = row[10] ? strtof(row[10], nullptr) : 0;
e.assa_y = strtof(row[11], nullptr); e.assa_y = row[11] ? strtof(row[11], nullptr) : 0;
e.assa_z = strtof(row[12], nullptr); e.assa_z = row[12] ? strtof(row[12], nullptr) : 0;
e.assa_h = strtof(row[13], nullptr); e.assa_h = row[13] ? strtof(row[13], nullptr) : 0;
e.text = row[14] ? row[14] : ""; e.text = row[14] ? row[14] : "";
e.duration = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.duration = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 7200;
e.zone_in_time = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.zone_in_time = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 1800;
e.win_points = static_cast<uint16_t>(strtoul(row[17], nullptr, 10)); e.win_points = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.lose_points = static_cast<uint16_t>(strtoul(row[18], nullptr, 10)); e.lose_points = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.theme = static_cast<uint8_t>(strtoul(row[19], nullptr, 10)); e.theme = row[19] ? static_cast<uint8_t>(strtoul(row[19], nullptr, 10)) : 1;
e.zone_in_zone_id = static_cast<uint16_t>(strtoul(row[20], nullptr, 10)); e.zone_in_zone_id = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.zone_in_x = strtof(row[21], nullptr); e.zone_in_x = row[21] ? strtof(row[21], nullptr) : 0;
e.zone_in_y = strtof(row[22], nullptr); e.zone_in_y = row[22] ? strtof(row[22], nullptr) : 0;
e.zone_in_object_id = static_cast<int16_t>(atoi(row[23])); e.zone_in_object_id = row[23] ? static_cast<int16_t>(atoi(row[23])) : 0;
e.dest_x = strtof(row[24], nullptr); e.dest_x = row[24] ? strtof(row[24], nullptr) : 0;
e.dest_y = strtof(row[25], nullptr); e.dest_y = row[25] ? strtof(row[25], nullptr) : 0;
e.dest_z = strtof(row[26], nullptr); e.dest_z = row[26] ? strtof(row[26], nullptr) : 0;
e.dest_h = strtof(row[27], nullptr); e.dest_h = row[27] ? strtof(row[27], nullptr) : 0;
e.graveyard_zone_id = static_cast<uint32_t>(strtoul(row[28], nullptr, 10)); e.graveyard_zone_id = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.graveyard_x = strtof(row[29], nullptr); e.graveyard_x = row[29] ? strtof(row[29], nullptr) : 0;
e.graveyard_y = strtof(row[30], nullptr); e.graveyard_y = row[30] ? strtof(row[30], nullptr) : 0;
e.graveyard_z = strtof(row[31], nullptr); e.graveyard_z = row[31] ? strtof(row[31], nullptr) : 0;
return e; return e;
} }
@@ -489,38 +490,38 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureTemplate e{}; AdventureTemplate e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "";
e.zone_version = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.zone_version = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_hard = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.is_hard = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.is_raid = static_cast<uint8_t>(strtoul(row[4], nullptr, 10)); e.is_raid = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.min_level = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.min_level = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 1;
e.max_level = static_cast<uint8_t>(strtoul(row[6], nullptr, 10)); e.max_level = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 65;
e.type = static_cast<uint8_t>(strtoul(row[7], nullptr, 10)); e.type = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
e.type_data = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.type_data = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.type_count = static_cast<uint16_t>(strtoul(row[9], nullptr, 10)); e.type_count = row[9] ? static_cast<uint16_t>(strtoul(row[9], nullptr, 10)) : 0;
e.assa_x = strtof(row[10], nullptr); e.assa_x = row[10] ? strtof(row[10], nullptr) : 0;
e.assa_y = strtof(row[11], nullptr); e.assa_y = row[11] ? strtof(row[11], nullptr) : 0;
e.assa_z = strtof(row[12], nullptr); e.assa_z = row[12] ? strtof(row[12], nullptr) : 0;
e.assa_h = strtof(row[13], nullptr); e.assa_h = row[13] ? strtof(row[13], nullptr) : 0;
e.text = row[14] ? row[14] : ""; e.text = row[14] ? row[14] : "";
e.duration = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.duration = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 7200;
e.zone_in_time = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.zone_in_time = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 1800;
e.win_points = static_cast<uint16_t>(strtoul(row[17], nullptr, 10)); e.win_points = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.lose_points = static_cast<uint16_t>(strtoul(row[18], nullptr, 10)); e.lose_points = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.theme = static_cast<uint8_t>(strtoul(row[19], nullptr, 10)); e.theme = row[19] ? static_cast<uint8_t>(strtoul(row[19], nullptr, 10)) : 1;
e.zone_in_zone_id = static_cast<uint16_t>(strtoul(row[20], nullptr, 10)); e.zone_in_zone_id = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.zone_in_x = strtof(row[21], nullptr); e.zone_in_x = row[21] ? strtof(row[21], nullptr) : 0;
e.zone_in_y = strtof(row[22], nullptr); e.zone_in_y = row[22] ? strtof(row[22], nullptr) : 0;
e.zone_in_object_id = static_cast<int16_t>(atoi(row[23])); e.zone_in_object_id = row[23] ? static_cast<int16_t>(atoi(row[23])) : 0;
e.dest_x = strtof(row[24], nullptr); e.dest_x = row[24] ? strtof(row[24], nullptr) : 0;
e.dest_y = strtof(row[25], nullptr); e.dest_y = row[25] ? strtof(row[25], nullptr) : 0;
e.dest_z = strtof(row[26], nullptr); e.dest_z = row[26] ? strtof(row[26], nullptr) : 0;
e.dest_h = strtof(row[27], nullptr); e.dest_h = row[27] ? strtof(row[27], nullptr) : 0;
e.graveyard_zone_id = static_cast<uint32_t>(strtoul(row[28], nullptr, 10)); e.graveyard_zone_id = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.graveyard_x = strtof(row[29], nullptr); e.graveyard_x = row[29] ? strtof(row[29], nullptr) : 0;
e.graveyard_y = strtof(row[30], nullptr); e.graveyard_y = row[30] ? strtof(row[30], nullptr) : 0;
e.graveyard_z = strtof(row[31], nullptr); e.graveyard_z = row[31] ? strtof(row[31], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -545,38 +546,38 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AdventureTemplate e{}; AdventureTemplate e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "";
e.zone_version = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.zone_version = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_hard = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.is_hard = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.is_raid = static_cast<uint8_t>(strtoul(row[4], nullptr, 10)); e.is_raid = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.min_level = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.min_level = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 1;
e.max_level = static_cast<uint8_t>(strtoul(row[6], nullptr, 10)); e.max_level = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 65;
e.type = static_cast<uint8_t>(strtoul(row[7], nullptr, 10)); e.type = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
e.type_data = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.type_data = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.type_count = static_cast<uint16_t>(strtoul(row[9], nullptr, 10)); e.type_count = row[9] ? static_cast<uint16_t>(strtoul(row[9], nullptr, 10)) : 0;
e.assa_x = strtof(row[10], nullptr); e.assa_x = row[10] ? strtof(row[10], nullptr) : 0;
e.assa_y = strtof(row[11], nullptr); e.assa_y = row[11] ? strtof(row[11], nullptr) : 0;
e.assa_z = strtof(row[12], nullptr); e.assa_z = row[12] ? strtof(row[12], nullptr) : 0;
e.assa_h = strtof(row[13], nullptr); e.assa_h = row[13] ? strtof(row[13], nullptr) : 0;
e.text = row[14] ? row[14] : ""; e.text = row[14] ? row[14] : "";
e.duration = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.duration = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 7200;
e.zone_in_time = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.zone_in_time = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 1800;
e.win_points = static_cast<uint16_t>(strtoul(row[17], nullptr, 10)); e.win_points = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.lose_points = static_cast<uint16_t>(strtoul(row[18], nullptr, 10)); e.lose_points = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.theme = static_cast<uint8_t>(strtoul(row[19], nullptr, 10)); e.theme = row[19] ? static_cast<uint8_t>(strtoul(row[19], nullptr, 10)) : 1;
e.zone_in_zone_id = static_cast<uint16_t>(strtoul(row[20], nullptr, 10)); e.zone_in_zone_id = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.zone_in_x = strtof(row[21], nullptr); e.zone_in_x = row[21] ? strtof(row[21], nullptr) : 0;
e.zone_in_y = strtof(row[22], nullptr); e.zone_in_y = row[22] ? strtof(row[22], nullptr) : 0;
e.zone_in_object_id = static_cast<int16_t>(atoi(row[23])); e.zone_in_object_id = row[23] ? static_cast<int16_t>(atoi(row[23])) : 0;
e.dest_x = strtof(row[24], nullptr); e.dest_x = row[24] ? strtof(row[24], nullptr) : 0;
e.dest_y = strtof(row[25], nullptr); e.dest_y = row[25] ? strtof(row[25], nullptr) : 0;
e.dest_z = strtof(row[26], nullptr); e.dest_z = row[26] ? strtof(row[26], nullptr) : 0;
e.dest_h = strtof(row[27], nullptr); e.dest_h = row[27] ? strtof(row[27], nullptr) : 0;
e.graveyard_zone_id = static_cast<uint32_t>(strtoul(row[28], nullptr, 10)); e.graveyard_zone_id = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.graveyard_x = strtof(row[29], nullptr); e.graveyard_x = row[29] ? strtof(row[29], nullptr) : 0;
e.graveyard_y = strtof(row[30], nullptr); e.graveyard_y = row[30] ? strtof(row[30], nullptr) : 0;
e.graveyard_z = strtof(row[31], nullptr); e.graveyard_z = row[31] ? strtof(row[31], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -635,6 +636,126 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AdventureTemplate &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back(std::to_string(e.zone_version));
v.push_back(std::to_string(e.is_hard));
v.push_back(std::to_string(e.is_raid));
v.push_back(std::to_string(e.min_level));
v.push_back(std::to_string(e.max_level));
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.type_data));
v.push_back(std::to_string(e.type_count));
v.push_back(std::to_string(e.assa_x));
v.push_back(std::to_string(e.assa_y));
v.push_back(std::to_string(e.assa_z));
v.push_back(std::to_string(e.assa_h));
v.push_back("'" + Strings::Escape(e.text) + "'");
v.push_back(std::to_string(e.duration));
v.push_back(std::to_string(e.zone_in_time));
v.push_back(std::to_string(e.win_points));
v.push_back(std::to_string(e.lose_points));
v.push_back(std::to_string(e.theme));
v.push_back(std::to_string(e.zone_in_zone_id));
v.push_back(std::to_string(e.zone_in_x));
v.push_back(std::to_string(e.zone_in_y));
v.push_back(std::to_string(e.zone_in_object_id));
v.push_back(std::to_string(e.dest_x));
v.push_back(std::to_string(e.dest_y));
v.push_back(std::to_string(e.dest_z));
v.push_back(std::to_string(e.dest_h));
v.push_back(std::to_string(e.graveyard_zone_id));
v.push_back(std::to_string(e.graveyard_x));
v.push_back(std::to_string(e.graveyard_y));
v.push_back(std::to_string(e.graveyard_z));
v.push_back(std::to_string(e.graveyard_radius));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AdventureTemplate> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back(std::to_string(e.zone_version));
v.push_back(std::to_string(e.is_hard));
v.push_back(std::to_string(e.is_raid));
v.push_back(std::to_string(e.min_level));
v.push_back(std::to_string(e.max_level));
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.type_data));
v.push_back(std::to_string(e.type_count));
v.push_back(std::to_string(e.assa_x));
v.push_back(std::to_string(e.assa_y));
v.push_back(std::to_string(e.assa_z));
v.push_back(std::to_string(e.assa_h));
v.push_back("'" + Strings::Escape(e.text) + "'");
v.push_back(std::to_string(e.duration));
v.push_back(std::to_string(e.zone_in_time));
v.push_back(std::to_string(e.win_points));
v.push_back(std::to_string(e.lose_points));
v.push_back(std::to_string(e.theme));
v.push_back(std::to_string(e.zone_in_zone_id));
v.push_back(std::to_string(e.zone_in_x));
v.push_back(std::to_string(e.zone_in_y));
v.push_back(std::to_string(e.zone_in_object_id));
v.push_back(std::to_string(e.dest_x));
v.push_back(std::to_string(e.dest_y));
v.push_back(std::to_string(e.dest_z));
v.push_back(std::to_string(e.dest_h));
v.push_back(std::to_string(e.graveyard_zone_id));
v.push_back(std::to_string(e.graveyard_x));
v.push_back(std::to_string(e.graveyard_y));
v.push_back(std::to_string(e.graveyard_z));
v.push_back(std::to_string(e.graveyard_radius));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ADVENTURE_TEMPLATE_REPOSITORY_H #endif //EQEMU_BASE_ADVENTURE_TEMPLATE_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_ALTERNATE_CURRENCY_REPOSITORY_H #ifndef EQEMU_BASE_ALTERNATE_CURRENCY_REPOSITORY_H
@@ -108,8 +108,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
alternate_currency_id alternate_currency_id
) )
); );
@@ -118,8 +119,8 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
AlternateCurrency e{}; AlternateCurrency e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.item_id = static_cast<int32_t>(atoi(row[1])); e.item_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
return e; return e;
} }
@@ -242,8 +243,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AlternateCurrency e{}; AlternateCurrency e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.item_id = static_cast<int32_t>(atoi(row[1])); e.item_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -268,8 +269,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
AlternateCurrency e{}; AlternateCurrency e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.item_id = static_cast<int32_t>(atoi(row[1])); e.item_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -328,6 +329,64 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const AlternateCurrency &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.item_id));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<AlternateCurrency> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.item_id));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_ALTERNATE_CURRENCY_REPOSITORY_H #endif //EQEMU_BASE_ALTERNATE_CURRENCY_REPOSITORY_H
+109 -32
View File
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_AURAS_REPOSITORY_H #ifndef EQEMU_BASE_AURAS_REPOSITORY_H
@@ -144,8 +144,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
auras_id auras_id
) )
); );
@@ -154,17 +155,17 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Auras e{}; Auras e{};
e.type = static_cast<int32_t>(atoi(row[0])); e.type = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.npc_type = static_cast<int32_t>(atoi(row[1])); e.npc_type = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.spell_id = static_cast<int32_t>(atoi(row[3])); e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.distance = static_cast<int32_t>(atoi(row[4])); e.distance = row[4] ? static_cast<int32_t>(atoi(row[4])) : 60;
e.aura_type = static_cast<int32_t>(atoi(row[5])); e.aura_type = row[5] ? static_cast<int32_t>(atoi(row[5])) : 1;
e.spawn_type = static_cast<int32_t>(atoi(row[6])); e.spawn_type = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.movement = static_cast<int32_t>(atoi(row[7])); e.movement = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.duration = static_cast<int32_t>(atoi(row[8])); e.duration = row[8] ? static_cast<int32_t>(atoi(row[8])) : 5400;
e.icon = static_cast<int32_t>(atoi(row[9])); e.icon = row[9] ? static_cast<int32_t>(atoi(row[9])) : -1;
e.cast_time = static_cast<int32_t>(atoi(row[10])); e.cast_time = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
return e; return e;
} }
@@ -314,17 +315,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Auras e{}; Auras e{};
e.type = static_cast<int32_t>(atoi(row[0])); e.type = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.npc_type = static_cast<int32_t>(atoi(row[1])); e.npc_type = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.spell_id = static_cast<int32_t>(atoi(row[3])); e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.distance = static_cast<int32_t>(atoi(row[4])); e.distance = row[4] ? static_cast<int32_t>(atoi(row[4])) : 60;
e.aura_type = static_cast<int32_t>(atoi(row[5])); e.aura_type = row[5] ? static_cast<int32_t>(atoi(row[5])) : 1;
e.spawn_type = static_cast<int32_t>(atoi(row[6])); e.spawn_type = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.movement = static_cast<int32_t>(atoi(row[7])); e.movement = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.duration = static_cast<int32_t>(atoi(row[8])); e.duration = row[8] ? static_cast<int32_t>(atoi(row[8])) : 5400;
e.icon = static_cast<int32_t>(atoi(row[9])); e.icon = row[9] ? static_cast<int32_t>(atoi(row[9])) : -1;
e.cast_time = static_cast<int32_t>(atoi(row[10])); e.cast_time = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -349,17 +350,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Auras e{}; Auras e{};
e.type = static_cast<int32_t>(atoi(row[0])); e.type = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.npc_type = static_cast<int32_t>(atoi(row[1])); e.npc_type = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.spell_id = static_cast<int32_t>(atoi(row[3])); e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.distance = static_cast<int32_t>(atoi(row[4])); e.distance = row[4] ? static_cast<int32_t>(atoi(row[4])) : 60;
e.aura_type = static_cast<int32_t>(atoi(row[5])); e.aura_type = row[5] ? static_cast<int32_t>(atoi(row[5])) : 1;
e.spawn_type = static_cast<int32_t>(atoi(row[6])); e.spawn_type = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.movement = static_cast<int32_t>(atoi(row[7])); e.movement = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.duration = static_cast<int32_t>(atoi(row[8])); e.duration = row[8] ? static_cast<int32_t>(atoi(row[8])) : 5400;
e.icon = static_cast<int32_t>(atoi(row[9])); e.icon = row[9] ? static_cast<int32_t>(atoi(row[9])) : -1;
e.cast_time = static_cast<int32_t>(atoi(row[10])); e.cast_time = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -418,6 +419,82 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Auras &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.npc_type));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.spell_id));
v.push_back(std::to_string(e.distance));
v.push_back(std::to_string(e.aura_type));
v.push_back(std::to_string(e.spawn_type));
v.push_back(std::to_string(e.movement));
v.push_back(std::to_string(e.duration));
v.push_back(std::to_string(e.icon));
v.push_back(std::to_string(e.cast_time));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Auras> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.npc_type));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.spell_id));
v.push_back(std::to_string(e.distance));
v.push_back(std::to_string(e.aura_type));
v.push_back(std::to_string(e.spawn_type));
v.push_back(std::to_string(e.movement));
v.push_back(std::to_string(e.duration));
v.push_back(std::to_string(e.icon));
v.push_back(std::to_string(e.cast_time));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_AURAS_REPOSITORY_H #endif //EQEMU_BASE_AURAS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_BASE_DATA_REPOSITORY_H #ifndef EQEMU_BASE_BASE_DATA_REPOSITORY_H
@@ -140,8 +140,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
base_data_id base_data_id
) )
); );
@@ -150,16 +151,16 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
BaseData e{}; BaseData e{};
e.level = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.level = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.class_ = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.hp = strtod(row[2], nullptr); e.hp = row[2] ? strtod(row[2], nullptr) : 0;
e.mana = strtod(row[3], nullptr); e.mana = row[3] ? strtod(row[3], nullptr) : 0;
e.end = strtod(row[4], nullptr); e.end = row[4] ? strtod(row[4], nullptr) : 0;
e.unk1 = strtod(row[5], nullptr); e.unk1 = row[5] ? strtod(row[5], nullptr) : 0;
e.unk2 = strtod(row[6], nullptr); e.unk2 = row[6] ? strtod(row[6], nullptr) : 0;
e.hp_fac = strtod(row[7], nullptr); e.hp_fac = row[7] ? strtod(row[7], nullptr) : 0;
e.mana_fac = strtod(row[8], nullptr); e.mana_fac = row[8] ? strtod(row[8], nullptr) : 0;
e.end_fac = strtod(row[9], nullptr); e.end_fac = row[9] ? strtod(row[9], nullptr) : 0;
return e; return e;
} }
@@ -306,16 +307,16 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
BaseData e{}; BaseData e{};
e.level = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.level = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.class_ = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.hp = strtod(row[2], nullptr); e.hp = row[2] ? strtod(row[2], nullptr) : 0;
e.mana = strtod(row[3], nullptr); e.mana = row[3] ? strtod(row[3], nullptr) : 0;
e.end = strtod(row[4], nullptr); e.end = row[4] ? strtod(row[4], nullptr) : 0;
e.unk1 = strtod(row[5], nullptr); e.unk1 = row[5] ? strtod(row[5], nullptr) : 0;
e.unk2 = strtod(row[6], nullptr); e.unk2 = row[6] ? strtod(row[6], nullptr) : 0;
e.hp_fac = strtod(row[7], nullptr); e.hp_fac = row[7] ? strtod(row[7], nullptr) : 0;
e.mana_fac = strtod(row[8], nullptr); e.mana_fac = row[8] ? strtod(row[8], nullptr) : 0;
e.end_fac = strtod(row[9], nullptr); e.end_fac = row[9] ? strtod(row[9], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -340,16 +341,16 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
BaseData e{}; BaseData e{};
e.level = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.level = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.class_ = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.hp = strtod(row[2], nullptr); e.hp = row[2] ? strtod(row[2], nullptr) : 0;
e.mana = strtod(row[3], nullptr); e.mana = row[3] ? strtod(row[3], nullptr) : 0;
e.end = strtod(row[4], nullptr); e.end = row[4] ? strtod(row[4], nullptr) : 0;
e.unk1 = strtod(row[5], nullptr); e.unk1 = row[5] ? strtod(row[5], nullptr) : 0;
e.unk2 = strtod(row[6], nullptr); e.unk2 = row[6] ? strtod(row[6], nullptr) : 0;
e.hp_fac = strtod(row[7], nullptr); e.hp_fac = row[7] ? strtod(row[7], nullptr) : 0;
e.mana_fac = strtod(row[8], nullptr); e.mana_fac = row[8] ? strtod(row[8], nullptr) : 0;
e.end_fac = strtod(row[9], nullptr); e.end_fac = row[9] ? strtod(row[9], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -408,6 +409,80 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const BaseData &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.level));
v.push_back(std::to_string(e.class_));
v.push_back(std::to_string(e.hp));
v.push_back(std::to_string(e.mana));
v.push_back(std::to_string(e.end));
v.push_back(std::to_string(e.unk1));
v.push_back(std::to_string(e.unk2));
v.push_back(std::to_string(e.hp_fac));
v.push_back(std::to_string(e.mana_fac));
v.push_back(std::to_string(e.end_fac));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<BaseData> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.level));
v.push_back(std::to_string(e.class_));
v.push_back(std::to_string(e.hp));
v.push_back(std::to_string(e.mana));
v.push_back(std::to_string(e.end));
v.push_back(std::to_string(e.unk1));
v.push_back(std::to_string(e.unk2));
v.push_back(std::to_string(e.hp_fac));
v.push_back(std::to_string(e.mana_fac));
v.push_back(std::to_string(e.end_fac));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_BASE_DATA_REPOSITORY_H #endif //EQEMU_BASE_BASE_DATA_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_BLOCKED_SPELLS_REPOSITORY_H #ifndef EQEMU_BASE_BLOCKED_SPELLS_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseBlockedSpellsRepository { class BaseBlockedSpellsRepository {
public: public:
struct BlockedSpells { struct BlockedSpells {
@@ -176,20 +175,20 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
BlockedSpells e{}; BlockedSpells e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.spellid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.spellid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[2])); e.type = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[3])); e.zoneid = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.x_diff = strtof(row[7], nullptr); e.x_diff = row[7] ? strtof(row[7], nullptr) : 0;
e.y_diff = strtof(row[8], nullptr); e.y_diff = row[8] ? strtof(row[8], nullptr) : 0;
e.z_diff = strtof(row[9], nullptr); e.z_diff = row[9] ? strtof(row[9], nullptr) : 0;
e.message = row[10] ? row[10] : ""; e.message = row[10] ? row[10] : "";
e.description = row[11] ? row[11] : ""; e.description = row[11] ? row[11] : "";
e.min_expansion = static_cast<int8_t>(atoi(row[12])); e.min_expansion = row[12] ? static_cast<int8_t>(atoi(row[12])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[13])); e.max_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.content_flags = row[14] ? row[14] : ""; e.content_flags = row[14] ? row[14] : "";
e.content_flags_disabled = row[15] ? row[15] : ""; e.content_flags_disabled = row[15] ? row[15] : "";
@@ -355,20 +354,20 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
BlockedSpells e{}; BlockedSpells e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.spellid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.spellid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[2])); e.type = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[3])); e.zoneid = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.x_diff = strtof(row[7], nullptr); e.x_diff = row[7] ? strtof(row[7], nullptr) : 0;
e.y_diff = strtof(row[8], nullptr); e.y_diff = row[8] ? strtof(row[8], nullptr) : 0;
e.z_diff = strtof(row[9], nullptr); e.z_diff = row[9] ? strtof(row[9], nullptr) : 0;
e.message = row[10] ? row[10] : ""; e.message = row[10] ? row[10] : "";
e.description = row[11] ? row[11] : ""; e.description = row[11] ? row[11] : "";
e.min_expansion = static_cast<int8_t>(atoi(row[12])); e.min_expansion = row[12] ? static_cast<int8_t>(atoi(row[12])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[13])); e.max_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.content_flags = row[14] ? row[14] : ""; e.content_flags = row[14] ? row[14] : "";
e.content_flags_disabled = row[15] ? row[15] : ""; e.content_flags_disabled = row[15] ? row[15] : "";
@@ -395,20 +394,20 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
BlockedSpells e{}; BlockedSpells e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.spellid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.spellid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[2])); e.type = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[3])); e.zoneid = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.x_diff = strtof(row[7], nullptr); e.x_diff = row[7] ? strtof(row[7], nullptr) : 0;
e.y_diff = strtof(row[8], nullptr); e.y_diff = row[8] ? strtof(row[8], nullptr) : 0;
e.z_diff = strtof(row[9], nullptr); e.z_diff = row[9] ? strtof(row[9], nullptr) : 0;
e.message = row[10] ? row[10] : ""; e.message = row[10] ? row[10] : "";
e.description = row[11] ? row[11] : ""; e.description = row[11] ? row[11] : "";
e.min_expansion = static_cast<int8_t>(atoi(row[12])); e.min_expansion = row[12] ? static_cast<int8_t>(atoi(row[12])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[13])); e.max_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.content_flags = row[14] ? row[14] : ""; e.content_flags = row[14] ? row[14] : "";
e.content_flags_disabled = row[15] ? row[15] : ""; e.content_flags_disabled = row[15] ? row[15] : "";
@@ -469,6 +468,92 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const BlockedSpells &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.spellid));
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.zoneid));
v.push_back(std::to_string(e.x));
v.push_back(std::to_string(e.y));
v.push_back(std::to_string(e.z));
v.push_back(std::to_string(e.x_diff));
v.push_back(std::to_string(e.y_diff));
v.push_back(std::to_string(e.z_diff));
v.push_back("'" + Strings::Escape(e.message) + "'");
v.push_back("'" + Strings::Escape(e.description) + "'");
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<BlockedSpells> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.spellid));
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.zoneid));
v.push_back(std::to_string(e.x));
v.push_back(std::to_string(e.y));
v.push_back(std::to_string(e.z));
v.push_back(std::to_string(e.x_diff));
v.push_back(std::to_string(e.y_diff));
v.push_back(std::to_string(e.z_diff));
v.push_back("'" + Strings::Escape(e.message) + "'");
v.push_back("'" + Strings::Escape(e.description) + "'");
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_BLOCKED_SPELLS_REPOSITORY_H #endif //EQEMU_BASE_BLOCKED_SPELLS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_BOOKS_REPOSITORY_H #ifndef EQEMU_BASE_BOOKS_REPOSITORY_H
@@ -116,8 +116,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
books_id books_id
) )
); );
@@ -126,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Books e{}; Books e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.txtfile = row[2] ? row[2] : ""; e.txtfile = row[2] ? row[2] : "";
e.language = static_cast<int32_t>(atoi(row[3])); e.language = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
return e; return e;
} }
@@ -257,10 +258,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Books e{}; Books e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.txtfile = row[2] ? row[2] : ""; e.txtfile = row[2] ? row[2] : "";
e.language = static_cast<int32_t>(atoi(row[3])); e.language = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -285,10 +286,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Books e{}; Books e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.txtfile = row[2] ? row[2] : ""; e.txtfile = row[2] ? row[2] : "";
e.language = static_cast<int32_t>(atoi(row[3])); e.language = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -347,6 +348,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Books &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back("'" + Strings::Escape(e.txtfile) + "'");
v.push_back(std::to_string(e.language));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Books> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back("'" + Strings::Escape(e.txtfile) + "'");
v.push_back(std::to_string(e.language));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_BOOKS_REPOSITORY_H #endif //EQEMU_BASE_BOOKS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_BUG_REPORTS_REPOSITORY_H #ifndef EQEMU_BASE_BUG_REPORTS_REPOSITORY_H
@@ -228,8 +228,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
bug_reports_id bug_reports_id
) )
); );
@@ -238,37 +239,37 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
BugReports e{}; BugReports e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "Unknown";
e.client_version_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.client_version_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.client_version_name = row[3] ? row[3] : ""; e.client_version_name = row[3] ? row[3] : "Unknown";
e.account_id = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.account_id = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.character_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.character_name = row[6] ? row[6] : ""; e.character_name = row[6] ? row[6] : "Unknown";
e.reporter_spoof = static_cast<int8_t>(atoi(row[7])); e.reporter_spoof = row[7] ? static_cast<int8_t>(atoi(row[7])) : 1;
e.category_id = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.category_id = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.category_name = row[9] ? row[9] : ""; e.category_name = row[9] ? row[9] : "Other";
e.reporter_name = row[10] ? row[10] : ""; e.reporter_name = row[10] ? row[10] : "Unknown";
e.ui_path = row[11] ? row[11] : ""; e.ui_path = row[11] ? row[11] : "Unknown";
e.pos_x = strtof(row[12], nullptr); e.pos_x = row[12] ? strtof(row[12], nullptr) : 0;
e.pos_y = strtof(row[13], nullptr); e.pos_y = row[13] ? strtof(row[13], nullptr) : 0;
e.pos_z = strtof(row[14], nullptr); e.pos_z = row[14] ? strtof(row[14], nullptr) : 0;
e.heading = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.heading = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.time_played = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.time_played = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.target_id = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.target_id = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.target_name = row[18] ? row[18] : ""; e.target_name = row[18] ? row[18] : "Unknown";
e.optional_info_mask = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.optional_info_mask = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e._can_duplicate = static_cast<int8_t>(atoi(row[20])); e._can_duplicate = row[20] ? static_cast<int8_t>(atoi(row[20])) : 0;
e._crash_bug = static_cast<int8_t>(atoi(row[21])); e._crash_bug = row[21] ? static_cast<int8_t>(atoi(row[21])) : 0;
e._target_info = static_cast<int8_t>(atoi(row[22])); e._target_info = row[22] ? static_cast<int8_t>(atoi(row[22])) : 0;
e._character_flags = static_cast<int8_t>(atoi(row[23])); e._character_flags = row[23] ? static_cast<int8_t>(atoi(row[23])) : 0;
e._unknown_value = static_cast<int8_t>(atoi(row[24])); e._unknown_value = row[24] ? static_cast<int8_t>(atoi(row[24])) : 0;
e.bug_report = row[25] ? row[25] : ""; e.bug_report = row[25] ? row[25] : "";
e.system_info = row[26] ? row[26] : ""; e.system_info = row[26] ? row[26] : "";
e.report_datetime = strtoll(row[27] ? row[27] : "-1", nullptr, 10); e.report_datetime = strtoll(row[27] ? row[27] : "-1", nullptr, 10);
e.bug_status = static_cast<uint8_t>(strtoul(row[28], nullptr, 10)); e.bug_status = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.last_review = strtoll(row[29] ? row[29] : "-1", nullptr, 10); e.last_review = strtoll(row[29] ? row[29] : "-1", nullptr, 10);
e.last_reviewer = row[30] ? row[30] : ""; e.last_reviewer = row[30] ? row[30] : "None";
e.reviewer_notes = row[31] ? row[31] : ""; e.reviewer_notes = row[31] ? row[31] : "";
return e; return e;
@@ -481,37 +482,37 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
BugReports e{}; BugReports e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "Unknown";
e.client_version_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.client_version_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.client_version_name = row[3] ? row[3] : ""; e.client_version_name = row[3] ? row[3] : "Unknown";
e.account_id = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.account_id = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.character_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.character_name = row[6] ? row[6] : ""; e.character_name = row[6] ? row[6] : "Unknown";
e.reporter_spoof = static_cast<int8_t>(atoi(row[7])); e.reporter_spoof = row[7] ? static_cast<int8_t>(atoi(row[7])) : 1;
e.category_id = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.category_id = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.category_name = row[9] ? row[9] : ""; e.category_name = row[9] ? row[9] : "Other";
e.reporter_name = row[10] ? row[10] : ""; e.reporter_name = row[10] ? row[10] : "Unknown";
e.ui_path = row[11] ? row[11] : ""; e.ui_path = row[11] ? row[11] : "Unknown";
e.pos_x = strtof(row[12], nullptr); e.pos_x = row[12] ? strtof(row[12], nullptr) : 0;
e.pos_y = strtof(row[13], nullptr); e.pos_y = row[13] ? strtof(row[13], nullptr) : 0;
e.pos_z = strtof(row[14], nullptr); e.pos_z = row[14] ? strtof(row[14], nullptr) : 0;
e.heading = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.heading = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.time_played = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.time_played = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.target_id = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.target_id = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.target_name = row[18] ? row[18] : ""; e.target_name = row[18] ? row[18] : "Unknown";
e.optional_info_mask = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.optional_info_mask = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e._can_duplicate = static_cast<int8_t>(atoi(row[20])); e._can_duplicate = row[20] ? static_cast<int8_t>(atoi(row[20])) : 0;
e._crash_bug = static_cast<int8_t>(atoi(row[21])); e._crash_bug = row[21] ? static_cast<int8_t>(atoi(row[21])) : 0;
e._target_info = static_cast<int8_t>(atoi(row[22])); e._target_info = row[22] ? static_cast<int8_t>(atoi(row[22])) : 0;
e._character_flags = static_cast<int8_t>(atoi(row[23])); e._character_flags = row[23] ? static_cast<int8_t>(atoi(row[23])) : 0;
e._unknown_value = static_cast<int8_t>(atoi(row[24])); e._unknown_value = row[24] ? static_cast<int8_t>(atoi(row[24])) : 0;
e.bug_report = row[25] ? row[25] : ""; e.bug_report = row[25] ? row[25] : "";
e.system_info = row[26] ? row[26] : ""; e.system_info = row[26] ? row[26] : "";
e.report_datetime = strtoll(row[27] ? row[27] : "-1", nullptr, 10); e.report_datetime = strtoll(row[27] ? row[27] : "-1", nullptr, 10);
e.bug_status = static_cast<uint8_t>(strtoul(row[28], nullptr, 10)); e.bug_status = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.last_review = strtoll(row[29] ? row[29] : "-1", nullptr, 10); e.last_review = strtoll(row[29] ? row[29] : "-1", nullptr, 10);
e.last_reviewer = row[30] ? row[30] : ""; e.last_reviewer = row[30] ? row[30] : "None";
e.reviewer_notes = row[31] ? row[31] : ""; e.reviewer_notes = row[31] ? row[31] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -537,37 +538,37 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
BugReports e{}; BugReports e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "Unknown";
e.client_version_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.client_version_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.client_version_name = row[3] ? row[3] : ""; e.client_version_name = row[3] ? row[3] : "Unknown";
e.account_id = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.account_id = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.character_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.character_name = row[6] ? row[6] : ""; e.character_name = row[6] ? row[6] : "Unknown";
e.reporter_spoof = static_cast<int8_t>(atoi(row[7])); e.reporter_spoof = row[7] ? static_cast<int8_t>(atoi(row[7])) : 1;
e.category_id = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.category_id = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.category_name = row[9] ? row[9] : ""; e.category_name = row[9] ? row[9] : "Other";
e.reporter_name = row[10] ? row[10] : ""; e.reporter_name = row[10] ? row[10] : "Unknown";
e.ui_path = row[11] ? row[11] : ""; e.ui_path = row[11] ? row[11] : "Unknown";
e.pos_x = strtof(row[12], nullptr); e.pos_x = row[12] ? strtof(row[12], nullptr) : 0;
e.pos_y = strtof(row[13], nullptr); e.pos_y = row[13] ? strtof(row[13], nullptr) : 0;
e.pos_z = strtof(row[14], nullptr); e.pos_z = row[14] ? strtof(row[14], nullptr) : 0;
e.heading = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.heading = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.time_played = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.time_played = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.target_id = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.target_id = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.target_name = row[18] ? row[18] : ""; e.target_name = row[18] ? row[18] : "Unknown";
e.optional_info_mask = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.optional_info_mask = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e._can_duplicate = static_cast<int8_t>(atoi(row[20])); e._can_duplicate = row[20] ? static_cast<int8_t>(atoi(row[20])) : 0;
e._crash_bug = static_cast<int8_t>(atoi(row[21])); e._crash_bug = row[21] ? static_cast<int8_t>(atoi(row[21])) : 0;
e._target_info = static_cast<int8_t>(atoi(row[22])); e._target_info = row[22] ? static_cast<int8_t>(atoi(row[22])) : 0;
e._character_flags = static_cast<int8_t>(atoi(row[23])); e._character_flags = row[23] ? static_cast<int8_t>(atoi(row[23])) : 0;
e._unknown_value = static_cast<int8_t>(atoi(row[24])); e._unknown_value = row[24] ? static_cast<int8_t>(atoi(row[24])) : 0;
e.bug_report = row[25] ? row[25] : ""; e.bug_report = row[25] ? row[25] : "";
e.system_info = row[26] ? row[26] : ""; e.system_info = row[26] ? row[26] : "";
e.report_datetime = strtoll(row[27] ? row[27] : "-1", nullptr, 10); e.report_datetime = strtoll(row[27] ? row[27] : "-1", nullptr, 10);
e.bug_status = static_cast<uint8_t>(strtoul(row[28], nullptr, 10)); e.bug_status = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.last_review = strtoll(row[29] ? row[29] : "-1", nullptr, 10); e.last_review = strtoll(row[29] ? row[29] : "-1", nullptr, 10);
e.last_reviewer = row[30] ? row[30] : ""; e.last_reviewer = row[30] ? row[30] : "None";
e.reviewer_notes = row[31] ? row[31] : ""; e.reviewer_notes = row[31] ? row[31] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -627,6 +628,124 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const BugReports &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back(std::to_string(e.client_version_id));
v.push_back("'" + Strings::Escape(e.client_version_name) + "'");
v.push_back(std::to_string(e.account_id));
v.push_back(std::to_string(e.character_id));
v.push_back("'" + Strings::Escape(e.character_name) + "'");
v.push_back(std::to_string(e.reporter_spoof));
v.push_back(std::to_string(e.category_id));
v.push_back("'" + Strings::Escape(e.category_name) + "'");
v.push_back("'" + Strings::Escape(e.reporter_name) + "'");
v.push_back("'" + Strings::Escape(e.ui_path) + "'");
v.push_back(std::to_string(e.pos_x));
v.push_back(std::to_string(e.pos_y));
v.push_back(std::to_string(e.pos_z));
v.push_back(std::to_string(e.heading));
v.push_back(std::to_string(e.time_played));
v.push_back(std::to_string(e.target_id));
v.push_back("'" + Strings::Escape(e.target_name) + "'");
v.push_back(std::to_string(e.optional_info_mask));
v.push_back(std::to_string(e._can_duplicate));
v.push_back(std::to_string(e._crash_bug));
v.push_back(std::to_string(e._target_info));
v.push_back(std::to_string(e._character_flags));
v.push_back(std::to_string(e._unknown_value));
v.push_back("'" + Strings::Escape(e.bug_report) + "'");
v.push_back("'" + Strings::Escape(e.system_info) + "'");
v.push_back("FROM_UNIXTIME(" + (e.report_datetime > 0 ? std::to_string(e.report_datetime) : "null") + ")");
v.push_back(std::to_string(e.bug_status));
v.push_back("FROM_UNIXTIME(" + (e.last_review > 0 ? std::to_string(e.last_review) : "null") + ")");
v.push_back("'" + Strings::Escape(e.last_reviewer) + "'");
v.push_back("'" + Strings::Escape(e.reviewer_notes) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<BugReports> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back(std::to_string(e.client_version_id));
v.push_back("'" + Strings::Escape(e.client_version_name) + "'");
v.push_back(std::to_string(e.account_id));
v.push_back(std::to_string(e.character_id));
v.push_back("'" + Strings::Escape(e.character_name) + "'");
v.push_back(std::to_string(e.reporter_spoof));
v.push_back(std::to_string(e.category_id));
v.push_back("'" + Strings::Escape(e.category_name) + "'");
v.push_back("'" + Strings::Escape(e.reporter_name) + "'");
v.push_back("'" + Strings::Escape(e.ui_path) + "'");
v.push_back(std::to_string(e.pos_x));
v.push_back(std::to_string(e.pos_y));
v.push_back(std::to_string(e.pos_z));
v.push_back(std::to_string(e.heading));
v.push_back(std::to_string(e.time_played));
v.push_back(std::to_string(e.target_id));
v.push_back("'" + Strings::Escape(e.target_name) + "'");
v.push_back(std::to_string(e.optional_info_mask));
v.push_back(std::to_string(e._can_duplicate));
v.push_back(std::to_string(e._crash_bug));
v.push_back(std::to_string(e._target_info));
v.push_back(std::to_string(e._character_flags));
v.push_back(std::to_string(e._unknown_value));
v.push_back("'" + Strings::Escape(e.bug_report) + "'");
v.push_back("'" + Strings::Escape(e.system_info) + "'");
v.push_back("FROM_UNIXTIME(" + (e.report_datetime > 0 ? std::to_string(e.report_datetime) : "null") + ")");
v.push_back(std::to_string(e.bug_status));
v.push_back("FROM_UNIXTIME(" + (e.last_review > 0 ? std::to_string(e.last_review) : "null") + ")");
v.push_back("'" + Strings::Escape(e.last_reviewer) + "'");
v.push_back("'" + Strings::Escape(e.reviewer_notes) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_BUG_REPORTS_REPOSITORY_H #endif //EQEMU_BASE_BUG_REPORTS_REPOSITORY_H
+104 -23
View File
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_BUGS_REPOSITORY_H #ifndef EQEMU_BASE_BUGS_REPOSITORY_H
@@ -152,8 +152,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
bugs_id bugs_id
) )
); );
@@ -162,19 +163,19 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Bugs e{}; Bugs e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "";
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.ui = row[3] ? row[3] : ""; e.ui = row[3] ? row[3] : "";
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.type = row[7] ? row[7] : ""; e.type = row[7] ? row[7] : "";
e.flag = static_cast<uint8_t>(strtoul(row[8], nullptr, 10)); e.flag = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.target = row[9] ? row[9] : ""; e.target = row[9] ? row[9] : "";
e.bug = row[10] ? row[10] : ""; e.bug = row[10] ? row[10] : "";
e.date = row[11] ? row[11] : ""; e.date = row[11] ? row[11] : 0;
e.status = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.status = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
return e; return e;
} }
@@ -329,19 +330,19 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Bugs e{}; Bugs e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "";
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.ui = row[3] ? row[3] : ""; e.ui = row[3] ? row[3] : "";
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.type = row[7] ? row[7] : ""; e.type = row[7] ? row[7] : "";
e.flag = static_cast<uint8_t>(strtoul(row[8], nullptr, 10)); e.flag = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.target = row[9] ? row[9] : ""; e.target = row[9] ? row[9] : "";
e.bug = row[10] ? row[10] : ""; e.bug = row[10] ? row[10] : "";
e.date = row[11] ? row[11] : ""; e.date = row[11] ? row[11] : 0;
e.status = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.status = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -366,19 +367,19 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Bugs e{}; Bugs e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone = row[1] ? row[1] : ""; e.zone = row[1] ? row[1] : "";
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.ui = row[3] ? row[3] : ""; e.ui = row[3] ? row[3] : "";
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.type = row[7] ? row[7] : ""; e.type = row[7] ? row[7] : "";
e.flag = static_cast<uint8_t>(strtoul(row[8], nullptr, 10)); e.flag = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.target = row[9] ? row[9] : ""; e.target = row[9] ? row[9] : "";
e.bug = row[10] ? row[10] : ""; e.bug = row[10] ? row[10] : "";
e.date = row[11] ? row[11] : ""; e.date = row[11] ? row[11] : 0;
e.status = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.status = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -437,6 +438,86 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Bugs &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back("'" + Strings::Escape(e.ui) + "'");
v.push_back(std::to_string(e.x));
v.push_back(std::to_string(e.y));
v.push_back(std::to_string(e.z));
v.push_back("'" + Strings::Escape(e.type) + "'");
v.push_back(std::to_string(e.flag));
v.push_back("'" + Strings::Escape(e.target) + "'");
v.push_back("'" + Strings::Escape(e.bug) + "'");
v.push_back("'" + Strings::Escape(e.date) + "'");
v.push_back(std::to_string(e.status));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Bugs> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back("'" + Strings::Escape(e.ui) + "'");
v.push_back(std::to_string(e.x));
v.push_back(std::to_string(e.y));
v.push_back(std::to_string(e.z));
v.push_back("'" + Strings::Escape(e.type) + "'");
v.push_back(std::to_string(e.flag));
v.push_back("'" + Strings::Escape(e.target) + "'");
v.push_back("'" + Strings::Escape(e.bug) + "'");
v.push_back("'" + Strings::Escape(e.date) + "'");
v.push_back(std::to_string(e.status));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_BUGS_REPOSITORY_H #endif //EQEMU_BASE_BUGS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_BUYER_REPOSITORY_H #ifndef EQEMU_BASE_BUYER_REPOSITORY_H
@@ -124,8 +124,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
buyer_id buyer_id
) )
); );
@@ -134,12 +135,12 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Buyer e{}; Buyer e{};
e.charid = static_cast<int32_t>(atoi(row[0])); e.charid = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.buyslot = static_cast<int32_t>(atoi(row[1])); e.buyslot = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.itemid = static_cast<int32_t>(atoi(row[2])); e.itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.itemname = row[3] ? row[3] : ""; e.itemname = row[3] ? row[3] : "";
e.quantity = static_cast<int32_t>(atoi(row[4])); e.quantity = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.price = static_cast<int32_t>(atoi(row[5])); e.price = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
return e; return e;
} }
@@ -274,12 +275,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Buyer e{}; Buyer e{};
e.charid = static_cast<int32_t>(atoi(row[0])); e.charid = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.buyslot = static_cast<int32_t>(atoi(row[1])); e.buyslot = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.itemid = static_cast<int32_t>(atoi(row[2])); e.itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.itemname = row[3] ? row[3] : ""; e.itemname = row[3] ? row[3] : "";
e.quantity = static_cast<int32_t>(atoi(row[4])); e.quantity = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.price = static_cast<int32_t>(atoi(row[5])); e.price = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -304,12 +305,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Buyer e{}; Buyer e{};
e.charid = static_cast<int32_t>(atoi(row[0])); e.charid = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.buyslot = static_cast<int32_t>(atoi(row[1])); e.buyslot = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.itemid = static_cast<int32_t>(atoi(row[2])); e.itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.itemname = row[3] ? row[3] : ""; e.itemname = row[3] ? row[3] : "";
e.quantity = static_cast<int32_t>(atoi(row[4])); e.quantity = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.price = static_cast<int32_t>(atoi(row[5])); e.price = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -368,6 +369,72 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Buyer &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.buyslot));
v.push_back(std::to_string(e.itemid));
v.push_back("'" + Strings::Escape(e.itemname) + "'");
v.push_back(std::to_string(e.quantity));
v.push_back(std::to_string(e.price));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Buyer> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.buyslot));
v.push_back(std::to_string(e.itemid));
v.push_back("'" + Strings::Escape(e.itemname) + "'");
v.push_back(std::to_string(e.quantity));
v.push_back(std::to_string(e.price));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_BUYER_REPOSITORY_H #endif //EQEMU_BASE_BUYER_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHAR_CREATE_COMBINATIONS_REPOSITORY_H #ifndef EQEMU_BASE_CHAR_CREATE_COMBINATIONS_REPOSITORY_H
@@ -124,8 +124,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
char_create_combinations_id char_create_combinations_id
) )
); );
@@ -134,12 +135,12 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharCreateCombinations e{}; CharCreateCombinations e{};
e.allocation_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.allocation_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.race = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.race = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.class_ = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.deity = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.start_zone = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.start_zone = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.expansions_req = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.expansions_req = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
return e; return e;
} }
@@ -274,12 +275,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharCreateCombinations e{}; CharCreateCombinations e{};
e.allocation_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.allocation_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.race = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.race = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.class_ = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.deity = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.start_zone = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.start_zone = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.expansions_req = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.expansions_req = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -304,12 +305,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharCreateCombinations e{}; CharCreateCombinations e{};
e.allocation_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.allocation_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.race = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.race = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.class_ = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.deity = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.start_zone = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.start_zone = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.expansions_req = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.expansions_req = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -368,6 +369,72 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharCreateCombinations &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.allocation_id));
v.push_back(std::to_string(e.race));
v.push_back(std::to_string(e.class_));
v.push_back(std::to_string(e.deity));
v.push_back(std::to_string(e.start_zone));
v.push_back(std::to_string(e.expansions_req));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharCreateCombinations> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.allocation_id));
v.push_back(std::to_string(e.race));
v.push_back(std::to_string(e.class_));
v.push_back(std::to_string(e.deity));
v.push_back(std::to_string(e.start_zone));
v.push_back(std::to_string(e.expansions_req));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHAR_CREATE_COMBINATIONS_REPOSITORY_H #endif //EQEMU_BASE_CHAR_CREATE_COMBINATIONS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H #ifndef EQEMU_BASE_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H
@@ -160,8 +160,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
char_create_point_allocations_id char_create_point_allocations_id
) )
); );
@@ -170,21 +171,21 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharCreatePointAllocations e{}; CharCreatePointAllocations e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.base_str = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.base_str = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.base_sta = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.base_sta = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.base_dex = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.base_dex = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.base_agi = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.base_agi = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.base_int = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.base_int = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.base_wis = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.base_wis = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.base_cha = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.base_cha = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.alloc_str = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.alloc_str = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.alloc_sta = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.alloc_sta = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.alloc_dex = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.alloc_dex = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.alloc_agi = static_cast<uint32_t>(strtoul(row[11], nullptr, 10)); e.alloc_agi = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.alloc_int = static_cast<uint32_t>(strtoul(row[12], nullptr, 10)); e.alloc_int = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.alloc_wis = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.alloc_wis = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.alloc_cha = static_cast<uint32_t>(strtoul(row[14], nullptr, 10)); e.alloc_cha = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
return e; return e;
} }
@@ -346,21 +347,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharCreatePointAllocations e{}; CharCreatePointAllocations e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.base_str = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.base_str = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.base_sta = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.base_sta = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.base_dex = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.base_dex = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.base_agi = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.base_agi = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.base_int = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.base_int = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.base_wis = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.base_wis = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.base_cha = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.base_cha = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.alloc_str = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.alloc_str = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.alloc_sta = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.alloc_sta = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.alloc_dex = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.alloc_dex = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.alloc_agi = static_cast<uint32_t>(strtoul(row[11], nullptr, 10)); e.alloc_agi = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.alloc_int = static_cast<uint32_t>(strtoul(row[12], nullptr, 10)); e.alloc_int = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.alloc_wis = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.alloc_wis = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.alloc_cha = static_cast<uint32_t>(strtoul(row[14], nullptr, 10)); e.alloc_cha = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -385,21 +386,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharCreatePointAllocations e{}; CharCreatePointAllocations e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.base_str = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.base_str = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.base_sta = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.base_sta = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.base_dex = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.base_dex = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.base_agi = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.base_agi = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.base_int = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.base_int = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.base_wis = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.base_wis = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.base_cha = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.base_cha = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.alloc_str = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.alloc_str = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.alloc_sta = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.alloc_sta = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.alloc_dex = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.alloc_dex = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.alloc_agi = static_cast<uint32_t>(strtoul(row[11], nullptr, 10)); e.alloc_agi = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.alloc_int = static_cast<uint32_t>(strtoul(row[12], nullptr, 10)); e.alloc_int = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.alloc_wis = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.alloc_wis = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.alloc_cha = static_cast<uint32_t>(strtoul(row[14], nullptr, 10)); e.alloc_cha = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -458,6 +459,90 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharCreatePointAllocations &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.base_str));
v.push_back(std::to_string(e.base_sta));
v.push_back(std::to_string(e.base_dex));
v.push_back(std::to_string(e.base_agi));
v.push_back(std::to_string(e.base_int));
v.push_back(std::to_string(e.base_wis));
v.push_back(std::to_string(e.base_cha));
v.push_back(std::to_string(e.alloc_str));
v.push_back(std::to_string(e.alloc_sta));
v.push_back(std::to_string(e.alloc_dex));
v.push_back(std::to_string(e.alloc_agi));
v.push_back(std::to_string(e.alloc_int));
v.push_back(std::to_string(e.alloc_wis));
v.push_back(std::to_string(e.alloc_cha));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharCreatePointAllocations> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.base_str));
v.push_back(std::to_string(e.base_sta));
v.push_back(std::to_string(e.base_dex));
v.push_back(std::to_string(e.base_agi));
v.push_back(std::to_string(e.base_int));
v.push_back(std::to_string(e.base_wis));
v.push_back(std::to_string(e.base_cha));
v.push_back(std::to_string(e.alloc_str));
v.push_back(std::to_string(e.alloc_sta));
v.push_back(std::to_string(e.alloc_dex));
v.push_back(std::to_string(e.alloc_agi));
v.push_back(std::to_string(e.alloc_int));
v.push_back(std::to_string(e.alloc_wis));
v.push_back(std::to_string(e.alloc_cha));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H #endif //EQEMU_BASE_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHAR_RECIPE_LIST_REPOSITORY_H #ifndef EQEMU_BASE_CHAR_RECIPE_LIST_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
char_recipe_list_id char_recipe_list_id
) )
); );
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharRecipeList e{}; CharRecipeList e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.recipe_id = static_cast<int32_t>(atoi(row[1])); e.recipe_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.madecount = static_cast<int32_t>(atoi(row[2])); e.madecount = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
return e; return e;
} }
@@ -250,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharRecipeList e{}; CharRecipeList e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.recipe_id = static_cast<int32_t>(atoi(row[1])); e.recipe_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.madecount = static_cast<int32_t>(atoi(row[2])); e.madecount = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -277,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharRecipeList e{}; CharRecipeList e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.recipe_id = static_cast<int32_t>(atoi(row[1])); e.recipe_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.madecount = static_cast<int32_t>(atoi(row[2])); e.madecount = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -338,6 +339,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharRecipeList &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.char_id));
v.push_back(std::to_string(e.recipe_id));
v.push_back(std::to_string(e.madecount));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharRecipeList> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.char_id));
v.push_back(std::to_string(e.recipe_id));
v.push_back(std::to_string(e.madecount));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHAR_RECIPE_LIST_REPOSITORY_H #endif //EQEMU_BASE_CHAR_RECIPE_LIST_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_ACTIVITIES_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_ACTIVITIES_REPOSITORY_H
@@ -120,8 +120,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_activities_id character_activities_id
) )
); );
@@ -130,11 +131,11 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterActivities e{}; CharacterActivities e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.activityid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.activityid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.donecount = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.donecount = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.completed = static_cast<int8_t>(atoi(row[4])); e.completed = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
return e; return e;
} }
@@ -266,11 +267,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterActivities e{}; CharacterActivities e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.activityid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.activityid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.donecount = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.donecount = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.completed = static_cast<int8_t>(atoi(row[4])); e.completed = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -295,11 +296,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterActivities e{}; CharacterActivities e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.activityid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.activityid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.donecount = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.donecount = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.completed = static_cast<int8_t>(atoi(row[4])); e.completed = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -358,6 +359,70 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterActivities &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.taskid));
v.push_back(std::to_string(e.activityid));
v.push_back(std::to_string(e.donecount));
v.push_back(std::to_string(e.completed));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterActivities> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.taskid));
v.push_back(std::to_string(e.activityid));
v.push_back(std::to_string(e.donecount));
v.push_back(std::to_string(e.completed));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_ACTIVITIES_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_ACTIVITIES_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterAltCurrencyRepository { class BaseCharacterAltCurrencyRepository {
public: public:
struct CharacterAltCurrency { struct CharacterAltCurrency {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterAltCurrency e{}; CharacterAltCurrency e{};
e.char_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.char_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.currency_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.currency_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAltCurrency e{}; CharacterAltCurrency e{};
e.char_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.char_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.currency_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.currency_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAltCurrency e{}; CharacterAltCurrency e{};
e.char_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.char_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.currency_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.currency_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterAlternateAbilitiesRepository { class BaseCharacterAlternateAbilitiesRepository {
public: public:
struct CharacterAlternateAbilities { struct CharacterAlternateAbilities {
@@ -128,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterAlternateAbilities e{}; CharacterAlternateAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.aa_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.aa_value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.aa_value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = static_cast<uint16_t>(strtoul(row[3], nullptr, 10)); e.charges = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
return e; return e;
} }
@@ -260,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAlternateAbilities e{}; CharacterAlternateAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.aa_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.aa_value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.aa_value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = static_cast<uint16_t>(strtoul(row[3], nullptr, 10)); e.charges = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -288,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAlternateAbilities e{}; CharacterAlternateAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.aa_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.aa_value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.aa_value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = static_cast<uint16_t>(strtoul(row[3], nullptr, 10)); e.charges = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterAurasRepository { class BaseCharacterAurasRepository {
public: public:
struct CharacterAuras { struct CharacterAuras {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterAuras e{}; CharacterAuras e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.slot = static_cast<int8_t>(atoi(row[1])); e.slot = row[1] ? static_cast<int8_t>(atoi(row[1])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[2])); e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
return e; return e;
} }
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAuras e{}; CharacterAuras e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.slot = static_cast<int8_t>(atoi(row[1])); e.slot = row[1] ? static_cast<int8_t>(atoi(row[1])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[2])); e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAuras e{}; CharacterAuras e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.slot = static_cast<int8_t>(atoi(row[1])); e.slot = row[1] ? static_cast<int8_t>(atoi(row[1])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[2])); e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterBandolierRepository { class BaseCharacterBandolierRepository {
public: public:
struct CharacterBandolier { struct CharacterBandolier {
@@ -136,12 +135,12 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterBandolier e{}; CharacterBandolier e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.bandolier_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.bandolier_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.bandolier_slot = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.bandolier_slot = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.item_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.icon = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.icon = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.bandolier_name = row[5] ? row[5] : ""; e.bandolier_name = row[5] ? row[5] : "0";
return e; return e;
} }
@@ -276,12 +275,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBandolier e{}; CharacterBandolier e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.bandolier_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.bandolier_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.bandolier_slot = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.bandolier_slot = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.item_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.icon = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.icon = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.bandolier_name = row[5] ? row[5] : ""; e.bandolier_name = row[5] ? row[5] : "0";
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -306,12 +305,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBandolier e{}; CharacterBandolier e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.bandolier_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.bandolier_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.bandolier_slot = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.bandolier_slot = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.item_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.icon = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.icon = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.bandolier_name = row[5] ? row[5] : ""; e.bandolier_name = row[5] ? row[5] : "0";
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterBindRepository { class BaseCharacterBindRepository {
public: public:
struct CharacterBind { struct CharacterBind {
@@ -144,14 +143,14 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterBind e{}; CharacterBind e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<int32_t>(atoi(row[1])); e.slot = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.zone_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.zone_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.instance_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.instance_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.heading = strtof(row[7], nullptr); e.heading = row[7] ? strtof(row[7], nullptr) : 0;
return e; return e;
} }
@@ -291,14 +290,14 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBind e{}; CharacterBind e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<int32_t>(atoi(row[1])); e.slot = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.zone_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.zone_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.instance_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.instance_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.heading = strtof(row[7], nullptr); e.heading = row[7] ? strtof(row[7], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -323,14 +322,14 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBind e{}; CharacterBind e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<int32_t>(atoi(row[1])); e.slot = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.zone_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.zone_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.instance_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.instance_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.x = strtof(row[4], nullptr); e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = strtof(row[5], nullptr); e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = strtof(row[6], nullptr); e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.heading = strtof(row[7], nullptr); e.heading = row[7] ? strtof(row[7], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterBuffsRepository { class BaseCharacterBuffsRepository {
public: public:
struct CharacterBuffs { struct CharacterBuffs {
@@ -180,23 +179,23 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterBuffs e{}; CharacterBuffs e{};
e.character_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.caster_level = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.caster_name = row[4] ? row[4] : ""; e.caster_name = row[4] ? row[4] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[5])); e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.counters = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.numhits = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.melee_rune = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.magic_rune = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.persistent = static_cast<uint8_t>(strtoul(row[10], nullptr, 10)); e.persistent = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 0;
e.dot_rune = static_cast<int32_t>(atoi(row[11])); e.dot_rune = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.caston_x = static_cast<int32_t>(atoi(row[12])); e.caston_x = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.caston_y = static_cast<int32_t>(atoi(row[13])); e.caston_y = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.caston_z = static_cast<int32_t>(atoi(row[14])); e.caston_z = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
e.ExtraDIChance = static_cast<int32_t>(atoi(row[15])); e.ExtraDIChance = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.instrument_mod = static_cast<int32_t>(atoi(row[16])); e.instrument_mod = row[16] ? static_cast<int32_t>(atoi(row[16])) : 10;
return e; return e;
} }
@@ -364,23 +363,23 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBuffs e{}; CharacterBuffs e{};
e.character_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.caster_level = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.caster_name = row[4] ? row[4] : ""; e.caster_name = row[4] ? row[4] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[5])); e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.counters = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.numhits = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.melee_rune = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.magic_rune = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.persistent = static_cast<uint8_t>(strtoul(row[10], nullptr, 10)); e.persistent = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 0;
e.dot_rune = static_cast<int32_t>(atoi(row[11])); e.dot_rune = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.caston_x = static_cast<int32_t>(atoi(row[12])); e.caston_x = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.caston_y = static_cast<int32_t>(atoi(row[13])); e.caston_y = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.caston_z = static_cast<int32_t>(atoi(row[14])); e.caston_z = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
e.ExtraDIChance = static_cast<int32_t>(atoi(row[15])); e.ExtraDIChance = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.instrument_mod = static_cast<int32_t>(atoi(row[16])); e.instrument_mod = row[16] ? static_cast<int32_t>(atoi(row[16])) : 10;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -405,23 +404,23 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBuffs e{}; CharacterBuffs e{};
e.character_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.caster_level = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.caster_name = row[4] ? row[4] : ""; e.caster_name = row[4] ? row[4] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[5])); e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.counters = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.numhits = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.melee_rune = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.magic_rune = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.persistent = static_cast<uint8_t>(strtoul(row[10], nullptr, 10)); e.persistent = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 0;
e.dot_rune = static_cast<int32_t>(atoi(row[11])); e.dot_rune = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.caston_x = static_cast<int32_t>(atoi(row[12])); e.caston_x = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.caston_y = static_cast<int32_t>(atoi(row[13])); e.caston_y = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.caston_z = static_cast<int32_t>(atoi(row[14])); e.caston_z = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
e.ExtraDIChance = static_cast<int32_t>(atoi(row[15])); e.ExtraDIChance = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.instrument_mod = static_cast<int32_t>(atoi(row[16])); e.instrument_mod = row[16] ? static_cast<int32_t>(atoi(row[16])) : 10;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_CORPSE_ITEMS_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_CORPSE_ITEMS_REPOSITORY_H
@@ -19,17 +19,21 @@
class BaseCharacterCorpseItemsRepository { class BaseCharacterCorpseItemsRepository {
public: public:
struct CharacterCorpseItems { struct CharacterCorpseItems {
uint32_t corpse_id; uint32_t corpse_id;
uint32_t equip_slot; uint32_t equip_slot;
uint32_t item_id; uint32_t item_id;
uint32_t charges; uint32_t charges;
uint32_t aug_1; uint32_t aug_1;
uint32_t aug_2; uint32_t aug_2;
uint32_t aug_3; uint32_t aug_3;
uint32_t aug_4; uint32_t aug_4;
uint32_t aug_5; uint32_t aug_5;
int32_t aug_6; int32_t aug_6;
int16_t attuned; int16_t attuned;
std::string custom_data;
uint32_t ornamenticon;
uint32_t ornamentidfile;
uint32_t ornament_hero_model;
}; };
static std::string PrimaryKey() static std::string PrimaryKey()
@@ -51,6 +55,10 @@ public:
"aug_5", "aug_5",
"aug_6", "aug_6",
"attuned", "attuned",
"custom_data",
"ornamenticon",
"ornamentidfile",
"ornament_hero_model",
}; };
} }
@@ -68,6 +76,10 @@ public:
"aug_5", "aug_5",
"aug_6", "aug_6",
"attuned", "attuned",
"custom_data",
"ornamenticon",
"ornamentidfile",
"ornament_hero_model",
}; };
} }
@@ -108,17 +120,21 @@ public:
{ {
CharacterCorpseItems e{}; CharacterCorpseItems e{};
e.corpse_id = 0; e.corpse_id = 0;
e.equip_slot = 0; e.equip_slot = 0;
e.item_id = 0; e.item_id = 0;
e.charges = 0; e.charges = 0;
e.aug_1 = 0; e.aug_1 = 0;
e.aug_2 = 0; e.aug_2 = 0;
e.aug_3 = 0; e.aug_3 = 0;
e.aug_4 = 0; e.aug_4 = 0;
e.aug_5 = 0; e.aug_5 = 0;
e.aug_6 = 0; e.aug_6 = 0;
e.attuned = 0; e.attuned = 0;
e.custom_data = "";
e.ornamenticon = 0;
e.ornamentidfile = 0;
e.ornament_hero_model = 0;
return e; return e;
} }
@@ -144,8 +160,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_corpse_items_id character_corpse_items_id
) )
); );
@@ -154,17 +171,21 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterCorpseItems e{}; CharacterCorpseItems e{};
e.corpse_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.corpse_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.equip_slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.equip_slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.charges = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.aug_1 = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.aug_1 = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.aug_2 = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.aug_2 = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.aug_3 = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.aug_3 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_4 = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.aug_4 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.aug_5 = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.aug_5 = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.aug_6 = static_cast<int32_t>(atoi(row[9])); e.aug_6 = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.attuned = static_cast<int16_t>(atoi(row[10])); e.attuned = row[10] ? static_cast<int16_t>(atoi(row[10])) : 0;
e.custom_data = row[11] ? row[11] : "";
e.ornamenticon = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.ornamentidfile = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.ornament_hero_model = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
return e; return e;
} }
@@ -209,6 +230,10 @@ public:
v.push_back(columns[8] + " = " + std::to_string(e.aug_5)); v.push_back(columns[8] + " = " + std::to_string(e.aug_5));
v.push_back(columns[9] + " = " + std::to_string(e.aug_6)); v.push_back(columns[9] + " = " + std::to_string(e.aug_6));
v.push_back(columns[10] + " = " + std::to_string(e.attuned)); v.push_back(columns[10] + " = " + std::to_string(e.attuned));
v.push_back(columns[11] + " = '" + Strings::Escape(e.custom_data) + "'");
v.push_back(columns[12] + " = " + std::to_string(e.ornamenticon));
v.push_back(columns[13] + " = " + std::to_string(e.ornamentidfile));
v.push_back(columns[14] + " = " + std::to_string(e.ornament_hero_model));
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
@@ -241,6 +266,10 @@ public:
v.push_back(std::to_string(e.aug_5)); v.push_back(std::to_string(e.aug_5));
v.push_back(std::to_string(e.aug_6)); v.push_back(std::to_string(e.aug_6));
v.push_back(std::to_string(e.attuned)); v.push_back(std::to_string(e.attuned));
v.push_back("'" + Strings::Escape(e.custom_data) + "'");
v.push_back(std::to_string(e.ornamenticon));
v.push_back(std::to_string(e.ornamentidfile));
v.push_back(std::to_string(e.ornament_hero_model));
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
@@ -281,6 +310,10 @@ public:
v.push_back(std::to_string(e.aug_5)); v.push_back(std::to_string(e.aug_5));
v.push_back(std::to_string(e.aug_6)); v.push_back(std::to_string(e.aug_6));
v.push_back(std::to_string(e.attuned)); v.push_back(std::to_string(e.attuned));
v.push_back("'" + Strings::Escape(e.custom_data) + "'");
v.push_back(std::to_string(e.ornamenticon));
v.push_back(std::to_string(e.ornamentidfile));
v.push_back(std::to_string(e.ornament_hero_model));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")"); insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
} }
@@ -314,17 +347,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCorpseItems e{}; CharacterCorpseItems e{};
e.corpse_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.corpse_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.equip_slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.equip_slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.charges = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.aug_1 = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.aug_1 = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.aug_2 = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.aug_2 = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.aug_3 = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.aug_3 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_4 = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.aug_4 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.aug_5 = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.aug_5 = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.aug_6 = static_cast<int32_t>(atoi(row[9])); e.aug_6 = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.attuned = static_cast<int16_t>(atoi(row[10])); e.attuned = row[10] ? static_cast<int16_t>(atoi(row[10])) : 0;
e.custom_data = row[11] ? row[11] : "";
e.ornamenticon = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.ornamentidfile = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.ornament_hero_model = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -349,17 +386,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCorpseItems e{}; CharacterCorpseItems e{};
e.corpse_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.corpse_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.equip_slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.equip_slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.charges = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.aug_1 = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.aug_1 = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.aug_2 = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.aug_2 = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.aug_3 = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.aug_3 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_4 = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.aug_4 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.aug_5 = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.aug_5 = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.aug_6 = static_cast<int32_t>(atoi(row[9])); e.aug_6 = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.attuned = static_cast<int16_t>(atoi(row[10])); e.attuned = row[10] ? static_cast<int16_t>(atoi(row[10])) : 0;
e.custom_data = row[11] ? row[11] : "";
e.ornamenticon = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.ornamentidfile = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.ornament_hero_model = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -418,6 +459,90 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterCorpseItems &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.corpse_id));
v.push_back(std::to_string(e.equip_slot));
v.push_back(std::to_string(e.item_id));
v.push_back(std::to_string(e.charges));
v.push_back(std::to_string(e.aug_1));
v.push_back(std::to_string(e.aug_2));
v.push_back(std::to_string(e.aug_3));
v.push_back(std::to_string(e.aug_4));
v.push_back(std::to_string(e.aug_5));
v.push_back(std::to_string(e.aug_6));
v.push_back(std::to_string(e.attuned));
v.push_back("'" + Strings::Escape(e.custom_data) + "'");
v.push_back(std::to_string(e.ornamenticon));
v.push_back(std::to_string(e.ornamentidfile));
v.push_back(std::to_string(e.ornament_hero_model));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterCorpseItems> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.corpse_id));
v.push_back(std::to_string(e.equip_slot));
v.push_back(std::to_string(e.item_id));
v.push_back(std::to_string(e.charges));
v.push_back(std::to_string(e.aug_1));
v.push_back(std::to_string(e.aug_2));
v.push_back(std::to_string(e.aug_3));
v.push_back(std::to_string(e.aug_4));
v.push_back(std::to_string(e.aug_5));
v.push_back(std::to_string(e.aug_6));
v.push_back(std::to_string(e.attuned));
v.push_back("'" + Strings::Escape(e.custom_data) + "'");
v.push_back(std::to_string(e.ornamenticon));
v.push_back(std::to_string(e.ornamentidfile));
v.push_back(std::to_string(e.ornament_hero_model));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_CORPSE_ITEMS_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_CORPSE_ITEMS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_CORPSES_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_CORPSES_REPOSITORY_H
@@ -288,8 +288,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_corpses_id character_corpses_id
) )
); );
@@ -298,53 +299,53 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterCorpses e{}; CharacterCorpses e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.charname = row[2] ? row[2] : ""; e.charname = row[2] ? row[2] : "";
e.zone_id = static_cast<int16_t>(atoi(row[3])); e.zone_id = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.instance_id = static_cast<uint16_t>(strtoul(row[4], nullptr, 10)); e.instance_id = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.x = strtof(row[5], nullptr); e.x = row[5] ? strtof(row[5], nullptr) : 0;
e.y = strtof(row[6], nullptr); e.y = row[6] ? strtof(row[6], nullptr) : 0;
e.z = strtof(row[7], nullptr); e.z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = strtof(row[8], nullptr); e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.time_of_death = strtoll(row[9] ? row[9] : "-1", nullptr, 10); e.time_of_death = strtoll(row[9] ? row[9] : "-1", nullptr, 10);
e.guild_consent_id = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.guild_consent_id = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.is_rezzed = static_cast<uint8_t>(strtoul(row[11], nullptr, 10)); e.is_rezzed = row[11] ? static_cast<uint8_t>(strtoul(row[11], nullptr, 10)) : 0;
e.is_buried = static_cast<int8_t>(atoi(row[12])); e.is_buried = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.was_at_graveyard = static_cast<int8_t>(atoi(row[13])); e.was_at_graveyard = row[13] ? static_cast<int8_t>(atoi(row[13])) : 0;
e.is_locked = static_cast<int8_t>(atoi(row[14])); e.is_locked = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
e.exp = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.exp = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.size = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.size = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.level = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.level = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.race = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.race = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.gender = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.gender = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[20], nullptr, 10)); e.class_ = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[21], nullptr, 10)); e.deity = row[21] ? static_cast<uint32_t>(strtoul(row[21], nullptr, 10)) : 0;
e.texture = static_cast<uint32_t>(strtoul(row[22], nullptr, 10)); e.texture = row[22] ? static_cast<uint32_t>(strtoul(row[22], nullptr, 10)) : 0;
e.helm_texture = static_cast<uint32_t>(strtoul(row[23], nullptr, 10)); e.helm_texture = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.copper = static_cast<uint32_t>(strtoul(row[24], nullptr, 10)); e.copper = row[24] ? static_cast<uint32_t>(strtoul(row[24], nullptr, 10)) : 0;
e.silver = static_cast<uint32_t>(strtoul(row[25], nullptr, 10)); e.silver = row[25] ? static_cast<uint32_t>(strtoul(row[25], nullptr, 10)) : 0;
e.gold = static_cast<uint32_t>(strtoul(row[26], nullptr, 10)); e.gold = row[26] ? static_cast<uint32_t>(strtoul(row[26], nullptr, 10)) : 0;
e.platinum = static_cast<uint32_t>(strtoul(row[27], nullptr, 10)); e.platinum = row[27] ? static_cast<uint32_t>(strtoul(row[27], nullptr, 10)) : 0;
e.hair_color = static_cast<uint32_t>(strtoul(row[28], nullptr, 10)); e.hair_color = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.beard_color = static_cast<uint32_t>(strtoul(row[29], nullptr, 10)); e.beard_color = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 0;
e.eye_color_1 = static_cast<uint32_t>(strtoul(row[30], nullptr, 10)); e.eye_color_1 = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.eye_color_2 = static_cast<uint32_t>(strtoul(row[31], nullptr, 10)); e.eye_color_2 = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.hair_style = static_cast<uint32_t>(strtoul(row[32], nullptr, 10)); e.hair_style = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.face = static_cast<uint32_t>(strtoul(row[33], nullptr, 10)); e.face = row[33] ? static_cast<uint32_t>(strtoul(row[33], nullptr, 10)) : 0;
e.beard = static_cast<uint32_t>(strtoul(row[34], nullptr, 10)); e.beard = row[34] ? static_cast<uint32_t>(strtoul(row[34], nullptr, 10)) : 0;
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[35], nullptr, 10)); e.drakkin_heritage = row[35] ? static_cast<uint32_t>(strtoul(row[35], nullptr, 10)) : 0;
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[36], nullptr, 10)); e.drakkin_tattoo = row[36] ? static_cast<uint32_t>(strtoul(row[36], nullptr, 10)) : 0;
e.drakkin_details = static_cast<uint32_t>(strtoul(row[37], nullptr, 10)); e.drakkin_details = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.wc_1 = static_cast<uint32_t>(strtoul(row[38], nullptr, 10)); e.wc_1 = row[38] ? static_cast<uint32_t>(strtoul(row[38], nullptr, 10)) : 0;
e.wc_2 = static_cast<uint32_t>(strtoul(row[39], nullptr, 10)); e.wc_2 = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.wc_3 = static_cast<uint32_t>(strtoul(row[40], nullptr, 10)); e.wc_3 = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.wc_4 = static_cast<uint32_t>(strtoul(row[41], nullptr, 10)); e.wc_4 = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.wc_5 = static_cast<uint32_t>(strtoul(row[42], nullptr, 10)); e.wc_5 = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.wc_6 = static_cast<uint32_t>(strtoul(row[43], nullptr, 10)); e.wc_6 = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.wc_7 = static_cast<uint32_t>(strtoul(row[44], nullptr, 10)); e.wc_7 = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.wc_8 = static_cast<uint32_t>(strtoul(row[45], nullptr, 10)); e.wc_8 = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.wc_9 = static_cast<uint32_t>(strtoul(row[46], nullptr, 10)); e.wc_9 = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
return e; return e;
} }
@@ -601,53 +602,53 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCorpses e{}; CharacterCorpses e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.charname = row[2] ? row[2] : ""; e.charname = row[2] ? row[2] : "";
e.zone_id = static_cast<int16_t>(atoi(row[3])); e.zone_id = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.instance_id = static_cast<uint16_t>(strtoul(row[4], nullptr, 10)); e.instance_id = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.x = strtof(row[5], nullptr); e.x = row[5] ? strtof(row[5], nullptr) : 0;
e.y = strtof(row[6], nullptr); e.y = row[6] ? strtof(row[6], nullptr) : 0;
e.z = strtof(row[7], nullptr); e.z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = strtof(row[8], nullptr); e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.time_of_death = strtoll(row[9] ? row[9] : "-1", nullptr, 10); e.time_of_death = strtoll(row[9] ? row[9] : "-1", nullptr, 10);
e.guild_consent_id = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.guild_consent_id = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.is_rezzed = static_cast<uint8_t>(strtoul(row[11], nullptr, 10)); e.is_rezzed = row[11] ? static_cast<uint8_t>(strtoul(row[11], nullptr, 10)) : 0;
e.is_buried = static_cast<int8_t>(atoi(row[12])); e.is_buried = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.was_at_graveyard = static_cast<int8_t>(atoi(row[13])); e.was_at_graveyard = row[13] ? static_cast<int8_t>(atoi(row[13])) : 0;
e.is_locked = static_cast<int8_t>(atoi(row[14])); e.is_locked = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
e.exp = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.exp = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.size = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.size = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.level = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.level = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.race = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.race = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.gender = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.gender = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[20], nullptr, 10)); e.class_ = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[21], nullptr, 10)); e.deity = row[21] ? static_cast<uint32_t>(strtoul(row[21], nullptr, 10)) : 0;
e.texture = static_cast<uint32_t>(strtoul(row[22], nullptr, 10)); e.texture = row[22] ? static_cast<uint32_t>(strtoul(row[22], nullptr, 10)) : 0;
e.helm_texture = static_cast<uint32_t>(strtoul(row[23], nullptr, 10)); e.helm_texture = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.copper = static_cast<uint32_t>(strtoul(row[24], nullptr, 10)); e.copper = row[24] ? static_cast<uint32_t>(strtoul(row[24], nullptr, 10)) : 0;
e.silver = static_cast<uint32_t>(strtoul(row[25], nullptr, 10)); e.silver = row[25] ? static_cast<uint32_t>(strtoul(row[25], nullptr, 10)) : 0;
e.gold = static_cast<uint32_t>(strtoul(row[26], nullptr, 10)); e.gold = row[26] ? static_cast<uint32_t>(strtoul(row[26], nullptr, 10)) : 0;
e.platinum = static_cast<uint32_t>(strtoul(row[27], nullptr, 10)); e.platinum = row[27] ? static_cast<uint32_t>(strtoul(row[27], nullptr, 10)) : 0;
e.hair_color = static_cast<uint32_t>(strtoul(row[28], nullptr, 10)); e.hair_color = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.beard_color = static_cast<uint32_t>(strtoul(row[29], nullptr, 10)); e.beard_color = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 0;
e.eye_color_1 = static_cast<uint32_t>(strtoul(row[30], nullptr, 10)); e.eye_color_1 = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.eye_color_2 = static_cast<uint32_t>(strtoul(row[31], nullptr, 10)); e.eye_color_2 = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.hair_style = static_cast<uint32_t>(strtoul(row[32], nullptr, 10)); e.hair_style = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.face = static_cast<uint32_t>(strtoul(row[33], nullptr, 10)); e.face = row[33] ? static_cast<uint32_t>(strtoul(row[33], nullptr, 10)) : 0;
e.beard = static_cast<uint32_t>(strtoul(row[34], nullptr, 10)); e.beard = row[34] ? static_cast<uint32_t>(strtoul(row[34], nullptr, 10)) : 0;
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[35], nullptr, 10)); e.drakkin_heritage = row[35] ? static_cast<uint32_t>(strtoul(row[35], nullptr, 10)) : 0;
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[36], nullptr, 10)); e.drakkin_tattoo = row[36] ? static_cast<uint32_t>(strtoul(row[36], nullptr, 10)) : 0;
e.drakkin_details = static_cast<uint32_t>(strtoul(row[37], nullptr, 10)); e.drakkin_details = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.wc_1 = static_cast<uint32_t>(strtoul(row[38], nullptr, 10)); e.wc_1 = row[38] ? static_cast<uint32_t>(strtoul(row[38], nullptr, 10)) : 0;
e.wc_2 = static_cast<uint32_t>(strtoul(row[39], nullptr, 10)); e.wc_2 = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.wc_3 = static_cast<uint32_t>(strtoul(row[40], nullptr, 10)); e.wc_3 = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.wc_4 = static_cast<uint32_t>(strtoul(row[41], nullptr, 10)); e.wc_4 = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.wc_5 = static_cast<uint32_t>(strtoul(row[42], nullptr, 10)); e.wc_5 = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.wc_6 = static_cast<uint32_t>(strtoul(row[43], nullptr, 10)); e.wc_6 = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.wc_7 = static_cast<uint32_t>(strtoul(row[44], nullptr, 10)); e.wc_7 = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.wc_8 = static_cast<uint32_t>(strtoul(row[45], nullptr, 10)); e.wc_8 = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.wc_9 = static_cast<uint32_t>(strtoul(row[46], nullptr, 10)); e.wc_9 = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -672,53 +673,53 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCorpses e{}; CharacterCorpses e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.charname = row[2] ? row[2] : ""; e.charname = row[2] ? row[2] : "";
e.zone_id = static_cast<int16_t>(atoi(row[3])); e.zone_id = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.instance_id = static_cast<uint16_t>(strtoul(row[4], nullptr, 10)); e.instance_id = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.x = strtof(row[5], nullptr); e.x = row[5] ? strtof(row[5], nullptr) : 0;
e.y = strtof(row[6], nullptr); e.y = row[6] ? strtof(row[6], nullptr) : 0;
e.z = strtof(row[7], nullptr); e.z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = strtof(row[8], nullptr); e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.time_of_death = strtoll(row[9] ? row[9] : "-1", nullptr, 10); e.time_of_death = strtoll(row[9] ? row[9] : "-1", nullptr, 10);
e.guild_consent_id = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.guild_consent_id = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.is_rezzed = static_cast<uint8_t>(strtoul(row[11], nullptr, 10)); e.is_rezzed = row[11] ? static_cast<uint8_t>(strtoul(row[11], nullptr, 10)) : 0;
e.is_buried = static_cast<int8_t>(atoi(row[12])); e.is_buried = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.was_at_graveyard = static_cast<int8_t>(atoi(row[13])); e.was_at_graveyard = row[13] ? static_cast<int8_t>(atoi(row[13])) : 0;
e.is_locked = static_cast<int8_t>(atoi(row[14])); e.is_locked = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
e.exp = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.exp = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.size = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.size = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.level = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.level = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.race = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.race = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.gender = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.gender = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.class_ = static_cast<uint32_t>(strtoul(row[20], nullptr, 10)); e.class_ = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[21], nullptr, 10)); e.deity = row[21] ? static_cast<uint32_t>(strtoul(row[21], nullptr, 10)) : 0;
e.texture = static_cast<uint32_t>(strtoul(row[22], nullptr, 10)); e.texture = row[22] ? static_cast<uint32_t>(strtoul(row[22], nullptr, 10)) : 0;
e.helm_texture = static_cast<uint32_t>(strtoul(row[23], nullptr, 10)); e.helm_texture = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.copper = static_cast<uint32_t>(strtoul(row[24], nullptr, 10)); e.copper = row[24] ? static_cast<uint32_t>(strtoul(row[24], nullptr, 10)) : 0;
e.silver = static_cast<uint32_t>(strtoul(row[25], nullptr, 10)); e.silver = row[25] ? static_cast<uint32_t>(strtoul(row[25], nullptr, 10)) : 0;
e.gold = static_cast<uint32_t>(strtoul(row[26], nullptr, 10)); e.gold = row[26] ? static_cast<uint32_t>(strtoul(row[26], nullptr, 10)) : 0;
e.platinum = static_cast<uint32_t>(strtoul(row[27], nullptr, 10)); e.platinum = row[27] ? static_cast<uint32_t>(strtoul(row[27], nullptr, 10)) : 0;
e.hair_color = static_cast<uint32_t>(strtoul(row[28], nullptr, 10)); e.hair_color = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.beard_color = static_cast<uint32_t>(strtoul(row[29], nullptr, 10)); e.beard_color = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 0;
e.eye_color_1 = static_cast<uint32_t>(strtoul(row[30], nullptr, 10)); e.eye_color_1 = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.eye_color_2 = static_cast<uint32_t>(strtoul(row[31], nullptr, 10)); e.eye_color_2 = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.hair_style = static_cast<uint32_t>(strtoul(row[32], nullptr, 10)); e.hair_style = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.face = static_cast<uint32_t>(strtoul(row[33], nullptr, 10)); e.face = row[33] ? static_cast<uint32_t>(strtoul(row[33], nullptr, 10)) : 0;
e.beard = static_cast<uint32_t>(strtoul(row[34], nullptr, 10)); e.beard = row[34] ? static_cast<uint32_t>(strtoul(row[34], nullptr, 10)) : 0;
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[35], nullptr, 10)); e.drakkin_heritage = row[35] ? static_cast<uint32_t>(strtoul(row[35], nullptr, 10)) : 0;
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[36], nullptr, 10)); e.drakkin_tattoo = row[36] ? static_cast<uint32_t>(strtoul(row[36], nullptr, 10)) : 0;
e.drakkin_details = static_cast<uint32_t>(strtoul(row[37], nullptr, 10)); e.drakkin_details = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.wc_1 = static_cast<uint32_t>(strtoul(row[38], nullptr, 10)); e.wc_1 = row[38] ? static_cast<uint32_t>(strtoul(row[38], nullptr, 10)) : 0;
e.wc_2 = static_cast<uint32_t>(strtoul(row[39], nullptr, 10)); e.wc_2 = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.wc_3 = static_cast<uint32_t>(strtoul(row[40], nullptr, 10)); e.wc_3 = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.wc_4 = static_cast<uint32_t>(strtoul(row[41], nullptr, 10)); e.wc_4 = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.wc_5 = static_cast<uint32_t>(strtoul(row[42], nullptr, 10)); e.wc_5 = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.wc_6 = static_cast<uint32_t>(strtoul(row[43], nullptr, 10)); e.wc_6 = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.wc_7 = static_cast<uint32_t>(strtoul(row[44], nullptr, 10)); e.wc_7 = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.wc_8 = static_cast<uint32_t>(strtoul(row[45], nullptr, 10)); e.wc_8 = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.wc_9 = static_cast<uint32_t>(strtoul(row[46], nullptr, 10)); e.wc_9 = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -777,6 +778,154 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterCorpses &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.charid));
v.push_back("'" + Strings::Escape(e.charname) + "'");
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.x));
v.push_back(std::to_string(e.y));
v.push_back(std::to_string(e.z));
v.push_back(std::to_string(e.heading));
v.push_back("FROM_UNIXTIME(" + (e.time_of_death > 0 ? std::to_string(e.time_of_death) : "null") + ")");
v.push_back(std::to_string(e.guild_consent_id));
v.push_back(std::to_string(e.is_rezzed));
v.push_back(std::to_string(e.is_buried));
v.push_back(std::to_string(e.was_at_graveyard));
v.push_back(std::to_string(e.is_locked));
v.push_back(std::to_string(e.exp));
v.push_back(std::to_string(e.size));
v.push_back(std::to_string(e.level));
v.push_back(std::to_string(e.race));
v.push_back(std::to_string(e.gender));
v.push_back(std::to_string(e.class_));
v.push_back(std::to_string(e.deity));
v.push_back(std::to_string(e.texture));
v.push_back(std::to_string(e.helm_texture));
v.push_back(std::to_string(e.copper));
v.push_back(std::to_string(e.silver));
v.push_back(std::to_string(e.gold));
v.push_back(std::to_string(e.platinum));
v.push_back(std::to_string(e.hair_color));
v.push_back(std::to_string(e.beard_color));
v.push_back(std::to_string(e.eye_color_1));
v.push_back(std::to_string(e.eye_color_2));
v.push_back(std::to_string(e.hair_style));
v.push_back(std::to_string(e.face));
v.push_back(std::to_string(e.beard));
v.push_back(std::to_string(e.drakkin_heritage));
v.push_back(std::to_string(e.drakkin_tattoo));
v.push_back(std::to_string(e.drakkin_details));
v.push_back(std::to_string(e.wc_1));
v.push_back(std::to_string(e.wc_2));
v.push_back(std::to_string(e.wc_3));
v.push_back(std::to_string(e.wc_4));
v.push_back(std::to_string(e.wc_5));
v.push_back(std::to_string(e.wc_6));
v.push_back(std::to_string(e.wc_7));
v.push_back(std::to_string(e.wc_8));
v.push_back(std::to_string(e.wc_9));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterCorpses> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.charid));
v.push_back("'" + Strings::Escape(e.charname) + "'");
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.x));
v.push_back(std::to_string(e.y));
v.push_back(std::to_string(e.z));
v.push_back(std::to_string(e.heading));
v.push_back("FROM_UNIXTIME(" + (e.time_of_death > 0 ? std::to_string(e.time_of_death) : "null") + ")");
v.push_back(std::to_string(e.guild_consent_id));
v.push_back(std::to_string(e.is_rezzed));
v.push_back(std::to_string(e.is_buried));
v.push_back(std::to_string(e.was_at_graveyard));
v.push_back(std::to_string(e.is_locked));
v.push_back(std::to_string(e.exp));
v.push_back(std::to_string(e.size));
v.push_back(std::to_string(e.level));
v.push_back(std::to_string(e.race));
v.push_back(std::to_string(e.gender));
v.push_back(std::to_string(e.class_));
v.push_back(std::to_string(e.deity));
v.push_back(std::to_string(e.texture));
v.push_back(std::to_string(e.helm_texture));
v.push_back(std::to_string(e.copper));
v.push_back(std::to_string(e.silver));
v.push_back(std::to_string(e.gold));
v.push_back(std::to_string(e.platinum));
v.push_back(std::to_string(e.hair_color));
v.push_back(std::to_string(e.beard_color));
v.push_back(std::to_string(e.eye_color_1));
v.push_back(std::to_string(e.eye_color_2));
v.push_back(std::to_string(e.hair_style));
v.push_back(std::to_string(e.face));
v.push_back(std::to_string(e.beard));
v.push_back(std::to_string(e.drakkin_heritage));
v.push_back(std::to_string(e.drakkin_tattoo));
v.push_back(std::to_string(e.drakkin_details));
v.push_back(std::to_string(e.wc_1));
v.push_back(std::to_string(e.wc_2));
v.push_back(std::to_string(e.wc_3));
v.push_back(std::to_string(e.wc_4));
v.push_back(std::to_string(e.wc_5));
v.push_back(std::to_string(e.wc_6));
v.push_back(std::to_string(e.wc_7));
v.push_back(std::to_string(e.wc_8));
v.push_back(std::to_string(e.wc_9));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_CORPSES_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_CORPSES_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterCurrencyRepository { class BaseCharacterCurrencyRepository {
public: public:
struct CharacterCurrency { struct CharacterCurrency {
@@ -180,23 +179,23 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterCurrency e{}; CharacterCurrency e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.platinum = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.platinum = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.gold = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.gold = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.silver = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.silver = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.copper = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.copper = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.platinum_bank = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.platinum_bank = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.gold_bank = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.gold_bank = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.silver_bank = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.silver_bank = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.copper_bank = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.copper_bank = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.platinum_cursor = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.platinum_cursor = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.gold_cursor = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.gold_cursor = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.silver_cursor = static_cast<uint32_t>(strtoul(row[11], nullptr, 10)); e.silver_cursor = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.copper_cursor = static_cast<uint32_t>(strtoul(row[12], nullptr, 10)); e.copper_cursor = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.radiant_crystals = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.radiant_crystals = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.career_radiant_crystals = static_cast<uint32_t>(strtoul(row[14], nullptr, 10)); e.career_radiant_crystals = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.ebon_crystals = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.ebon_crystals = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.career_ebon_crystals = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.career_ebon_crystals = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
return e; return e;
} }
@@ -364,23 +363,23 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCurrency e{}; CharacterCurrency e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.platinum = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.platinum = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.gold = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.gold = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.silver = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.silver = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.copper = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.copper = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.platinum_bank = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.platinum_bank = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.gold_bank = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.gold_bank = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.silver_bank = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.silver_bank = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.copper_bank = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.copper_bank = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.platinum_cursor = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.platinum_cursor = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.gold_cursor = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.gold_cursor = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.silver_cursor = static_cast<uint32_t>(strtoul(row[11], nullptr, 10)); e.silver_cursor = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.copper_cursor = static_cast<uint32_t>(strtoul(row[12], nullptr, 10)); e.copper_cursor = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.radiant_crystals = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.radiant_crystals = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.career_radiant_crystals = static_cast<uint32_t>(strtoul(row[14], nullptr, 10)); e.career_radiant_crystals = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.ebon_crystals = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.ebon_crystals = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.career_ebon_crystals = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.career_ebon_crystals = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -405,23 +404,23 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCurrency e{}; CharacterCurrency e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.platinum = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.platinum = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.gold = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.gold = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.silver = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.silver = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.copper = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.copper = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.platinum_bank = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.platinum_bank = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.gold_bank = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.gold_bank = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.silver_bank = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.silver_bank = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.copper_bank = static_cast<uint32_t>(strtoul(row[8], nullptr, 10)); e.copper_bank = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.platinum_cursor = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.platinum_cursor = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.gold_cursor = static_cast<uint32_t>(strtoul(row[10], nullptr, 10)); e.gold_cursor = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.silver_cursor = static_cast<uint32_t>(strtoul(row[11], nullptr, 10)); e.silver_cursor = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.copper_cursor = static_cast<uint32_t>(strtoul(row[12], nullptr, 10)); e.copper_cursor = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.radiant_crystals = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.radiant_crystals = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.career_radiant_crystals = static_cast<uint32_t>(strtoul(row[14], nullptr, 10)); e.career_radiant_crystals = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.ebon_crystals = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.ebon_crystals = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.career_ebon_crystals = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.career_ebon_crystals = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterDataRepository { class BaseCharacterDataRepository {
public: public:
struct CharacterData { struct CharacterData {
@@ -524,108 +523,108 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterData e{}; CharacterData e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.account_id = static_cast<int32_t>(atoi(row[1])); e.account_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.last_name = row[3] ? row[3] : ""; e.last_name = row[3] ? row[3] : "";
e.title = row[4] ? row[4] : ""; e.title = row[4] ? row[4] : "";
e.suffix = row[5] ? row[5] : ""; e.suffix = row[5] ? row[5] : "";
e.zone_id = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.zone_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.zone_instance = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.zone_instance = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.y = strtof(row[8], nullptr); e.y = row[8] ? strtof(row[8], nullptr) : 0;
e.x = strtof(row[9], nullptr); e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.z = strtof(row[10], nullptr); e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = strtof(row[11], nullptr); e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.gender = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.gender = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.race = static_cast<uint16_t>(strtoul(row[13], nullptr, 10)); e.race = row[13] ? static_cast<uint16_t>(strtoul(row[13], nullptr, 10)) : 0;
e.class_ = static_cast<uint8_t>(strtoul(row[14], nullptr, 10)); e.class_ = row[14] ? static_cast<uint8_t>(strtoul(row[14], nullptr, 10)) : 0;
e.level = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.level = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.deity = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.birthday = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.birthday = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.last_login = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.last_login = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.time_played = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.time_played = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.level2 = static_cast<uint8_t>(strtoul(row[20], nullptr, 10)); e.level2 = row[20] ? static_cast<uint8_t>(strtoul(row[20], nullptr, 10)) : 0;
e.anon = static_cast<uint8_t>(strtoul(row[21], nullptr, 10)); e.anon = row[21] ? static_cast<uint8_t>(strtoul(row[21], nullptr, 10)) : 0;
e.gm = static_cast<uint8_t>(strtoul(row[22], nullptr, 10)); e.gm = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
e.face = static_cast<uint32_t>(strtoul(row[23], nullptr, 10)); e.face = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.hair_color = static_cast<uint8_t>(strtoul(row[24], nullptr, 10)); e.hair_color = row[24] ? static_cast<uint8_t>(strtoul(row[24], nullptr, 10)) : 0;
e.hair_style = static_cast<uint8_t>(strtoul(row[25], nullptr, 10)); e.hair_style = row[25] ? static_cast<uint8_t>(strtoul(row[25], nullptr, 10)) : 0;
e.beard = static_cast<uint8_t>(strtoul(row[26], nullptr, 10)); e.beard = row[26] ? static_cast<uint8_t>(strtoul(row[26], nullptr, 10)) : 0;
e.beard_color = static_cast<uint8_t>(strtoul(row[27], nullptr, 10)); e.beard_color = row[27] ? static_cast<uint8_t>(strtoul(row[27], nullptr, 10)) : 0;
e.eye_color_1 = static_cast<uint8_t>(strtoul(row[28], nullptr, 10)); e.eye_color_1 = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.eye_color_2 = static_cast<uint8_t>(strtoul(row[29], nullptr, 10)); e.eye_color_2 = row[29] ? static_cast<uint8_t>(strtoul(row[29], nullptr, 10)) : 0;
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[30], nullptr, 10)); e.drakkin_heritage = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[31], nullptr, 10)); e.drakkin_tattoo = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.drakkin_details = static_cast<uint32_t>(strtoul(row[32], nullptr, 10)); e.drakkin_details = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.ability_time_seconds = static_cast<uint8_t>(strtoul(row[33], nullptr, 10)); e.ability_time_seconds = row[33] ? static_cast<uint8_t>(strtoul(row[33], nullptr, 10)) : 0;
e.ability_number = static_cast<uint8_t>(strtoul(row[34], nullptr, 10)); e.ability_number = row[34] ? static_cast<uint8_t>(strtoul(row[34], nullptr, 10)) : 0;
e.ability_time_minutes = static_cast<uint8_t>(strtoul(row[35], nullptr, 10)); e.ability_time_minutes = row[35] ? static_cast<uint8_t>(strtoul(row[35], nullptr, 10)) : 0;
e.ability_time_hours = static_cast<uint8_t>(strtoul(row[36], nullptr, 10)); e.ability_time_hours = row[36] ? static_cast<uint8_t>(strtoul(row[36], nullptr, 10)) : 0;
e.exp = static_cast<uint32_t>(strtoul(row[37], nullptr, 10)); e.exp = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.exp_enabled = static_cast<uint8_t>(strtoul(row[38], nullptr, 10)); e.exp_enabled = row[38] ? static_cast<uint8_t>(strtoul(row[38], nullptr, 10)) : 1;
e.aa_points_spent = static_cast<uint32_t>(strtoul(row[39], nullptr, 10)); e.aa_points_spent = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.aa_exp = static_cast<uint32_t>(strtoul(row[40], nullptr, 10)); e.aa_exp = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.aa_points = static_cast<uint32_t>(strtoul(row[41], nullptr, 10)); e.aa_points = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.group_leadership_exp = static_cast<uint32_t>(strtoul(row[42], nullptr, 10)); e.group_leadership_exp = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.raid_leadership_exp = static_cast<uint32_t>(strtoul(row[43], nullptr, 10)); e.raid_leadership_exp = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.group_leadership_points = static_cast<uint32_t>(strtoul(row[44], nullptr, 10)); e.group_leadership_points = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.raid_leadership_points = static_cast<uint32_t>(strtoul(row[45], nullptr, 10)); e.raid_leadership_points = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.points = static_cast<uint32_t>(strtoul(row[46], nullptr, 10)); e.points = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
e.cur_hp = static_cast<uint32_t>(strtoul(row[47], nullptr, 10)); e.cur_hp = row[47] ? static_cast<uint32_t>(strtoul(row[47], nullptr, 10)) : 0;
e.mana = static_cast<uint32_t>(strtoul(row[48], nullptr, 10)); e.mana = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
e.endurance = static_cast<uint32_t>(strtoul(row[49], nullptr, 10)); e.endurance = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
e.intoxication = static_cast<uint32_t>(strtoul(row[50], nullptr, 10)); e.intoxication = row[50] ? static_cast<uint32_t>(strtoul(row[50], nullptr, 10)) : 0;
e.str = static_cast<uint32_t>(strtoul(row[51], nullptr, 10)); e.str = row[51] ? static_cast<uint32_t>(strtoul(row[51], nullptr, 10)) : 0;
e.sta = static_cast<uint32_t>(strtoul(row[52], nullptr, 10)); e.sta = row[52] ? static_cast<uint32_t>(strtoul(row[52], nullptr, 10)) : 0;
e.cha = static_cast<uint32_t>(strtoul(row[53], nullptr, 10)); e.cha = row[53] ? static_cast<uint32_t>(strtoul(row[53], nullptr, 10)) : 0;
e.dex = static_cast<uint32_t>(strtoul(row[54], nullptr, 10)); e.dex = row[54] ? static_cast<uint32_t>(strtoul(row[54], nullptr, 10)) : 0;
e.int_ = static_cast<uint32_t>(strtoul(row[55], nullptr, 10)); e.int_ = row[55] ? static_cast<uint32_t>(strtoul(row[55], nullptr, 10)) : 0;
e.agi = static_cast<uint32_t>(strtoul(row[56], nullptr, 10)); e.agi = row[56] ? static_cast<uint32_t>(strtoul(row[56], nullptr, 10)) : 0;
e.wis = static_cast<uint32_t>(strtoul(row[57], nullptr, 10)); e.wis = row[57] ? static_cast<uint32_t>(strtoul(row[57], nullptr, 10)) : 0;
e.zone_change_count = static_cast<uint32_t>(strtoul(row[58], nullptr, 10)); e.zone_change_count = row[58] ? static_cast<uint32_t>(strtoul(row[58], nullptr, 10)) : 0;
e.toxicity = static_cast<uint32_t>(strtoul(row[59], nullptr, 10)); e.toxicity = row[59] ? static_cast<uint32_t>(strtoul(row[59], nullptr, 10)) : 0;
e.hunger_level = static_cast<uint32_t>(strtoul(row[60], nullptr, 10)); e.hunger_level = row[60] ? static_cast<uint32_t>(strtoul(row[60], nullptr, 10)) : 0;
e.thirst_level = static_cast<uint32_t>(strtoul(row[61], nullptr, 10)); e.thirst_level = row[61] ? static_cast<uint32_t>(strtoul(row[61], nullptr, 10)) : 0;
e.ability_up = static_cast<uint32_t>(strtoul(row[62], nullptr, 10)); e.ability_up = row[62] ? static_cast<uint32_t>(strtoul(row[62], nullptr, 10)) : 0;
e.ldon_points_guk = static_cast<uint32_t>(strtoul(row[63], nullptr, 10)); e.ldon_points_guk = row[63] ? static_cast<uint32_t>(strtoul(row[63], nullptr, 10)) : 0;
e.ldon_points_mir = static_cast<uint32_t>(strtoul(row[64], nullptr, 10)); e.ldon_points_mir = row[64] ? static_cast<uint32_t>(strtoul(row[64], nullptr, 10)) : 0;
e.ldon_points_mmc = static_cast<uint32_t>(strtoul(row[65], nullptr, 10)); e.ldon_points_mmc = row[65] ? static_cast<uint32_t>(strtoul(row[65], nullptr, 10)) : 0;
e.ldon_points_ruj = static_cast<uint32_t>(strtoul(row[66], nullptr, 10)); e.ldon_points_ruj = row[66] ? static_cast<uint32_t>(strtoul(row[66], nullptr, 10)) : 0;
e.ldon_points_tak = static_cast<uint32_t>(strtoul(row[67], nullptr, 10)); e.ldon_points_tak = row[67] ? static_cast<uint32_t>(strtoul(row[67], nullptr, 10)) : 0;
e.ldon_points_available = static_cast<uint32_t>(strtoul(row[68], nullptr, 10)); e.ldon_points_available = row[68] ? static_cast<uint32_t>(strtoul(row[68], nullptr, 10)) : 0;
e.tribute_time_remaining = static_cast<uint32_t>(strtoul(row[69], nullptr, 10)); e.tribute_time_remaining = row[69] ? static_cast<uint32_t>(strtoul(row[69], nullptr, 10)) : 0;
e.career_tribute_points = static_cast<uint32_t>(strtoul(row[70], nullptr, 10)); e.career_tribute_points = row[70] ? static_cast<uint32_t>(strtoul(row[70], nullptr, 10)) : 0;
e.tribute_points = static_cast<uint32_t>(strtoul(row[71], nullptr, 10)); e.tribute_points = row[71] ? static_cast<uint32_t>(strtoul(row[71], nullptr, 10)) : 0;
e.tribute_active = static_cast<uint32_t>(strtoul(row[72], nullptr, 10)); e.tribute_active = row[72] ? static_cast<uint32_t>(strtoul(row[72], nullptr, 10)) : 0;
e.pvp_status = static_cast<uint8_t>(strtoul(row[73], nullptr, 10)); e.pvp_status = row[73] ? static_cast<uint8_t>(strtoul(row[73], nullptr, 10)) : 0;
e.pvp_kills = static_cast<uint32_t>(strtoul(row[74], nullptr, 10)); e.pvp_kills = row[74] ? static_cast<uint32_t>(strtoul(row[74], nullptr, 10)) : 0;
e.pvp_deaths = static_cast<uint32_t>(strtoul(row[75], nullptr, 10)); e.pvp_deaths = row[75] ? static_cast<uint32_t>(strtoul(row[75], nullptr, 10)) : 0;
e.pvp_current_points = static_cast<uint32_t>(strtoul(row[76], nullptr, 10)); e.pvp_current_points = row[76] ? static_cast<uint32_t>(strtoul(row[76], nullptr, 10)) : 0;
e.pvp_career_points = static_cast<uint32_t>(strtoul(row[77], nullptr, 10)); e.pvp_career_points = row[77] ? static_cast<uint32_t>(strtoul(row[77], nullptr, 10)) : 0;
e.pvp_best_kill_streak = static_cast<uint32_t>(strtoul(row[78], nullptr, 10)); e.pvp_best_kill_streak = row[78] ? static_cast<uint32_t>(strtoul(row[78], nullptr, 10)) : 0;
e.pvp_worst_death_streak = static_cast<uint32_t>(strtoul(row[79], nullptr, 10)); e.pvp_worst_death_streak = row[79] ? static_cast<uint32_t>(strtoul(row[79], nullptr, 10)) : 0;
e.pvp_current_kill_streak = static_cast<uint32_t>(strtoul(row[80], nullptr, 10)); e.pvp_current_kill_streak = row[80] ? static_cast<uint32_t>(strtoul(row[80], nullptr, 10)) : 0;
e.pvp2 = static_cast<uint32_t>(strtoul(row[81], nullptr, 10)); e.pvp2 = row[81] ? static_cast<uint32_t>(strtoul(row[81], nullptr, 10)) : 0;
e.pvp_type = static_cast<uint32_t>(strtoul(row[82], nullptr, 10)); e.pvp_type = row[82] ? static_cast<uint32_t>(strtoul(row[82], nullptr, 10)) : 0;
e.show_helm = static_cast<uint32_t>(strtoul(row[83], nullptr, 10)); e.show_helm = row[83] ? static_cast<uint32_t>(strtoul(row[83], nullptr, 10)) : 0;
e.group_auto_consent = static_cast<uint8_t>(strtoul(row[84], nullptr, 10)); e.group_auto_consent = row[84] ? static_cast<uint8_t>(strtoul(row[84], nullptr, 10)) : 0;
e.raid_auto_consent = static_cast<uint8_t>(strtoul(row[85], nullptr, 10)); e.raid_auto_consent = row[85] ? static_cast<uint8_t>(strtoul(row[85], nullptr, 10)) : 0;
e.guild_auto_consent = static_cast<uint8_t>(strtoul(row[86], nullptr, 10)); e.guild_auto_consent = row[86] ? static_cast<uint8_t>(strtoul(row[86], nullptr, 10)) : 0;
e.leadership_exp_on = static_cast<uint8_t>(strtoul(row[87], nullptr, 10)); e.leadership_exp_on = row[87] ? static_cast<uint8_t>(strtoul(row[87], nullptr, 10)) : 0;
e.RestTimer = static_cast<uint32_t>(strtoul(row[88], nullptr, 10)); e.RestTimer = row[88] ? static_cast<uint32_t>(strtoul(row[88], nullptr, 10)) : 0;
e.air_remaining = static_cast<uint32_t>(strtoul(row[89], nullptr, 10)); e.air_remaining = row[89] ? static_cast<uint32_t>(strtoul(row[89], nullptr, 10)) : 0;
e.autosplit_enabled = static_cast<uint32_t>(strtoul(row[90], nullptr, 10)); e.autosplit_enabled = row[90] ? static_cast<uint32_t>(strtoul(row[90], nullptr, 10)) : 0;
e.lfp = static_cast<uint8_t>(strtoul(row[91], nullptr, 10)); e.lfp = row[91] ? static_cast<uint8_t>(strtoul(row[91], nullptr, 10)) : 0;
e.lfg = static_cast<uint8_t>(strtoul(row[92], nullptr, 10)); e.lfg = row[92] ? static_cast<uint8_t>(strtoul(row[92], nullptr, 10)) : 0;
e.mailkey = row[93] ? row[93] : ""; e.mailkey = row[93] ? row[93] : "";
e.xtargets = static_cast<uint8_t>(strtoul(row[94], nullptr, 10)); e.xtargets = row[94] ? static_cast<uint8_t>(strtoul(row[94], nullptr, 10)) : 5;
e.firstlogon = static_cast<int8_t>(atoi(row[95])); e.firstlogon = row[95] ? static_cast<int8_t>(atoi(row[95])) : 0;
e.e_aa_effects = static_cast<uint32_t>(strtoul(row[96], nullptr, 10)); e.e_aa_effects = row[96] ? static_cast<uint32_t>(strtoul(row[96], nullptr, 10)) : 0;
e.e_percent_to_aa = static_cast<uint32_t>(strtoul(row[97], nullptr, 10)); e.e_percent_to_aa = row[97] ? static_cast<uint32_t>(strtoul(row[97], nullptr, 10)) : 0;
e.e_expended_aa_spent = static_cast<uint32_t>(strtoul(row[98], nullptr, 10)); e.e_expended_aa_spent = row[98] ? static_cast<uint32_t>(strtoul(row[98], nullptr, 10)) : 0;
e.aa_points_spent_old = static_cast<uint32_t>(strtoul(row[99], nullptr, 10)); e.aa_points_spent_old = row[99] ? static_cast<uint32_t>(strtoul(row[99], nullptr, 10)) : 0;
e.aa_points_old = static_cast<uint32_t>(strtoul(row[100], nullptr, 10)); e.aa_points_old = row[100] ? static_cast<uint32_t>(strtoul(row[100], nullptr, 10)) : 0;
e.e_last_invsnapshot = static_cast<uint32_t>(strtoul(row[101], nullptr, 10)); e.e_last_invsnapshot = row[101] ? static_cast<uint32_t>(strtoul(row[101], nullptr, 10)) : 0;
e.deleted_at = strtoll(row[102] ? row[102] : "-1", nullptr, 10); e.deleted_at = strtoll(row[102] ? row[102] : "-1", nullptr, 10);
return e; return e;
@@ -1051,108 +1050,108 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterData e{}; CharacterData e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.account_id = static_cast<int32_t>(atoi(row[1])); e.account_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.last_name = row[3] ? row[3] : ""; e.last_name = row[3] ? row[3] : "";
e.title = row[4] ? row[4] : ""; e.title = row[4] ? row[4] : "";
e.suffix = row[5] ? row[5] : ""; e.suffix = row[5] ? row[5] : "";
e.zone_id = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.zone_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.zone_instance = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.zone_instance = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.y = strtof(row[8], nullptr); e.y = row[8] ? strtof(row[8], nullptr) : 0;
e.x = strtof(row[9], nullptr); e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.z = strtof(row[10], nullptr); e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = strtof(row[11], nullptr); e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.gender = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.gender = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.race = static_cast<uint16_t>(strtoul(row[13], nullptr, 10)); e.race = row[13] ? static_cast<uint16_t>(strtoul(row[13], nullptr, 10)) : 0;
e.class_ = static_cast<uint8_t>(strtoul(row[14], nullptr, 10)); e.class_ = row[14] ? static_cast<uint8_t>(strtoul(row[14], nullptr, 10)) : 0;
e.level = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.level = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.deity = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.birthday = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.birthday = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.last_login = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.last_login = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.time_played = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.time_played = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.level2 = static_cast<uint8_t>(strtoul(row[20], nullptr, 10)); e.level2 = row[20] ? static_cast<uint8_t>(strtoul(row[20], nullptr, 10)) : 0;
e.anon = static_cast<uint8_t>(strtoul(row[21], nullptr, 10)); e.anon = row[21] ? static_cast<uint8_t>(strtoul(row[21], nullptr, 10)) : 0;
e.gm = static_cast<uint8_t>(strtoul(row[22], nullptr, 10)); e.gm = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
e.face = static_cast<uint32_t>(strtoul(row[23], nullptr, 10)); e.face = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.hair_color = static_cast<uint8_t>(strtoul(row[24], nullptr, 10)); e.hair_color = row[24] ? static_cast<uint8_t>(strtoul(row[24], nullptr, 10)) : 0;
e.hair_style = static_cast<uint8_t>(strtoul(row[25], nullptr, 10)); e.hair_style = row[25] ? static_cast<uint8_t>(strtoul(row[25], nullptr, 10)) : 0;
e.beard = static_cast<uint8_t>(strtoul(row[26], nullptr, 10)); e.beard = row[26] ? static_cast<uint8_t>(strtoul(row[26], nullptr, 10)) : 0;
e.beard_color = static_cast<uint8_t>(strtoul(row[27], nullptr, 10)); e.beard_color = row[27] ? static_cast<uint8_t>(strtoul(row[27], nullptr, 10)) : 0;
e.eye_color_1 = static_cast<uint8_t>(strtoul(row[28], nullptr, 10)); e.eye_color_1 = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.eye_color_2 = static_cast<uint8_t>(strtoul(row[29], nullptr, 10)); e.eye_color_2 = row[29] ? static_cast<uint8_t>(strtoul(row[29], nullptr, 10)) : 0;
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[30], nullptr, 10)); e.drakkin_heritage = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[31], nullptr, 10)); e.drakkin_tattoo = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.drakkin_details = static_cast<uint32_t>(strtoul(row[32], nullptr, 10)); e.drakkin_details = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.ability_time_seconds = static_cast<uint8_t>(strtoul(row[33], nullptr, 10)); e.ability_time_seconds = row[33] ? static_cast<uint8_t>(strtoul(row[33], nullptr, 10)) : 0;
e.ability_number = static_cast<uint8_t>(strtoul(row[34], nullptr, 10)); e.ability_number = row[34] ? static_cast<uint8_t>(strtoul(row[34], nullptr, 10)) : 0;
e.ability_time_minutes = static_cast<uint8_t>(strtoul(row[35], nullptr, 10)); e.ability_time_minutes = row[35] ? static_cast<uint8_t>(strtoul(row[35], nullptr, 10)) : 0;
e.ability_time_hours = static_cast<uint8_t>(strtoul(row[36], nullptr, 10)); e.ability_time_hours = row[36] ? static_cast<uint8_t>(strtoul(row[36], nullptr, 10)) : 0;
e.exp = static_cast<uint32_t>(strtoul(row[37], nullptr, 10)); e.exp = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.exp_enabled = static_cast<uint8_t>(strtoul(row[38], nullptr, 10)); e.exp_enabled = row[38] ? static_cast<uint8_t>(strtoul(row[38], nullptr, 10)) : 1;
e.aa_points_spent = static_cast<uint32_t>(strtoul(row[39], nullptr, 10)); e.aa_points_spent = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.aa_exp = static_cast<uint32_t>(strtoul(row[40], nullptr, 10)); e.aa_exp = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.aa_points = static_cast<uint32_t>(strtoul(row[41], nullptr, 10)); e.aa_points = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.group_leadership_exp = static_cast<uint32_t>(strtoul(row[42], nullptr, 10)); e.group_leadership_exp = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.raid_leadership_exp = static_cast<uint32_t>(strtoul(row[43], nullptr, 10)); e.raid_leadership_exp = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.group_leadership_points = static_cast<uint32_t>(strtoul(row[44], nullptr, 10)); e.group_leadership_points = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.raid_leadership_points = static_cast<uint32_t>(strtoul(row[45], nullptr, 10)); e.raid_leadership_points = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.points = static_cast<uint32_t>(strtoul(row[46], nullptr, 10)); e.points = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
e.cur_hp = static_cast<uint32_t>(strtoul(row[47], nullptr, 10)); e.cur_hp = row[47] ? static_cast<uint32_t>(strtoul(row[47], nullptr, 10)) : 0;
e.mana = static_cast<uint32_t>(strtoul(row[48], nullptr, 10)); e.mana = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
e.endurance = static_cast<uint32_t>(strtoul(row[49], nullptr, 10)); e.endurance = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
e.intoxication = static_cast<uint32_t>(strtoul(row[50], nullptr, 10)); e.intoxication = row[50] ? static_cast<uint32_t>(strtoul(row[50], nullptr, 10)) : 0;
e.str = static_cast<uint32_t>(strtoul(row[51], nullptr, 10)); e.str = row[51] ? static_cast<uint32_t>(strtoul(row[51], nullptr, 10)) : 0;
e.sta = static_cast<uint32_t>(strtoul(row[52], nullptr, 10)); e.sta = row[52] ? static_cast<uint32_t>(strtoul(row[52], nullptr, 10)) : 0;
e.cha = static_cast<uint32_t>(strtoul(row[53], nullptr, 10)); e.cha = row[53] ? static_cast<uint32_t>(strtoul(row[53], nullptr, 10)) : 0;
e.dex = static_cast<uint32_t>(strtoul(row[54], nullptr, 10)); e.dex = row[54] ? static_cast<uint32_t>(strtoul(row[54], nullptr, 10)) : 0;
e.int_ = static_cast<uint32_t>(strtoul(row[55], nullptr, 10)); e.int_ = row[55] ? static_cast<uint32_t>(strtoul(row[55], nullptr, 10)) : 0;
e.agi = static_cast<uint32_t>(strtoul(row[56], nullptr, 10)); e.agi = row[56] ? static_cast<uint32_t>(strtoul(row[56], nullptr, 10)) : 0;
e.wis = static_cast<uint32_t>(strtoul(row[57], nullptr, 10)); e.wis = row[57] ? static_cast<uint32_t>(strtoul(row[57], nullptr, 10)) : 0;
e.zone_change_count = static_cast<uint32_t>(strtoul(row[58], nullptr, 10)); e.zone_change_count = row[58] ? static_cast<uint32_t>(strtoul(row[58], nullptr, 10)) : 0;
e.toxicity = static_cast<uint32_t>(strtoul(row[59], nullptr, 10)); e.toxicity = row[59] ? static_cast<uint32_t>(strtoul(row[59], nullptr, 10)) : 0;
e.hunger_level = static_cast<uint32_t>(strtoul(row[60], nullptr, 10)); e.hunger_level = row[60] ? static_cast<uint32_t>(strtoul(row[60], nullptr, 10)) : 0;
e.thirst_level = static_cast<uint32_t>(strtoul(row[61], nullptr, 10)); e.thirst_level = row[61] ? static_cast<uint32_t>(strtoul(row[61], nullptr, 10)) : 0;
e.ability_up = static_cast<uint32_t>(strtoul(row[62], nullptr, 10)); e.ability_up = row[62] ? static_cast<uint32_t>(strtoul(row[62], nullptr, 10)) : 0;
e.ldon_points_guk = static_cast<uint32_t>(strtoul(row[63], nullptr, 10)); e.ldon_points_guk = row[63] ? static_cast<uint32_t>(strtoul(row[63], nullptr, 10)) : 0;
e.ldon_points_mir = static_cast<uint32_t>(strtoul(row[64], nullptr, 10)); e.ldon_points_mir = row[64] ? static_cast<uint32_t>(strtoul(row[64], nullptr, 10)) : 0;
e.ldon_points_mmc = static_cast<uint32_t>(strtoul(row[65], nullptr, 10)); e.ldon_points_mmc = row[65] ? static_cast<uint32_t>(strtoul(row[65], nullptr, 10)) : 0;
e.ldon_points_ruj = static_cast<uint32_t>(strtoul(row[66], nullptr, 10)); e.ldon_points_ruj = row[66] ? static_cast<uint32_t>(strtoul(row[66], nullptr, 10)) : 0;
e.ldon_points_tak = static_cast<uint32_t>(strtoul(row[67], nullptr, 10)); e.ldon_points_tak = row[67] ? static_cast<uint32_t>(strtoul(row[67], nullptr, 10)) : 0;
e.ldon_points_available = static_cast<uint32_t>(strtoul(row[68], nullptr, 10)); e.ldon_points_available = row[68] ? static_cast<uint32_t>(strtoul(row[68], nullptr, 10)) : 0;
e.tribute_time_remaining = static_cast<uint32_t>(strtoul(row[69], nullptr, 10)); e.tribute_time_remaining = row[69] ? static_cast<uint32_t>(strtoul(row[69], nullptr, 10)) : 0;
e.career_tribute_points = static_cast<uint32_t>(strtoul(row[70], nullptr, 10)); e.career_tribute_points = row[70] ? static_cast<uint32_t>(strtoul(row[70], nullptr, 10)) : 0;
e.tribute_points = static_cast<uint32_t>(strtoul(row[71], nullptr, 10)); e.tribute_points = row[71] ? static_cast<uint32_t>(strtoul(row[71], nullptr, 10)) : 0;
e.tribute_active = static_cast<uint32_t>(strtoul(row[72], nullptr, 10)); e.tribute_active = row[72] ? static_cast<uint32_t>(strtoul(row[72], nullptr, 10)) : 0;
e.pvp_status = static_cast<uint8_t>(strtoul(row[73], nullptr, 10)); e.pvp_status = row[73] ? static_cast<uint8_t>(strtoul(row[73], nullptr, 10)) : 0;
e.pvp_kills = static_cast<uint32_t>(strtoul(row[74], nullptr, 10)); e.pvp_kills = row[74] ? static_cast<uint32_t>(strtoul(row[74], nullptr, 10)) : 0;
e.pvp_deaths = static_cast<uint32_t>(strtoul(row[75], nullptr, 10)); e.pvp_deaths = row[75] ? static_cast<uint32_t>(strtoul(row[75], nullptr, 10)) : 0;
e.pvp_current_points = static_cast<uint32_t>(strtoul(row[76], nullptr, 10)); e.pvp_current_points = row[76] ? static_cast<uint32_t>(strtoul(row[76], nullptr, 10)) : 0;
e.pvp_career_points = static_cast<uint32_t>(strtoul(row[77], nullptr, 10)); e.pvp_career_points = row[77] ? static_cast<uint32_t>(strtoul(row[77], nullptr, 10)) : 0;
e.pvp_best_kill_streak = static_cast<uint32_t>(strtoul(row[78], nullptr, 10)); e.pvp_best_kill_streak = row[78] ? static_cast<uint32_t>(strtoul(row[78], nullptr, 10)) : 0;
e.pvp_worst_death_streak = static_cast<uint32_t>(strtoul(row[79], nullptr, 10)); e.pvp_worst_death_streak = row[79] ? static_cast<uint32_t>(strtoul(row[79], nullptr, 10)) : 0;
e.pvp_current_kill_streak = static_cast<uint32_t>(strtoul(row[80], nullptr, 10)); e.pvp_current_kill_streak = row[80] ? static_cast<uint32_t>(strtoul(row[80], nullptr, 10)) : 0;
e.pvp2 = static_cast<uint32_t>(strtoul(row[81], nullptr, 10)); e.pvp2 = row[81] ? static_cast<uint32_t>(strtoul(row[81], nullptr, 10)) : 0;
e.pvp_type = static_cast<uint32_t>(strtoul(row[82], nullptr, 10)); e.pvp_type = row[82] ? static_cast<uint32_t>(strtoul(row[82], nullptr, 10)) : 0;
e.show_helm = static_cast<uint32_t>(strtoul(row[83], nullptr, 10)); e.show_helm = row[83] ? static_cast<uint32_t>(strtoul(row[83], nullptr, 10)) : 0;
e.group_auto_consent = static_cast<uint8_t>(strtoul(row[84], nullptr, 10)); e.group_auto_consent = row[84] ? static_cast<uint8_t>(strtoul(row[84], nullptr, 10)) : 0;
e.raid_auto_consent = static_cast<uint8_t>(strtoul(row[85], nullptr, 10)); e.raid_auto_consent = row[85] ? static_cast<uint8_t>(strtoul(row[85], nullptr, 10)) : 0;
e.guild_auto_consent = static_cast<uint8_t>(strtoul(row[86], nullptr, 10)); e.guild_auto_consent = row[86] ? static_cast<uint8_t>(strtoul(row[86], nullptr, 10)) : 0;
e.leadership_exp_on = static_cast<uint8_t>(strtoul(row[87], nullptr, 10)); e.leadership_exp_on = row[87] ? static_cast<uint8_t>(strtoul(row[87], nullptr, 10)) : 0;
e.RestTimer = static_cast<uint32_t>(strtoul(row[88], nullptr, 10)); e.RestTimer = row[88] ? static_cast<uint32_t>(strtoul(row[88], nullptr, 10)) : 0;
e.air_remaining = static_cast<uint32_t>(strtoul(row[89], nullptr, 10)); e.air_remaining = row[89] ? static_cast<uint32_t>(strtoul(row[89], nullptr, 10)) : 0;
e.autosplit_enabled = static_cast<uint32_t>(strtoul(row[90], nullptr, 10)); e.autosplit_enabled = row[90] ? static_cast<uint32_t>(strtoul(row[90], nullptr, 10)) : 0;
e.lfp = static_cast<uint8_t>(strtoul(row[91], nullptr, 10)); e.lfp = row[91] ? static_cast<uint8_t>(strtoul(row[91], nullptr, 10)) : 0;
e.lfg = static_cast<uint8_t>(strtoul(row[92], nullptr, 10)); e.lfg = row[92] ? static_cast<uint8_t>(strtoul(row[92], nullptr, 10)) : 0;
e.mailkey = row[93] ? row[93] : ""; e.mailkey = row[93] ? row[93] : "";
e.xtargets = static_cast<uint8_t>(strtoul(row[94], nullptr, 10)); e.xtargets = row[94] ? static_cast<uint8_t>(strtoul(row[94], nullptr, 10)) : 5;
e.firstlogon = static_cast<int8_t>(atoi(row[95])); e.firstlogon = row[95] ? static_cast<int8_t>(atoi(row[95])) : 0;
e.e_aa_effects = static_cast<uint32_t>(strtoul(row[96], nullptr, 10)); e.e_aa_effects = row[96] ? static_cast<uint32_t>(strtoul(row[96], nullptr, 10)) : 0;
e.e_percent_to_aa = static_cast<uint32_t>(strtoul(row[97], nullptr, 10)); e.e_percent_to_aa = row[97] ? static_cast<uint32_t>(strtoul(row[97], nullptr, 10)) : 0;
e.e_expended_aa_spent = static_cast<uint32_t>(strtoul(row[98], nullptr, 10)); e.e_expended_aa_spent = row[98] ? static_cast<uint32_t>(strtoul(row[98], nullptr, 10)) : 0;
e.aa_points_spent_old = static_cast<uint32_t>(strtoul(row[99], nullptr, 10)); e.aa_points_spent_old = row[99] ? static_cast<uint32_t>(strtoul(row[99], nullptr, 10)) : 0;
e.aa_points_old = static_cast<uint32_t>(strtoul(row[100], nullptr, 10)); e.aa_points_old = row[100] ? static_cast<uint32_t>(strtoul(row[100], nullptr, 10)) : 0;
e.e_last_invsnapshot = static_cast<uint32_t>(strtoul(row[101], nullptr, 10)); e.e_last_invsnapshot = row[101] ? static_cast<uint32_t>(strtoul(row[101], nullptr, 10)) : 0;
e.deleted_at = strtoll(row[102] ? row[102] : "-1", nullptr, 10); e.deleted_at = strtoll(row[102] ? row[102] : "-1", nullptr, 10);
all_entries.push_back(e); all_entries.push_back(e);
@@ -1178,108 +1177,108 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterData e{}; CharacterData e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.account_id = static_cast<int32_t>(atoi(row[1])); e.account_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
e.last_name = row[3] ? row[3] : ""; e.last_name = row[3] ? row[3] : "";
e.title = row[4] ? row[4] : ""; e.title = row[4] ? row[4] : "";
e.suffix = row[5] ? row[5] : ""; e.suffix = row[5] ? row[5] : "";
e.zone_id = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.zone_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.zone_instance = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.zone_instance = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.y = strtof(row[8], nullptr); e.y = row[8] ? strtof(row[8], nullptr) : 0;
e.x = strtof(row[9], nullptr); e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.z = strtof(row[10], nullptr); e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = strtof(row[11], nullptr); e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.gender = static_cast<uint8_t>(strtoul(row[12], nullptr, 10)); e.gender = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.race = static_cast<uint16_t>(strtoul(row[13], nullptr, 10)); e.race = row[13] ? static_cast<uint16_t>(strtoul(row[13], nullptr, 10)) : 0;
e.class_ = static_cast<uint8_t>(strtoul(row[14], nullptr, 10)); e.class_ = row[14] ? static_cast<uint8_t>(strtoul(row[14], nullptr, 10)) : 0;
e.level = static_cast<uint32_t>(strtoul(row[15], nullptr, 10)); e.level = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.deity = static_cast<uint32_t>(strtoul(row[16], nullptr, 10)); e.deity = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.birthday = static_cast<uint32_t>(strtoul(row[17], nullptr, 10)); e.birthday = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.last_login = static_cast<uint32_t>(strtoul(row[18], nullptr, 10)); e.last_login = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.time_played = static_cast<uint32_t>(strtoul(row[19], nullptr, 10)); e.time_played = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.level2 = static_cast<uint8_t>(strtoul(row[20], nullptr, 10)); e.level2 = row[20] ? static_cast<uint8_t>(strtoul(row[20], nullptr, 10)) : 0;
e.anon = static_cast<uint8_t>(strtoul(row[21], nullptr, 10)); e.anon = row[21] ? static_cast<uint8_t>(strtoul(row[21], nullptr, 10)) : 0;
e.gm = static_cast<uint8_t>(strtoul(row[22], nullptr, 10)); e.gm = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
e.face = static_cast<uint32_t>(strtoul(row[23], nullptr, 10)); e.face = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.hair_color = static_cast<uint8_t>(strtoul(row[24], nullptr, 10)); e.hair_color = row[24] ? static_cast<uint8_t>(strtoul(row[24], nullptr, 10)) : 0;
e.hair_style = static_cast<uint8_t>(strtoul(row[25], nullptr, 10)); e.hair_style = row[25] ? static_cast<uint8_t>(strtoul(row[25], nullptr, 10)) : 0;
e.beard = static_cast<uint8_t>(strtoul(row[26], nullptr, 10)); e.beard = row[26] ? static_cast<uint8_t>(strtoul(row[26], nullptr, 10)) : 0;
e.beard_color = static_cast<uint8_t>(strtoul(row[27], nullptr, 10)); e.beard_color = row[27] ? static_cast<uint8_t>(strtoul(row[27], nullptr, 10)) : 0;
e.eye_color_1 = static_cast<uint8_t>(strtoul(row[28], nullptr, 10)); e.eye_color_1 = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.eye_color_2 = static_cast<uint8_t>(strtoul(row[29], nullptr, 10)); e.eye_color_2 = row[29] ? static_cast<uint8_t>(strtoul(row[29], nullptr, 10)) : 0;
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[30], nullptr, 10)); e.drakkin_heritage = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[31], nullptr, 10)); e.drakkin_tattoo = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.drakkin_details = static_cast<uint32_t>(strtoul(row[32], nullptr, 10)); e.drakkin_details = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.ability_time_seconds = static_cast<uint8_t>(strtoul(row[33], nullptr, 10)); e.ability_time_seconds = row[33] ? static_cast<uint8_t>(strtoul(row[33], nullptr, 10)) : 0;
e.ability_number = static_cast<uint8_t>(strtoul(row[34], nullptr, 10)); e.ability_number = row[34] ? static_cast<uint8_t>(strtoul(row[34], nullptr, 10)) : 0;
e.ability_time_minutes = static_cast<uint8_t>(strtoul(row[35], nullptr, 10)); e.ability_time_minutes = row[35] ? static_cast<uint8_t>(strtoul(row[35], nullptr, 10)) : 0;
e.ability_time_hours = static_cast<uint8_t>(strtoul(row[36], nullptr, 10)); e.ability_time_hours = row[36] ? static_cast<uint8_t>(strtoul(row[36], nullptr, 10)) : 0;
e.exp = static_cast<uint32_t>(strtoul(row[37], nullptr, 10)); e.exp = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.exp_enabled = static_cast<uint8_t>(strtoul(row[38], nullptr, 10)); e.exp_enabled = row[38] ? static_cast<uint8_t>(strtoul(row[38], nullptr, 10)) : 1;
e.aa_points_spent = static_cast<uint32_t>(strtoul(row[39], nullptr, 10)); e.aa_points_spent = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.aa_exp = static_cast<uint32_t>(strtoul(row[40], nullptr, 10)); e.aa_exp = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.aa_points = static_cast<uint32_t>(strtoul(row[41], nullptr, 10)); e.aa_points = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.group_leadership_exp = static_cast<uint32_t>(strtoul(row[42], nullptr, 10)); e.group_leadership_exp = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.raid_leadership_exp = static_cast<uint32_t>(strtoul(row[43], nullptr, 10)); e.raid_leadership_exp = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.group_leadership_points = static_cast<uint32_t>(strtoul(row[44], nullptr, 10)); e.group_leadership_points = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.raid_leadership_points = static_cast<uint32_t>(strtoul(row[45], nullptr, 10)); e.raid_leadership_points = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.points = static_cast<uint32_t>(strtoul(row[46], nullptr, 10)); e.points = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
e.cur_hp = static_cast<uint32_t>(strtoul(row[47], nullptr, 10)); e.cur_hp = row[47] ? static_cast<uint32_t>(strtoul(row[47], nullptr, 10)) : 0;
e.mana = static_cast<uint32_t>(strtoul(row[48], nullptr, 10)); e.mana = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
e.endurance = static_cast<uint32_t>(strtoul(row[49], nullptr, 10)); e.endurance = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
e.intoxication = static_cast<uint32_t>(strtoul(row[50], nullptr, 10)); e.intoxication = row[50] ? static_cast<uint32_t>(strtoul(row[50], nullptr, 10)) : 0;
e.str = static_cast<uint32_t>(strtoul(row[51], nullptr, 10)); e.str = row[51] ? static_cast<uint32_t>(strtoul(row[51], nullptr, 10)) : 0;
e.sta = static_cast<uint32_t>(strtoul(row[52], nullptr, 10)); e.sta = row[52] ? static_cast<uint32_t>(strtoul(row[52], nullptr, 10)) : 0;
e.cha = static_cast<uint32_t>(strtoul(row[53], nullptr, 10)); e.cha = row[53] ? static_cast<uint32_t>(strtoul(row[53], nullptr, 10)) : 0;
e.dex = static_cast<uint32_t>(strtoul(row[54], nullptr, 10)); e.dex = row[54] ? static_cast<uint32_t>(strtoul(row[54], nullptr, 10)) : 0;
e.int_ = static_cast<uint32_t>(strtoul(row[55], nullptr, 10)); e.int_ = row[55] ? static_cast<uint32_t>(strtoul(row[55], nullptr, 10)) : 0;
e.agi = static_cast<uint32_t>(strtoul(row[56], nullptr, 10)); e.agi = row[56] ? static_cast<uint32_t>(strtoul(row[56], nullptr, 10)) : 0;
e.wis = static_cast<uint32_t>(strtoul(row[57], nullptr, 10)); e.wis = row[57] ? static_cast<uint32_t>(strtoul(row[57], nullptr, 10)) : 0;
e.zone_change_count = static_cast<uint32_t>(strtoul(row[58], nullptr, 10)); e.zone_change_count = row[58] ? static_cast<uint32_t>(strtoul(row[58], nullptr, 10)) : 0;
e.toxicity = static_cast<uint32_t>(strtoul(row[59], nullptr, 10)); e.toxicity = row[59] ? static_cast<uint32_t>(strtoul(row[59], nullptr, 10)) : 0;
e.hunger_level = static_cast<uint32_t>(strtoul(row[60], nullptr, 10)); e.hunger_level = row[60] ? static_cast<uint32_t>(strtoul(row[60], nullptr, 10)) : 0;
e.thirst_level = static_cast<uint32_t>(strtoul(row[61], nullptr, 10)); e.thirst_level = row[61] ? static_cast<uint32_t>(strtoul(row[61], nullptr, 10)) : 0;
e.ability_up = static_cast<uint32_t>(strtoul(row[62], nullptr, 10)); e.ability_up = row[62] ? static_cast<uint32_t>(strtoul(row[62], nullptr, 10)) : 0;
e.ldon_points_guk = static_cast<uint32_t>(strtoul(row[63], nullptr, 10)); e.ldon_points_guk = row[63] ? static_cast<uint32_t>(strtoul(row[63], nullptr, 10)) : 0;
e.ldon_points_mir = static_cast<uint32_t>(strtoul(row[64], nullptr, 10)); e.ldon_points_mir = row[64] ? static_cast<uint32_t>(strtoul(row[64], nullptr, 10)) : 0;
e.ldon_points_mmc = static_cast<uint32_t>(strtoul(row[65], nullptr, 10)); e.ldon_points_mmc = row[65] ? static_cast<uint32_t>(strtoul(row[65], nullptr, 10)) : 0;
e.ldon_points_ruj = static_cast<uint32_t>(strtoul(row[66], nullptr, 10)); e.ldon_points_ruj = row[66] ? static_cast<uint32_t>(strtoul(row[66], nullptr, 10)) : 0;
e.ldon_points_tak = static_cast<uint32_t>(strtoul(row[67], nullptr, 10)); e.ldon_points_tak = row[67] ? static_cast<uint32_t>(strtoul(row[67], nullptr, 10)) : 0;
e.ldon_points_available = static_cast<uint32_t>(strtoul(row[68], nullptr, 10)); e.ldon_points_available = row[68] ? static_cast<uint32_t>(strtoul(row[68], nullptr, 10)) : 0;
e.tribute_time_remaining = static_cast<uint32_t>(strtoul(row[69], nullptr, 10)); e.tribute_time_remaining = row[69] ? static_cast<uint32_t>(strtoul(row[69], nullptr, 10)) : 0;
e.career_tribute_points = static_cast<uint32_t>(strtoul(row[70], nullptr, 10)); e.career_tribute_points = row[70] ? static_cast<uint32_t>(strtoul(row[70], nullptr, 10)) : 0;
e.tribute_points = static_cast<uint32_t>(strtoul(row[71], nullptr, 10)); e.tribute_points = row[71] ? static_cast<uint32_t>(strtoul(row[71], nullptr, 10)) : 0;
e.tribute_active = static_cast<uint32_t>(strtoul(row[72], nullptr, 10)); e.tribute_active = row[72] ? static_cast<uint32_t>(strtoul(row[72], nullptr, 10)) : 0;
e.pvp_status = static_cast<uint8_t>(strtoul(row[73], nullptr, 10)); e.pvp_status = row[73] ? static_cast<uint8_t>(strtoul(row[73], nullptr, 10)) : 0;
e.pvp_kills = static_cast<uint32_t>(strtoul(row[74], nullptr, 10)); e.pvp_kills = row[74] ? static_cast<uint32_t>(strtoul(row[74], nullptr, 10)) : 0;
e.pvp_deaths = static_cast<uint32_t>(strtoul(row[75], nullptr, 10)); e.pvp_deaths = row[75] ? static_cast<uint32_t>(strtoul(row[75], nullptr, 10)) : 0;
e.pvp_current_points = static_cast<uint32_t>(strtoul(row[76], nullptr, 10)); e.pvp_current_points = row[76] ? static_cast<uint32_t>(strtoul(row[76], nullptr, 10)) : 0;
e.pvp_career_points = static_cast<uint32_t>(strtoul(row[77], nullptr, 10)); e.pvp_career_points = row[77] ? static_cast<uint32_t>(strtoul(row[77], nullptr, 10)) : 0;
e.pvp_best_kill_streak = static_cast<uint32_t>(strtoul(row[78], nullptr, 10)); e.pvp_best_kill_streak = row[78] ? static_cast<uint32_t>(strtoul(row[78], nullptr, 10)) : 0;
e.pvp_worst_death_streak = static_cast<uint32_t>(strtoul(row[79], nullptr, 10)); e.pvp_worst_death_streak = row[79] ? static_cast<uint32_t>(strtoul(row[79], nullptr, 10)) : 0;
e.pvp_current_kill_streak = static_cast<uint32_t>(strtoul(row[80], nullptr, 10)); e.pvp_current_kill_streak = row[80] ? static_cast<uint32_t>(strtoul(row[80], nullptr, 10)) : 0;
e.pvp2 = static_cast<uint32_t>(strtoul(row[81], nullptr, 10)); e.pvp2 = row[81] ? static_cast<uint32_t>(strtoul(row[81], nullptr, 10)) : 0;
e.pvp_type = static_cast<uint32_t>(strtoul(row[82], nullptr, 10)); e.pvp_type = row[82] ? static_cast<uint32_t>(strtoul(row[82], nullptr, 10)) : 0;
e.show_helm = static_cast<uint32_t>(strtoul(row[83], nullptr, 10)); e.show_helm = row[83] ? static_cast<uint32_t>(strtoul(row[83], nullptr, 10)) : 0;
e.group_auto_consent = static_cast<uint8_t>(strtoul(row[84], nullptr, 10)); e.group_auto_consent = row[84] ? static_cast<uint8_t>(strtoul(row[84], nullptr, 10)) : 0;
e.raid_auto_consent = static_cast<uint8_t>(strtoul(row[85], nullptr, 10)); e.raid_auto_consent = row[85] ? static_cast<uint8_t>(strtoul(row[85], nullptr, 10)) : 0;
e.guild_auto_consent = static_cast<uint8_t>(strtoul(row[86], nullptr, 10)); e.guild_auto_consent = row[86] ? static_cast<uint8_t>(strtoul(row[86], nullptr, 10)) : 0;
e.leadership_exp_on = static_cast<uint8_t>(strtoul(row[87], nullptr, 10)); e.leadership_exp_on = row[87] ? static_cast<uint8_t>(strtoul(row[87], nullptr, 10)) : 0;
e.RestTimer = static_cast<uint32_t>(strtoul(row[88], nullptr, 10)); e.RestTimer = row[88] ? static_cast<uint32_t>(strtoul(row[88], nullptr, 10)) : 0;
e.air_remaining = static_cast<uint32_t>(strtoul(row[89], nullptr, 10)); e.air_remaining = row[89] ? static_cast<uint32_t>(strtoul(row[89], nullptr, 10)) : 0;
e.autosplit_enabled = static_cast<uint32_t>(strtoul(row[90], nullptr, 10)); e.autosplit_enabled = row[90] ? static_cast<uint32_t>(strtoul(row[90], nullptr, 10)) : 0;
e.lfp = static_cast<uint8_t>(strtoul(row[91], nullptr, 10)); e.lfp = row[91] ? static_cast<uint8_t>(strtoul(row[91], nullptr, 10)) : 0;
e.lfg = static_cast<uint8_t>(strtoul(row[92], nullptr, 10)); e.lfg = row[92] ? static_cast<uint8_t>(strtoul(row[92], nullptr, 10)) : 0;
e.mailkey = row[93] ? row[93] : ""; e.mailkey = row[93] ? row[93] : "";
e.xtargets = static_cast<uint8_t>(strtoul(row[94], nullptr, 10)); e.xtargets = row[94] ? static_cast<uint8_t>(strtoul(row[94], nullptr, 10)) : 5;
e.firstlogon = static_cast<int8_t>(atoi(row[95])); e.firstlogon = row[95] ? static_cast<int8_t>(atoi(row[95])) : 0;
e.e_aa_effects = static_cast<uint32_t>(strtoul(row[96], nullptr, 10)); e.e_aa_effects = row[96] ? static_cast<uint32_t>(strtoul(row[96], nullptr, 10)) : 0;
e.e_percent_to_aa = static_cast<uint32_t>(strtoul(row[97], nullptr, 10)); e.e_percent_to_aa = row[97] ? static_cast<uint32_t>(strtoul(row[97], nullptr, 10)) : 0;
e.e_expended_aa_spent = static_cast<uint32_t>(strtoul(row[98], nullptr, 10)); e.e_expended_aa_spent = row[98] ? static_cast<uint32_t>(strtoul(row[98], nullptr, 10)) : 0;
e.aa_points_spent_old = static_cast<uint32_t>(strtoul(row[99], nullptr, 10)); e.aa_points_spent_old = row[99] ? static_cast<uint32_t>(strtoul(row[99], nullptr, 10)) : 0;
e.aa_points_old = static_cast<uint32_t>(strtoul(row[100], nullptr, 10)); e.aa_points_old = row[100] ? static_cast<uint32_t>(strtoul(row[100], nullptr, 10)) : 0;
e.e_last_invsnapshot = static_cast<uint32_t>(strtoul(row[101], nullptr, 10)); e.e_last_invsnapshot = row[101] ? static_cast<uint32_t>(strtoul(row[101], nullptr, 10)) : 0;
e.deleted_at = strtoll(row[102] ? row[102] : "-1", nullptr, 10); e.deleted_at = strtoll(row[102] ? row[102] : "-1", nullptr, 10);
all_entries.push_back(e); all_entries.push_back(e);
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterDisciplinesRepository { class BaseCharacterDisciplinesRepository {
public: public:
struct CharacterDisciplines { struct CharacterDisciplines {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterDisciplines e{}; CharacterDisciplines e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.disc_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.disc_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterDisciplines e{}; CharacterDisciplines e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.disc_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.disc_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterDisciplines e{}; CharacterDisciplines e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.disc_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.disc_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_EXP_MODIFIERS_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_EXP_MODIFIERS_REPOSITORY_H
@@ -120,8 +120,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_exp_modifiers_id character_exp_modifiers_id
) )
); );
@@ -130,11 +131,11 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterExpModifiers e{}; CharacterExpModifiers e{};
e.character_id = static_cast<int32_t>(atoi(row[0])); e.character_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.instance_version = static_cast<int32_t>(atoi(row[2])); e.instance_version = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.aa_modifier = strtof(row[3], nullptr); e.aa_modifier = row[3] ? strtof(row[3], nullptr) : 0;
e.exp_modifier = strtof(row[4], nullptr); e.exp_modifier = row[4] ? strtof(row[4], nullptr) : 0;
return e; return e;
} }
@@ -266,11 +267,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterExpModifiers e{}; CharacterExpModifiers e{};
e.character_id = static_cast<int32_t>(atoi(row[0])); e.character_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.instance_version = static_cast<int32_t>(atoi(row[2])); e.instance_version = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.aa_modifier = strtof(row[3], nullptr); e.aa_modifier = row[3] ? strtof(row[3], nullptr) : 0;
e.exp_modifier = strtof(row[4], nullptr); e.exp_modifier = row[4] ? strtof(row[4], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -295,11 +296,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterExpModifiers e{}; CharacterExpModifiers e{};
e.character_id = static_cast<int32_t>(atoi(row[0])); e.character_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.instance_version = static_cast<int32_t>(atoi(row[2])); e.instance_version = row[2] ? static_cast<int32_t>(atoi(row[2])) : -1;
e.aa_modifier = strtof(row[3], nullptr); e.aa_modifier = row[3] ? strtof(row[3], nullptr) : 0;
e.exp_modifier = strtof(row[4], nullptr); e.exp_modifier = row[4] ? strtof(row[4], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -358,6 +359,70 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterExpModifiers &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.instance_version));
v.push_back(std::to_string(e.aa_modifier));
v.push_back(std::to_string(e.exp_modifier));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterExpModifiers> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.instance_version));
v.push_back(std::to_string(e.aa_modifier));
v.push_back(std::to_string(e.exp_modifier));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_EXP_MODIFIERS_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_EXP_MODIFIERS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_EXPEDITION_LOCKOUTS_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_EXPEDITION_LOCKOUTS_REPOSITORY_H
@@ -128,8 +128,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_expedition_lockouts_id character_expedition_lockouts_id
) )
); );
@@ -138,12 +139,12 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterExpeditionLockouts e{}; CharacterExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.expedition_name = row[2] ? row[2] : ""; e.expedition_name = row[2] ? row[2] : "";
e.event_name = row[3] ? row[3] : ""; e.event_name = row[3] ? row[3] : "";
e.expire_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.expire_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
e.duration = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.duration = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.from_expedition_uuid = row[6] ? row[6] : ""; e.from_expedition_uuid = row[6] ? row[6] : "";
return e; return e;
@@ -281,12 +282,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterExpeditionLockouts e{}; CharacterExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.expedition_name = row[2] ? row[2] : ""; e.expedition_name = row[2] ? row[2] : "";
e.event_name = row[3] ? row[3] : ""; e.event_name = row[3] ? row[3] : "";
e.expire_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.expire_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
e.duration = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.duration = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.from_expedition_uuid = row[6] ? row[6] : ""; e.from_expedition_uuid = row[6] ? row[6] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -312,12 +313,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterExpeditionLockouts e{}; CharacterExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.expedition_name = row[2] ? row[2] : ""; e.expedition_name = row[2] ? row[2] : "";
e.event_name = row[3] ? row[3] : ""; e.event_name = row[3] ? row[3] : "";
e.expire_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.expire_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
e.duration = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.duration = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.from_expedition_uuid = row[6] ? row[6] : ""; e.from_expedition_uuid = row[6] ? row[6] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -377,6 +378,74 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterExpeditionLockouts &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.character_id));
v.push_back("'" + Strings::Escape(e.expedition_name) + "'");
v.push_back("'" + Strings::Escape(e.event_name) + "'");
v.push_back("FROM_UNIXTIME(" + (e.expire_time > 0 ? std::to_string(e.expire_time) : "null") + ")");
v.push_back(std::to_string(e.duration));
v.push_back("'" + Strings::Escape(e.from_expedition_uuid) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterExpeditionLockouts> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.character_id));
v.push_back("'" + Strings::Escape(e.expedition_name) + "'");
v.push_back("'" + Strings::Escape(e.event_name) + "'");
v.push_back("FROM_UNIXTIME(" + (e.expire_time > 0 ? std::to_string(e.expire_time) : "null") + ")");
v.push_back(std::to_string(e.duration));
v.push_back("'" + Strings::Escape(e.from_expedition_uuid) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_EXPEDITION_LOCKOUTS_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_EXPEDITION_LOCKOUTS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H
@@ -108,8 +108,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_inspect_messages_id character_inspect_messages_id
) )
); );
@@ -118,7 +119,7 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterInspectMessages e{}; CharacterInspectMessages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.inspect_message = row[1] ? row[1] : ""; e.inspect_message = row[1] ? row[1] : "";
return e; return e;
@@ -242,7 +243,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterInspectMessages e{}; CharacterInspectMessages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.inspect_message = row[1] ? row[1] : ""; e.inspect_message = row[1] ? row[1] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -268,7 +269,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterInspectMessages e{}; CharacterInspectMessages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.inspect_message = row[1] ? row[1] : ""; e.inspect_message = row[1] ? row[1] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -328,6 +329,64 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterInspectMessages &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.inspect_message) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterInspectMessages> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.inspect_message) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_INSTANCE_SAFERETURNS_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_INSTANCE_SAFERETURNS_REPOSITORY_H
@@ -136,8 +136,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_instance_safereturns_id character_instance_safereturns_id
) )
); );
@@ -146,15 +147,15 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterInstanceSafereturns e{}; CharacterInstanceSafereturns e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_zone_id = static_cast<int32_t>(atoi(row[2])); e.instance_zone_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[3])); e.instance_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.safe_zone_id = static_cast<int32_t>(atoi(row[4])); e.safe_zone_id = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.safe_x = strtof(row[5], nullptr); e.safe_x = row[5] ? strtof(row[5], nullptr) : 0;
e.safe_y = strtof(row[6], nullptr); e.safe_y = row[6] ? strtof(row[6], nullptr) : 0;
e.safe_z = strtof(row[7], nullptr); e.safe_z = row[7] ? strtof(row[7], nullptr) : 0;
e.safe_heading = strtof(row[8], nullptr); e.safe_heading = row[8] ? strtof(row[8], nullptr) : 0;
return e; return e;
} }
@@ -297,15 +298,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterInstanceSafereturns e{}; CharacterInstanceSafereturns e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_zone_id = static_cast<int32_t>(atoi(row[2])); e.instance_zone_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[3])); e.instance_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.safe_zone_id = static_cast<int32_t>(atoi(row[4])); e.safe_zone_id = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.safe_x = strtof(row[5], nullptr); e.safe_x = row[5] ? strtof(row[5], nullptr) : 0;
e.safe_y = strtof(row[6], nullptr); e.safe_y = row[6] ? strtof(row[6], nullptr) : 0;
e.safe_z = strtof(row[7], nullptr); e.safe_z = row[7] ? strtof(row[7], nullptr) : 0;
e.safe_heading = strtof(row[8], nullptr); e.safe_heading = row[8] ? strtof(row[8], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -330,15 +331,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterInstanceSafereturns e{}; CharacterInstanceSafereturns e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_zone_id = static_cast<int32_t>(atoi(row[2])); e.instance_zone_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[3])); e.instance_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.safe_zone_id = static_cast<int32_t>(atoi(row[4])); e.safe_zone_id = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.safe_x = strtof(row[5], nullptr); e.safe_x = row[5] ? strtof(row[5], nullptr) : 0;
e.safe_y = strtof(row[6], nullptr); e.safe_y = row[6] ? strtof(row[6], nullptr) : 0;
e.safe_z = strtof(row[7], nullptr); e.safe_z = row[7] ? strtof(row[7], nullptr) : 0;
e.safe_heading = strtof(row[8], nullptr); e.safe_heading = row[8] ? strtof(row[8], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -397,6 +398,78 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterInstanceSafereturns &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.instance_zone_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.safe_zone_id));
v.push_back(std::to_string(e.safe_x));
v.push_back(std::to_string(e.safe_y));
v.push_back(std::to_string(e.safe_z));
v.push_back(std::to_string(e.safe_heading));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterInstanceSafereturns> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.instance_zone_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.safe_zone_id));
v.push_back(std::to_string(e.safe_x));
v.push_back(std::to_string(e.safe_y));
v.push_back(std::to_string(e.safe_z));
v.push_back(std::to_string(e.safe_heading));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_INSTANCE_SAFERETURNS_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_INSTANCE_SAFERETURNS_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterItemRecastRepository { class BaseCharacterItemRecastRepository {
public: public:
struct CharacterItemRecast { struct CharacterItemRecast {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterItemRecast e{}; CharacterItemRecast e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.recast_type = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.recast_type = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.timestamp = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.timestamp = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterItemRecast e{}; CharacterItemRecast e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.recast_type = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.recast_type = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.timestamp = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.timestamp = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterItemRecast e{}; CharacterItemRecast e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.recast_type = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.recast_type = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.timestamp = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.timestamp = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_LANGUAGES_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_LANGUAGES_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_languages_id character_languages_id
) )
); );
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterLanguages e{}; CharacterLanguages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.lang_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.lang_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -249,9 +250,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterLanguages e{}; CharacterLanguages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.lang_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.lang_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -276,9 +277,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterLanguages e{}; CharacterLanguages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.lang_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.lang_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -337,6 +338,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterLanguages &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.lang_id));
v.push_back(std::to_string(e.value));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterLanguages> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.lang_id));
v.push_back(std::to_string(e.value));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_LANGUAGES_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_LANGUAGES_REPOSITORY_H
@@ -16,13 +16,12 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterLeadershipAbilitiesRepository { class BaseCharacterLeadershipAbilitiesRepository {
public: public:
struct CharacterLeadershipAbilities { struct CharacterLeadershipAbilities {
uint32_t id; uint32_t id;
uint16_t slot; uint16_t slot;
uint16_t rank; uint16_t rank_;
}; };
static std::string PrimaryKey() static std::string PrimaryKey()
@@ -35,7 +34,7 @@ public:
return { return {
"id", "id",
"slot", "slot",
"rank", "`rank`",
}; };
} }
@@ -44,7 +43,7 @@ public:
return { return {
"id", "id",
"slot", "slot",
"rank", "`rank`",
}; };
} }
@@ -85,9 +84,9 @@ public:
{ {
CharacterLeadershipAbilities e{}; CharacterLeadershipAbilities e{};
e.id = 0; e.id = 0;
e.slot = 0; e.slot = 0;
e.rank = 0; e.rank_ = 0;
return e; return e;
} }
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterLeadershipAbilities e{}; CharacterLeadershipAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.rank = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.rank_ = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -162,7 +161,7 @@ public:
v.push_back(columns[0] + " = " + std::to_string(e.id)); v.push_back(columns[0] + " = " + std::to_string(e.id));
v.push_back(columns[1] + " = " + std::to_string(e.slot)); v.push_back(columns[1] + " = " + std::to_string(e.slot));
v.push_back(columns[2] + " = " + std::to_string(e.rank)); v.push_back(columns[2] + " = " + std::to_string(e.rank_));
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
@@ -186,7 +185,7 @@ public:
v.push_back(std::to_string(e.id)); v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.slot)); v.push_back(std::to_string(e.slot));
v.push_back(std::to_string(e.rank)); v.push_back(std::to_string(e.rank_));
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
@@ -218,7 +217,7 @@ public:
v.push_back(std::to_string(e.id)); v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.slot)); v.push_back(std::to_string(e.slot));
v.push_back(std::to_string(e.rank)); v.push_back(std::to_string(e.rank_));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")"); insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
} }
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterLeadershipAbilities e{}; CharacterLeadershipAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.rank = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.rank_ = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterLeadershipAbilities e{}; CharacterLeadershipAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.rank = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.rank_ = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -358,7 +357,7 @@ public:
v.push_back(std::to_string(e.id)); v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.slot)); v.push_back(std::to_string(e.slot));
v.push_back(std::to_string(e.rank)); v.push_back(std::to_string(e.rank_));
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
@@ -383,7 +382,7 @@ public:
v.push_back(std::to_string(e.id)); v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.slot)); v.push_back(std::to_string(e.slot));
v.push_back(std::to_string(e.rank)); v.push_back(std::to_string(e.rank_));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")"); insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterMaterialRepository { class BaseCharacterMaterialRepository {
public: public:
struct CharacterMaterial { struct CharacterMaterial {
@@ -140,13 +139,13 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterMaterial e{}; CharacterMaterial e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.blue = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.blue = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.green = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.green = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.red = static_cast<uint8_t>(strtoul(row[4], nullptr, 10)); e.red = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.use_tint = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.use_tint = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.color = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.color = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
return e; return e;
} }
@@ -283,13 +282,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterMaterial e{}; CharacterMaterial e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.blue = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.blue = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.green = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.green = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.red = static_cast<uint8_t>(strtoul(row[4], nullptr, 10)); e.red = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.use_tint = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.use_tint = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.color = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.color = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -314,13 +313,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterMaterial e{}; CharacterMaterial e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.slot = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.blue = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.blue = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.green = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.green = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.red = static_cast<uint8_t>(strtoul(row[4], nullptr, 10)); e.red = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.use_tint = static_cast<uint8_t>(strtoul(row[5], nullptr, 10)); e.use_tint = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.color = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.color = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterMemmedSpellsRepository { class BaseCharacterMemmedSpellsRepository {
public: public:
struct CharacterMemmedSpells { struct CharacterMemmedSpells {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterMemmedSpells e{}; CharacterMemmedSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterMemmedSpells e{}; CharacterMemmedSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterMemmedSpells e{}; CharacterMemmedSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_PEQZONE_FLAGS_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_PEQZONE_FLAGS_REPOSITORY_H
@@ -108,8 +108,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_peqzone_flags_id character_peqzone_flags_id
) )
); );
@@ -118,8 +119,8 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterPeqzoneFlags e{}; CharacterPeqzoneFlags e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
return e; return e;
} }
@@ -242,8 +243,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPeqzoneFlags e{}; CharacterPeqzoneFlags e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -268,8 +269,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPeqzoneFlags e{}; CharacterPeqzoneFlags e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -328,6 +329,64 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterPeqzoneFlags &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.zone_id));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterPeqzoneFlags> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.zone_id));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_PEQZONE_FLAGS_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_PEQZONE_FLAGS_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterPetBuffsRepository { class BaseCharacterPetBuffsRepository {
public: public:
struct CharacterPetBuffs { struct CharacterPetBuffs {
@@ -156,17 +155,17 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterPetBuffs e{}; CharacterPetBuffs e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.slot = static_cast<int32_t>(atoi(row[2])); e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[3])); e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.caster_level = static_cast<int8_t>(atoi(row[4])); e.caster_level = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
e.castername = row[5] ? row[5] : ""; e.castername = row[5] ? row[5] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[6])); e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.counters = static_cast<int32_t>(atoi(row[7])); e.counters = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.numhits = static_cast<int32_t>(atoi(row[8])); e.numhits = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.rune = static_cast<int32_t>(atoi(row[9])); e.rune = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.instrument_mod = static_cast<uint8_t>(strtoul(row[10], nullptr, 10)); e.instrument_mod = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 10;
return e; return e;
} }
@@ -316,17 +315,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPetBuffs e{}; CharacterPetBuffs e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.slot = static_cast<int32_t>(atoi(row[2])); e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[3])); e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.caster_level = static_cast<int8_t>(atoi(row[4])); e.caster_level = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
e.castername = row[5] ? row[5] : ""; e.castername = row[5] ? row[5] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[6])); e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.counters = static_cast<int32_t>(atoi(row[7])); e.counters = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.numhits = static_cast<int32_t>(atoi(row[8])); e.numhits = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.rune = static_cast<int32_t>(atoi(row[9])); e.rune = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.instrument_mod = static_cast<uint8_t>(strtoul(row[10], nullptr, 10)); e.instrument_mod = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 10;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -351,17 +350,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPetBuffs e{}; CharacterPetBuffs e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.slot = static_cast<int32_t>(atoi(row[2])); e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[3])); e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.caster_level = static_cast<int8_t>(atoi(row[4])); e.caster_level = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
e.castername = row[5] ? row[5] : ""; e.castername = row[5] ? row[5] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[6])); e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.counters = static_cast<int32_t>(atoi(row[7])); e.counters = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.numhits = static_cast<int32_t>(atoi(row[8])); e.numhits = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.rune = static_cast<int32_t>(atoi(row[9])); e.rune = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.instrument_mod = static_cast<uint8_t>(strtoul(row[10], nullptr, 10)); e.instrument_mod = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 10;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterPetInfoRepository { class BaseCharacterPetInfoRepository {
public: public:
struct CharacterPetInfo { struct CharacterPetInfo {
@@ -148,15 +147,15 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterPetInfo e{}; CharacterPetInfo e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.petname = row[2] ? row[2] : ""; e.petname = row[2] ? row[2] : "";
e.petpower = static_cast<int32_t>(atoi(row[3])); e.petpower = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[4])); e.spell_id = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.hp = static_cast<int32_t>(atoi(row[5])); e.hp = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.mana = static_cast<int32_t>(atoi(row[6])); e.mana = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.size = strtof(row[7], nullptr); e.size = row[7] ? strtof(row[7], nullptr) : 0;
e.taunting = static_cast<int8_t>(atoi(row[8])); e.taunting = row[8] ? static_cast<int8_t>(atoi(row[8])) : 1;
return e; return e;
} }
@@ -300,15 +299,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPetInfo e{}; CharacterPetInfo e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.petname = row[2] ? row[2] : ""; e.petname = row[2] ? row[2] : "";
e.petpower = static_cast<int32_t>(atoi(row[3])); e.petpower = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[4])); e.spell_id = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.hp = static_cast<int32_t>(atoi(row[5])); e.hp = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.mana = static_cast<int32_t>(atoi(row[6])); e.mana = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.size = strtof(row[7], nullptr); e.size = row[7] ? strtof(row[7], nullptr) : 0;
e.taunting = static_cast<int8_t>(atoi(row[8])); e.taunting = row[8] ? static_cast<int8_t>(atoi(row[8])) : 1;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -333,15 +332,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPetInfo e{}; CharacterPetInfo e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.petname = row[2] ? row[2] : ""; e.petname = row[2] ? row[2] : "";
e.petpower = static_cast<int32_t>(atoi(row[3])); e.petpower = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.spell_id = static_cast<int32_t>(atoi(row[4])); e.spell_id = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.hp = static_cast<int32_t>(atoi(row[5])); e.hp = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.mana = static_cast<int32_t>(atoi(row[6])); e.mana = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.size = strtof(row[7], nullptr); e.size = row[7] ? strtof(row[7], nullptr) : 0;
e.taunting = static_cast<int8_t>(atoi(row[8])); e.taunting = row[8] ? static_cast<int8_t>(atoi(row[8])) : 1;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterPetInventoryRepository { class BaseCharacterPetInventoryRepository {
public: public:
struct CharacterPetInventory { struct CharacterPetInventory {
@@ -128,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterPetInventory e{}; CharacterPetInventory e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.slot = static_cast<int32_t>(atoi(row[2])); e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.item_id = static_cast<int32_t>(atoi(row[3])); e.item_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
return e; return e;
} }
@@ -260,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPetInventory e{}; CharacterPetInventory e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.slot = static_cast<int32_t>(atoi(row[2])); e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.item_id = static_cast<int32_t>(atoi(row[3])); e.item_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -288,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPetInventory e{}; CharacterPetInventory e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.pet = static_cast<int32_t>(atoi(row[1])); e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.slot = static_cast<int32_t>(atoi(row[2])); e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.item_id = static_cast<int32_t>(atoi(row[3])); e.item_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterPotionbeltRepository { class BaseCharacterPotionbeltRepository {
public: public:
struct CharacterPotionbelt { struct CharacterPotionbelt {
@@ -128,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterPotionbelt e{}; CharacterPotionbelt e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.potion_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.potion_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.icon = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.icon = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
return e; return e;
} }
@@ -260,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPotionbelt e{}; CharacterPotionbelt e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.potion_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.potion_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.icon = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.icon = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -288,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPotionbelt e{}; CharacterPotionbelt e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.potion_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.potion_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.icon = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.icon = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterSkillsRepository { class BaseCharacterSkillsRepository {
public: public:
struct CharacterSkills { struct CharacterSkills {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterSkills e{}; CharacterSkills e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.skill_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.skill_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -251,9 +250,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterSkills e{}; CharacterSkills e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.skill_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.skill_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -278,9 +277,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterSkills e{}; CharacterSkills e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.skill_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.skill_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterSpellsRepository { class BaseCharacterSpellsRepository {
public: public:
struct CharacterSpells { struct CharacterSpells {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterSpells e{}; CharacterSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -251,9 +250,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterSpells e{}; CharacterSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -278,9 +277,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterSpells e{}; CharacterSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10)); e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10)); e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_STATS_RECORD_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_STATS_RECORD_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterStatsRecordRepository { class BaseCharacterStatsRecordRepository {
public: public:
struct CharacterStatsRecord { struct CharacterStatsRecord {
@@ -408,78 +407,78 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterStatsRecord e{}; CharacterStatsRecord e{};
e.character_id = static_cast<int32_t>(atoi(row[0])); e.character_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.status = static_cast<int32_t>(atoi(row[2])); e.status = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.level = static_cast<int32_t>(atoi(row[3])); e.level = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.class_ = static_cast<int32_t>(atoi(row[4])); e.class_ = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.race = static_cast<int32_t>(atoi(row[5])); e.race = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.aa_points = static_cast<int32_t>(atoi(row[6])); e.aa_points = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.hp = strtoll(row[7], nullptr, 10); e.hp = row[7] ? strtoll(row[7], nullptr, 10) : 0;
e.mana = strtoll(row[8], nullptr, 10); e.mana = row[8] ? strtoll(row[8], nullptr, 10) : 0;
e.endurance = strtoll(row[9], nullptr, 10); e.endurance = row[9] ? strtoll(row[9], nullptr, 10) : 0;
e.ac = static_cast<int32_t>(atoi(row[10])); e.ac = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.strength = static_cast<int32_t>(atoi(row[11])); e.strength = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.stamina = static_cast<int32_t>(atoi(row[12])); e.stamina = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.dexterity = static_cast<int32_t>(atoi(row[13])); e.dexterity = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.agility = static_cast<int32_t>(atoi(row[14])); e.agility = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
e.intelligence = static_cast<int32_t>(atoi(row[15])); e.intelligence = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.wisdom = static_cast<int32_t>(atoi(row[16])); e.wisdom = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
e.charisma = static_cast<int32_t>(atoi(row[17])); e.charisma = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
e.magic_resist = static_cast<int32_t>(atoi(row[18])); e.magic_resist = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
e.fire_resist = static_cast<int32_t>(atoi(row[19])); e.fire_resist = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
e.cold_resist = static_cast<int32_t>(atoi(row[20])); e.cold_resist = row[20] ? static_cast<int32_t>(atoi(row[20])) : 0;
e.poison_resist = static_cast<int32_t>(atoi(row[21])); e.poison_resist = row[21] ? static_cast<int32_t>(atoi(row[21])) : 0;
e.disease_resist = static_cast<int32_t>(atoi(row[22])); e.disease_resist = row[22] ? static_cast<int32_t>(atoi(row[22])) : 0;
e.corruption_resist = static_cast<int32_t>(atoi(row[23])); e.corruption_resist = row[23] ? static_cast<int32_t>(atoi(row[23])) : 0;
e.heroic_strength = static_cast<int32_t>(atoi(row[24])); e.heroic_strength = row[24] ? static_cast<int32_t>(atoi(row[24])) : 0;
e.heroic_stamina = static_cast<int32_t>(atoi(row[25])); e.heroic_stamina = row[25] ? static_cast<int32_t>(atoi(row[25])) : 0;
e.heroic_dexterity = static_cast<int32_t>(atoi(row[26])); e.heroic_dexterity = row[26] ? static_cast<int32_t>(atoi(row[26])) : 0;
e.heroic_agility = static_cast<int32_t>(atoi(row[27])); e.heroic_agility = row[27] ? static_cast<int32_t>(atoi(row[27])) : 0;
e.heroic_intelligence = static_cast<int32_t>(atoi(row[28])); e.heroic_intelligence = row[28] ? static_cast<int32_t>(atoi(row[28])) : 0;
e.heroic_wisdom = static_cast<int32_t>(atoi(row[29])); e.heroic_wisdom = row[29] ? static_cast<int32_t>(atoi(row[29])) : 0;
e.heroic_charisma = static_cast<int32_t>(atoi(row[30])); e.heroic_charisma = row[30] ? static_cast<int32_t>(atoi(row[30])) : 0;
e.heroic_magic_resist = static_cast<int32_t>(atoi(row[31])); e.heroic_magic_resist = row[31] ? static_cast<int32_t>(atoi(row[31])) : 0;
e.heroic_fire_resist = static_cast<int32_t>(atoi(row[32])); e.heroic_fire_resist = row[32] ? static_cast<int32_t>(atoi(row[32])) : 0;
e.heroic_cold_resist = static_cast<int32_t>(atoi(row[33])); e.heroic_cold_resist = row[33] ? static_cast<int32_t>(atoi(row[33])) : 0;
e.heroic_poison_resist = static_cast<int32_t>(atoi(row[34])); e.heroic_poison_resist = row[34] ? static_cast<int32_t>(atoi(row[34])) : 0;
e.heroic_disease_resist = static_cast<int32_t>(atoi(row[35])); e.heroic_disease_resist = row[35] ? static_cast<int32_t>(atoi(row[35])) : 0;
e.heroic_corruption_resist = static_cast<int32_t>(atoi(row[36])); e.heroic_corruption_resist = row[36] ? static_cast<int32_t>(atoi(row[36])) : 0;
e.haste = static_cast<int32_t>(atoi(row[37])); e.haste = row[37] ? static_cast<int32_t>(atoi(row[37])) : 0;
e.accuracy = static_cast<int32_t>(atoi(row[38])); e.accuracy = row[38] ? static_cast<int32_t>(atoi(row[38])) : 0;
e.attack = static_cast<int32_t>(atoi(row[39])); e.attack = row[39] ? static_cast<int32_t>(atoi(row[39])) : 0;
e.avoidance = static_cast<int32_t>(atoi(row[40])); e.avoidance = row[40] ? static_cast<int32_t>(atoi(row[40])) : 0;
e.clairvoyance = static_cast<int32_t>(atoi(row[41])); e.clairvoyance = row[41] ? static_cast<int32_t>(atoi(row[41])) : 0;
e.combat_effects = static_cast<int32_t>(atoi(row[42])); e.combat_effects = row[42] ? static_cast<int32_t>(atoi(row[42])) : 0;
e.damage_shield_mitigation = static_cast<int32_t>(atoi(row[43])); e.damage_shield_mitigation = row[43] ? static_cast<int32_t>(atoi(row[43])) : 0;
e.damage_shield = static_cast<int32_t>(atoi(row[44])); e.damage_shield = row[44] ? static_cast<int32_t>(atoi(row[44])) : 0;
e.dot_shielding = static_cast<int32_t>(atoi(row[45])); e.dot_shielding = row[45] ? static_cast<int32_t>(atoi(row[45])) : 0;
e.hp_regen = static_cast<int32_t>(atoi(row[46])); e.hp_regen = row[46] ? static_cast<int32_t>(atoi(row[46])) : 0;
e.mana_regen = static_cast<int32_t>(atoi(row[47])); e.mana_regen = row[47] ? static_cast<int32_t>(atoi(row[47])) : 0;
e.endurance_regen = static_cast<int32_t>(atoi(row[48])); e.endurance_regen = row[48] ? static_cast<int32_t>(atoi(row[48])) : 0;
e.shielding = static_cast<int32_t>(atoi(row[49])); e.shielding = row[49] ? static_cast<int32_t>(atoi(row[49])) : 0;
e.spell_damage = static_cast<int32_t>(atoi(row[50])); e.spell_damage = row[50] ? static_cast<int32_t>(atoi(row[50])) : 0;
e.spell_shielding = static_cast<int32_t>(atoi(row[51])); e.spell_shielding = row[51] ? static_cast<int32_t>(atoi(row[51])) : 0;
e.strikethrough = static_cast<int32_t>(atoi(row[52])); e.strikethrough = row[52] ? static_cast<int32_t>(atoi(row[52])) : 0;
e.stun_resist = static_cast<int32_t>(atoi(row[53])); e.stun_resist = row[53] ? static_cast<int32_t>(atoi(row[53])) : 0;
e.backstab = static_cast<int32_t>(atoi(row[54])); e.backstab = row[54] ? static_cast<int32_t>(atoi(row[54])) : 0;
e.wind = static_cast<int32_t>(atoi(row[55])); e.wind = row[55] ? static_cast<int32_t>(atoi(row[55])) : 0;
e.brass = static_cast<int32_t>(atoi(row[56])); e.brass = row[56] ? static_cast<int32_t>(atoi(row[56])) : 0;
e.string = static_cast<int32_t>(atoi(row[57])); e.string = row[57] ? static_cast<int32_t>(atoi(row[57])) : 0;
e.percussion = static_cast<int32_t>(atoi(row[58])); e.percussion = row[58] ? static_cast<int32_t>(atoi(row[58])) : 0;
e.singing = static_cast<int32_t>(atoi(row[59])); e.singing = row[59] ? static_cast<int32_t>(atoi(row[59])) : 0;
e.baking = static_cast<int32_t>(atoi(row[60])); e.baking = row[60] ? static_cast<int32_t>(atoi(row[60])) : 0;
e.alchemy = static_cast<int32_t>(atoi(row[61])); e.alchemy = row[61] ? static_cast<int32_t>(atoi(row[61])) : 0;
e.tailoring = static_cast<int32_t>(atoi(row[62])); e.tailoring = row[62] ? static_cast<int32_t>(atoi(row[62])) : 0;
e.blacksmithing = static_cast<int32_t>(atoi(row[63])); e.blacksmithing = row[63] ? static_cast<int32_t>(atoi(row[63])) : 0;
e.fletching = static_cast<int32_t>(atoi(row[64])); e.fletching = row[64] ? static_cast<int32_t>(atoi(row[64])) : 0;
e.brewing = static_cast<int32_t>(atoi(row[65])); e.brewing = row[65] ? static_cast<int32_t>(atoi(row[65])) : 0;
e.jewelry = static_cast<int32_t>(atoi(row[66])); e.jewelry = row[66] ? static_cast<int32_t>(atoi(row[66])) : 0;
e.pottery = static_cast<int32_t>(atoi(row[67])); e.pottery = row[67] ? static_cast<int32_t>(atoi(row[67])) : 0;
e.research = static_cast<int32_t>(atoi(row[68])); e.research = row[68] ? static_cast<int32_t>(atoi(row[68])) : 0;
e.alcohol = static_cast<int32_t>(atoi(row[69])); e.alcohol = row[69] ? static_cast<int32_t>(atoi(row[69])) : 0;
e.fishing = static_cast<int32_t>(atoi(row[70])); e.fishing = row[70] ? static_cast<int32_t>(atoi(row[70])) : 0;
e.tinkering = static_cast<int32_t>(atoi(row[71])); e.tinkering = row[71] ? static_cast<int32_t>(atoi(row[71])) : 0;
e.created_at = strtoll(row[72] ? row[72] : "-1", nullptr, 10); e.created_at = strtoll(row[72] ? row[72] : "-1", nullptr, 10);
e.updated_at = strtoll(row[73] ? row[73] : "-1", nullptr, 10); e.updated_at = strtoll(row[73] ? row[73] : "-1", nullptr, 10);
@@ -820,78 +819,78 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterStatsRecord e{}; CharacterStatsRecord e{};
e.character_id = static_cast<int32_t>(atoi(row[0])); e.character_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.status = static_cast<int32_t>(atoi(row[2])); e.status = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.level = static_cast<int32_t>(atoi(row[3])); e.level = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.class_ = static_cast<int32_t>(atoi(row[4])); e.class_ = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.race = static_cast<int32_t>(atoi(row[5])); e.race = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.aa_points = static_cast<int32_t>(atoi(row[6])); e.aa_points = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.hp = strtoll(row[7], nullptr, 10); e.hp = row[7] ? strtoll(row[7], nullptr, 10) : 0;
e.mana = strtoll(row[8], nullptr, 10); e.mana = row[8] ? strtoll(row[8], nullptr, 10) : 0;
e.endurance = strtoll(row[9], nullptr, 10); e.endurance = row[9] ? strtoll(row[9], nullptr, 10) : 0;
e.ac = static_cast<int32_t>(atoi(row[10])); e.ac = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.strength = static_cast<int32_t>(atoi(row[11])); e.strength = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.stamina = static_cast<int32_t>(atoi(row[12])); e.stamina = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.dexterity = static_cast<int32_t>(atoi(row[13])); e.dexterity = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.agility = static_cast<int32_t>(atoi(row[14])); e.agility = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
e.intelligence = static_cast<int32_t>(atoi(row[15])); e.intelligence = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.wisdom = static_cast<int32_t>(atoi(row[16])); e.wisdom = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
e.charisma = static_cast<int32_t>(atoi(row[17])); e.charisma = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
e.magic_resist = static_cast<int32_t>(atoi(row[18])); e.magic_resist = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
e.fire_resist = static_cast<int32_t>(atoi(row[19])); e.fire_resist = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
e.cold_resist = static_cast<int32_t>(atoi(row[20])); e.cold_resist = row[20] ? static_cast<int32_t>(atoi(row[20])) : 0;
e.poison_resist = static_cast<int32_t>(atoi(row[21])); e.poison_resist = row[21] ? static_cast<int32_t>(atoi(row[21])) : 0;
e.disease_resist = static_cast<int32_t>(atoi(row[22])); e.disease_resist = row[22] ? static_cast<int32_t>(atoi(row[22])) : 0;
e.corruption_resist = static_cast<int32_t>(atoi(row[23])); e.corruption_resist = row[23] ? static_cast<int32_t>(atoi(row[23])) : 0;
e.heroic_strength = static_cast<int32_t>(atoi(row[24])); e.heroic_strength = row[24] ? static_cast<int32_t>(atoi(row[24])) : 0;
e.heroic_stamina = static_cast<int32_t>(atoi(row[25])); e.heroic_stamina = row[25] ? static_cast<int32_t>(atoi(row[25])) : 0;
e.heroic_dexterity = static_cast<int32_t>(atoi(row[26])); e.heroic_dexterity = row[26] ? static_cast<int32_t>(atoi(row[26])) : 0;
e.heroic_agility = static_cast<int32_t>(atoi(row[27])); e.heroic_agility = row[27] ? static_cast<int32_t>(atoi(row[27])) : 0;
e.heroic_intelligence = static_cast<int32_t>(atoi(row[28])); e.heroic_intelligence = row[28] ? static_cast<int32_t>(atoi(row[28])) : 0;
e.heroic_wisdom = static_cast<int32_t>(atoi(row[29])); e.heroic_wisdom = row[29] ? static_cast<int32_t>(atoi(row[29])) : 0;
e.heroic_charisma = static_cast<int32_t>(atoi(row[30])); e.heroic_charisma = row[30] ? static_cast<int32_t>(atoi(row[30])) : 0;
e.heroic_magic_resist = static_cast<int32_t>(atoi(row[31])); e.heroic_magic_resist = row[31] ? static_cast<int32_t>(atoi(row[31])) : 0;
e.heroic_fire_resist = static_cast<int32_t>(atoi(row[32])); e.heroic_fire_resist = row[32] ? static_cast<int32_t>(atoi(row[32])) : 0;
e.heroic_cold_resist = static_cast<int32_t>(atoi(row[33])); e.heroic_cold_resist = row[33] ? static_cast<int32_t>(atoi(row[33])) : 0;
e.heroic_poison_resist = static_cast<int32_t>(atoi(row[34])); e.heroic_poison_resist = row[34] ? static_cast<int32_t>(atoi(row[34])) : 0;
e.heroic_disease_resist = static_cast<int32_t>(atoi(row[35])); e.heroic_disease_resist = row[35] ? static_cast<int32_t>(atoi(row[35])) : 0;
e.heroic_corruption_resist = static_cast<int32_t>(atoi(row[36])); e.heroic_corruption_resist = row[36] ? static_cast<int32_t>(atoi(row[36])) : 0;
e.haste = static_cast<int32_t>(atoi(row[37])); e.haste = row[37] ? static_cast<int32_t>(atoi(row[37])) : 0;
e.accuracy = static_cast<int32_t>(atoi(row[38])); e.accuracy = row[38] ? static_cast<int32_t>(atoi(row[38])) : 0;
e.attack = static_cast<int32_t>(atoi(row[39])); e.attack = row[39] ? static_cast<int32_t>(atoi(row[39])) : 0;
e.avoidance = static_cast<int32_t>(atoi(row[40])); e.avoidance = row[40] ? static_cast<int32_t>(atoi(row[40])) : 0;
e.clairvoyance = static_cast<int32_t>(atoi(row[41])); e.clairvoyance = row[41] ? static_cast<int32_t>(atoi(row[41])) : 0;
e.combat_effects = static_cast<int32_t>(atoi(row[42])); e.combat_effects = row[42] ? static_cast<int32_t>(atoi(row[42])) : 0;
e.damage_shield_mitigation = static_cast<int32_t>(atoi(row[43])); e.damage_shield_mitigation = row[43] ? static_cast<int32_t>(atoi(row[43])) : 0;
e.damage_shield = static_cast<int32_t>(atoi(row[44])); e.damage_shield = row[44] ? static_cast<int32_t>(atoi(row[44])) : 0;
e.dot_shielding = static_cast<int32_t>(atoi(row[45])); e.dot_shielding = row[45] ? static_cast<int32_t>(atoi(row[45])) : 0;
e.hp_regen = static_cast<int32_t>(atoi(row[46])); e.hp_regen = row[46] ? static_cast<int32_t>(atoi(row[46])) : 0;
e.mana_regen = static_cast<int32_t>(atoi(row[47])); e.mana_regen = row[47] ? static_cast<int32_t>(atoi(row[47])) : 0;
e.endurance_regen = static_cast<int32_t>(atoi(row[48])); e.endurance_regen = row[48] ? static_cast<int32_t>(atoi(row[48])) : 0;
e.shielding = static_cast<int32_t>(atoi(row[49])); e.shielding = row[49] ? static_cast<int32_t>(atoi(row[49])) : 0;
e.spell_damage = static_cast<int32_t>(atoi(row[50])); e.spell_damage = row[50] ? static_cast<int32_t>(atoi(row[50])) : 0;
e.spell_shielding = static_cast<int32_t>(atoi(row[51])); e.spell_shielding = row[51] ? static_cast<int32_t>(atoi(row[51])) : 0;
e.strikethrough = static_cast<int32_t>(atoi(row[52])); e.strikethrough = row[52] ? static_cast<int32_t>(atoi(row[52])) : 0;
e.stun_resist = static_cast<int32_t>(atoi(row[53])); e.stun_resist = row[53] ? static_cast<int32_t>(atoi(row[53])) : 0;
e.backstab = static_cast<int32_t>(atoi(row[54])); e.backstab = row[54] ? static_cast<int32_t>(atoi(row[54])) : 0;
e.wind = static_cast<int32_t>(atoi(row[55])); e.wind = row[55] ? static_cast<int32_t>(atoi(row[55])) : 0;
e.brass = static_cast<int32_t>(atoi(row[56])); e.brass = row[56] ? static_cast<int32_t>(atoi(row[56])) : 0;
e.string = static_cast<int32_t>(atoi(row[57])); e.string = row[57] ? static_cast<int32_t>(atoi(row[57])) : 0;
e.percussion = static_cast<int32_t>(atoi(row[58])); e.percussion = row[58] ? static_cast<int32_t>(atoi(row[58])) : 0;
e.singing = static_cast<int32_t>(atoi(row[59])); e.singing = row[59] ? static_cast<int32_t>(atoi(row[59])) : 0;
e.baking = static_cast<int32_t>(atoi(row[60])); e.baking = row[60] ? static_cast<int32_t>(atoi(row[60])) : 0;
e.alchemy = static_cast<int32_t>(atoi(row[61])); e.alchemy = row[61] ? static_cast<int32_t>(atoi(row[61])) : 0;
e.tailoring = static_cast<int32_t>(atoi(row[62])); e.tailoring = row[62] ? static_cast<int32_t>(atoi(row[62])) : 0;
e.blacksmithing = static_cast<int32_t>(atoi(row[63])); e.blacksmithing = row[63] ? static_cast<int32_t>(atoi(row[63])) : 0;
e.fletching = static_cast<int32_t>(atoi(row[64])); e.fletching = row[64] ? static_cast<int32_t>(atoi(row[64])) : 0;
e.brewing = static_cast<int32_t>(atoi(row[65])); e.brewing = row[65] ? static_cast<int32_t>(atoi(row[65])) : 0;
e.jewelry = static_cast<int32_t>(atoi(row[66])); e.jewelry = row[66] ? static_cast<int32_t>(atoi(row[66])) : 0;
e.pottery = static_cast<int32_t>(atoi(row[67])); e.pottery = row[67] ? static_cast<int32_t>(atoi(row[67])) : 0;
e.research = static_cast<int32_t>(atoi(row[68])); e.research = row[68] ? static_cast<int32_t>(atoi(row[68])) : 0;
e.alcohol = static_cast<int32_t>(atoi(row[69])); e.alcohol = row[69] ? static_cast<int32_t>(atoi(row[69])) : 0;
e.fishing = static_cast<int32_t>(atoi(row[70])); e.fishing = row[70] ? static_cast<int32_t>(atoi(row[70])) : 0;
e.tinkering = static_cast<int32_t>(atoi(row[71])); e.tinkering = row[71] ? static_cast<int32_t>(atoi(row[71])) : 0;
e.created_at = strtoll(row[72] ? row[72] : "-1", nullptr, 10); e.created_at = strtoll(row[72] ? row[72] : "-1", nullptr, 10);
e.updated_at = strtoll(row[73] ? row[73] : "-1", nullptr, 10); e.updated_at = strtoll(row[73] ? row[73] : "-1", nullptr, 10);
@@ -918,78 +917,78 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterStatsRecord e{}; CharacterStatsRecord e{};
e.character_id = static_cast<int32_t>(atoi(row[0])); e.character_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.status = static_cast<int32_t>(atoi(row[2])); e.status = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.level = static_cast<int32_t>(atoi(row[3])); e.level = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.class_ = static_cast<int32_t>(atoi(row[4])); e.class_ = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.race = static_cast<int32_t>(atoi(row[5])); e.race = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.aa_points = static_cast<int32_t>(atoi(row[6])); e.aa_points = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.hp = strtoll(row[7], nullptr, 10); e.hp = row[7] ? strtoll(row[7], nullptr, 10) : 0;
e.mana = strtoll(row[8], nullptr, 10); e.mana = row[8] ? strtoll(row[8], nullptr, 10) : 0;
e.endurance = strtoll(row[9], nullptr, 10); e.endurance = row[9] ? strtoll(row[9], nullptr, 10) : 0;
e.ac = static_cast<int32_t>(atoi(row[10])); e.ac = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.strength = static_cast<int32_t>(atoi(row[11])); e.strength = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.stamina = static_cast<int32_t>(atoi(row[12])); e.stamina = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.dexterity = static_cast<int32_t>(atoi(row[13])); e.dexterity = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.agility = static_cast<int32_t>(atoi(row[14])); e.agility = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
e.intelligence = static_cast<int32_t>(atoi(row[15])); e.intelligence = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.wisdom = static_cast<int32_t>(atoi(row[16])); e.wisdom = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
e.charisma = static_cast<int32_t>(atoi(row[17])); e.charisma = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
e.magic_resist = static_cast<int32_t>(atoi(row[18])); e.magic_resist = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
e.fire_resist = static_cast<int32_t>(atoi(row[19])); e.fire_resist = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
e.cold_resist = static_cast<int32_t>(atoi(row[20])); e.cold_resist = row[20] ? static_cast<int32_t>(atoi(row[20])) : 0;
e.poison_resist = static_cast<int32_t>(atoi(row[21])); e.poison_resist = row[21] ? static_cast<int32_t>(atoi(row[21])) : 0;
e.disease_resist = static_cast<int32_t>(atoi(row[22])); e.disease_resist = row[22] ? static_cast<int32_t>(atoi(row[22])) : 0;
e.corruption_resist = static_cast<int32_t>(atoi(row[23])); e.corruption_resist = row[23] ? static_cast<int32_t>(atoi(row[23])) : 0;
e.heroic_strength = static_cast<int32_t>(atoi(row[24])); e.heroic_strength = row[24] ? static_cast<int32_t>(atoi(row[24])) : 0;
e.heroic_stamina = static_cast<int32_t>(atoi(row[25])); e.heroic_stamina = row[25] ? static_cast<int32_t>(atoi(row[25])) : 0;
e.heroic_dexterity = static_cast<int32_t>(atoi(row[26])); e.heroic_dexterity = row[26] ? static_cast<int32_t>(atoi(row[26])) : 0;
e.heroic_agility = static_cast<int32_t>(atoi(row[27])); e.heroic_agility = row[27] ? static_cast<int32_t>(atoi(row[27])) : 0;
e.heroic_intelligence = static_cast<int32_t>(atoi(row[28])); e.heroic_intelligence = row[28] ? static_cast<int32_t>(atoi(row[28])) : 0;
e.heroic_wisdom = static_cast<int32_t>(atoi(row[29])); e.heroic_wisdom = row[29] ? static_cast<int32_t>(atoi(row[29])) : 0;
e.heroic_charisma = static_cast<int32_t>(atoi(row[30])); e.heroic_charisma = row[30] ? static_cast<int32_t>(atoi(row[30])) : 0;
e.heroic_magic_resist = static_cast<int32_t>(atoi(row[31])); e.heroic_magic_resist = row[31] ? static_cast<int32_t>(atoi(row[31])) : 0;
e.heroic_fire_resist = static_cast<int32_t>(atoi(row[32])); e.heroic_fire_resist = row[32] ? static_cast<int32_t>(atoi(row[32])) : 0;
e.heroic_cold_resist = static_cast<int32_t>(atoi(row[33])); e.heroic_cold_resist = row[33] ? static_cast<int32_t>(atoi(row[33])) : 0;
e.heroic_poison_resist = static_cast<int32_t>(atoi(row[34])); e.heroic_poison_resist = row[34] ? static_cast<int32_t>(atoi(row[34])) : 0;
e.heroic_disease_resist = static_cast<int32_t>(atoi(row[35])); e.heroic_disease_resist = row[35] ? static_cast<int32_t>(atoi(row[35])) : 0;
e.heroic_corruption_resist = static_cast<int32_t>(atoi(row[36])); e.heroic_corruption_resist = row[36] ? static_cast<int32_t>(atoi(row[36])) : 0;
e.haste = static_cast<int32_t>(atoi(row[37])); e.haste = row[37] ? static_cast<int32_t>(atoi(row[37])) : 0;
e.accuracy = static_cast<int32_t>(atoi(row[38])); e.accuracy = row[38] ? static_cast<int32_t>(atoi(row[38])) : 0;
e.attack = static_cast<int32_t>(atoi(row[39])); e.attack = row[39] ? static_cast<int32_t>(atoi(row[39])) : 0;
e.avoidance = static_cast<int32_t>(atoi(row[40])); e.avoidance = row[40] ? static_cast<int32_t>(atoi(row[40])) : 0;
e.clairvoyance = static_cast<int32_t>(atoi(row[41])); e.clairvoyance = row[41] ? static_cast<int32_t>(atoi(row[41])) : 0;
e.combat_effects = static_cast<int32_t>(atoi(row[42])); e.combat_effects = row[42] ? static_cast<int32_t>(atoi(row[42])) : 0;
e.damage_shield_mitigation = static_cast<int32_t>(atoi(row[43])); e.damage_shield_mitigation = row[43] ? static_cast<int32_t>(atoi(row[43])) : 0;
e.damage_shield = static_cast<int32_t>(atoi(row[44])); e.damage_shield = row[44] ? static_cast<int32_t>(atoi(row[44])) : 0;
e.dot_shielding = static_cast<int32_t>(atoi(row[45])); e.dot_shielding = row[45] ? static_cast<int32_t>(atoi(row[45])) : 0;
e.hp_regen = static_cast<int32_t>(atoi(row[46])); e.hp_regen = row[46] ? static_cast<int32_t>(atoi(row[46])) : 0;
e.mana_regen = static_cast<int32_t>(atoi(row[47])); e.mana_regen = row[47] ? static_cast<int32_t>(atoi(row[47])) : 0;
e.endurance_regen = static_cast<int32_t>(atoi(row[48])); e.endurance_regen = row[48] ? static_cast<int32_t>(atoi(row[48])) : 0;
e.shielding = static_cast<int32_t>(atoi(row[49])); e.shielding = row[49] ? static_cast<int32_t>(atoi(row[49])) : 0;
e.spell_damage = static_cast<int32_t>(atoi(row[50])); e.spell_damage = row[50] ? static_cast<int32_t>(atoi(row[50])) : 0;
e.spell_shielding = static_cast<int32_t>(atoi(row[51])); e.spell_shielding = row[51] ? static_cast<int32_t>(atoi(row[51])) : 0;
e.strikethrough = static_cast<int32_t>(atoi(row[52])); e.strikethrough = row[52] ? static_cast<int32_t>(atoi(row[52])) : 0;
e.stun_resist = static_cast<int32_t>(atoi(row[53])); e.stun_resist = row[53] ? static_cast<int32_t>(atoi(row[53])) : 0;
e.backstab = static_cast<int32_t>(atoi(row[54])); e.backstab = row[54] ? static_cast<int32_t>(atoi(row[54])) : 0;
e.wind = static_cast<int32_t>(atoi(row[55])); e.wind = row[55] ? static_cast<int32_t>(atoi(row[55])) : 0;
e.brass = static_cast<int32_t>(atoi(row[56])); e.brass = row[56] ? static_cast<int32_t>(atoi(row[56])) : 0;
e.string = static_cast<int32_t>(atoi(row[57])); e.string = row[57] ? static_cast<int32_t>(atoi(row[57])) : 0;
e.percussion = static_cast<int32_t>(atoi(row[58])); e.percussion = row[58] ? static_cast<int32_t>(atoi(row[58])) : 0;
e.singing = static_cast<int32_t>(atoi(row[59])); e.singing = row[59] ? static_cast<int32_t>(atoi(row[59])) : 0;
e.baking = static_cast<int32_t>(atoi(row[60])); e.baking = row[60] ? static_cast<int32_t>(atoi(row[60])) : 0;
e.alchemy = static_cast<int32_t>(atoi(row[61])); e.alchemy = row[61] ? static_cast<int32_t>(atoi(row[61])) : 0;
e.tailoring = static_cast<int32_t>(atoi(row[62])); e.tailoring = row[62] ? static_cast<int32_t>(atoi(row[62])) : 0;
e.blacksmithing = static_cast<int32_t>(atoi(row[63])); e.blacksmithing = row[63] ? static_cast<int32_t>(atoi(row[63])) : 0;
e.fletching = static_cast<int32_t>(atoi(row[64])); e.fletching = row[64] ? static_cast<int32_t>(atoi(row[64])) : 0;
e.brewing = static_cast<int32_t>(atoi(row[65])); e.brewing = row[65] ? static_cast<int32_t>(atoi(row[65])) : 0;
e.jewelry = static_cast<int32_t>(atoi(row[66])); e.jewelry = row[66] ? static_cast<int32_t>(atoi(row[66])) : 0;
e.pottery = static_cast<int32_t>(atoi(row[67])); e.pottery = row[67] ? static_cast<int32_t>(atoi(row[67])) : 0;
e.research = static_cast<int32_t>(atoi(row[68])); e.research = row[68] ? static_cast<int32_t>(atoi(row[68])) : 0;
e.alcohol = static_cast<int32_t>(atoi(row[69])); e.alcohol = row[69] ? static_cast<int32_t>(atoi(row[69])) : 0;
e.fishing = static_cast<int32_t>(atoi(row[70])); e.fishing = row[70] ? static_cast<int32_t>(atoi(row[70])) : 0;
e.tinkering = static_cast<int32_t>(atoi(row[71])); e.tinkering = row[71] ? static_cast<int32_t>(atoi(row[71])) : 0;
e.created_at = strtoll(row[72] ? row[72] : "-1", nullptr, 10); e.created_at = strtoll(row[72] ? row[72] : "-1", nullptr, 10);
e.updated_at = strtoll(row[73] ? row[73] : "-1", nullptr, 10); e.updated_at = strtoll(row[73] ? row[73] : "-1", nullptr, 10);
@@ -1050,6 +1049,208 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterStatsRecord &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.character_id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.status));
v.push_back(std::to_string(e.level));
v.push_back(std::to_string(e.class_));
v.push_back(std::to_string(e.race));
v.push_back(std::to_string(e.aa_points));
v.push_back(std::to_string(e.hp));
v.push_back(std::to_string(e.mana));
v.push_back(std::to_string(e.endurance));
v.push_back(std::to_string(e.ac));
v.push_back(std::to_string(e.strength));
v.push_back(std::to_string(e.stamina));
v.push_back(std::to_string(e.dexterity));
v.push_back(std::to_string(e.agility));
v.push_back(std::to_string(e.intelligence));
v.push_back(std::to_string(e.wisdom));
v.push_back(std::to_string(e.charisma));
v.push_back(std::to_string(e.magic_resist));
v.push_back(std::to_string(e.fire_resist));
v.push_back(std::to_string(e.cold_resist));
v.push_back(std::to_string(e.poison_resist));
v.push_back(std::to_string(e.disease_resist));
v.push_back(std::to_string(e.corruption_resist));
v.push_back(std::to_string(e.heroic_strength));
v.push_back(std::to_string(e.heroic_stamina));
v.push_back(std::to_string(e.heroic_dexterity));
v.push_back(std::to_string(e.heroic_agility));
v.push_back(std::to_string(e.heroic_intelligence));
v.push_back(std::to_string(e.heroic_wisdom));
v.push_back(std::to_string(e.heroic_charisma));
v.push_back(std::to_string(e.heroic_magic_resist));
v.push_back(std::to_string(e.heroic_fire_resist));
v.push_back(std::to_string(e.heroic_cold_resist));
v.push_back(std::to_string(e.heroic_poison_resist));
v.push_back(std::to_string(e.heroic_disease_resist));
v.push_back(std::to_string(e.heroic_corruption_resist));
v.push_back(std::to_string(e.haste));
v.push_back(std::to_string(e.accuracy));
v.push_back(std::to_string(e.attack));
v.push_back(std::to_string(e.avoidance));
v.push_back(std::to_string(e.clairvoyance));
v.push_back(std::to_string(e.combat_effects));
v.push_back(std::to_string(e.damage_shield_mitigation));
v.push_back(std::to_string(e.damage_shield));
v.push_back(std::to_string(e.dot_shielding));
v.push_back(std::to_string(e.hp_regen));
v.push_back(std::to_string(e.mana_regen));
v.push_back(std::to_string(e.endurance_regen));
v.push_back(std::to_string(e.shielding));
v.push_back(std::to_string(e.spell_damage));
v.push_back(std::to_string(e.spell_shielding));
v.push_back(std::to_string(e.strikethrough));
v.push_back(std::to_string(e.stun_resist));
v.push_back(std::to_string(e.backstab));
v.push_back(std::to_string(e.wind));
v.push_back(std::to_string(e.brass));
v.push_back(std::to_string(e.string));
v.push_back(std::to_string(e.percussion));
v.push_back(std::to_string(e.singing));
v.push_back(std::to_string(e.baking));
v.push_back(std::to_string(e.alchemy));
v.push_back(std::to_string(e.tailoring));
v.push_back(std::to_string(e.blacksmithing));
v.push_back(std::to_string(e.fletching));
v.push_back(std::to_string(e.brewing));
v.push_back(std::to_string(e.jewelry));
v.push_back(std::to_string(e.pottery));
v.push_back(std::to_string(e.research));
v.push_back(std::to_string(e.alcohol));
v.push_back(std::to_string(e.fishing));
v.push_back(std::to_string(e.tinkering));
v.push_back("FROM_UNIXTIME(" + (e.created_at > 0 ? std::to_string(e.created_at) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.updated_at > 0 ? std::to_string(e.updated_at) : "null") + ")");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterStatsRecord> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.character_id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.status));
v.push_back(std::to_string(e.level));
v.push_back(std::to_string(e.class_));
v.push_back(std::to_string(e.race));
v.push_back(std::to_string(e.aa_points));
v.push_back(std::to_string(e.hp));
v.push_back(std::to_string(e.mana));
v.push_back(std::to_string(e.endurance));
v.push_back(std::to_string(e.ac));
v.push_back(std::to_string(e.strength));
v.push_back(std::to_string(e.stamina));
v.push_back(std::to_string(e.dexterity));
v.push_back(std::to_string(e.agility));
v.push_back(std::to_string(e.intelligence));
v.push_back(std::to_string(e.wisdom));
v.push_back(std::to_string(e.charisma));
v.push_back(std::to_string(e.magic_resist));
v.push_back(std::to_string(e.fire_resist));
v.push_back(std::to_string(e.cold_resist));
v.push_back(std::to_string(e.poison_resist));
v.push_back(std::to_string(e.disease_resist));
v.push_back(std::to_string(e.corruption_resist));
v.push_back(std::to_string(e.heroic_strength));
v.push_back(std::to_string(e.heroic_stamina));
v.push_back(std::to_string(e.heroic_dexterity));
v.push_back(std::to_string(e.heroic_agility));
v.push_back(std::to_string(e.heroic_intelligence));
v.push_back(std::to_string(e.heroic_wisdom));
v.push_back(std::to_string(e.heroic_charisma));
v.push_back(std::to_string(e.heroic_magic_resist));
v.push_back(std::to_string(e.heroic_fire_resist));
v.push_back(std::to_string(e.heroic_cold_resist));
v.push_back(std::to_string(e.heroic_poison_resist));
v.push_back(std::to_string(e.heroic_disease_resist));
v.push_back(std::to_string(e.heroic_corruption_resist));
v.push_back(std::to_string(e.haste));
v.push_back(std::to_string(e.accuracy));
v.push_back(std::to_string(e.attack));
v.push_back(std::to_string(e.avoidance));
v.push_back(std::to_string(e.clairvoyance));
v.push_back(std::to_string(e.combat_effects));
v.push_back(std::to_string(e.damage_shield_mitigation));
v.push_back(std::to_string(e.damage_shield));
v.push_back(std::to_string(e.dot_shielding));
v.push_back(std::to_string(e.hp_regen));
v.push_back(std::to_string(e.mana_regen));
v.push_back(std::to_string(e.endurance_regen));
v.push_back(std::to_string(e.shielding));
v.push_back(std::to_string(e.spell_damage));
v.push_back(std::to_string(e.spell_shielding));
v.push_back(std::to_string(e.strikethrough));
v.push_back(std::to_string(e.stun_resist));
v.push_back(std::to_string(e.backstab));
v.push_back(std::to_string(e.wind));
v.push_back(std::to_string(e.brass));
v.push_back(std::to_string(e.string));
v.push_back(std::to_string(e.percussion));
v.push_back(std::to_string(e.singing));
v.push_back(std::to_string(e.baking));
v.push_back(std::to_string(e.alchemy));
v.push_back(std::to_string(e.tailoring));
v.push_back(std::to_string(e.blacksmithing));
v.push_back(std::to_string(e.fletching));
v.push_back(std::to_string(e.brewing));
v.push_back(std::to_string(e.jewelry));
v.push_back(std::to_string(e.pottery));
v.push_back(std::to_string(e.research));
v.push_back(std::to_string(e.alcohol));
v.push_back(std::to_string(e.fishing));
v.push_back(std::to_string(e.tinkering));
v.push_back("FROM_UNIXTIME(" + (e.created_at > 0 ? std::to_string(e.created_at) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.updated_at > 0 ? std::to_string(e.updated_at) : "null") + ")");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_STATS_RECORD_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_STATS_RECORD_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_TASK_TIMERS_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_TASK_TIMERS_REPOSITORY_H
@@ -124,8 +124,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_task_timers_id character_task_timers_id
) )
); );
@@ -134,11 +135,11 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterTaskTimers e{}; CharacterTaskTimers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.task_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.task_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.timer_type = static_cast<int32_t>(atoi(row[3])); e.timer_type = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.timer_group = static_cast<int32_t>(atoi(row[4])); e.timer_group = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10); e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10);
return e; return e;
@@ -273,11 +274,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTaskTimers e{}; CharacterTaskTimers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.task_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.task_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.timer_type = static_cast<int32_t>(atoi(row[3])); e.timer_type = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.timer_group = static_cast<int32_t>(atoi(row[4])); e.timer_group = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10); e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10);
all_entries.push_back(e); all_entries.push_back(e);
@@ -303,11 +304,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTaskTimers e{}; CharacterTaskTimers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.task_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.task_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.timer_type = static_cast<int32_t>(atoi(row[3])); e.timer_type = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.timer_group = static_cast<int32_t>(atoi(row[4])); e.timer_group = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10); e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10);
all_entries.push_back(e); all_entries.push_back(e);
@@ -367,6 +368,72 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterTaskTimers &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.task_id));
v.push_back(std::to_string(e.timer_type));
v.push_back(std::to_string(e.timer_group));
v.push_back("FROM_UNIXTIME(" + (e.expire_time > 0 ? std::to_string(e.expire_time) : "null") + ")");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterTaskTimers> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.task_id));
v.push_back(std::to_string(e.timer_type));
v.push_back(std::to_string(e.timer_group));
v.push_back("FROM_UNIXTIME(" + (e.expire_time > 0 ? std::to_string(e.expire_time) : "null") + ")");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_TASK_TIMERS_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_TASK_TIMERS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_TASKS_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_TASKS_REPOSITORY_H
@@ -124,8 +124,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
character_tasks_id character_tasks_id
) )
); );
@@ -134,12 +135,12 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterTasks e{}; CharacterTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.slot = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.slot = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[3])); e.type = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
e.acceptedtime = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.acceptedtime = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.was_rewarded = static_cast<int8_t>(atoi(row[5])); e.was_rewarded = row[5] ? static_cast<int8_t>(atoi(row[5])) : 0;
return e; return e;
} }
@@ -274,12 +275,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTasks e{}; CharacterTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.slot = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.slot = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[3])); e.type = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
e.acceptedtime = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.acceptedtime = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.was_rewarded = static_cast<int8_t>(atoi(row[5])); e.was_rewarded = row[5] ? static_cast<int8_t>(atoi(row[5])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -304,12 +305,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTasks e{}; CharacterTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.slot = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.slot = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[3])); e.type = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
e.acceptedtime = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.acceptedtime = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.was_rewarded = static_cast<int8_t>(atoi(row[5])); e.was_rewarded = row[5] ? static_cast<int8_t>(atoi(row[5])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -368,6 +369,72 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterTasks &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.taskid));
v.push_back(std::to_string(e.slot));
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.acceptedtime));
v.push_back(std::to_string(e.was_rewarded));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterTasks> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.taskid));
v.push_back(std::to_string(e.slot));
v.push_back(std::to_string(e.type));
v.push_back(std::to_string(e.acceptedtime));
v.push_back(std::to_string(e.was_rewarded));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_TASKS_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_TASKS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H #ifndef EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCharacterTributeRepository { class BaseCharacterTributeRepository {
public: public:
struct CharacterTribute { struct CharacterTribute {
@@ -128,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CharacterTribute e{}; CharacterTribute e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.tier = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.tier = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.tribute = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.tribute = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
return e; return e;
} }
@@ -259,10 +258,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTribute e{}; CharacterTribute e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.tier = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.tier = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.tribute = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.tribute = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -287,10 +286,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTribute e{}; CharacterTribute e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.tier = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.tier = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.tribute = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.tribute = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -349,6 +348,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CharacterTribute &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.tier));
v.push_back(std::to_string(e.tribute));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CharacterTribute> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.tier));
v.push_back(std::to_string(e.tribute));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H #endif //EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHATCHANNEL_RESERVED_NAMES_REPOSITORY_H #ifndef EQEMU_BASE_CHATCHANNEL_RESERVED_NAMES_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseChatchannelReservedNamesRepository { class BaseChatchannelReservedNamesRepository {
public: public:
struct ChatchannelReservedNames { struct ChatchannelReservedNames {
@@ -120,7 +119,7 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
ChatchannelReservedNames e{}; ChatchannelReservedNames e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
return e; return e;
@@ -243,7 +242,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
ChatchannelReservedNames e{}; ChatchannelReservedNames e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -269,7 +268,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
ChatchannelReservedNames e{}; ChatchannelReservedNames e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -329,6 +328,64 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const ChatchannelReservedNames &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<ChatchannelReservedNames> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHATCHANNEL_RESERVED_NAMES_REPOSITORY_H #endif //EQEMU_BASE_CHATCHANNEL_RESERVED_NAMES_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CHATCHANNELS_REPOSITORY_H #ifndef EQEMU_BASE_CHATCHANNELS_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseChatchannelsRepository { class BaseChatchannelsRepository {
public: public:
struct Chatchannels { struct Chatchannels {
@@ -132,11 +131,11 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Chatchannels e{}; Chatchannels e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.owner = row[2] ? row[2] : ""; e.owner = row[2] ? row[2] : "";
e.password = row[3] ? row[3] : ""; e.password = row[3] ? row[3] : "";
e.minstatus = static_cast<int32_t>(atoi(row[4])); e.minstatus = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
return e; return e;
} }
@@ -267,11 +266,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Chatchannels e{}; Chatchannels e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.owner = row[2] ? row[2] : ""; e.owner = row[2] ? row[2] : "";
e.password = row[3] ? row[3] : ""; e.password = row[3] ? row[3] : "";
e.minstatus = static_cast<int32_t>(atoi(row[4])); e.minstatus = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -296,11 +295,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Chatchannels e{}; Chatchannels e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.owner = row[2] ? row[2] : ""; e.owner = row[2] ? row[2] : "";
e.password = row[3] ? row[3] : ""; e.password = row[3] ? row[3] : "";
e.minstatus = static_cast<int32_t>(atoi(row[4])); e.minstatus = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -359,6 +358,70 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Chatchannels &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back("'" + Strings::Escape(e.owner) + "'");
v.push_back("'" + Strings::Escape(e.password) + "'");
v.push_back(std::to_string(e.minstatus));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Chatchannels> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back("'" + Strings::Escape(e.owner) + "'");
v.push_back("'" + Strings::Escape(e.password) + "'");
v.push_back(std::to_string(e.minstatus));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CHATCHANNELS_REPOSITORY_H #endif //EQEMU_BASE_CHATCHANNELS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_COMMAND_SUBSETTINGS_REPOSITORY_H #ifndef EQEMU_BASE_COMMAND_SUBSETTINGS_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
class BaseCommandSubsettingsRepository { class BaseCommandSubsettingsRepository {
public: public:
struct CommandSubsettings { struct CommandSubsettings {
@@ -132,10 +131,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CommandSubsettings e{}; CommandSubsettings e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.parent_command = row[1] ? row[1] : ""; e.parent_command = row[1] ? row[1] : "";
e.sub_command = row[2] ? row[2] : ""; e.sub_command = row[2] ? row[2] : "";
e.access_level = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.access_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.top_level_aliases = row[4] ? row[4] : ""; e.top_level_aliases = row[4] ? row[4] : "";
return e; return e;
@@ -267,10 +266,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CommandSubsettings e{}; CommandSubsettings e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.parent_command = row[1] ? row[1] : ""; e.parent_command = row[1] ? row[1] : "";
e.sub_command = row[2] ? row[2] : ""; e.sub_command = row[2] ? row[2] : "";
e.access_level = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.access_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.top_level_aliases = row[4] ? row[4] : ""; e.top_level_aliases = row[4] ? row[4] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -296,10 +295,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CommandSubsettings e{}; CommandSubsettings e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.parent_command = row[1] ? row[1] : ""; e.parent_command = row[1] ? row[1] : "";
e.sub_command = row[2] ? row[2] : ""; e.sub_command = row[2] ? row[2] : "";
e.access_level = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.access_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.top_level_aliases = row[4] ? row[4] : ""; e.top_level_aliases = row[4] ? row[4] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -359,6 +358,70 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CommandSubsettings &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.parent_command) + "'");
v.push_back("'" + Strings::Escape(e.sub_command) + "'");
v.push_back(std::to_string(e.access_level));
v.push_back("'" + Strings::Escape(e.top_level_aliases) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CommandSubsettings> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.parent_command) + "'");
v.push_back("'" + Strings::Escape(e.sub_command) + "'");
v.push_back(std::to_string(e.access_level));
v.push_back("'" + Strings::Escape(e.top_level_aliases) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_COMMAND_SUBSETTINGS_REPOSITORY_H #endif //EQEMU_BASE_COMMAND_SUBSETTINGS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_COMPLETED_SHARED_TASK_ACTIVITY_STATE_REPOSITORY_H #ifndef EQEMU_BASE_COMPLETED_SHARED_TASK_ACTIVITY_STATE_REPOSITORY_H
@@ -120,8 +120,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
completed_shared_task_activity_state_id completed_shared_task_activity_state_id
) )
); );
@@ -130,9 +131,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CompletedSharedTaskActivityState e{}; CompletedSharedTaskActivityState e{};
e.shared_task_id = strtoll(row[0], nullptr, 10); e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.activity_id = static_cast<int32_t>(atoi(row[1])); e.activity_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.done_count = static_cast<int32_t>(atoi(row[2])); e.done_count = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.completed_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.completed_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
@@ -266,9 +267,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CompletedSharedTaskActivityState e{}; CompletedSharedTaskActivityState e{};
e.shared_task_id = strtoll(row[0], nullptr, 10); e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.activity_id = static_cast<int32_t>(atoi(row[1])); e.activity_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.done_count = static_cast<int32_t>(atoi(row[2])); e.done_count = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.completed_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.completed_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
@@ -295,9 +296,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CompletedSharedTaskActivityState e{}; CompletedSharedTaskActivityState e{};
e.shared_task_id = strtoll(row[0], nullptr, 10); e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.activity_id = static_cast<int32_t>(atoi(row[1])); e.activity_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.done_count = static_cast<int32_t>(atoi(row[2])); e.done_count = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.completed_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.completed_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
@@ -358,6 +359,70 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CompletedSharedTaskActivityState &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.shared_task_id));
v.push_back(std::to_string(e.activity_id));
v.push_back(std::to_string(e.done_count));
v.push_back("FROM_UNIXTIME(" + (e.updated_time > 0 ? std::to_string(e.updated_time) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.completed_time > 0 ? std::to_string(e.completed_time) : "null") + ")");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CompletedSharedTaskActivityState> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.shared_task_id));
v.push_back(std::to_string(e.activity_id));
v.push_back(std::to_string(e.done_count));
v.push_back("FROM_UNIXTIME(" + (e.updated_time > 0 ? std::to_string(e.updated_time) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.completed_time > 0 ? std::to_string(e.completed_time) : "null") + ")");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_COMPLETED_SHARED_TASK_ACTIVITY_STATE_REPOSITORY_H #endif //EQEMU_BASE_COMPLETED_SHARED_TASK_ACTIVITY_STATE_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_COMPLETED_SHARED_TASK_MEMBERS_REPOSITORY_H #ifndef EQEMU_BASE_COMPLETED_SHARED_TASK_MEMBERS_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
completed_shared_task_members_id completed_shared_task_members_id
) )
); );
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CompletedSharedTaskMembers e{}; CompletedSharedTaskMembers e{};
e.shared_task_id = strtoll(row[0], nullptr, 10); e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.character_id = strtoll(row[1], nullptr, 10); e.character_id = row[1] ? strtoll(row[1], nullptr, 10) : 0;
e.is_leader = static_cast<int8_t>(atoi(row[2])); e.is_leader = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
return e; return e;
} }
@@ -250,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CompletedSharedTaskMembers e{}; CompletedSharedTaskMembers e{};
e.shared_task_id = strtoll(row[0], nullptr, 10); e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.character_id = strtoll(row[1], nullptr, 10); e.character_id = row[1] ? strtoll(row[1], nullptr, 10) : 0;
e.is_leader = static_cast<int8_t>(atoi(row[2])); e.is_leader = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -277,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CompletedSharedTaskMembers e{}; CompletedSharedTaskMembers e{};
e.shared_task_id = strtoll(row[0], nullptr, 10); e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.character_id = strtoll(row[1], nullptr, 10); e.character_id = row[1] ? strtoll(row[1], nullptr, 10) : 0;
e.is_leader = static_cast<int8_t>(atoi(row[2])); e.is_leader = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -338,6 +339,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CompletedSharedTaskMembers &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.shared_task_id));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.is_leader));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CompletedSharedTaskMembers> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.shared_task_id));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.is_leader));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_COMPLETED_SHARED_TASK_MEMBERS_REPOSITORY_H #endif //EQEMU_BASE_COMPLETED_SHARED_TASK_MEMBERS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_COMPLETED_SHARED_TASKS_REPOSITORY_H #ifndef EQEMU_BASE_COMPLETED_SHARED_TASKS_REPOSITORY_H
@@ -124,8 +124,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
completed_shared_tasks_id completed_shared_tasks_id
) )
); );
@@ -134,12 +135,12 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CompletedSharedTasks e{}; CompletedSharedTasks e{};
e.id = strtoll(row[0], nullptr, 10); e.id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.task_id = static_cast<int32_t>(atoi(row[1])); e.task_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10); e.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10);
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.completion_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.completion_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
e.is_locked = static_cast<int8_t>(atoi(row[5])); e.is_locked = row[5] ? static_cast<int8_t>(atoi(row[5])) : 0;
return e; return e;
} }
@@ -274,12 +275,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CompletedSharedTasks e{}; CompletedSharedTasks e{};
e.id = strtoll(row[0], nullptr, 10); e.id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.task_id = static_cast<int32_t>(atoi(row[1])); e.task_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10); e.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10);
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.completion_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.completion_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
e.is_locked = static_cast<int8_t>(atoi(row[5])); e.is_locked = row[5] ? static_cast<int8_t>(atoi(row[5])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -304,12 +305,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CompletedSharedTasks e{}; CompletedSharedTasks e{};
e.id = strtoll(row[0], nullptr, 10); e.id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.task_id = static_cast<int32_t>(atoi(row[1])); e.task_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10); e.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10);
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.completion_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10); e.completion_time = strtoll(row[4] ? row[4] : "-1", nullptr, 10);
e.is_locked = static_cast<int8_t>(atoi(row[5])); e.is_locked = row[5] ? static_cast<int8_t>(atoi(row[5])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -368,6 +369,72 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CompletedSharedTasks &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.task_id));
v.push_back("FROM_UNIXTIME(" + (e.accepted_time > 0 ? std::to_string(e.accepted_time) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.expire_time > 0 ? std::to_string(e.expire_time) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.completion_time > 0 ? std::to_string(e.completion_time) : "null") + ")");
v.push_back(std::to_string(e.is_locked));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CompletedSharedTasks> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.task_id));
v.push_back("FROM_UNIXTIME(" + (e.accepted_time > 0 ? std::to_string(e.accepted_time) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.expire_time > 0 ? std::to_string(e.expire_time) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.completion_time > 0 ? std::to_string(e.completion_time) : "null") + ")");
v.push_back(std::to_string(e.is_locked));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_COMPLETED_SHARED_TASKS_REPOSITORY_H #endif //EQEMU_BASE_COMPLETED_SHARED_TASKS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_COMPLETED_TASKS_REPOSITORY_H #ifndef EQEMU_BASE_COMPLETED_TASKS_REPOSITORY_H
@@ -116,8 +116,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
completed_tasks_id completed_tasks_id
) )
); );
@@ -126,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
CompletedTasks e{}; CompletedTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.completedtime = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.completedtime = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.taskid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.activityid = static_cast<int32_t>(atoi(row[3])); e.activityid = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
return e; return e;
} }
@@ -258,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CompletedTasks e{}; CompletedTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.completedtime = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.completedtime = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.taskid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.activityid = static_cast<int32_t>(atoi(row[3])); e.activityid = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -286,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
CompletedTasks e{}; CompletedTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.completedtime = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.completedtime = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.taskid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.taskid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.activityid = static_cast<int32_t>(atoi(row[3])); e.activityid = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -348,6 +349,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const CompletedTasks &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.completedtime));
v.push_back(std::to_string(e.taskid));
v.push_back(std::to_string(e.activityid));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<CompletedTasks> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.completedtime));
v.push_back(std::to_string(e.taskid));
v.push_back(std::to_string(e.activityid));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_COMPLETED_TASKS_REPOSITORY_H #endif //EQEMU_BASE_COMPLETED_TASKS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_CONTENT_FLAGS_REPOSITORY_H #ifndef EQEMU_BASE_CONTENT_FLAGS_REPOSITORY_H
@@ -116,8 +116,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
content_flags_id content_flags_id
) )
); );
@@ -126,9 +127,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
ContentFlags e{}; ContentFlags e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.flag_name = row[1] ? row[1] : ""; e.flag_name = row[1] ? row[1] : "";
e.enabled = static_cast<int8_t>(atoi(row[2])); e.enabled = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
e.notes = row[3] ? row[3] : ""; e.notes = row[3] ? row[3] : "";
return e; return e;
@@ -257,9 +258,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
ContentFlags e{}; ContentFlags e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.flag_name = row[1] ? row[1] : ""; e.flag_name = row[1] ? row[1] : "";
e.enabled = static_cast<int8_t>(atoi(row[2])); e.enabled = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
e.notes = row[3] ? row[3] : ""; e.notes = row[3] ? row[3] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -285,9 +286,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
ContentFlags e{}; ContentFlags e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.flag_name = row[1] ? row[1] : ""; e.flag_name = row[1] ? row[1] : "";
e.enabled = static_cast<int8_t>(atoi(row[2])); e.enabled = row[2] ? static_cast<int8_t>(atoi(row[2])) : 0;
e.notes = row[3] ? row[3] : ""; e.notes = row[3] ? row[3] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -347,6 +348,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const ContentFlags &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.flag_name) + "'");
v.push_back(std::to_string(e.enabled));
v.push_back("'" + Strings::Escape(e.notes) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<ContentFlags> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.flag_name) + "'");
v.push_back(std::to_string(e.enabled));
v.push_back("'" + Strings::Escape(e.notes) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_CONTENT_FLAGS_REPOSITORY_H #endif //EQEMU_BASE_CONTENT_FLAGS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DAMAGESHIELDTYPES_REPOSITORY_H #ifndef EQEMU_BASE_DAMAGESHIELDTYPES_REPOSITORY_H
@@ -108,8 +108,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
damageshieldtypes_id damageshieldtypes_id
) )
); );
@@ -118,8 +119,8 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Damageshieldtypes e{}; Damageshieldtypes e{};
e.spellid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.spellid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
return e; return e;
} }
@@ -242,8 +243,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Damageshieldtypes e{}; Damageshieldtypes e{};
e.spellid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.spellid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -268,8 +269,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Damageshieldtypes e{}; Damageshieldtypes e{};
e.spellid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.spellid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -328,6 +329,64 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Damageshieldtypes &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.spellid));
v.push_back(std::to_string(e.type));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Damageshieldtypes> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.spellid));
v.push_back(std::to_string(e.type));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DAMAGESHIELDTYPES_REPOSITORY_H #endif //EQEMU_BASE_DAMAGESHIELDTYPES_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DATA_BUCKETS_REPOSITORY_H #ifndef EQEMU_BASE_DATA_BUCKETS_REPOSITORY_H
@@ -16,7 +16,6 @@
#include "../../strings.h" #include "../../strings.h"
#include <ctime> #include <ctime>
#include <cereal/cereal.hpp> #include <cereal/cereal.hpp>
class BaseDataBucketsRepository { class BaseDataBucketsRepository {
public: public:
struct DataBuckets { struct DataBuckets {
@@ -155,13 +154,13 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
DataBuckets e{}; DataBuckets e{};
e.id = strtoull(row[0], nullptr, 10); e.id = row[0] ? strtoull(row[0], nullptr, 10) : 0;
e.key_ = row[1] ? row[1] : ""; e.key_ = row[1] ? row[1] : "";
e.value = row[2] ? row[2] : ""; e.value = row[2] ? row[2] : "";
e.expires = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.expires = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.character_id = strtoll(row[4], nullptr, 10); e.character_id = row[4] ? strtoll(row[4], nullptr, 10) : 0;
e.npc_id = strtoll(row[5], nullptr, 10); e.npc_id = row[5] ? strtoll(row[5], nullptr, 10) : 0;
e.bot_id = strtoll(row[6], nullptr, 10); e.bot_id = row[6] ? strtoll(row[6], nullptr, 10) : 0;
return e; return e;
} }
@@ -298,13 +297,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DataBuckets e{}; DataBuckets e{};
e.id = strtoull(row[0], nullptr, 10); e.id = row[0] ? strtoull(row[0], nullptr, 10) : 0;
e.key_ = row[1] ? row[1] : ""; e.key_ = row[1] ? row[1] : "";
e.value = row[2] ? row[2] : ""; e.value = row[2] ? row[2] : "";
e.expires = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.expires = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.character_id = strtoll(row[4], nullptr, 10); e.character_id = row[4] ? strtoll(row[4], nullptr, 10) : 0;
e.npc_id = strtoll(row[5], nullptr, 10); e.npc_id = row[5] ? strtoll(row[5], nullptr, 10) : 0;
e.bot_id = strtoll(row[6], nullptr, 10); e.bot_id = row[6] ? strtoll(row[6], nullptr, 10) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -329,13 +328,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DataBuckets e{}; DataBuckets e{};
e.id = strtoull(row[0], nullptr, 10); e.id = row[0] ? strtoull(row[0], nullptr, 10) : 0;
e.key_ = row[1] ? row[1] : ""; e.key_ = row[1] ? row[1] : "";
e.value = row[2] ? row[2] : ""; e.value = row[2] ? row[2] : "";
e.expires = static_cast<uint32_t>(strtoul(row[3], nullptr, 10)); e.expires = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.character_id = strtoll(row[4], nullptr, 10); e.character_id = row[4] ? strtoll(row[4], nullptr, 10) : 0;
e.npc_id = strtoll(row[5], nullptr, 10); e.npc_id = row[5] ? strtoll(row[5], nullptr, 10) : 0;
e.bot_id = strtoll(row[6], nullptr, 10); e.bot_id = row[6] ? strtoll(row[6], nullptr, 10) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -394,6 +393,74 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const DataBuckets &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.key_) + "'");
v.push_back("'" + Strings::Escape(e.value) + "'");
v.push_back(std::to_string(e.expires));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.npc_id));
v.push_back(std::to_string(e.bot_id));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<DataBuckets> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.key_) + "'");
v.push_back("'" + Strings::Escape(e.value) + "'");
v.push_back(std::to_string(e.expires));
v.push_back(std::to_string(e.character_id));
v.push_back(std::to_string(e.npc_id));
v.push_back(std::to_string(e.bot_id));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DATA_BUCKETS_REPOSITORY_H #endif //EQEMU_BASE_DATA_BUCKETS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DB_STR_REPOSITORY_H #ifndef EQEMU_BASE_DB_STR_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
db_str_id db_str_id
) )
); );
@@ -122,8 +123,8 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
DbStr e{}; DbStr e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.type = static_cast<int32_t>(atoi(row[1])); e.type = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.value = row[2] ? row[2] : ""; e.value = row[2] ? row[2] : "";
return e; return e;
@@ -250,8 +251,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DbStr e{}; DbStr e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.type = static_cast<int32_t>(atoi(row[1])); e.type = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.value = row[2] ? row[2] : ""; e.value = row[2] ? row[2] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -277,8 +278,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DbStr e{}; DbStr e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.type = static_cast<int32_t>(atoi(row[1])); e.type = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.value = row[2] ? row[2] : ""; e.value = row[2] ? row[2] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -338,6 +339,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const DbStr &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.type));
v.push_back("'" + Strings::Escape(e.value) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<DbStr> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.type));
v.push_back("'" + Strings::Escape(e.value) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DB_STR_REPOSITORY_H #endif //EQEMU_BASE_DB_STR_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DISCORD_WEBHOOKS_REPOSITORY_H #ifndef EQEMU_BASE_DISCORD_WEBHOOKS_REPOSITORY_H
@@ -120,8 +120,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
discord_webhooks_id discord_webhooks_id
) )
); );
@@ -130,7 +131,7 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
DiscordWebhooks e{}; DiscordWebhooks e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.webhook_name = row[1] ? row[1] : ""; e.webhook_name = row[1] ? row[1] : "";
e.webhook_url = row[2] ? row[2] : ""; e.webhook_url = row[2] ? row[2] : "";
e.created_at = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.created_at = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -265,7 +266,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DiscordWebhooks e{}; DiscordWebhooks e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.webhook_name = row[1] ? row[1] : ""; e.webhook_name = row[1] ? row[1] : "";
e.webhook_url = row[2] ? row[2] : ""; e.webhook_url = row[2] ? row[2] : "";
e.created_at = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.created_at = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -294,7 +295,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DiscordWebhooks e{}; DiscordWebhooks e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.webhook_name = row[1] ? row[1] : ""; e.webhook_name = row[1] ? row[1] : "";
e.webhook_url = row[2] ? row[2] : ""; e.webhook_url = row[2] ? row[2] : "";
e.created_at = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.created_at = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -357,6 +358,70 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const DiscordWebhooks &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.webhook_name) + "'");
v.push_back("'" + Strings::Escape(e.webhook_url) + "'");
v.push_back("FROM_UNIXTIME(" + (e.created_at > 0 ? std::to_string(e.created_at) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.deleted_at > 0 ? std::to_string(e.deleted_at) : "null") + ")");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<DiscordWebhooks> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.webhook_name) + "'");
v.push_back("'" + Strings::Escape(e.webhook_url) + "'");
v.push_back("FROM_UNIXTIME(" + (e.created_at > 0 ? std::to_string(e.created_at) : "null") + ")");
v.push_back("FROM_UNIXTIME(" + (e.deleted_at > 0 ? std::to_string(e.deleted_at) : "null") + ")");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DISCORD_WEBHOOKS_REPOSITORY_H #endif //EQEMU_BASE_DISCORD_WEBHOOKS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DISCOVERED_ITEMS_REPOSITORY_H #ifndef EQEMU_BASE_DISCOVERED_ITEMS_REPOSITORY_H
@@ -116,8 +116,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
discovered_items_id discovered_items_id
) )
); );
@@ -126,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
DiscoveredItems e{}; DiscoveredItems e{};
e.item_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.item_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.char_name = row[1] ? row[1] : ""; e.char_name = row[1] ? row[1] : "";
e.discovered_date = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.discovered_date = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.account_status = static_cast<int32_t>(atoi(row[3])); e.account_status = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
return e; return e;
} }
@@ -258,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DiscoveredItems e{}; DiscoveredItems e{};
e.item_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.item_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.char_name = row[1] ? row[1] : ""; e.char_name = row[1] ? row[1] : "";
e.discovered_date = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.discovered_date = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.account_status = static_cast<int32_t>(atoi(row[3])); e.account_status = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -286,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DiscoveredItems e{}; DiscoveredItems e{};
e.item_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.item_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.char_name = row[1] ? row[1] : ""; e.char_name = row[1] ? row[1] : "";
e.discovered_date = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.discovered_date = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.account_status = static_cast<int32_t>(atoi(row[3])); e.account_status = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -348,6 +349,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const DiscoveredItems &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.item_id));
v.push_back("'" + Strings::Escape(e.char_name) + "'");
v.push_back(std::to_string(e.discovered_date));
v.push_back(std::to_string(e.account_status));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<DiscoveredItems> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.item_id));
v.push_back("'" + Strings::Escape(e.char_name) + "'");
v.push_back(std::to_string(e.discovered_date));
v.push_back(std::to_string(e.account_status));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DISCOVERED_ITEMS_REPOSITORY_H #endif //EQEMU_BASE_DISCOVERED_ITEMS_REPOSITORY_H
+225 -98
View File
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DOORS_REPOSITORY_H #ifndef EQEMU_BASE_DOORS_REPOSITORY_H
@@ -244,8 +244,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
doors_id doors_id
) )
); );
@@ -254,40 +255,40 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Doors e{}; Doors e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.doorid = static_cast<int16_t>(atoi(row[1])); e.doorid = row[1] ? static_cast<int16_t>(atoi(row[1])) : 0;
e.zone = row[2] ? row[2] : ""; e.zone = row[2] ? row[2] : "";
e.version = static_cast<int16_t>(atoi(row[3])); e.version = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.name = row[4] ? row[4] : ""; e.name = row[4] ? row[4] : "";
e.pos_y = strtof(row[5], nullptr); e.pos_y = row[5] ? strtof(row[5], nullptr) : 0;
e.pos_x = strtof(row[6], nullptr); e.pos_x = row[6] ? strtof(row[6], nullptr) : 0;
e.pos_z = strtof(row[7], nullptr); e.pos_z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = strtof(row[8], nullptr); e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.opentype = static_cast<int16_t>(atoi(row[9])); e.opentype = row[9] ? static_cast<int16_t>(atoi(row[9])) : 0;
e.guild = static_cast<int16_t>(atoi(row[10])); e.guild = row[10] ? static_cast<int16_t>(atoi(row[10])) : 0;
e.lockpick = static_cast<int16_t>(atoi(row[11])); e.lockpick = row[11] ? static_cast<int16_t>(atoi(row[11])) : 0;
e.keyitem = static_cast<int32_t>(atoi(row[12])); e.keyitem = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.nokeyring = static_cast<uint8_t>(strtoul(row[13], nullptr, 10)); e.nokeyring = row[13] ? static_cast<uint8_t>(strtoul(row[13], nullptr, 10)) : 0;
e.triggerdoor = static_cast<int16_t>(atoi(row[14])); e.triggerdoor = row[14] ? static_cast<int16_t>(atoi(row[14])) : 0;
e.triggertype = static_cast<int16_t>(atoi(row[15])); e.triggertype = row[15] ? static_cast<int16_t>(atoi(row[15])) : 0;
e.disable_timer = static_cast<int8_t>(atoi(row[16])); e.disable_timer = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
e.doorisopen = static_cast<int16_t>(atoi(row[17])); e.doorisopen = row[17] ? static_cast<int16_t>(atoi(row[17])) : 0;
e.door_param = static_cast<int32_t>(atoi(row[18])); e.door_param = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
e.dest_zone = row[19] ? row[19] : ""; e.dest_zone = row[19] ? row[19] : "NONE";
e.dest_instance = static_cast<uint32_t>(strtoul(row[20], nullptr, 10)); e.dest_instance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.dest_x = strtof(row[21], nullptr); e.dest_x = row[21] ? strtof(row[21], nullptr) : 0;
e.dest_y = strtof(row[22], nullptr); e.dest_y = row[22] ? strtof(row[22], nullptr) : 0;
e.dest_z = strtof(row[23], nullptr); e.dest_z = row[23] ? strtof(row[23], nullptr) : 0;
e.dest_heading = strtof(row[24], nullptr); e.dest_heading = row[24] ? strtof(row[24], nullptr) : 0;
e.invert_state = static_cast<int32_t>(atoi(row[25])); e.invert_state = row[25] ? static_cast<int32_t>(atoi(row[25])) : 0;
e.incline = static_cast<int32_t>(atoi(row[26])); e.incline = row[26] ? static_cast<int32_t>(atoi(row[26])) : 0;
e.size = static_cast<uint16_t>(strtoul(row[27], nullptr, 10)); e.size = row[27] ? static_cast<uint16_t>(strtoul(row[27], nullptr, 10)) : 100;
e.buffer = strtof(row[28], nullptr); e.buffer = row[28] ? strtof(row[28], nullptr) : 0;
e.client_version_mask = static_cast<uint32_t>(strtoul(row[29], nullptr, 10)); e.client_version_mask = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 4294967295;
e.is_ldon_door = static_cast<int16_t>(atoi(row[30])); e.is_ldon_door = row[30] ? static_cast<int16_t>(atoi(row[30])) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[31])); e.dz_switch_id = row[31] ? static_cast<int32_t>(atoi(row[31])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[32])); e.min_expansion = row[32] ? static_cast<int8_t>(atoi(row[32])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[33])); e.max_expansion = row[33] ? static_cast<int8_t>(atoi(row[33])) : -1;
e.content_flags = row[34] ? row[34] : ""; e.content_flags = row[34] ? row[34] : "";
e.content_flags_disabled = row[35] ? row[35] : ""; e.content_flags_disabled = row[35] ? row[35] : "";
@@ -513,40 +514,40 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Doors e{}; Doors e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.doorid = static_cast<int16_t>(atoi(row[1])); e.doorid = row[1] ? static_cast<int16_t>(atoi(row[1])) : 0;
e.zone = row[2] ? row[2] : ""; e.zone = row[2] ? row[2] : "";
e.version = static_cast<int16_t>(atoi(row[3])); e.version = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.name = row[4] ? row[4] : ""; e.name = row[4] ? row[4] : "";
e.pos_y = strtof(row[5], nullptr); e.pos_y = row[5] ? strtof(row[5], nullptr) : 0;
e.pos_x = strtof(row[6], nullptr); e.pos_x = row[6] ? strtof(row[6], nullptr) : 0;
e.pos_z = strtof(row[7], nullptr); e.pos_z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = strtof(row[8], nullptr); e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.opentype = static_cast<int16_t>(atoi(row[9])); e.opentype = row[9] ? static_cast<int16_t>(atoi(row[9])) : 0;
e.guild = static_cast<int16_t>(atoi(row[10])); e.guild = row[10] ? static_cast<int16_t>(atoi(row[10])) : 0;
e.lockpick = static_cast<int16_t>(atoi(row[11])); e.lockpick = row[11] ? static_cast<int16_t>(atoi(row[11])) : 0;
e.keyitem = static_cast<int32_t>(atoi(row[12])); e.keyitem = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.nokeyring = static_cast<uint8_t>(strtoul(row[13], nullptr, 10)); e.nokeyring = row[13] ? static_cast<uint8_t>(strtoul(row[13], nullptr, 10)) : 0;
e.triggerdoor = static_cast<int16_t>(atoi(row[14])); e.triggerdoor = row[14] ? static_cast<int16_t>(atoi(row[14])) : 0;
e.triggertype = static_cast<int16_t>(atoi(row[15])); e.triggertype = row[15] ? static_cast<int16_t>(atoi(row[15])) : 0;
e.disable_timer = static_cast<int8_t>(atoi(row[16])); e.disable_timer = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
e.doorisopen = static_cast<int16_t>(atoi(row[17])); e.doorisopen = row[17] ? static_cast<int16_t>(atoi(row[17])) : 0;
e.door_param = static_cast<int32_t>(atoi(row[18])); e.door_param = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
e.dest_zone = row[19] ? row[19] : ""; e.dest_zone = row[19] ? row[19] : "NONE";
e.dest_instance = static_cast<uint32_t>(strtoul(row[20], nullptr, 10)); e.dest_instance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.dest_x = strtof(row[21], nullptr); e.dest_x = row[21] ? strtof(row[21], nullptr) : 0;
e.dest_y = strtof(row[22], nullptr); e.dest_y = row[22] ? strtof(row[22], nullptr) : 0;
e.dest_z = strtof(row[23], nullptr); e.dest_z = row[23] ? strtof(row[23], nullptr) : 0;
e.dest_heading = strtof(row[24], nullptr); e.dest_heading = row[24] ? strtof(row[24], nullptr) : 0;
e.invert_state = static_cast<int32_t>(atoi(row[25])); e.invert_state = row[25] ? static_cast<int32_t>(atoi(row[25])) : 0;
e.incline = static_cast<int32_t>(atoi(row[26])); e.incline = row[26] ? static_cast<int32_t>(atoi(row[26])) : 0;
e.size = static_cast<uint16_t>(strtoul(row[27], nullptr, 10)); e.size = row[27] ? static_cast<uint16_t>(strtoul(row[27], nullptr, 10)) : 100;
e.buffer = strtof(row[28], nullptr); e.buffer = row[28] ? strtof(row[28], nullptr) : 0;
e.client_version_mask = static_cast<uint32_t>(strtoul(row[29], nullptr, 10)); e.client_version_mask = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 4294967295;
e.is_ldon_door = static_cast<int16_t>(atoi(row[30])); e.is_ldon_door = row[30] ? static_cast<int16_t>(atoi(row[30])) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[31])); e.dz_switch_id = row[31] ? static_cast<int32_t>(atoi(row[31])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[32])); e.min_expansion = row[32] ? static_cast<int8_t>(atoi(row[32])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[33])); e.max_expansion = row[33] ? static_cast<int8_t>(atoi(row[33])) : -1;
e.content_flags = row[34] ? row[34] : ""; e.content_flags = row[34] ? row[34] : "";
e.content_flags_disabled = row[35] ? row[35] : ""; e.content_flags_disabled = row[35] ? row[35] : "";
@@ -573,40 +574,40 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Doors e{}; Doors e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.doorid = static_cast<int16_t>(atoi(row[1])); e.doorid = row[1] ? static_cast<int16_t>(atoi(row[1])) : 0;
e.zone = row[2] ? row[2] : ""; e.zone = row[2] ? row[2] : "";
e.version = static_cast<int16_t>(atoi(row[3])); e.version = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.name = row[4] ? row[4] : ""; e.name = row[4] ? row[4] : "";
e.pos_y = strtof(row[5], nullptr); e.pos_y = row[5] ? strtof(row[5], nullptr) : 0;
e.pos_x = strtof(row[6], nullptr); e.pos_x = row[6] ? strtof(row[6], nullptr) : 0;
e.pos_z = strtof(row[7], nullptr); e.pos_z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = strtof(row[8], nullptr); e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.opentype = static_cast<int16_t>(atoi(row[9])); e.opentype = row[9] ? static_cast<int16_t>(atoi(row[9])) : 0;
e.guild = static_cast<int16_t>(atoi(row[10])); e.guild = row[10] ? static_cast<int16_t>(atoi(row[10])) : 0;
e.lockpick = static_cast<int16_t>(atoi(row[11])); e.lockpick = row[11] ? static_cast<int16_t>(atoi(row[11])) : 0;
e.keyitem = static_cast<int32_t>(atoi(row[12])); e.keyitem = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.nokeyring = static_cast<uint8_t>(strtoul(row[13], nullptr, 10)); e.nokeyring = row[13] ? static_cast<uint8_t>(strtoul(row[13], nullptr, 10)) : 0;
e.triggerdoor = static_cast<int16_t>(atoi(row[14])); e.triggerdoor = row[14] ? static_cast<int16_t>(atoi(row[14])) : 0;
e.triggertype = static_cast<int16_t>(atoi(row[15])); e.triggertype = row[15] ? static_cast<int16_t>(atoi(row[15])) : 0;
e.disable_timer = static_cast<int8_t>(atoi(row[16])); e.disable_timer = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
e.doorisopen = static_cast<int16_t>(atoi(row[17])); e.doorisopen = row[17] ? static_cast<int16_t>(atoi(row[17])) : 0;
e.door_param = static_cast<int32_t>(atoi(row[18])); e.door_param = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
e.dest_zone = row[19] ? row[19] : ""; e.dest_zone = row[19] ? row[19] : "NONE";
e.dest_instance = static_cast<uint32_t>(strtoul(row[20], nullptr, 10)); e.dest_instance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.dest_x = strtof(row[21], nullptr); e.dest_x = row[21] ? strtof(row[21], nullptr) : 0;
e.dest_y = strtof(row[22], nullptr); e.dest_y = row[22] ? strtof(row[22], nullptr) : 0;
e.dest_z = strtof(row[23], nullptr); e.dest_z = row[23] ? strtof(row[23], nullptr) : 0;
e.dest_heading = strtof(row[24], nullptr); e.dest_heading = row[24] ? strtof(row[24], nullptr) : 0;
e.invert_state = static_cast<int32_t>(atoi(row[25])); e.invert_state = row[25] ? static_cast<int32_t>(atoi(row[25])) : 0;
e.incline = static_cast<int32_t>(atoi(row[26])); e.incline = row[26] ? static_cast<int32_t>(atoi(row[26])) : 0;
e.size = static_cast<uint16_t>(strtoul(row[27], nullptr, 10)); e.size = row[27] ? static_cast<uint16_t>(strtoul(row[27], nullptr, 10)) : 100;
e.buffer = strtof(row[28], nullptr); e.buffer = row[28] ? strtof(row[28], nullptr) : 0;
e.client_version_mask = static_cast<uint32_t>(strtoul(row[29], nullptr, 10)); e.client_version_mask = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 4294967295;
e.is_ldon_door = static_cast<int16_t>(atoi(row[30])); e.is_ldon_door = row[30] ? static_cast<int16_t>(atoi(row[30])) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[31])); e.dz_switch_id = row[31] ? static_cast<int32_t>(atoi(row[31])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[32])); e.min_expansion = row[32] ? static_cast<int8_t>(atoi(row[32])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[33])); e.max_expansion = row[33] ? static_cast<int8_t>(atoi(row[33])) : -1;
e.content_flags = row[34] ? row[34] : ""; e.content_flags = row[34] ? row[34] : "";
e.content_flags_disabled = row[35] ? row[35] : ""; e.content_flags_disabled = row[35] ? row[35] : "";
@@ -667,6 +668,132 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Doors &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.doorid));
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back(std::to_string(e.version));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.pos_y));
v.push_back(std::to_string(e.pos_x));
v.push_back(std::to_string(e.pos_z));
v.push_back(std::to_string(e.heading));
v.push_back(std::to_string(e.opentype));
v.push_back(std::to_string(e.guild));
v.push_back(std::to_string(e.lockpick));
v.push_back(std::to_string(e.keyitem));
v.push_back(std::to_string(e.nokeyring));
v.push_back(std::to_string(e.triggerdoor));
v.push_back(std::to_string(e.triggertype));
v.push_back(std::to_string(e.disable_timer));
v.push_back(std::to_string(e.doorisopen));
v.push_back(std::to_string(e.door_param));
v.push_back("'" + Strings::Escape(e.dest_zone) + "'");
v.push_back(std::to_string(e.dest_instance));
v.push_back(std::to_string(e.dest_x));
v.push_back(std::to_string(e.dest_y));
v.push_back(std::to_string(e.dest_z));
v.push_back(std::to_string(e.dest_heading));
v.push_back(std::to_string(e.invert_state));
v.push_back(std::to_string(e.incline));
v.push_back(std::to_string(e.size));
v.push_back(std::to_string(e.buffer));
v.push_back(std::to_string(e.client_version_mask));
v.push_back(std::to_string(e.is_ldon_door));
v.push_back(std::to_string(e.dz_switch_id));
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Doors> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.doorid));
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back(std::to_string(e.version));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.pos_y));
v.push_back(std::to_string(e.pos_x));
v.push_back(std::to_string(e.pos_z));
v.push_back(std::to_string(e.heading));
v.push_back(std::to_string(e.opentype));
v.push_back(std::to_string(e.guild));
v.push_back(std::to_string(e.lockpick));
v.push_back(std::to_string(e.keyitem));
v.push_back(std::to_string(e.nokeyring));
v.push_back(std::to_string(e.triggerdoor));
v.push_back(std::to_string(e.triggertype));
v.push_back(std::to_string(e.disable_timer));
v.push_back(std::to_string(e.doorisopen));
v.push_back(std::to_string(e.door_param));
v.push_back("'" + Strings::Escape(e.dest_zone) + "'");
v.push_back(std::to_string(e.dest_instance));
v.push_back(std::to_string(e.dest_x));
v.push_back(std::to_string(e.dest_y));
v.push_back(std::to_string(e.dest_z));
v.push_back(std::to_string(e.dest_heading));
v.push_back(std::to_string(e.invert_state));
v.push_back(std::to_string(e.incline));
v.push_back(std::to_string(e.size));
v.push_back(std::to_string(e.buffer));
v.push_back(std::to_string(e.client_version_mask));
v.push_back(std::to_string(e.is_ldon_door));
v.push_back(std::to_string(e.dz_switch_id));
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DOORS_REPOSITORY_H #endif //EQEMU_BASE_DOORS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DYNAMIC_ZONE_MEMBERS_REPOSITORY_H #ifndef EQEMU_BASE_DYNAMIC_ZONE_MEMBERS_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
dynamic_zone_members_id dynamic_zone_members_id
) )
); );
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
DynamicZoneMembers e{}; DynamicZoneMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.character_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
return e; return e;
} }
@@ -249,9 +250,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DynamicZoneMembers e{}; DynamicZoneMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.character_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -276,9 +277,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DynamicZoneMembers e{}; DynamicZoneMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.character_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10)); e.character_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -337,6 +338,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const DynamicZoneMembers &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.dynamic_zone_id));
v.push_back(std::to_string(e.character_id));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<DynamicZoneMembers> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.dynamic_zone_id));
v.push_back(std::to_string(e.character_id));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DYNAMIC_ZONE_MEMBERS_REPOSITORY_H #endif //EQEMU_BASE_DYNAMIC_ZONE_MEMBERS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DYNAMIC_ZONE_TEMPLATES_REPOSITORY_H #ifndef EQEMU_BASE_DYNAMIC_ZONE_TEMPLATES_REPOSITORY_H
@@ -188,8 +188,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
dynamic_zone_templates_id dynamic_zone_templates_id
) )
); );
@@ -198,28 +199,28 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
DynamicZoneTemplates e{}; DynamicZoneTemplates e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.zone_version = static_cast<int32_t>(atoi(row[2])); e.zone_version = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.name = row[3] ? row[3] : ""; e.name = row[3] ? row[3] : "";
e.min_players = static_cast<int32_t>(atoi(row[4])); e.min_players = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_players = static_cast<int32_t>(atoi(row[5])); e.max_players = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.duration_seconds = static_cast<int32_t>(atoi(row[6])); e.duration_seconds = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[7])); e.dz_switch_id = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.compass_zone_id = static_cast<int32_t>(atoi(row[8])); e.compass_zone_id = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.compass_x = strtof(row[9], nullptr); e.compass_x = row[9] ? strtof(row[9], nullptr) : 0;
e.compass_y = strtof(row[10], nullptr); e.compass_y = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_z = strtof(row[11], nullptr); e.compass_z = row[11] ? strtof(row[11], nullptr) : 0;
e.return_zone_id = static_cast<int32_t>(atoi(row[12])); e.return_zone_id = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.return_x = strtof(row[13], nullptr); e.return_x = row[13] ? strtof(row[13], nullptr) : 0;
e.return_y = strtof(row[14], nullptr); e.return_y = row[14] ? strtof(row[14], nullptr) : 0;
e.return_z = strtof(row[15], nullptr); e.return_z = row[15] ? strtof(row[15], nullptr) : 0;
e.return_h = strtof(row[16], nullptr); e.return_h = row[16] ? strtof(row[16], nullptr) : 0;
e.override_zone_in = static_cast<int8_t>(atoi(row[17])); e.override_zone_in = row[17] ? static_cast<int8_t>(atoi(row[17])) : 0;
e.zone_in_x = strtof(row[18], nullptr); e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = strtof(row[19], nullptr); e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = strtof(row[20], nullptr); e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_h = strtof(row[21], nullptr); e.zone_in_h = row[21] ? strtof(row[21], nullptr) : 0;
return e; return e;
} }
@@ -401,28 +402,28 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DynamicZoneTemplates e{}; DynamicZoneTemplates e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.zone_version = static_cast<int32_t>(atoi(row[2])); e.zone_version = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.name = row[3] ? row[3] : ""; e.name = row[3] ? row[3] : "";
e.min_players = static_cast<int32_t>(atoi(row[4])); e.min_players = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_players = static_cast<int32_t>(atoi(row[5])); e.max_players = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.duration_seconds = static_cast<int32_t>(atoi(row[6])); e.duration_seconds = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[7])); e.dz_switch_id = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.compass_zone_id = static_cast<int32_t>(atoi(row[8])); e.compass_zone_id = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.compass_x = strtof(row[9], nullptr); e.compass_x = row[9] ? strtof(row[9], nullptr) : 0;
e.compass_y = strtof(row[10], nullptr); e.compass_y = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_z = strtof(row[11], nullptr); e.compass_z = row[11] ? strtof(row[11], nullptr) : 0;
e.return_zone_id = static_cast<int32_t>(atoi(row[12])); e.return_zone_id = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.return_x = strtof(row[13], nullptr); e.return_x = row[13] ? strtof(row[13], nullptr) : 0;
e.return_y = strtof(row[14], nullptr); e.return_y = row[14] ? strtof(row[14], nullptr) : 0;
e.return_z = strtof(row[15], nullptr); e.return_z = row[15] ? strtof(row[15], nullptr) : 0;
e.return_h = strtof(row[16], nullptr); e.return_h = row[16] ? strtof(row[16], nullptr) : 0;
e.override_zone_in = static_cast<int8_t>(atoi(row[17])); e.override_zone_in = row[17] ? static_cast<int8_t>(atoi(row[17])) : 0;
e.zone_in_x = strtof(row[18], nullptr); e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = strtof(row[19], nullptr); e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = strtof(row[20], nullptr); e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_h = strtof(row[21], nullptr); e.zone_in_h = row[21] ? strtof(row[21], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -447,28 +448,28 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DynamicZoneTemplates e{}; DynamicZoneTemplates e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.zone_id = static_cast<int32_t>(atoi(row[1])); e.zone_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.zone_version = static_cast<int32_t>(atoi(row[2])); e.zone_version = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.name = row[3] ? row[3] : ""; e.name = row[3] ? row[3] : "";
e.min_players = static_cast<int32_t>(atoi(row[4])); e.min_players = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_players = static_cast<int32_t>(atoi(row[5])); e.max_players = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.duration_seconds = static_cast<int32_t>(atoi(row[6])); e.duration_seconds = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[7])); e.dz_switch_id = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.compass_zone_id = static_cast<int32_t>(atoi(row[8])); e.compass_zone_id = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.compass_x = strtof(row[9], nullptr); e.compass_x = row[9] ? strtof(row[9], nullptr) : 0;
e.compass_y = strtof(row[10], nullptr); e.compass_y = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_z = strtof(row[11], nullptr); e.compass_z = row[11] ? strtof(row[11], nullptr) : 0;
e.return_zone_id = static_cast<int32_t>(atoi(row[12])); e.return_zone_id = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
e.return_x = strtof(row[13], nullptr); e.return_x = row[13] ? strtof(row[13], nullptr) : 0;
e.return_y = strtof(row[14], nullptr); e.return_y = row[14] ? strtof(row[14], nullptr) : 0;
e.return_z = strtof(row[15], nullptr); e.return_z = row[15] ? strtof(row[15], nullptr) : 0;
e.return_h = strtof(row[16], nullptr); e.return_h = row[16] ? strtof(row[16], nullptr) : 0;
e.override_zone_in = static_cast<int8_t>(atoi(row[17])); e.override_zone_in = row[17] ? static_cast<int8_t>(atoi(row[17])) : 0;
e.zone_in_x = strtof(row[18], nullptr); e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = strtof(row[19], nullptr); e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = strtof(row[20], nullptr); e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_h = strtof(row[21], nullptr); e.zone_in_h = row[21] ? strtof(row[21], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -527,6 +528,104 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const DynamicZoneTemplates &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.zone_version));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.min_players));
v.push_back(std::to_string(e.max_players));
v.push_back(std::to_string(e.duration_seconds));
v.push_back(std::to_string(e.dz_switch_id));
v.push_back(std::to_string(e.compass_zone_id));
v.push_back(std::to_string(e.compass_x));
v.push_back(std::to_string(e.compass_y));
v.push_back(std::to_string(e.compass_z));
v.push_back(std::to_string(e.return_zone_id));
v.push_back(std::to_string(e.return_x));
v.push_back(std::to_string(e.return_y));
v.push_back(std::to_string(e.return_z));
v.push_back(std::to_string(e.return_h));
v.push_back(std::to_string(e.override_zone_in));
v.push_back(std::to_string(e.zone_in_x));
v.push_back(std::to_string(e.zone_in_y));
v.push_back(std::to_string(e.zone_in_z));
v.push_back(std::to_string(e.zone_in_h));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<DynamicZoneTemplates> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.zone_version));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.min_players));
v.push_back(std::to_string(e.max_players));
v.push_back(std::to_string(e.duration_seconds));
v.push_back(std::to_string(e.dz_switch_id));
v.push_back(std::to_string(e.compass_zone_id));
v.push_back(std::to_string(e.compass_x));
v.push_back(std::to_string(e.compass_y));
v.push_back(std::to_string(e.compass_z));
v.push_back(std::to_string(e.return_zone_id));
v.push_back(std::to_string(e.return_x));
v.push_back(std::to_string(e.return_y));
v.push_back(std::to_string(e.return_z));
v.push_back(std::to_string(e.return_h));
v.push_back(std::to_string(e.override_zone_in));
v.push_back(std::to_string(e.zone_in_x));
v.push_back(std::to_string(e.zone_in_y));
v.push_back(std::to_string(e.zone_in_z));
v.push_back(std::to_string(e.zone_in_h));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DYNAMIC_ZONE_TEMPLATES_REPOSITORY_H #endif //EQEMU_BASE_DYNAMIC_ZONE_TEMPLATES_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_DYNAMIC_ZONES_REPOSITORY_H #ifndef EQEMU_BASE_DYNAMIC_ZONES_REPOSITORY_H
@@ -192,8 +192,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
dynamic_zones_id dynamic_zones_id
) )
); );
@@ -202,29 +203,29 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
DynamicZones e{}; DynamicZones e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[1])); e.instance_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.type = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.type = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.uuid = row[3] ? row[3] : ""; e.uuid = row[3] ? row[3] : "";
e.name = row[4] ? row[4] : ""; e.name = row[4] ? row[4] : "";
e.leader_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.leader_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.min_players = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.min_players = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.max_players = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.max_players = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[8])); e.dz_switch_id = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.compass_zone_id = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.compass_zone_id = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.compass_x = strtof(row[10], nullptr); e.compass_x = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_y = strtof(row[11], nullptr); e.compass_y = row[11] ? strtof(row[11], nullptr) : 0;
e.compass_z = strtof(row[12], nullptr); e.compass_z = row[12] ? strtof(row[12], nullptr) : 0;
e.safe_return_zone_id = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.safe_return_zone_id = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.safe_return_x = strtof(row[14], nullptr); e.safe_return_x = row[14] ? strtof(row[14], nullptr) : 0;
e.safe_return_y = strtof(row[15], nullptr); e.safe_return_y = row[15] ? strtof(row[15], nullptr) : 0;
e.safe_return_z = strtof(row[16], nullptr); e.safe_return_z = row[16] ? strtof(row[16], nullptr) : 0;
e.safe_return_heading = strtof(row[17], nullptr); e.safe_return_heading = row[17] ? strtof(row[17], nullptr) : 0;
e.zone_in_x = strtof(row[18], nullptr); e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = strtof(row[19], nullptr); e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = strtof(row[20], nullptr); e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_heading = strtof(row[21], nullptr); e.zone_in_heading = row[21] ? strtof(row[21], nullptr) : 0;
e.has_zone_in = static_cast<uint8_t>(strtoul(row[22], nullptr, 10)); e.has_zone_in = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
return e; return e;
} }
@@ -409,29 +410,29 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DynamicZones e{}; DynamicZones e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[1])); e.instance_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.type = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.type = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.uuid = row[3] ? row[3] : ""; e.uuid = row[3] ? row[3] : "";
e.name = row[4] ? row[4] : ""; e.name = row[4] ? row[4] : "";
e.leader_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.leader_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.min_players = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.min_players = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.max_players = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.max_players = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[8])); e.dz_switch_id = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.compass_zone_id = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.compass_zone_id = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.compass_x = strtof(row[10], nullptr); e.compass_x = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_y = strtof(row[11], nullptr); e.compass_y = row[11] ? strtof(row[11], nullptr) : 0;
e.compass_z = strtof(row[12], nullptr); e.compass_z = row[12] ? strtof(row[12], nullptr) : 0;
e.safe_return_zone_id = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.safe_return_zone_id = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.safe_return_x = strtof(row[14], nullptr); e.safe_return_x = row[14] ? strtof(row[14], nullptr) : 0;
e.safe_return_y = strtof(row[15], nullptr); e.safe_return_y = row[15] ? strtof(row[15], nullptr) : 0;
e.safe_return_z = strtof(row[16], nullptr); e.safe_return_z = row[16] ? strtof(row[16], nullptr) : 0;
e.safe_return_heading = strtof(row[17], nullptr); e.safe_return_heading = row[17] ? strtof(row[17], nullptr) : 0;
e.zone_in_x = strtof(row[18], nullptr); e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = strtof(row[19], nullptr); e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = strtof(row[20], nullptr); e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_heading = strtof(row[21], nullptr); e.zone_in_heading = row[21] ? strtof(row[21], nullptr) : 0;
e.has_zone_in = static_cast<uint8_t>(strtoul(row[22], nullptr, 10)); e.has_zone_in = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -456,29 +457,29 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
DynamicZones e{}; DynamicZones e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.instance_id = static_cast<int32_t>(atoi(row[1])); e.instance_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.type = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.type = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.uuid = row[3] ? row[3] : ""; e.uuid = row[3] ? row[3] : "";
e.name = row[4] ? row[4] : ""; e.name = row[4] ? row[4] : "";
e.leader_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10)); e.leader_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.min_players = static_cast<uint32_t>(strtoul(row[6], nullptr, 10)); e.min_players = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.max_players = static_cast<uint32_t>(strtoul(row[7], nullptr, 10)); e.max_players = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.dz_switch_id = static_cast<int32_t>(atoi(row[8])); e.dz_switch_id = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
e.compass_zone_id = static_cast<uint32_t>(strtoul(row[9], nullptr, 10)); e.compass_zone_id = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.compass_x = strtof(row[10], nullptr); e.compass_x = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_y = strtof(row[11], nullptr); e.compass_y = row[11] ? strtof(row[11], nullptr) : 0;
e.compass_z = strtof(row[12], nullptr); e.compass_z = row[12] ? strtof(row[12], nullptr) : 0;
e.safe_return_zone_id = static_cast<uint32_t>(strtoul(row[13], nullptr, 10)); e.safe_return_zone_id = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.safe_return_x = strtof(row[14], nullptr); e.safe_return_x = row[14] ? strtof(row[14], nullptr) : 0;
e.safe_return_y = strtof(row[15], nullptr); e.safe_return_y = row[15] ? strtof(row[15], nullptr) : 0;
e.safe_return_z = strtof(row[16], nullptr); e.safe_return_z = row[16] ? strtof(row[16], nullptr) : 0;
e.safe_return_heading = strtof(row[17], nullptr); e.safe_return_heading = row[17] ? strtof(row[17], nullptr) : 0;
e.zone_in_x = strtof(row[18], nullptr); e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = strtof(row[19], nullptr); e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = strtof(row[20], nullptr); e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_heading = strtof(row[21], nullptr); e.zone_in_heading = row[21] ? strtof(row[21], nullptr) : 0;
e.has_zone_in = static_cast<uint8_t>(strtoul(row[22], nullptr, 10)); e.has_zone_in = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -537,6 +538,106 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const DynamicZones &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.type));
v.push_back("'" + Strings::Escape(e.uuid) + "'");
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.leader_id));
v.push_back(std::to_string(e.min_players));
v.push_back(std::to_string(e.max_players));
v.push_back(std::to_string(e.dz_switch_id));
v.push_back(std::to_string(e.compass_zone_id));
v.push_back(std::to_string(e.compass_x));
v.push_back(std::to_string(e.compass_y));
v.push_back(std::to_string(e.compass_z));
v.push_back(std::to_string(e.safe_return_zone_id));
v.push_back(std::to_string(e.safe_return_x));
v.push_back(std::to_string(e.safe_return_y));
v.push_back(std::to_string(e.safe_return_z));
v.push_back(std::to_string(e.safe_return_heading));
v.push_back(std::to_string(e.zone_in_x));
v.push_back(std::to_string(e.zone_in_y));
v.push_back(std::to_string(e.zone_in_z));
v.push_back(std::to_string(e.zone_in_heading));
v.push_back(std::to_string(e.has_zone_in));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<DynamicZones> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.type));
v.push_back("'" + Strings::Escape(e.uuid) + "'");
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.leader_id));
v.push_back(std::to_string(e.min_players));
v.push_back(std::to_string(e.max_players));
v.push_back(std::to_string(e.dz_switch_id));
v.push_back(std::to_string(e.compass_zone_id));
v.push_back(std::to_string(e.compass_x));
v.push_back(std::to_string(e.compass_y));
v.push_back(std::to_string(e.compass_z));
v.push_back(std::to_string(e.safe_return_zone_id));
v.push_back(std::to_string(e.safe_return_x));
v.push_back(std::to_string(e.safe_return_y));
v.push_back(std::to_string(e.safe_return_z));
v.push_back(std::to_string(e.safe_return_heading));
v.push_back(std::to_string(e.zone_in_x));
v.push_back(std::to_string(e.zone_in_y));
v.push_back(std::to_string(e.zone_in_z));
v.push_back(std::to_string(e.zone_in_heading));
v.push_back(std::to_string(e.has_zone_in));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_DYNAMIC_ZONES_REPOSITORY_H #endif //EQEMU_BASE_DYNAMIC_ZONES_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_EXPEDITION_LOCKOUTS_REPOSITORY_H #ifndef EQEMU_BASE_EXPEDITION_LOCKOUTS_REPOSITORY_H
@@ -124,8 +124,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
expedition_lockouts_id expedition_lockouts_id
) )
); );
@@ -134,11 +135,11 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
ExpeditionLockouts e{}; ExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.expedition_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.expedition_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.event_name = row[2] ? row[2] : ""; e.event_name = row[2] ? row[2] : "";
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.duration = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.duration = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.from_expedition_uuid = row[5] ? row[5] : ""; e.from_expedition_uuid = row[5] ? row[5] : "";
return e; return e;
@@ -273,11 +274,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
ExpeditionLockouts e{}; ExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.expedition_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.expedition_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.event_name = row[2] ? row[2] : ""; e.event_name = row[2] ? row[2] : "";
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.duration = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.duration = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.from_expedition_uuid = row[5] ? row[5] : ""; e.from_expedition_uuid = row[5] ? row[5] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -303,11 +304,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
ExpeditionLockouts e{}; ExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.expedition_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.expedition_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.event_name = row[2] ? row[2] : ""; e.event_name = row[2] ? row[2] : "";
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10); e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
e.duration = static_cast<uint32_t>(strtoul(row[4], nullptr, 10)); e.duration = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.from_expedition_uuid = row[5] ? row[5] : ""; e.from_expedition_uuid = row[5] ? row[5] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -367,6 +368,72 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const ExpeditionLockouts &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.expedition_id));
v.push_back("'" + Strings::Escape(e.event_name) + "'");
v.push_back("FROM_UNIXTIME(" + (e.expire_time > 0 ? std::to_string(e.expire_time) : "null") + ")");
v.push_back(std::to_string(e.duration));
v.push_back("'" + Strings::Escape(e.from_expedition_uuid) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<ExpeditionLockouts> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.expedition_id));
v.push_back("'" + Strings::Escape(e.event_name) + "'");
v.push_back("FROM_UNIXTIME(" + (e.expire_time > 0 ? std::to_string(e.expire_time) : "null") + ")");
v.push_back(std::to_string(e.duration));
v.push_back("'" + Strings::Escape(e.from_expedition_uuid) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_EXPEDITION_LOCKOUTS_REPOSITORY_H #endif //EQEMU_BASE_EXPEDITION_LOCKOUTS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_EXPEDITIONS_REPOSITORY_H #ifndef EQEMU_BASE_EXPEDITIONS_REPOSITORY_H
@@ -116,8 +116,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
expeditions_id expeditions_id
) )
); );
@@ -126,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Expeditions e{}; Expeditions e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.add_replay_on_join = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.add_replay_on_join = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 1;
e.is_locked = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.is_locked = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
return e; return e;
} }
@@ -257,10 +258,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Expeditions e{}; Expeditions e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.add_replay_on_join = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.add_replay_on_join = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 1;
e.is_locked = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.is_locked = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -285,10 +286,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Expeditions e{}; Expeditions e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.add_replay_on_join = static_cast<uint8_t>(strtoul(row[2], nullptr, 10)); e.add_replay_on_join = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 1;
e.is_locked = static_cast<uint8_t>(strtoul(row[3], nullptr, 10)); e.is_locked = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -347,6 +348,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Expeditions &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.dynamic_zone_id));
v.push_back(std::to_string(e.add_replay_on_join));
v.push_back(std::to_string(e.is_locked));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Expeditions> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.dynamic_zone_id));
v.push_back(std::to_string(e.add_replay_on_join));
v.push_back(std::to_string(e.is_locked));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_EXPEDITIONS_REPOSITORY_H #endif //EQEMU_BASE_EXPEDITIONS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_FACTION_ASSOCIATION_REPOSITORY_H #ifndef EQEMU_BASE_FACTION_ASSOCIATION_REPOSITORY_H
@@ -184,8 +184,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
faction_association_id faction_association_id
) )
); );
@@ -194,27 +195,27 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
FactionAssociation e{}; FactionAssociation e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.id_1 = static_cast<int32_t>(atoi(row[1])); e.id_1 = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.mod_1 = strtof(row[2], nullptr); e.mod_1 = row[2] ? strtof(row[2], nullptr) : 0;
e.id_2 = static_cast<int32_t>(atoi(row[3])); e.id_2 = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.mod_2 = strtof(row[4], nullptr); e.mod_2 = row[4] ? strtof(row[4], nullptr) : 0;
e.id_3 = static_cast<int32_t>(atoi(row[5])); e.id_3 = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.mod_3 = strtof(row[6], nullptr); e.mod_3 = row[6] ? strtof(row[6], nullptr) : 0;
e.id_4 = static_cast<int32_t>(atoi(row[7])); e.id_4 = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.mod_4 = strtof(row[8], nullptr); e.mod_4 = row[8] ? strtof(row[8], nullptr) : 0;
e.id_5 = static_cast<int32_t>(atoi(row[9])); e.id_5 = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.mod_5 = strtof(row[10], nullptr); e.mod_5 = row[10] ? strtof(row[10], nullptr) : 0;
e.id_6 = static_cast<int32_t>(atoi(row[11])); e.id_6 = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.mod_6 = strtof(row[12], nullptr); e.mod_6 = row[12] ? strtof(row[12], nullptr) : 0;
e.id_7 = static_cast<int32_t>(atoi(row[13])); e.id_7 = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.mod_7 = strtof(row[14], nullptr); e.mod_7 = row[14] ? strtof(row[14], nullptr) : 0;
e.id_8 = static_cast<int32_t>(atoi(row[15])); e.id_8 = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.mod_8 = strtof(row[16], nullptr); e.mod_8 = row[16] ? strtof(row[16], nullptr) : 0;
e.id_9 = static_cast<int32_t>(atoi(row[17])); e.id_9 = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
e.mod_9 = strtof(row[18], nullptr); e.mod_9 = row[18] ? strtof(row[18], nullptr) : 0;
e.id_10 = static_cast<int32_t>(atoi(row[19])); e.id_10 = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
e.mod_10 = strtof(row[20], nullptr); e.mod_10 = row[20] ? strtof(row[20], nullptr) : 0;
return e; return e;
} }
@@ -394,27 +395,27 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionAssociation e{}; FactionAssociation e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.id_1 = static_cast<int32_t>(atoi(row[1])); e.id_1 = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.mod_1 = strtof(row[2], nullptr); e.mod_1 = row[2] ? strtof(row[2], nullptr) : 0;
e.id_2 = static_cast<int32_t>(atoi(row[3])); e.id_2 = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.mod_2 = strtof(row[4], nullptr); e.mod_2 = row[4] ? strtof(row[4], nullptr) : 0;
e.id_3 = static_cast<int32_t>(atoi(row[5])); e.id_3 = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.mod_3 = strtof(row[6], nullptr); e.mod_3 = row[6] ? strtof(row[6], nullptr) : 0;
e.id_4 = static_cast<int32_t>(atoi(row[7])); e.id_4 = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.mod_4 = strtof(row[8], nullptr); e.mod_4 = row[8] ? strtof(row[8], nullptr) : 0;
e.id_5 = static_cast<int32_t>(atoi(row[9])); e.id_5 = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.mod_5 = strtof(row[10], nullptr); e.mod_5 = row[10] ? strtof(row[10], nullptr) : 0;
e.id_6 = static_cast<int32_t>(atoi(row[11])); e.id_6 = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.mod_6 = strtof(row[12], nullptr); e.mod_6 = row[12] ? strtof(row[12], nullptr) : 0;
e.id_7 = static_cast<int32_t>(atoi(row[13])); e.id_7 = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.mod_7 = strtof(row[14], nullptr); e.mod_7 = row[14] ? strtof(row[14], nullptr) : 0;
e.id_8 = static_cast<int32_t>(atoi(row[15])); e.id_8 = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.mod_8 = strtof(row[16], nullptr); e.mod_8 = row[16] ? strtof(row[16], nullptr) : 0;
e.id_9 = static_cast<int32_t>(atoi(row[17])); e.id_9 = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
e.mod_9 = strtof(row[18], nullptr); e.mod_9 = row[18] ? strtof(row[18], nullptr) : 0;
e.id_10 = static_cast<int32_t>(atoi(row[19])); e.id_10 = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
e.mod_10 = strtof(row[20], nullptr); e.mod_10 = row[20] ? strtof(row[20], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -439,27 +440,27 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionAssociation e{}; FactionAssociation e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.id_1 = static_cast<int32_t>(atoi(row[1])); e.id_1 = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.mod_1 = strtof(row[2], nullptr); e.mod_1 = row[2] ? strtof(row[2], nullptr) : 0;
e.id_2 = static_cast<int32_t>(atoi(row[3])); e.id_2 = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
e.mod_2 = strtof(row[4], nullptr); e.mod_2 = row[4] ? strtof(row[4], nullptr) : 0;
e.id_3 = static_cast<int32_t>(atoi(row[5])); e.id_3 = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.mod_3 = strtof(row[6], nullptr); e.mod_3 = row[6] ? strtof(row[6], nullptr) : 0;
e.id_4 = static_cast<int32_t>(atoi(row[7])); e.id_4 = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
e.mod_4 = strtof(row[8], nullptr); e.mod_4 = row[8] ? strtof(row[8], nullptr) : 0;
e.id_5 = static_cast<int32_t>(atoi(row[9])); e.id_5 = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
e.mod_5 = strtof(row[10], nullptr); e.mod_5 = row[10] ? strtof(row[10], nullptr) : 0;
e.id_6 = static_cast<int32_t>(atoi(row[11])); e.id_6 = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
e.mod_6 = strtof(row[12], nullptr); e.mod_6 = row[12] ? strtof(row[12], nullptr) : 0;
e.id_7 = static_cast<int32_t>(atoi(row[13])); e.id_7 = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
e.mod_7 = strtof(row[14], nullptr); e.mod_7 = row[14] ? strtof(row[14], nullptr) : 0;
e.id_8 = static_cast<int32_t>(atoi(row[15])); e.id_8 = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.mod_8 = strtof(row[16], nullptr); e.mod_8 = row[16] ? strtof(row[16], nullptr) : 0;
e.id_9 = static_cast<int32_t>(atoi(row[17])); e.id_9 = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
e.mod_9 = strtof(row[18], nullptr); e.mod_9 = row[18] ? strtof(row[18], nullptr) : 0;
e.id_10 = static_cast<int32_t>(atoi(row[19])); e.id_10 = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
e.mod_10 = strtof(row[20], nullptr); e.mod_10 = row[20] ? strtof(row[20], nullptr) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -518,6 +519,102 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const FactionAssociation &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.id_1));
v.push_back(std::to_string(e.mod_1));
v.push_back(std::to_string(e.id_2));
v.push_back(std::to_string(e.mod_2));
v.push_back(std::to_string(e.id_3));
v.push_back(std::to_string(e.mod_3));
v.push_back(std::to_string(e.id_4));
v.push_back(std::to_string(e.mod_4));
v.push_back(std::to_string(e.id_5));
v.push_back(std::to_string(e.mod_5));
v.push_back(std::to_string(e.id_6));
v.push_back(std::to_string(e.mod_6));
v.push_back(std::to_string(e.id_7));
v.push_back(std::to_string(e.mod_7));
v.push_back(std::to_string(e.id_8));
v.push_back(std::to_string(e.mod_8));
v.push_back(std::to_string(e.id_9));
v.push_back(std::to_string(e.mod_9));
v.push_back(std::to_string(e.id_10));
v.push_back(std::to_string(e.mod_10));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<FactionAssociation> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.id_1));
v.push_back(std::to_string(e.mod_1));
v.push_back(std::to_string(e.id_2));
v.push_back(std::to_string(e.mod_2));
v.push_back(std::to_string(e.id_3));
v.push_back(std::to_string(e.mod_3));
v.push_back(std::to_string(e.id_4));
v.push_back(std::to_string(e.mod_4));
v.push_back(std::to_string(e.id_5));
v.push_back(std::to_string(e.mod_5));
v.push_back(std::to_string(e.id_6));
v.push_back(std::to_string(e.mod_6));
v.push_back(std::to_string(e.id_7));
v.push_back(std::to_string(e.mod_7));
v.push_back(std::to_string(e.id_8));
v.push_back(std::to_string(e.mod_8));
v.push_back(std::to_string(e.id_9));
v.push_back(std::to_string(e.mod_9));
v.push_back(std::to_string(e.id_10));
v.push_back(std::to_string(e.mod_10));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_FACTION_ASSOCIATION_REPOSITORY_H #endif //EQEMU_BASE_FACTION_ASSOCIATION_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_FACTION_BASE_DATA_REPOSITORY_H #ifndef EQEMU_BASE_FACTION_BASE_DATA_REPOSITORY_H
@@ -124,8 +124,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
faction_base_data_id faction_base_data_id
) )
); );
@@ -134,12 +135,12 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
FactionBaseData e{}; FactionBaseData e{};
e.client_faction_id = static_cast<int16_t>(atoi(row[0])); e.client_faction_id = row[0] ? static_cast<int16_t>(atoi(row[0])) : 0;
e.min = static_cast<int16_t>(atoi(row[1])); e.min = row[1] ? static_cast<int16_t>(atoi(row[1])) : -2000;
e.max = static_cast<int16_t>(atoi(row[2])); e.max = row[2] ? static_cast<int16_t>(atoi(row[2])) : 2000;
e.unk_hero1 = static_cast<int16_t>(atoi(row[3])); e.unk_hero1 = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.unk_hero2 = static_cast<int16_t>(atoi(row[4])); e.unk_hero2 = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.unk_hero3 = static_cast<int16_t>(atoi(row[5])); e.unk_hero3 = row[5] ? static_cast<int16_t>(atoi(row[5])) : 0;
return e; return e;
} }
@@ -274,12 +275,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionBaseData e{}; FactionBaseData e{};
e.client_faction_id = static_cast<int16_t>(atoi(row[0])); e.client_faction_id = row[0] ? static_cast<int16_t>(atoi(row[0])) : 0;
e.min = static_cast<int16_t>(atoi(row[1])); e.min = row[1] ? static_cast<int16_t>(atoi(row[1])) : -2000;
e.max = static_cast<int16_t>(atoi(row[2])); e.max = row[2] ? static_cast<int16_t>(atoi(row[2])) : 2000;
e.unk_hero1 = static_cast<int16_t>(atoi(row[3])); e.unk_hero1 = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.unk_hero2 = static_cast<int16_t>(atoi(row[4])); e.unk_hero2 = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.unk_hero3 = static_cast<int16_t>(atoi(row[5])); e.unk_hero3 = row[5] ? static_cast<int16_t>(atoi(row[5])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -304,12 +305,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionBaseData e{}; FactionBaseData e{};
e.client_faction_id = static_cast<int16_t>(atoi(row[0])); e.client_faction_id = row[0] ? static_cast<int16_t>(atoi(row[0])) : 0;
e.min = static_cast<int16_t>(atoi(row[1])); e.min = row[1] ? static_cast<int16_t>(atoi(row[1])) : -2000;
e.max = static_cast<int16_t>(atoi(row[2])); e.max = row[2] ? static_cast<int16_t>(atoi(row[2])) : 2000;
e.unk_hero1 = static_cast<int16_t>(atoi(row[3])); e.unk_hero1 = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.unk_hero2 = static_cast<int16_t>(atoi(row[4])); e.unk_hero2 = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.unk_hero3 = static_cast<int16_t>(atoi(row[5])); e.unk_hero3 = row[5] ? static_cast<int16_t>(atoi(row[5])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -368,6 +369,72 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const FactionBaseData &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.client_faction_id));
v.push_back(std::to_string(e.min));
v.push_back(std::to_string(e.max));
v.push_back(std::to_string(e.unk_hero1));
v.push_back(std::to_string(e.unk_hero2));
v.push_back(std::to_string(e.unk_hero3));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<FactionBaseData> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.client_faction_id));
v.push_back(std::to_string(e.min));
v.push_back(std::to_string(e.max));
v.push_back(std::to_string(e.unk_hero1));
v.push_back(std::to_string(e.unk_hero2));
v.push_back(std::to_string(e.unk_hero3));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_FACTION_BASE_DATA_REPOSITORY_H #endif //EQEMU_BASE_FACTION_BASE_DATA_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_FACTION_LIST_MOD_REPOSITORY_H #ifndef EQEMU_BASE_FACTION_LIST_MOD_REPOSITORY_H
@@ -116,8 +116,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
faction_list_mod_id faction_list_mod_id
) )
); );
@@ -126,9 +127,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
FactionListMod e{}; FactionListMod e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.faction_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.faction_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mod = static_cast<int16_t>(atoi(row[2])); e.mod = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
e.mod_name = row[3] ? row[3] : ""; e.mod_name = row[3] ? row[3] : "";
return e; return e;
@@ -257,9 +258,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionListMod e{}; FactionListMod e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.faction_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.faction_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mod = static_cast<int16_t>(atoi(row[2])); e.mod = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
e.mod_name = row[3] ? row[3] : ""; e.mod_name = row[3] ? row[3] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -285,9 +286,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionListMod e{}; FactionListMod e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.faction_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10)); e.faction_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mod = static_cast<int16_t>(atoi(row[2])); e.mod = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
e.mod_name = row[3] ? row[3] : ""; e.mod_name = row[3] ? row[3] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -347,6 +348,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const FactionListMod &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.faction_id));
v.push_back(std::to_string(e.mod));
v.push_back("'" + Strings::Escape(e.mod_name) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<FactionListMod> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.faction_id));
v.push_back(std::to_string(e.mod));
v.push_back("'" + Strings::Escape(e.mod_name) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_FACTION_LIST_MOD_REPOSITORY_H #endif //EQEMU_BASE_FACTION_LIST_MOD_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_FACTION_LIST_REPOSITORY_H #ifndef EQEMU_BASE_FACTION_LIST_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
faction_list_id faction_list_id
) )
); );
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
FactionList e{}; FactionList e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.base = static_cast<int16_t>(atoi(row[2])); e.base = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
return e; return e;
} }
@@ -250,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionList e{}; FactionList e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.base = static_cast<int16_t>(atoi(row[2])); e.base = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -277,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionList e{}; FactionList e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.name = row[1] ? row[1] : ""; e.name = row[1] ? row[1] : "";
e.base = static_cast<int16_t>(atoi(row[2])); e.base = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -338,6 +339,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const FactionList &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.base));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<FactionList> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.base));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_FACTION_LIST_REPOSITORY_H #endif //EQEMU_BASE_FACTION_LIST_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_FACTION_VALUES_REPOSITORY_H #ifndef EQEMU_BASE_FACTION_VALUES_REPOSITORY_H
@@ -116,8 +116,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
faction_values_id faction_values_id
) )
); );
@@ -126,10 +127,10 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
FactionValues e{}; FactionValues e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.faction_id = static_cast<int32_t>(atoi(row[1])); e.faction_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.current_value = static_cast<int16_t>(atoi(row[2])); e.current_value = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
e.temp = static_cast<int8_t>(atoi(row[3])); e.temp = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
return e; return e;
} }
@@ -258,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionValues e{}; FactionValues e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.faction_id = static_cast<int32_t>(atoi(row[1])); e.faction_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.current_value = static_cast<int16_t>(atoi(row[2])); e.current_value = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
e.temp = static_cast<int8_t>(atoi(row[3])); e.temp = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -286,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
FactionValues e{}; FactionValues e{};
e.char_id = static_cast<int32_t>(atoi(row[0])); e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.faction_id = static_cast<int32_t>(atoi(row[1])); e.faction_id = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.current_value = static_cast<int16_t>(atoi(row[2])); e.current_value = row[2] ? static_cast<int16_t>(atoi(row[2])) : 0;
e.temp = static_cast<int8_t>(atoi(row[3])); e.temp = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
all_entries.push_back(e); all_entries.push_back(e);
} }
@@ -348,6 +349,68 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const FactionValues &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.char_id));
v.push_back(std::to_string(e.faction_id));
v.push_back(std::to_string(e.current_value));
v.push_back(std::to_string(e.temp));
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<FactionValues> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.char_id));
v.push_back(std::to_string(e.faction_id));
v.push_back(std::to_string(e.current_value));
v.push_back(std::to_string(e.temp));
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_FACTION_VALUES_REPOSITORY_H #endif //EQEMU_BASE_FACTION_VALUES_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_FISHING_REPOSITORY_H #ifndef EQEMU_BASE_FISHING_REPOSITORY_H
@@ -144,8 +144,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
fishing_id fishing_id
) )
); );
@@ -154,15 +155,15 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Fishing e{}; Fishing e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[1])); e.zoneid = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.Itemid = static_cast<int32_t>(atoi(row[2])); e.Itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.skill_level = static_cast<int16_t>(atoi(row[3])); e.skill_level = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.chance = static_cast<int16_t>(atoi(row[4])); e.chance = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.npc_id = static_cast<int32_t>(atoi(row[5])); e.npc_id = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.npc_chance = static_cast<int32_t>(atoi(row[6])); e.npc_chance = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[7])); e.min_expansion = row[7] ? static_cast<int8_t>(atoi(row[7])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[8])); e.max_expansion = row[8] ? static_cast<int8_t>(atoi(row[8])) : -1;
e.content_flags = row[9] ? row[9] : ""; e.content_flags = row[9] ? row[9] : "";
e.content_flags_disabled = row[10] ? row[10] : ""; e.content_flags_disabled = row[10] ? row[10] : "";
@@ -313,15 +314,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Fishing e{}; Fishing e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[1])); e.zoneid = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.Itemid = static_cast<int32_t>(atoi(row[2])); e.Itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.skill_level = static_cast<int16_t>(atoi(row[3])); e.skill_level = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.chance = static_cast<int16_t>(atoi(row[4])); e.chance = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.npc_id = static_cast<int32_t>(atoi(row[5])); e.npc_id = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.npc_chance = static_cast<int32_t>(atoi(row[6])); e.npc_chance = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[7])); e.min_expansion = row[7] ? static_cast<int8_t>(atoi(row[7])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[8])); e.max_expansion = row[8] ? static_cast<int8_t>(atoi(row[8])) : -1;
e.content_flags = row[9] ? row[9] : ""; e.content_flags = row[9] ? row[9] : "";
e.content_flags_disabled = row[10] ? row[10] : ""; e.content_flags_disabled = row[10] ? row[10] : "";
@@ -348,15 +349,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Fishing e{}; Fishing e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[1])); e.zoneid = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.Itemid = static_cast<int32_t>(atoi(row[2])); e.Itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.skill_level = static_cast<int16_t>(atoi(row[3])); e.skill_level = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.chance = static_cast<int16_t>(atoi(row[4])); e.chance = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.npc_id = static_cast<int32_t>(atoi(row[5])); e.npc_id = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.npc_chance = static_cast<int32_t>(atoi(row[6])); e.npc_chance = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[7])); e.min_expansion = row[7] ? static_cast<int8_t>(atoi(row[7])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[8])); e.max_expansion = row[8] ? static_cast<int8_t>(atoi(row[8])) : -1;
e.content_flags = row[9] ? row[9] : ""; e.content_flags = row[9] ? row[9] : "";
e.content_flags_disabled = row[10] ? row[10] : ""; e.content_flags_disabled = row[10] ? row[10] : "";
@@ -417,6 +418,82 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Fishing &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.zoneid));
v.push_back(std::to_string(e.Itemid));
v.push_back(std::to_string(e.skill_level));
v.push_back(std::to_string(e.chance));
v.push_back(std::to_string(e.npc_id));
v.push_back(std::to_string(e.npc_chance));
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Fishing> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.zoneid));
v.push_back(std::to_string(e.Itemid));
v.push_back(std::to_string(e.skill_level));
v.push_back(std::to_string(e.chance));
v.push_back(std::to_string(e.npc_id));
v.push_back(std::to_string(e.npc_chance));
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_FISHING_REPOSITORY_H #endif //EQEMU_BASE_FISHING_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_FORAGE_REPOSITORY_H #ifndef EQEMU_BASE_FORAGE_REPOSITORY_H
@@ -136,8 +136,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
forage_id forage_id
) )
); );
@@ -146,13 +147,13 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Forage e{}; Forage e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[1])); e.zoneid = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.Itemid = static_cast<int32_t>(atoi(row[2])); e.Itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.level = static_cast<int16_t>(atoi(row[3])); e.level = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.chance = static_cast<int16_t>(atoi(row[4])); e.chance = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[5])); e.min_expansion = row[5] ? static_cast<int8_t>(atoi(row[5])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[6])); e.max_expansion = row[6] ? static_cast<int8_t>(atoi(row[6])) : -1;
e.content_flags = row[7] ? row[7] : ""; e.content_flags = row[7] ? row[7] : "";
e.content_flags_disabled = row[8] ? row[8] : ""; e.content_flags_disabled = row[8] ? row[8] : "";
@@ -297,13 +298,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Forage e{}; Forage e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[1])); e.zoneid = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.Itemid = static_cast<int32_t>(atoi(row[2])); e.Itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.level = static_cast<int16_t>(atoi(row[3])); e.level = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.chance = static_cast<int16_t>(atoi(row[4])); e.chance = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[5])); e.min_expansion = row[5] ? static_cast<int8_t>(atoi(row[5])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[6])); e.max_expansion = row[6] ? static_cast<int8_t>(atoi(row[6])) : -1;
e.content_flags = row[7] ? row[7] : ""; e.content_flags = row[7] ? row[7] : "";
e.content_flags_disabled = row[8] ? row[8] : ""; e.content_flags_disabled = row[8] ? row[8] : "";
@@ -330,13 +331,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Forage e{}; Forage e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.zoneid = static_cast<int32_t>(atoi(row[1])); e.zoneid = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
e.Itemid = static_cast<int32_t>(atoi(row[2])); e.Itemid = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.level = static_cast<int16_t>(atoi(row[3])); e.level = row[3] ? static_cast<int16_t>(atoi(row[3])) : 0;
e.chance = static_cast<int16_t>(atoi(row[4])); e.chance = row[4] ? static_cast<int16_t>(atoi(row[4])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[5])); e.min_expansion = row[5] ? static_cast<int8_t>(atoi(row[5])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[6])); e.max_expansion = row[6] ? static_cast<int8_t>(atoi(row[6])) : -1;
e.content_flags = row[7] ? row[7] : ""; e.content_flags = row[7] ? row[7] : "";
e.content_flags_disabled = row[8] ? row[8] : ""; e.content_flags_disabled = row[8] ? row[8] : "";
@@ -397,6 +398,78 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Forage &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.zoneid));
v.push_back(std::to_string(e.Itemid));
v.push_back(std::to_string(e.level));
v.push_back(std::to_string(e.chance));
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Forage> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back(std::to_string(e.zoneid));
v.push_back(std::to_string(e.Itemid));
v.push_back(std::to_string(e.level));
v.push_back(std::to_string(e.chance));
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_FORAGE_REPOSITORY_H #endif //EQEMU_BASE_FORAGE_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_FRIENDS_REPOSITORY_H #ifndef EQEMU_BASE_FRIENDS_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
friends_id friends_id
) )
); );
@@ -122,8 +123,8 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
Friends e{}; Friends e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 1;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
return e; return e;
@@ -250,8 +251,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Friends e{}; Friends e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 1;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -277,8 +278,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
Friends e{}; Friends e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10)); e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10)); e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 1;
e.name = row[2] ? row[2] : ""; e.name = row[2] ? row[2] : "";
all_entries.push_back(e); all_entries.push_back(e);
@@ -338,6 +339,66 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const Friends &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.type));
v.push_back("'" + Strings::Escape(e.name) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<Friends> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.charid));
v.push_back(std::to_string(e.type));
v.push_back("'" + Strings::Escape(e.name) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_FRIENDS_REPOSITORY_H #endif //EQEMU_BASE_FRIENDS_REPOSITORY_H
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only * Any modifications to base repositories are to be made by the generator only
* *
* @generator ./utils/scripts/generators/repository-generator.pl * @generator ./utils/scripts/generators/repository-generator.pl
* @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories * @docs https://docs.eqemu.io/developer/repositories
*/ */
#ifndef EQEMU_BASE_GLOBAL_LOOT_REPOSITORY_H #ifndef EQEMU_BASE_GLOBAL_LOOT_REPOSITORY_H
@@ -168,8 +168,9 @@ public:
{ {
auto results = db.QueryDatabase( auto results = db.QueryDatabase(
fmt::format( fmt::format(
"{} WHERE id = {} LIMIT 1", "{} WHERE {} = {} LIMIT 1",
BaseSelect(), BaseSelect(),
PrimaryKey(),
global_loot_id global_loot_id
) )
); );
@@ -178,21 +179,21 @@ public:
if (results.RowCount() == 1) { if (results.RowCount() == 1) {
GlobalLoot e{}; GlobalLoot e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.description = row[1] ? row[1] : ""; e.description = row[1] ? row[1] : "";
e.loottable_id = static_cast<int32_t>(atoi(row[2])); e.loottable_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.enabled = static_cast<int8_t>(atoi(row[3])); e.enabled = row[3] ? static_cast<int8_t>(atoi(row[3])) : 1;
e.min_level = static_cast<int32_t>(atoi(row[4])); e.min_level = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_level = static_cast<int32_t>(atoi(row[5])); e.max_level = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.rare = static_cast<int8_t>(atoi(row[6])); e.rare = row[6] ? static_cast<int8_t>(atoi(row[6])) : 0;
e.raid = static_cast<int8_t>(atoi(row[7])); e.raid = row[7] ? static_cast<int8_t>(atoi(row[7])) : 0;
e.race = row[8] ? row[8] : ""; e.race = row[8] ? row[8] : "";
e.class_ = row[9] ? row[9] : ""; e.class_ = row[9] ? row[9] : "";
e.bodytype = row[10] ? row[10] : ""; e.bodytype = row[10] ? row[10] : "";
e.zone = row[11] ? row[11] : ""; e.zone = row[11] ? row[11] : "";
e.hot_zone = static_cast<int8_t>(atoi(row[12])); e.hot_zone = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[13])); e.min_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[14])); e.max_expansion = row[14] ? static_cast<int8_t>(atoi(row[14])) : -1;
e.content_flags = row[15] ? row[15] : ""; e.content_flags = row[15] ? row[15] : "";
e.content_flags_disabled = row[16] ? row[16] : ""; e.content_flags_disabled = row[16] ? row[16] : "";
@@ -361,21 +362,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
GlobalLoot e{}; GlobalLoot e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.description = row[1] ? row[1] : ""; e.description = row[1] ? row[1] : "";
e.loottable_id = static_cast<int32_t>(atoi(row[2])); e.loottable_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.enabled = static_cast<int8_t>(atoi(row[3])); e.enabled = row[3] ? static_cast<int8_t>(atoi(row[3])) : 1;
e.min_level = static_cast<int32_t>(atoi(row[4])); e.min_level = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_level = static_cast<int32_t>(atoi(row[5])); e.max_level = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.rare = static_cast<int8_t>(atoi(row[6])); e.rare = row[6] ? static_cast<int8_t>(atoi(row[6])) : 0;
e.raid = static_cast<int8_t>(atoi(row[7])); e.raid = row[7] ? static_cast<int8_t>(atoi(row[7])) : 0;
e.race = row[8] ? row[8] : ""; e.race = row[8] ? row[8] : "";
e.class_ = row[9] ? row[9] : ""; e.class_ = row[9] ? row[9] : "";
e.bodytype = row[10] ? row[10] : ""; e.bodytype = row[10] ? row[10] : "";
e.zone = row[11] ? row[11] : ""; e.zone = row[11] ? row[11] : "";
e.hot_zone = static_cast<int8_t>(atoi(row[12])); e.hot_zone = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[13])); e.min_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[14])); e.max_expansion = row[14] ? static_cast<int8_t>(atoi(row[14])) : -1;
e.content_flags = row[15] ? row[15] : ""; e.content_flags = row[15] ? row[15] : "";
e.content_flags_disabled = row[16] ? row[16] : ""; e.content_flags_disabled = row[16] ? row[16] : "";
@@ -402,21 +403,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
GlobalLoot e{}; GlobalLoot e{};
e.id = static_cast<int32_t>(atoi(row[0])); e.id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
e.description = row[1] ? row[1] : ""; e.description = row[1] ? row[1] : "";
e.loottable_id = static_cast<int32_t>(atoi(row[2])); e.loottable_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.enabled = static_cast<int8_t>(atoi(row[3])); e.enabled = row[3] ? static_cast<int8_t>(atoi(row[3])) : 1;
e.min_level = static_cast<int32_t>(atoi(row[4])); e.min_level = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_level = static_cast<int32_t>(atoi(row[5])); e.max_level = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.rare = static_cast<int8_t>(atoi(row[6])); e.rare = row[6] ? static_cast<int8_t>(atoi(row[6])) : 0;
e.raid = static_cast<int8_t>(atoi(row[7])); e.raid = row[7] ? static_cast<int8_t>(atoi(row[7])) : 0;
e.race = row[8] ? row[8] : ""; e.race = row[8] ? row[8] : "";
e.class_ = row[9] ? row[9] : ""; e.class_ = row[9] ? row[9] : "";
e.bodytype = row[10] ? row[10] : ""; e.bodytype = row[10] ? row[10] : "";
e.zone = row[11] ? row[11] : ""; e.zone = row[11] ? row[11] : "";
e.hot_zone = static_cast<int8_t>(atoi(row[12])); e.hot_zone = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.min_expansion = static_cast<int8_t>(atoi(row[13])); e.min_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.max_expansion = static_cast<int8_t>(atoi(row[14])); e.max_expansion = row[14] ? static_cast<int8_t>(atoi(row[14])) : -1;
e.content_flags = row[15] ? row[15] : ""; e.content_flags = row[15] ? row[15] : "";
e.content_flags_disabled = row[16] ? row[16] : ""; e.content_flags_disabled = row[16] ? row[16] : "";
@@ -477,6 +478,94 @@ public:
return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0);
} }
static std::string BaseReplace()
{
return fmt::format(
"REPLACE INTO {} ({}) ",
TableName(),
ColumnsRaw()
);
}
static int ReplaceOne(
Database& db,
const GlobalLoot &e
)
{
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.description) + "'");
v.push_back(std::to_string(e.loottable_id));
v.push_back(std::to_string(e.enabled));
v.push_back(std::to_string(e.min_level));
v.push_back(std::to_string(e.max_level));
v.push_back(std::to_string(e.rare));
v.push_back(std::to_string(e.raid));
v.push_back("'" + Strings::Escape(e.race) + "'");
v.push_back("'" + Strings::Escape(e.class_) + "'");
v.push_back("'" + Strings::Escape(e.bodytype) + "'");
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back(std::to_string(e.hot_zone));
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES ({})",
BaseReplace(),
Strings::Implode(",", v)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
static int ReplaceMany(
Database& db,
const std::vector<GlobalLoot> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back(std::to_string(e.id));
v.push_back("'" + Strings::Escape(e.description) + "'");
v.push_back(std::to_string(e.loottable_id));
v.push_back(std::to_string(e.enabled));
v.push_back(std::to_string(e.min_level));
v.push_back(std::to_string(e.max_level));
v.push_back(std::to_string(e.rare));
v.push_back(std::to_string(e.raid));
v.push_back("'" + Strings::Escape(e.race) + "'");
v.push_back("'" + Strings::Escape(e.class_) + "'");
v.push_back("'" + Strings::Escape(e.bodytype) + "'");
v.push_back("'" + Strings::Escape(e.zone) + "'");
v.push_back(std::to_string(e.hot_zone));
v.push_back(std::to_string(e.min_expansion));
v.push_back(std::to_string(e.max_expansion));
v.push_back("'" + Strings::Escape(e.content_flags) + "'");
v.push_back("'" + Strings::Escape(e.content_flags_disabled) + "'");
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
}
std::vector<std::string> v;
auto results = db.QueryDatabase(
fmt::format(
"{} VALUES {}",
BaseReplace(),
Strings::Implode(",", insert_chunks)
)
);
return (results.Success() ? results.RowsAffected() : 0);
}
}; };
#endif //EQEMU_BASE_GLOBAL_LOOT_REPOSITORY_H #endif //EQEMU_BASE_GLOBAL_LOOT_REPOSITORY_H

Some files were not shown because too many files have changed in this diff Show More