Compare commits

...

53 Commits

Author SHA1 Message Date
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
299 changed files with 22941 additions and 7808 deletions
+129
View File
@@ -1,3 +1,132 @@
## [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
-2
View File
@@ -230,7 +230,6 @@ SET(repositories
repositories/base/base_inventory_snapshots_repository.h
repositories/base/base_ip_exemptions_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_templates_repository.h
repositories/base/base_level_exp_mods_repository.h
@@ -408,7 +407,6 @@ SET(repositories
repositories/inventory_snapshots_repository.h
repositories/ip_exemptions_repository.h
repositories/items_repository.h
repositories/item_tick_repository.h
repositories/ldon_trap_entries_repository.h
repositories/ldon_trap_templates_repository.h
repositories/level_exp_mods_repository.h
+4 -2
View File
@@ -54,6 +54,7 @@
#include "repositories/zone_repository.h"
#include "zone_store.h"
#include "repositories/merchantlist_temp_repository.h"
extern Client client;
@@ -1221,8 +1222,9 @@ void Database::GetAccountFromID(uint32 id, char* oAccountName, int16* oStatus) {
*oStatus = Strings::ToInt(row[1]);
}
void Database::ClearMerchantTemp(){
QueryDatabase("DELETE FROM merchantlist_temp");
void Database::ClearMerchantTemp()
{
MerchantlistTempRepository::ClearTemporaryMerchantLists(*this);
}
bool Database::UpdateName(const char* oldname, const char* newname) {
+36 -1
View File
@@ -5160,10 +5160,45 @@ ALTER TABLE `npc_emotes` DROP INDEX `emoteid`;
.sql = R"(
ALTER TABLE `tasks`
ADD COLUMN `enabled` smallint NULL DEFAULT 1 AFTER `faction_amount`
)",
.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
}
// -- template; copy/paste this when you need to create a new entry
// ManifestEntry{
// .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()
{
static const std::map<uint8, std::string> emote_type_map = {
{ EmoteTypes::Say, "Say" },
{ EmoteTypes::Emote, "Emote" },
{ EmoteTypes::Shout, "Shout" },
{ EmoteTypes::Proximity, "Proximity" }
@@ -572,7 +573,7 @@ const std::map<uint8, std::string> &EQ::constants::GetEmoteTypeMap()
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();
}
+1
View File
@@ -350,6 +350,7 @@ namespace EQ
};
enum EmoteTypes : uint8 {
Say,
Emote,
Shout,
Proximity
+4 -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
/*0728*/ uint32 lava_damage; // Seen 50
/*0732*/ uint32 min_lava_damage; // Seen 10
/*0736*/
/*0736*/ float safe_heading;
};
/*
@@ -3445,7 +3445,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg;
uint32 max_dmg;
};
struct Ground_Spawn{
struct GroundSpawn{
float max_x;
float max_y;
float min_x;
@@ -3457,8 +3457,8 @@ struct Ground_Spawn{
uint32 max_allowed;
uint32 respawntimer;
};
struct Ground_Spawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow
struct GroundSpawns {
struct GroundSpawn spawn[50]; //Assigned max number to allow
};
//struct PetitionBug_Struct{
-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
//Enable the new XS based perl parser
#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 max_dmg;
};
struct Ground_Spawn{
struct GroundSpawn{
float max_x;
float max_y;
float min_x;
@@ -3631,8 +3631,8 @@ struct Ground_Spawn{
uint32 max_allowed;
uint32 respawntimer;
};
struct Ground_Spawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow
struct GroundSpawns {
struct GroundSpawn spawn[50]; //Assigned max number to allow
};
//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 max_dmg;
};
struct Ground_Spawn{
struct GroundSpawn{
float max_x;
float max_y;
float min_x;
@@ -3568,8 +3568,8 @@ struct Ground_Spawn{
uint32 max_allowed;
uint32 respawntimer;
};
struct Ground_Spawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow
struct GroundSpawns {
struct GroundSpawn spawn[50]; //Assigned max number to allow
};
//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 max_dmg;
};
struct Ground_Spawn{
struct GroundSpawn{
float max_x;
float max_y;
float min_x;
@@ -3038,8 +3038,8 @@ struct Ground_Spawn{
uint32 max_allowed;
uint32 respawntimer;
};
struct Ground_Spawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow
struct GroundSpawns {
struct GroundSpawn spawn[50]; //Assigned max number to allow
};
//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 max_dmg;
};
struct Ground_Spawn{
struct GroundSpawn{
float max_x;
float max_y;
float min_x;
@@ -2963,8 +2963,8 @@ struct Ground_Spawn{
uint32 max_allowed;
uint32 respawntimer;
};
struct Ground_Spawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow
struct GroundSpawns {
struct GroundSpawn spawn[50]; //Assigned max number to allow
};
//struct PetitionBug_Struct{
+4 -4
View File
@@ -1,5 +1,5 @@
/* EQEMu: Everquest Server Emulator
Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.net)
This program is free software; you can redistribute it and/or modify
@@ -2604,7 +2604,7 @@ struct Make_Pet_Struct { //Simple struct for getting pet info
uint32 min_dmg;
uint32 max_dmg;
};
struct Ground_Spawn{
struct GroundSpawn{
float max_x;
float max_y;
float min_x;
@@ -2616,8 +2616,8 @@ struct Ground_Spawn{
uint32 max_allowed;
uint32 respawntimer;
};
struct Ground_Spawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow
struct GroundSpawns {
struct GroundSpawn spawn[50]; //Assigned max number to allow
};
//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 max_dmg;
};
struct Ground_Spawn{
struct GroundSpawn{
float max_x;
float max_y;
float min_x;
@@ -3090,8 +3090,8 @@ struct Ground_Spawn{
uint32 max_allowed;
uint32 respawntimer;
};
struct Ground_Spawns {
struct Ground_Spawn spawn[50]; //Assigned max number to allow
struct GroundSpawns {
struct GroundSpawn spawn[50]; //Assigned max number to allow
};
//struct PetitionBug_Struct{
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,6 +16,7 @@
#include "../../strings.h"
#include <ctime>
class BaseAaAbilityRepository {
public:
struct AaAbility {
@@ -33,6 +34,7 @@ public:
int32_t first_rank_id;
uint8_t enabled;
int8_t reset_on_death;
int8_t auto_grant_enabled;
};
static std::string PrimaryKey()
@@ -57,6 +59,7 @@ public:
"first_rank_id",
"enabled",
"reset_on_death",
"auto_grant_enabled",
};
}
@@ -77,6 +80,7 @@ public:
"first_rank_id",
"enabled",
"reset_on_death",
"auto_grant_enabled",
};
}
@@ -117,20 +121,21 @@ public:
{
AaAbility e{};
e.id = 0;
e.name = "";
e.category = -1;
e.classes = 131070;
e.races = 65535;
e.drakkin_heritage = 127;
e.deities = 131071;
e.status = 0;
e.type = 0;
e.charges = 0;
e.grant_only = 0;
e.first_rank_id = -1;
e.enabled = 1;
e.reset_on_death = 0;
e.id = 0;
e.name = "";
e.category = -1;
e.classes = 131070;
e.races = 65535;
e.drakkin_heritage = 127;
e.deities = 131071;
e.status = 0;
e.type = 0;
e.charges = 0;
e.grant_only = 0;
e.first_rank_id = -1;
e.enabled = 1;
e.reset_on_death = 0;
e.auto_grant_enabled = 0;
return e;
}
@@ -156,8 +161,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
aa_ability_id
)
);
@@ -166,20 +172,21 @@ public:
if (results.RowCount() == 1) {
AaAbility e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2]));
e.classes = static_cast<int32_t>(atoi(row[3]));
e.races = static_cast<int32_t>(atoi(row[4]));
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5]));
e.deities = static_cast<int32_t>(atoi(row[6]));
e.status = static_cast<int32_t>(atoi(row[7]));
e.type = static_cast<int32_t>(atoi(row[8]));
e.charges = static_cast<int32_t>(atoi(row[9]));
e.grant_only = static_cast<int8_t>(atoi(row[10]));
e.first_rank_id = static_cast<int32_t>(atoi(row[11]));
e.enabled = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.reset_on_death = static_cast<int8_t>(atoi(row[13]));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2]));
e.classes = static_cast<int32_t>(atoi(row[3]));
e.races = static_cast<int32_t>(atoi(row[4]));
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5]));
e.deities = static_cast<int32_t>(atoi(row[6]));
e.status = static_cast<int32_t>(atoi(row[7]));
e.type = static_cast<int32_t>(atoi(row[8]));
e.charges = static_cast<int32_t>(atoi(row[9]));
e.grant_only = static_cast<int8_t>(atoi(row[10]));
e.first_rank_id = static_cast<int32_t>(atoi(row[11]));
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.auto_grant_enabled = static_cast<int8_t>(atoi(row[14]));
return e;
}
@@ -227,6 +234,7 @@ public:
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[13] + " = " + std::to_string(e.reset_on_death));
v.push_back(columns[14] + " = " + std::to_string(e.auto_grant_enabled));
auto results = db.QueryDatabase(
fmt::format(
@@ -262,6 +270,7 @@ public:
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(
@@ -305,6 +314,7 @@ public:
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) + ")");
}
@@ -338,20 +348,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AaAbility e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2]));
e.classes = static_cast<int32_t>(atoi(row[3]));
e.races = static_cast<int32_t>(atoi(row[4]));
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5]));
e.deities = static_cast<int32_t>(atoi(row[6]));
e.status = static_cast<int32_t>(atoi(row[7]));
e.type = static_cast<int32_t>(atoi(row[8]));
e.charges = static_cast<int32_t>(atoi(row[9]));
e.grant_only = static_cast<int8_t>(atoi(row[10]));
e.first_rank_id = static_cast<int32_t>(atoi(row[11]));
e.enabled = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.reset_on_death = static_cast<int8_t>(atoi(row[13]));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2]));
e.classes = static_cast<int32_t>(atoi(row[3]));
e.races = static_cast<int32_t>(atoi(row[4]));
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5]));
e.deities = static_cast<int32_t>(atoi(row[6]));
e.status = static_cast<int32_t>(atoi(row[7]));
e.type = static_cast<int32_t>(atoi(row[8]));
e.charges = static_cast<int32_t>(atoi(row[9]));
e.grant_only = static_cast<int8_t>(atoi(row[10]));
e.first_rank_id = static_cast<int32_t>(atoi(row[11]));
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.auto_grant_enabled = static_cast<int8_t>(atoi(row[14]));
all_entries.push_back(e);
}
@@ -376,20 +387,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AaAbility e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2]));
e.classes = static_cast<int32_t>(atoi(row[3]));
e.races = static_cast<int32_t>(atoi(row[4]));
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5]));
e.deities = static_cast<int32_t>(atoi(row[6]));
e.status = static_cast<int32_t>(atoi(row[7]));
e.type = static_cast<int32_t>(atoi(row[8]));
e.charges = static_cast<int32_t>(atoi(row[9]));
e.grant_only = static_cast<int8_t>(atoi(row[10]));
e.first_rank_id = static_cast<int32_t>(atoi(row[11]));
e.enabled = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.reset_on_death = static_cast<int8_t>(atoi(row[13]));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.name = row[1] ? row[1] : "";
e.category = static_cast<int32_t>(atoi(row[2]));
e.classes = static_cast<int32_t>(atoi(row[3]));
e.races = static_cast<int32_t>(atoi(row[4]));
e.drakkin_heritage = static_cast<int32_t>(atoi(row[5]));
e.deities = static_cast<int32_t>(atoi(row[6]));
e.status = static_cast<int32_t>(atoi(row[7]));
e.type = static_cast<int32_t>(atoi(row[8]));
e.charges = static_cast<int32_t>(atoi(row[9]));
e.grant_only = static_cast<int8_t>(atoi(row[10]));
e.first_rank_id = static_cast<int32_t>(atoi(row[11]));
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.auto_grant_enabled = static_cast<int8_t>(atoi(row[14]));
all_entries.push_back(e);
}
@@ -448,6 +460,90 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,6 +16,7 @@
#include "../../strings.h"
#include <ctime>
class BaseAaRankEffectsRepository {
public:
struct AaRankEffects {
@@ -120,8 +121,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
aa_rank_effects_id
)
);
@@ -130,8 +132,8 @@ public:
if (results.RowCount() == 1) {
AaRankEffects e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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.base1 = static_cast<int32_t>(atoi(row[3]));
e.base2 = static_cast<int32_t>(atoi(row[4]));
@@ -266,8 +268,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AaRankEffects e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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.base1 = static_cast<int32_t>(atoi(row[3]));
e.base2 = static_cast<int32_t>(atoi(row[4]));
@@ -295,8 +297,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AaRankEffects e{};
e.rank_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.rank_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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.base1 = static_cast<int32_t>(atoi(row[3]));
e.base2 = static_cast<int32_t>(atoi(row[4]));
@@ -358,6 +360,70 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,6 +16,7 @@
#include "../../strings.h"
#include <ctime>
class BaseAaRankPrereqsRepository {
public:
struct AaRankPrereqs {
@@ -112,8 +113,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
aa_rank_prereqs_id
)
);
@@ -122,7 +124,7 @@ public:
if (results.RowCount() == 1) {
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.points = static_cast<int32_t>(atoi(row[2]));
@@ -250,7 +252,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.points = static_cast<int32_t>(atoi(row[2]));
@@ -277,7 +279,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.points = static_cast<int32_t>(atoi(row[2]));
@@ -338,6 +340,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,6 +16,7 @@
#include "../../strings.h"
#include <ctime>
class BaseAaRanksRepository {
public:
struct AaRanks {
@@ -152,8 +153,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
aa_ranks_id
)
);
@@ -162,7 +164,7 @@ public:
if (results.RowCount() == 1) {
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.lower_hotkey_sid = static_cast<int32_t>(atoi(row[2]));
e.title_sid = static_cast<int32_t>(atoi(row[3]));
@@ -330,7 +332,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.lower_hotkey_sid = static_cast<int32_t>(atoi(row[2]));
e.title_sid = static_cast<int32_t>(atoi(row[3]));
@@ -367,7 +369,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.lower_hotkey_sid = static_cast<int32_t>(atoi(row[2]));
e.title_sid = static_cast<int32_t>(atoi(row[3]));
@@ -438,6 +440,86 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
account_flags_id
)
);
@@ -122,7 +123,7 @@ public:
if (results.RowCount() == 1) {
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_value = row[2] ? row[2] : "";
@@ -250,7 +251,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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_value = row[2] ? row[2] : "";
@@ -277,7 +278,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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_value = row[2] ? row[2] : "";
@@ -338,6 +339,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -116,8 +116,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
account_ip_id
)
);
@@ -348,6 +349,68 @@ public:
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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseAccountRepository {
public:
struct Account {
@@ -211,22 +210,22 @@ public:
e.id = static_cast<int32_t>(atoi(row[0]));
e.name = row[1] ? row[1] : "";
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.status = static_cast<int32_t>(atoi(row[5]));
e.ls_id = row[6] ? row[6] : "";
e.lsaccount_id = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.gmspeed = static_cast<uint8_t>(strtoul(row[8], nullptr, 10));
e.lsaccount_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.gmspeed = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.invulnerable = static_cast<int8_t>(atoi(row[9]));
e.flymode = static_cast<int8_t>(atoi(row[10]));
e.ignore_tells = static_cast<int8_t>(atoi(row[11]));
e.revoked = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.karma = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.revoked = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.karma = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.minilogin_ip = row[14] ? row[14] : "";
e.hideme = static_cast<int8_t>(atoi(row[15]));
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.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.suspend_reason = row[20] ? row[20] : "";
e.crc_eqgame = row[21] ? row[21] : "";
@@ -422,22 +421,22 @@ public:
e.id = static_cast<int32_t>(atoi(row[0]));
e.name = row[1] ? row[1] : "";
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.status = static_cast<int32_t>(atoi(row[5]));
e.ls_id = row[6] ? row[6] : "";
e.lsaccount_id = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.gmspeed = static_cast<uint8_t>(strtoul(row[8], nullptr, 10));
e.lsaccount_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.gmspeed = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.invulnerable = static_cast<int8_t>(atoi(row[9]));
e.flymode = static_cast<int8_t>(atoi(row[10]));
e.ignore_tells = static_cast<int8_t>(atoi(row[11]));
e.revoked = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.karma = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.revoked = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.karma = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.minilogin_ip = row[14] ? row[14] : "";
e.hideme = static_cast<int8_t>(atoi(row[15]));
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.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.suspend_reason = row[20] ? row[20] : "";
e.crc_eqgame = row[21] ? row[21] : "";
@@ -470,22 +469,22 @@ public:
e.id = static_cast<int32_t>(atoi(row[0]));
e.name = row[1] ? row[1] : "";
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.status = static_cast<int32_t>(atoi(row[5]));
e.ls_id = row[6] ? row[6] : "";
e.lsaccount_id = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.gmspeed = static_cast<uint8_t>(strtoul(row[8], nullptr, 10));
e.lsaccount_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.gmspeed = row[8] ? static_cast<uint8_t>(strtoul(row[8], nullptr, 10)) : 0;
e.invulnerable = static_cast<int8_t>(atoi(row[9]));
e.flymode = static_cast<int8_t>(atoi(row[10]));
e.ignore_tells = static_cast<int8_t>(atoi(row[11]));
e.revoked = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.karma = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.revoked = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.karma = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.minilogin_ip = row[14] ? row[14] : "";
e.hideme = static_cast<int8_t>(atoi(row[15]));
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.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.suspend_reason = row[20] ? row[20] : "";
e.crc_eqgame = row[21] ? row[21] : "";
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
account_rewards_id
)
);
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) {
AccountRewards e{};
e.account_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.reward_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.account_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.reward_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -250,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AccountRewards e{};
e.account_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.reward_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.account_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.reward_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -277,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AccountRewards e{};
e.account_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.reward_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.account_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.reward_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -338,6 +339,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -136,8 +136,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
adventure_details_id
)
);
@@ -146,15 +147,15 @@ public:
if (results.RowCount() == 1) {
AdventureDetails e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.adventure_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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.count = static_cast<uint16_t>(strtoul(row[3], nullptr, 10));
e.assassinate_count = static_cast<uint16_t>(strtoul(row[4], nullptr, 10));
e.status = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.time_created = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.time_zoned = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.time_completed = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.count = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
e.assassinate_count = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.status = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.time_created = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.time_zoned = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.time_completed = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
return e;
}
@@ -297,15 +298,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AdventureDetails e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.adventure_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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.count = static_cast<uint16_t>(strtoul(row[3], nullptr, 10));
e.assassinate_count = static_cast<uint16_t>(strtoul(row[4], nullptr, 10));
e.status = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.time_created = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.time_zoned = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.time_completed = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.count = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
e.assassinate_count = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.status = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.time_created = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.time_zoned = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.time_completed = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -330,15 +331,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AdventureDetails e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.adventure_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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.count = static_cast<uint16_t>(strtoul(row[3], nullptr, 10));
e.assassinate_count = static_cast<uint16_t>(strtoul(row[4], nullptr, 10));
e.status = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.time_created = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.time_zoned = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.time_completed = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.count = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
e.assassinate_count = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.status = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.time_created = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.time_zoned = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.time_completed = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -397,6 +398,78 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -108,8 +108,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
adventure_members_id
)
);
@@ -118,8 +119,8 @@ public:
if (results.RowCount() == 1) {
AdventureMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
return e;
}
@@ -242,8 +243,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AdventureMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -268,8 +269,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AdventureMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -328,6 +329,64 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -144,8 +144,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
adventure_stats_id
)
);
@@ -154,17 +155,17 @@ public:
if (results.RowCount() == 1) {
AdventureStats e{};
e.player_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.guk_wins = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.mir_wins = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.mmc_wins = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.ruj_wins = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.tak_wins = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.guk_losses = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.mir_losses = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.mmc_losses = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.ruj_losses = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.tak_losses = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.player_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.guk_wins = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mir_wins = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.mmc_wins = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.ruj_wins = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.tak_wins = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.guk_losses = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.mir_losses = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.mmc_losses = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.ruj_losses = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.tak_losses = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
return e;
}
@@ -314,17 +315,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AdventureStats e{};
e.player_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.guk_wins = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.mir_wins = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.mmc_wins = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.ruj_wins = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.tak_wins = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.guk_losses = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.mir_losses = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.mmc_losses = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.ruj_losses = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.tak_losses = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.player_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.guk_wins = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mir_wins = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.mmc_wins = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.ruj_wins = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.tak_wins = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.guk_losses = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.mir_losses = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.mmc_losses = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.ruj_losses = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.tak_losses = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -349,17 +350,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AdventureStats e{};
e.player_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.guk_wins = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.mir_wins = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.mmc_wins = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.ruj_wins = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.tak_wins = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.guk_losses = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.mir_losses = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.mmc_losses = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.ruj_losses = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.tak_losses = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.player_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.guk_wins = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.mir_wins = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.mmc_wins = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.ruj_wins = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.tak_wins = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.guk_losses = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.mir_losses = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.mmc_losses = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.ruj_losses = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.tak_losses = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -418,6 +419,82 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -108,8 +108,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
adventure_template_entry_flavor_id
)
);
@@ -118,7 +119,7 @@ public:
if (results.RowCount() == 1) {
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] : "";
return e;
@@ -242,7 +243,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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] : "";
all_entries.push_back(e);
@@ -268,7 +269,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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] : "";
all_entries.push_back(e);
@@ -328,6 +329,64 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -108,8 +108,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
adventure_template_entry_id
)
);
@@ -118,8 +119,8 @@ public:
if (results.RowCount() == 1) {
AdventureTemplateEntry e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.template_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.template_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
return e;
}
@@ -242,8 +243,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AdventureTemplateEntry e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.template_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.template_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -268,8 +269,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
AdventureTemplateEntry e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.template_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.template_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -328,6 +329,64 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -232,8 +232,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
adventure_template_id
)
);
@@ -242,38 +243,38 @@ public:
if (results.RowCount() == 1) {
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_version = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.is_hard = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.is_raid = static_cast<uint8_t>(strtoul(row[4], nullptr, 10));
e.min_level = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.max_level = static_cast<uint8_t>(strtoul(row[6], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[7], nullptr, 10));
e.type_data = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.type_count = static_cast<uint16_t>(strtoul(row[9], nullptr, 10));
e.assa_x = strtof(row[10], nullptr);
e.assa_y = strtof(row[11], nullptr);
e.assa_z = strtof(row[12], nullptr);
e.assa_h = strtof(row[13], nullptr);
e.zone_version = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_hard = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.is_raid = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.min_level = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 1;
e.max_level = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 65;
e.type = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
e.type_data = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.type_count = row[9] ? static_cast<uint16_t>(strtoul(row[9], nullptr, 10)) : 0;
e.assa_x = row[10] ? strtof(row[10], nullptr) : 0;
e.assa_y = row[11] ? strtof(row[11], nullptr) : 0;
e.assa_z = row[12] ? strtof(row[12], nullptr) : 0;
e.assa_h = row[13] ? strtof(row[13], nullptr) : 0;
e.text = row[14] ? row[14] : "";
e.duration = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.zone_in_time = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.win_points = static_cast<uint16_t>(strtoul(row[17], nullptr, 10));
e.lose_points = static_cast<uint16_t>(strtoul(row[18], nullptr, 10));
e.theme = static_cast<uint8_t>(strtoul(row[19], nullptr, 10));
e.zone_in_zone_id = static_cast<uint16_t>(strtoul(row[20], nullptr, 10));
e.zone_in_x = strtof(row[21], nullptr);
e.zone_in_y = strtof(row[22], nullptr);
e.duration = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 7200;
e.zone_in_time = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 1800;
e.win_points = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.lose_points = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.theme = row[19] ? static_cast<uint8_t>(strtoul(row[19], nullptr, 10)) : 1;
e.zone_in_zone_id = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.zone_in_x = row[21] ? strtof(row[21], nullptr) : 0;
e.zone_in_y = row[22] ? strtof(row[22], nullptr) : 0;
e.zone_in_object_id = static_cast<int16_t>(atoi(row[23]));
e.dest_x = strtof(row[24], nullptr);
e.dest_y = strtof(row[25], nullptr);
e.dest_z = strtof(row[26], nullptr);
e.dest_h = strtof(row[27], nullptr);
e.graveyard_zone_id = static_cast<uint32_t>(strtoul(row[28], nullptr, 10));
e.graveyard_x = strtof(row[29], nullptr);
e.graveyard_y = strtof(row[30], nullptr);
e.graveyard_z = strtof(row[31], nullptr);
e.dest_x = row[24] ? strtof(row[24], nullptr) : 0;
e.dest_y = row[25] ? strtof(row[25], nullptr) : 0;
e.dest_z = row[26] ? strtof(row[26], nullptr) : 0;
e.dest_h = row[27] ? strtof(row[27], nullptr) : 0;
e.graveyard_zone_id = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.graveyard_x = row[29] ? strtof(row[29], nullptr) : 0;
e.graveyard_y = row[30] ? strtof(row[30], nullptr) : 0;
e.graveyard_z = row[31] ? strtof(row[31], nullptr) : 0;
return e;
}
@@ -489,38 +490,38 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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_version = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.is_hard = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.is_raid = static_cast<uint8_t>(strtoul(row[4], nullptr, 10));
e.min_level = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.max_level = static_cast<uint8_t>(strtoul(row[6], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[7], nullptr, 10));
e.type_data = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.type_count = static_cast<uint16_t>(strtoul(row[9], nullptr, 10));
e.assa_x = strtof(row[10], nullptr);
e.assa_y = strtof(row[11], nullptr);
e.assa_z = strtof(row[12], nullptr);
e.assa_h = strtof(row[13], nullptr);
e.zone_version = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_hard = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.is_raid = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.min_level = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 1;
e.max_level = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 65;
e.type = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
e.type_data = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.type_count = row[9] ? static_cast<uint16_t>(strtoul(row[9], nullptr, 10)) : 0;
e.assa_x = row[10] ? strtof(row[10], nullptr) : 0;
e.assa_y = row[11] ? strtof(row[11], nullptr) : 0;
e.assa_z = row[12] ? strtof(row[12], nullptr) : 0;
e.assa_h = row[13] ? strtof(row[13], nullptr) : 0;
e.text = row[14] ? row[14] : "";
e.duration = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.zone_in_time = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.win_points = static_cast<uint16_t>(strtoul(row[17], nullptr, 10));
e.lose_points = static_cast<uint16_t>(strtoul(row[18], nullptr, 10));
e.theme = static_cast<uint8_t>(strtoul(row[19], nullptr, 10));
e.zone_in_zone_id = static_cast<uint16_t>(strtoul(row[20], nullptr, 10));
e.zone_in_x = strtof(row[21], nullptr);
e.zone_in_y = strtof(row[22], nullptr);
e.duration = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 7200;
e.zone_in_time = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 1800;
e.win_points = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.lose_points = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.theme = row[19] ? static_cast<uint8_t>(strtoul(row[19], nullptr, 10)) : 1;
e.zone_in_zone_id = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.zone_in_x = row[21] ? strtof(row[21], nullptr) : 0;
e.zone_in_y = row[22] ? strtof(row[22], nullptr) : 0;
e.zone_in_object_id = static_cast<int16_t>(atoi(row[23]));
e.dest_x = strtof(row[24], nullptr);
e.dest_y = strtof(row[25], nullptr);
e.dest_z = strtof(row[26], nullptr);
e.dest_h = strtof(row[27], nullptr);
e.graveyard_zone_id = static_cast<uint32_t>(strtoul(row[28], nullptr, 10));
e.graveyard_x = strtof(row[29], nullptr);
e.graveyard_y = strtof(row[30], nullptr);
e.graveyard_z = strtof(row[31], nullptr);
e.dest_x = row[24] ? strtof(row[24], nullptr) : 0;
e.dest_y = row[25] ? strtof(row[25], nullptr) : 0;
e.dest_z = row[26] ? strtof(row[26], nullptr) : 0;
e.dest_h = row[27] ? strtof(row[27], nullptr) : 0;
e.graveyard_zone_id = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.graveyard_x = row[29] ? strtof(row[29], nullptr) : 0;
e.graveyard_y = row[30] ? strtof(row[30], nullptr) : 0;
e.graveyard_z = row[31] ? strtof(row[31], nullptr) : 0;
all_entries.push_back(e);
}
@@ -545,38 +546,38 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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_version = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.is_hard = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.is_raid = static_cast<uint8_t>(strtoul(row[4], nullptr, 10));
e.min_level = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.max_level = static_cast<uint8_t>(strtoul(row[6], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[7], nullptr, 10));
e.type_data = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.type_count = static_cast<uint16_t>(strtoul(row[9], nullptr, 10));
e.assa_x = strtof(row[10], nullptr);
e.assa_y = strtof(row[11], nullptr);
e.assa_z = strtof(row[12], nullptr);
e.assa_h = strtof(row[13], nullptr);
e.zone_version = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_hard = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.is_raid = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.min_level = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 1;
e.max_level = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 65;
e.type = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
e.type_data = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.type_count = row[9] ? static_cast<uint16_t>(strtoul(row[9], nullptr, 10)) : 0;
e.assa_x = row[10] ? strtof(row[10], nullptr) : 0;
e.assa_y = row[11] ? strtof(row[11], nullptr) : 0;
e.assa_z = row[12] ? strtof(row[12], nullptr) : 0;
e.assa_h = row[13] ? strtof(row[13], nullptr) : 0;
e.text = row[14] ? row[14] : "";
e.duration = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.zone_in_time = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.win_points = static_cast<uint16_t>(strtoul(row[17], nullptr, 10));
e.lose_points = static_cast<uint16_t>(strtoul(row[18], nullptr, 10));
e.theme = static_cast<uint8_t>(strtoul(row[19], nullptr, 10));
e.zone_in_zone_id = static_cast<uint16_t>(strtoul(row[20], nullptr, 10));
e.zone_in_x = strtof(row[21], nullptr);
e.zone_in_y = strtof(row[22], nullptr);
e.duration = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 7200;
e.zone_in_time = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 1800;
e.win_points = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.lose_points = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.theme = row[19] ? static_cast<uint8_t>(strtoul(row[19], nullptr, 10)) : 1;
e.zone_in_zone_id = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.zone_in_x = row[21] ? strtof(row[21], nullptr) : 0;
e.zone_in_y = row[22] ? strtof(row[22], nullptr) : 0;
e.zone_in_object_id = static_cast<int16_t>(atoi(row[23]));
e.dest_x = strtof(row[24], nullptr);
e.dest_y = strtof(row[25], nullptr);
e.dest_z = strtof(row[26], nullptr);
e.dest_h = strtof(row[27], nullptr);
e.graveyard_zone_id = static_cast<uint32_t>(strtoul(row[28], nullptr, 10));
e.graveyard_x = strtof(row[29], nullptr);
e.graveyard_y = strtof(row[30], nullptr);
e.graveyard_z = strtof(row[31], nullptr);
e.dest_x = row[24] ? strtof(row[24], nullptr) : 0;
e.dest_y = row[25] ? strtof(row[25], nullptr) : 0;
e.dest_z = row[26] ? strtof(row[26], nullptr) : 0;
e.dest_h = row[27] ? strtof(row[27], nullptr) : 0;
e.graveyard_zone_id = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.graveyard_x = row[29] ? strtof(row[29], nullptr) : 0;
e.graveyard_y = row[30] ? strtof(row[30], nullptr) : 0;
e.graveyard_z = row[31] ? strtof(row[31], nullptr) : 0;
all_entries.push_back(e);
}
@@ -635,6 +636,126 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -108,8 +108,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
alternate_currency_id
)
);
@@ -328,6 +329,64 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -144,8 +144,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
auras_id
)
);
@@ -418,6 +419,82 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -140,8 +140,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
base_data_id
)
);
@@ -150,16 +151,16 @@ public:
if (results.RowCount() == 1) {
BaseData e{};
e.level = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.hp = strtod(row[2], nullptr);
e.mana = strtod(row[3], nullptr);
e.end = strtod(row[4], nullptr);
e.unk1 = strtod(row[5], nullptr);
e.unk2 = strtod(row[6], nullptr);
e.hp_fac = strtod(row[7], nullptr);
e.mana_fac = strtod(row[8], nullptr);
e.end_fac = strtod(row[9], nullptr);
e.level = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.class_ = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.hp = row[2] ? strtod(row[2], nullptr) : 0;
e.mana = row[3] ? strtod(row[3], nullptr) : 0;
e.end = row[4] ? strtod(row[4], nullptr) : 0;
e.unk1 = row[5] ? strtod(row[5], nullptr) : 0;
e.unk2 = row[6] ? strtod(row[6], nullptr) : 0;
e.hp_fac = row[7] ? strtod(row[7], nullptr) : 0;
e.mana_fac = row[8] ? strtod(row[8], nullptr) : 0;
e.end_fac = row[9] ? strtod(row[9], nullptr) : 0;
return e;
}
@@ -306,16 +307,16 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
BaseData e{};
e.level = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.hp = strtod(row[2], nullptr);
e.mana = strtod(row[3], nullptr);
e.end = strtod(row[4], nullptr);
e.unk1 = strtod(row[5], nullptr);
e.unk2 = strtod(row[6], nullptr);
e.hp_fac = strtod(row[7], nullptr);
e.mana_fac = strtod(row[8], nullptr);
e.end_fac = strtod(row[9], nullptr);
e.level = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.class_ = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.hp = row[2] ? strtod(row[2], nullptr) : 0;
e.mana = row[3] ? strtod(row[3], nullptr) : 0;
e.end = row[4] ? strtod(row[4], nullptr) : 0;
e.unk1 = row[5] ? strtod(row[5], nullptr) : 0;
e.unk2 = row[6] ? strtod(row[6], nullptr) : 0;
e.hp_fac = row[7] ? strtod(row[7], nullptr) : 0;
e.mana_fac = row[8] ? strtod(row[8], nullptr) : 0;
e.end_fac = row[9] ? strtod(row[9], nullptr) : 0;
all_entries.push_back(e);
}
@@ -340,16 +341,16 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
BaseData e{};
e.level = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.hp = strtod(row[2], nullptr);
e.mana = strtod(row[3], nullptr);
e.end = strtod(row[4], nullptr);
e.unk1 = strtod(row[5], nullptr);
e.unk2 = strtod(row[6], nullptr);
e.hp_fac = strtod(row[7], nullptr);
e.mana_fac = strtod(row[8], nullptr);
e.end_fac = strtod(row[9], nullptr);
e.level = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.class_ = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.hp = row[2] ? strtod(row[2], nullptr) : 0;
e.mana = row[3] ? strtod(row[3], nullptr) : 0;
e.end = row[4] ? strtod(row[4], nullptr) : 0;
e.unk1 = row[5] ? strtod(row[5], nullptr) : 0;
e.unk2 = row[6] ? strtod(row[6], nullptr) : 0;
e.hp_fac = row[7] ? strtod(row[7], nullptr) : 0;
e.mana_fac = row[8] ? strtod(row[8], nullptr) : 0;
e.end_fac = row[9] ? strtod(row[9], nullptr) : 0;
all_entries.push_back(e);
}
@@ -408,6 +409,80 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseBlockedSpellsRepository {
public:
struct BlockedSpells {
@@ -177,15 +176,15 @@ public:
BlockedSpells e{};
e.id = static_cast<int32_t>(atoi(row[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.zoneid = static_cast<int32_t>(atoi(row[3]));
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.x_diff = strtof(row[7], nullptr);
e.y_diff = strtof(row[8], nullptr);
e.z_diff = strtof(row[9], nullptr);
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.x_diff = row[7] ? strtof(row[7], nullptr) : 0;
e.y_diff = row[8] ? strtof(row[8], nullptr) : 0;
e.z_diff = row[9] ? strtof(row[9], nullptr) : 0;
e.message = row[10] ? row[10] : "";
e.description = row[11] ? row[11] : "";
e.min_expansion = static_cast<int8_t>(atoi(row[12]));
@@ -356,15 +355,15 @@ public:
BlockedSpells e{};
e.id = static_cast<int32_t>(atoi(row[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.zoneid = static_cast<int32_t>(atoi(row[3]));
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.x_diff = strtof(row[7], nullptr);
e.y_diff = strtof(row[8], nullptr);
e.z_diff = strtof(row[9], nullptr);
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.x_diff = row[7] ? strtof(row[7], nullptr) : 0;
e.y_diff = row[8] ? strtof(row[8], nullptr) : 0;
e.z_diff = row[9] ? strtof(row[9], nullptr) : 0;
e.message = row[10] ? row[10] : "";
e.description = row[11] ? row[11] : "";
e.min_expansion = static_cast<int8_t>(atoi(row[12]));
@@ -396,15 +395,15 @@ public:
BlockedSpells e{};
e.id = static_cast<int32_t>(atoi(row[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.zoneid = static_cast<int32_t>(atoi(row[3]));
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.x_diff = strtof(row[7], nullptr);
e.y_diff = strtof(row[8], nullptr);
e.z_diff = strtof(row[9], nullptr);
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.x_diff = row[7] ? strtof(row[7], nullptr) : 0;
e.y_diff = row[8] ? strtof(row[8], nullptr) : 0;
e.z_diff = row[9] ? strtof(row[9], nullptr) : 0;
e.message = row[10] ? row[10] : "";
e.description = row[11] ? row[11] : "";
e.min_expansion = static_cast<int8_t>(atoi(row[12]));
@@ -469,6 +468,92 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -116,8 +116,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
books_id
)
);
@@ -347,6 +348,68 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -228,8 +228,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
bug_reports_id
)
);
@@ -238,26 +239,26 @@ public:
if (results.RowCount() == 1) {
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.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.account_id = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.account_id = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.character_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.character_name = row[6] ? row[6] : "";
e.reporter_spoof = static_cast<int8_t>(atoi(row[7]));
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.reporter_name = row[10] ? row[10] : "";
e.ui_path = row[11] ? row[11] : "";
e.pos_x = strtof(row[12], nullptr);
e.pos_y = strtof(row[13], nullptr);
e.pos_z = strtof(row[14], nullptr);
e.heading = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.time_played = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.target_id = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.pos_x = row[12] ? strtof(row[12], nullptr) : 0;
e.pos_y = row[13] ? strtof(row[13], nullptr) : 0;
e.pos_z = row[14] ? strtof(row[14], nullptr) : 0;
e.heading = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.time_played = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.target_id = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.target_name = row[18] ? row[18] : "";
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._crash_bug = static_cast<int8_t>(atoi(row[21]));
e._target_info = static_cast<int8_t>(atoi(row[22]));
@@ -266,7 +267,7 @@ public:
e.bug_report = row[25] ? row[25] : "";
e.system_info = row[26] ? row[26] : "";
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_reviewer = row[30] ? row[30] : "";
e.reviewer_notes = row[31] ? row[31] : "";
@@ -481,26 +482,26 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.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.account_id = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.account_id = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.character_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.character_name = row[6] ? row[6] : "";
e.reporter_spoof = static_cast<int8_t>(atoi(row[7]));
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.reporter_name = row[10] ? row[10] : "";
e.ui_path = row[11] ? row[11] : "";
e.pos_x = strtof(row[12], nullptr);
e.pos_y = strtof(row[13], nullptr);
e.pos_z = strtof(row[14], nullptr);
e.heading = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.time_played = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.target_id = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.pos_x = row[12] ? strtof(row[12], nullptr) : 0;
e.pos_y = row[13] ? strtof(row[13], nullptr) : 0;
e.pos_z = row[14] ? strtof(row[14], nullptr) : 0;
e.heading = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.time_played = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.target_id = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.target_name = row[18] ? row[18] : "";
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._crash_bug = static_cast<int8_t>(atoi(row[21]));
e._target_info = static_cast<int8_t>(atoi(row[22]));
@@ -509,7 +510,7 @@ public:
e.bug_report = row[25] ? row[25] : "";
e.system_info = row[26] ? row[26] : "";
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_reviewer = row[30] ? row[30] : "";
e.reviewer_notes = row[31] ? row[31] : "";
@@ -537,26 +538,26 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.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.account_id = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.account_id = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.character_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.character_name = row[6] ? row[6] : "";
e.reporter_spoof = static_cast<int8_t>(atoi(row[7]));
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.reporter_name = row[10] ? row[10] : "";
e.ui_path = row[11] ? row[11] : "";
e.pos_x = strtof(row[12], nullptr);
e.pos_y = strtof(row[13], nullptr);
e.pos_z = strtof(row[14], nullptr);
e.heading = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.time_played = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.target_id = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.pos_x = row[12] ? strtof(row[12], nullptr) : 0;
e.pos_y = row[13] ? strtof(row[13], nullptr) : 0;
e.pos_z = row[14] ? strtof(row[14], nullptr) : 0;
e.heading = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.time_played = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.target_id = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.target_name = row[18] ? row[18] : "";
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._crash_bug = static_cast<int8_t>(atoi(row[21]));
e._target_info = static_cast<int8_t>(atoi(row[22]));
@@ -565,7 +566,7 @@ public:
e.bug_report = row[25] ? row[25] : "";
e.system_info = row[26] ? row[26] : "";
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_reviewer = row[30] ? row[30] : "";
e.reviewer_notes = row[31] ? row[31] : "";
@@ -627,6 +628,124 @@ public:
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
+101 -20
View File
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -152,8 +152,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
bugs_id
)
);
@@ -162,19 +163,19 @@ public:
if (results.RowCount() == 1) {
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.name = row[2] ? row[2] : "";
e.ui = row[3] ? row[3] : "";
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
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.bug = row[10] ? row[10] : "";
e.date = row[11] ? row[11] : "";
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;
}
@@ -329,19 +330,19 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.name = row[2] ? row[2] : "";
e.ui = row[3] ? row[3] : "";
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
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.bug = row[10] ? row[10] : "";
e.date = row[11] ? row[11] : "";
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);
}
@@ -366,19 +367,19 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.name = row[2] ? row[2] : "";
e.ui = row[3] ? row[3] : "";
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
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.bug = row[10] ? row[10] : "";
e.date = row[11] ? row[11] : "";
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);
}
@@ -437,6 +438,86 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -124,8 +124,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
buyer_id
)
);
@@ -368,6 +369,72 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -124,8 +124,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
char_create_combinations_id
)
);
@@ -134,12 +135,12 @@ public:
if (results.RowCount() == 1) {
CharCreateCombinations e{};
e.allocation_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.race = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.start_zone = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.expansions_req = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.allocation_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.race = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.class_ = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.deity = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.start_zone = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.expansions_req = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
return e;
}
@@ -274,12 +275,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharCreateCombinations e{};
e.allocation_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.race = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.start_zone = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.expansions_req = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.allocation_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.race = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.class_ = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.deity = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.start_zone = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.expansions_req = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -304,12 +305,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharCreateCombinations e{};
e.allocation_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.race = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.start_zone = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.expansions_req = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.allocation_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.race = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.class_ = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.deity = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.start_zone = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.expansions_req = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -368,6 +369,72 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -160,8 +160,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
char_create_point_allocations_id
)
);
@@ -170,21 +171,21 @@ public:
if (results.RowCount() == 1) {
CharCreatePointAllocations e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.base_str = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.base_sta = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.base_dex = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.base_agi = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.base_int = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.base_wis = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.base_cha = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.alloc_str = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.alloc_sta = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.alloc_dex = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.alloc_agi = static_cast<uint32_t>(strtoul(row[11], nullptr, 10));
e.alloc_int = static_cast<uint32_t>(strtoul(row[12], nullptr, 10));
e.alloc_wis = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.alloc_cha = static_cast<uint32_t>(strtoul(row[14], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.base_str = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.base_sta = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.base_dex = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.base_agi = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.base_int = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.base_wis = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.base_cha = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.alloc_str = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.alloc_sta = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.alloc_dex = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.alloc_agi = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.alloc_int = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.alloc_wis = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.alloc_cha = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
return e;
}
@@ -346,21 +347,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharCreatePointAllocations e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.base_str = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.base_sta = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.base_dex = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.base_agi = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.base_int = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.base_wis = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.base_cha = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.alloc_str = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.alloc_sta = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.alloc_dex = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.alloc_agi = static_cast<uint32_t>(strtoul(row[11], nullptr, 10));
e.alloc_int = static_cast<uint32_t>(strtoul(row[12], nullptr, 10));
e.alloc_wis = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.alloc_cha = static_cast<uint32_t>(strtoul(row[14], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.base_str = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.base_sta = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.base_dex = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.base_agi = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.base_int = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.base_wis = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.base_cha = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.alloc_str = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.alloc_sta = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.alloc_dex = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.alloc_agi = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.alloc_int = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.alloc_wis = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.alloc_cha = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -385,21 +386,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharCreatePointAllocations e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.base_str = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.base_sta = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.base_dex = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.base_agi = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.base_int = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.base_wis = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.base_cha = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.alloc_str = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.alloc_sta = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.alloc_dex = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.alloc_agi = static_cast<uint32_t>(strtoul(row[11], nullptr, 10));
e.alloc_int = static_cast<uint32_t>(strtoul(row[12], nullptr, 10));
e.alloc_wis = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.alloc_cha = static_cast<uint32_t>(strtoul(row[14], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.base_str = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.base_sta = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.base_dex = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.base_agi = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.base_int = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.base_wis = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.base_cha = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.alloc_str = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.alloc_sta = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.alloc_dex = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.alloc_agi = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.alloc_int = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.alloc_wis = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.alloc_cha = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -458,6 +459,90 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
char_recipe_list_id
)
);
@@ -338,6 +339,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -120,8 +120,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_activities_id
)
);
@@ -130,10 +131,10 @@ public:
if (results.RowCount() == 1) {
CharacterActivities e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.activityid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.donecount = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.activityid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.donecount = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.completed = static_cast<int8_t>(atoi(row[4]));
return e;
@@ -266,10 +267,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterActivities e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.activityid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.donecount = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.activityid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.donecount = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.completed = static_cast<int8_t>(atoi(row[4]));
all_entries.push_back(e);
@@ -295,10 +296,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterActivities e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.activityid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.donecount = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.activityid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.donecount = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.completed = static_cast<int8_t>(atoi(row[4]));
all_entries.push_back(e);
@@ -358,6 +359,70 @@ public:
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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterAltCurrencyRepository {
public:
struct CharacterAltCurrency {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) {
CharacterAltCurrency e{};
e.char_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.currency_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.char_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.currency_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAltCurrency e{};
e.char_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.currency_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.char_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.currency_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAltCurrency e{};
e.char_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.currency_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.amount = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.char_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.currency_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.amount = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterAlternateAbilitiesRepository {
public:
struct CharacterAlternateAbilities {
@@ -128,10 +127,10 @@ public:
if (results.RowCount() == 1) {
CharacterAlternateAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.aa_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.aa_value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.charges = static_cast<uint16_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.aa_value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
return e;
}
@@ -260,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAlternateAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.aa_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.aa_value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.charges = static_cast<uint16_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.aa_value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -288,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterAlternateAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.aa_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.aa_value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.charges = static_cast<uint16_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.aa_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.aa_value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = row[3] ? static_cast<uint16_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterAurasRepository {
public:
struct CharacterAuras {
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterBandolierRepository {
public:
struct CharacterBandolier {
@@ -136,11 +135,11 @@ public:
if (results.RowCount() == 1) {
CharacterBandolier e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.bandolier_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.bandolier_slot = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.icon = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.bandolier_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.bandolier_slot = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.item_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.icon = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.bandolier_name = row[5] ? row[5] : "";
return e;
@@ -276,11 +275,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBandolier e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.bandolier_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.bandolier_slot = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.icon = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.bandolier_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.bandolier_slot = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.item_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.icon = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.bandolier_name = row[5] ? row[5] : "";
all_entries.push_back(e);
@@ -306,11 +305,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBandolier e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.bandolier_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.bandolier_slot = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.icon = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.bandolier_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.bandolier_slot = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.item_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.icon = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.bandolier_name = row[5] ? row[5] : "";
all_entries.push_back(e);
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterBindRepository {
public:
struct CharacterBind {
@@ -144,14 +143,14 @@ public:
if (results.RowCount() == 1) {
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.zone_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.instance_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.heading = strtof(row[7], nullptr);
e.zone_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.instance_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.heading = row[7] ? strtof(row[7], nullptr) : 0;
return e;
}
@@ -291,14 +290,14 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.zone_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.instance_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.heading = strtof(row[7], nullptr);
e.zone_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.instance_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.heading = row[7] ? strtof(row[7], nullptr) : 0;
all_entries.push_back(e);
}
@@ -323,14 +322,14 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.zone_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.instance_id = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.x = strtof(row[4], nullptr);
e.y = strtof(row[5], nullptr);
e.z = strtof(row[6], nullptr);
e.heading = strtof(row[7], nullptr);
e.zone_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.instance_id = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.x = row[4] ? strtof(row[4], nullptr) : 0;
e.y = row[5] ? strtof(row[5], nullptr) : 0;
e.z = row[6] ? strtof(row[6], nullptr) : 0;
e.heading = row[7] ? strtof(row[7], nullptr) : 0;
all_entries.push_back(e);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterBuffsRepository {
public:
struct CharacterBuffs {
@@ -180,17 +179,17 @@ public:
if (results.RowCount() == 1) {
CharacterBuffs e{};
e.character_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.caster_level = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.caster_name = row[4] ? row[4] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[5]));
e.counters = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.numhits = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.melee_rune = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.magic_rune = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.persistent = static_cast<uint8_t>(strtoul(row[10], nullptr, 10));
e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
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.caston_x = static_cast<int32_t>(atoi(row[12]));
e.caston_y = static_cast<int32_t>(atoi(row[13]));
@@ -364,17 +363,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBuffs e{};
e.character_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.caster_level = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.caster_name = row[4] ? row[4] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[5]));
e.counters = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.numhits = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.melee_rune = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.magic_rune = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.persistent = static_cast<uint8_t>(strtoul(row[10], nullptr, 10));
e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
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.caston_x = static_cast<int32_t>(atoi(row[12]));
e.caston_y = static_cast<int32_t>(atoi(row[13]));
@@ -405,17 +404,17 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterBuffs e{};
e.character_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.caster_level = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.caster_name = row[4] ? row[4] : "";
e.ticsremaining = static_cast<int32_t>(atoi(row[5]));
e.counters = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.numhits = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.melee_rune = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.magic_rune = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.persistent = static_cast<uint8_t>(strtoul(row[10], nullptr, 10));
e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
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.caston_x = static_cast<int32_t>(atoi(row[12]));
e.caston_y = static_cast<int32_t>(atoi(row[13]));
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,20 +16,25 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterCorpseItemsRepository {
public:
struct CharacterCorpseItems {
uint32_t corpse_id;
uint32_t equip_slot;
uint32_t item_id;
uint32_t charges;
uint32_t aug_1;
uint32_t aug_2;
uint32_t aug_3;
uint32_t aug_4;
uint32_t aug_5;
int32_t aug_6;
int16_t attuned;
uint32_t corpse_id;
uint32_t equip_slot;
uint32_t item_id;
uint32_t charges;
uint32_t aug_1;
uint32_t aug_2;
uint32_t aug_3;
uint32_t aug_4;
uint32_t aug_5;
int32_t aug_6;
int16_t attuned;
std::string custom_data;
uint32_t ornamenticon;
uint32_t ornamentidfile;
uint32_t ornament_hero_model;
};
static std::string PrimaryKey()
@@ -51,6 +56,10 @@ public:
"aug_5",
"aug_6",
"attuned",
"custom_data",
"ornamenticon",
"ornamentidfile",
"ornament_hero_model",
};
}
@@ -68,6 +77,10 @@ public:
"aug_5",
"aug_6",
"attuned",
"custom_data",
"ornamenticon",
"ornamentidfile",
"ornament_hero_model",
};
}
@@ -108,17 +121,21 @@ public:
{
CharacterCorpseItems e{};
e.corpse_id = 0;
e.equip_slot = 0;
e.item_id = 0;
e.charges = 0;
e.aug_1 = 0;
e.aug_2 = 0;
e.aug_3 = 0;
e.aug_4 = 0;
e.aug_5 = 0;
e.aug_6 = 0;
e.attuned = 0;
e.corpse_id = 0;
e.equip_slot = 0;
e.item_id = 0;
e.charges = 0;
e.aug_1 = 0;
e.aug_2 = 0;
e.aug_3 = 0;
e.aug_4 = 0;
e.aug_5 = 0;
e.aug_6 = 0;
e.attuned = 0;
e.custom_data = "";
e.ornamenticon = 0;
e.ornamentidfile = 0;
e.ornament_hero_model = 0;
return e;
}
@@ -144,8 +161,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_corpse_items_id
)
);
@@ -154,17 +172,21 @@ public:
if (results.RowCount() == 1) {
CharacterCorpseItems e{};
e.corpse_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.equip_slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charges = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.aug_1 = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.aug_2 = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.aug_3 = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.aug_4 = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.aug_5 = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.aug_6 = static_cast<int32_t>(atoi(row[9]));
e.attuned = static_cast<int16_t>(atoi(row[10]));
e.corpse_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.equip_slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.aug_1 = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.aug_2 = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.aug_3 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_4 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
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.attuned = static_cast<int16_t>(atoi(row[10]));
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;
}
@@ -209,6 +231,10 @@ public:
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[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(
fmt::format(
@@ -241,6 +267,10 @@ public:
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(
@@ -281,6 +311,10 @@ public:
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) + ")");
}
@@ -314,17 +348,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCorpseItems e{};
e.corpse_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.equip_slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charges = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.aug_1 = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.aug_2 = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.aug_3 = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.aug_4 = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.aug_5 = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.aug_6 = static_cast<int32_t>(atoi(row[9]));
e.attuned = static_cast<int16_t>(atoi(row[10]));
e.corpse_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.equip_slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.aug_1 = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.aug_2 = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.aug_3 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_4 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
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.attuned = static_cast<int16_t>(atoi(row[10]));
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);
}
@@ -349,17 +387,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCorpseItems e{};
e.corpse_id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.equip_slot = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charges = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.aug_1 = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.aug_2 = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.aug_3 = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.aug_4 = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.aug_5 = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.aug_6 = static_cast<int32_t>(atoi(row[9]));
e.attuned = static_cast<int16_t>(atoi(row[10]));
e.corpse_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.equip_slot = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.charges = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.aug_1 = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.aug_2 = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.aug_3 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_4 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
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.attuned = static_cast<int16_t>(atoi(row[10]));
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);
}
@@ -418,6 +460,90 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,6 +16,7 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterCorpsesRepository {
public:
struct CharacterCorpses {
@@ -288,8 +289,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_corpses_id
)
);
@@ -298,53 +300,53 @@ public:
if (results.RowCount() == 1) {
CharacterCorpses e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.charname = row[2] ? row[2] : "";
e.zone_id = static_cast<int16_t>(atoi(row[3]));
e.instance_id = static_cast<uint16_t>(strtoul(row[4], nullptr, 10));
e.x = strtof(row[5], nullptr);
e.y = strtof(row[6], nullptr);
e.z = strtof(row[7], nullptr);
e.heading = strtof(row[8], nullptr);
e.instance_id = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.x = row[5] ? strtof(row[5], nullptr) : 0;
e.y = row[6] ? strtof(row[6], nullptr) : 0;
e.z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = row[8] ? strtof(row[8], nullptr) : 0;
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.is_rezzed = static_cast<uint8_t>(strtoul(row[11], nullptr, 10));
e.guild_consent_id = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
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.was_at_graveyard = static_cast<int8_t>(atoi(row[13]));
e.is_locked = static_cast<int8_t>(atoi(row[14]));
e.exp = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.size = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.level = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.race = static_cast<uint32_t>(strtoul(row[18], nullptr, 10));
e.gender = static_cast<uint32_t>(strtoul(row[19], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[20], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[21], nullptr, 10));
e.texture = static_cast<uint32_t>(strtoul(row[22], nullptr, 10));
e.helm_texture = static_cast<uint32_t>(strtoul(row[23], nullptr, 10));
e.copper = static_cast<uint32_t>(strtoul(row[24], nullptr, 10));
e.silver = static_cast<uint32_t>(strtoul(row[25], nullptr, 10));
e.gold = static_cast<uint32_t>(strtoul(row[26], nullptr, 10));
e.platinum = static_cast<uint32_t>(strtoul(row[27], nullptr, 10));
e.hair_color = static_cast<uint32_t>(strtoul(row[28], nullptr, 10));
e.beard_color = static_cast<uint32_t>(strtoul(row[29], nullptr, 10));
e.eye_color_1 = static_cast<uint32_t>(strtoul(row[30], nullptr, 10));
e.eye_color_2 = static_cast<uint32_t>(strtoul(row[31], nullptr, 10));
e.hair_style = static_cast<uint32_t>(strtoul(row[32], nullptr, 10));
e.face = static_cast<uint32_t>(strtoul(row[33], nullptr, 10));
e.beard = static_cast<uint32_t>(strtoul(row[34], nullptr, 10));
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[35], nullptr, 10));
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[36], nullptr, 10));
e.drakkin_details = static_cast<uint32_t>(strtoul(row[37], nullptr, 10));
e.wc_1 = static_cast<uint32_t>(strtoul(row[38], nullptr, 10));
e.wc_2 = static_cast<uint32_t>(strtoul(row[39], nullptr, 10));
e.wc_3 = static_cast<uint32_t>(strtoul(row[40], nullptr, 10));
e.wc_4 = static_cast<uint32_t>(strtoul(row[41], nullptr, 10));
e.wc_5 = static_cast<uint32_t>(strtoul(row[42], nullptr, 10));
e.wc_6 = static_cast<uint32_t>(strtoul(row[43], nullptr, 10));
e.wc_7 = static_cast<uint32_t>(strtoul(row[44], nullptr, 10));
e.wc_8 = static_cast<uint32_t>(strtoul(row[45], nullptr, 10));
e.wc_9 = static_cast<uint32_t>(strtoul(row[46], nullptr, 10));
e.exp = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.size = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.level = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.race = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.gender = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.class_ = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.deity = row[21] ? static_cast<uint32_t>(strtoul(row[21], nullptr, 10)) : 0;
e.texture = row[22] ? static_cast<uint32_t>(strtoul(row[22], nullptr, 10)) : 0;
e.helm_texture = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.copper = row[24] ? static_cast<uint32_t>(strtoul(row[24], nullptr, 10)) : 0;
e.silver = row[25] ? static_cast<uint32_t>(strtoul(row[25], nullptr, 10)) : 0;
e.gold = row[26] ? static_cast<uint32_t>(strtoul(row[26], nullptr, 10)) : 0;
e.platinum = row[27] ? static_cast<uint32_t>(strtoul(row[27], nullptr, 10)) : 0;
e.hair_color = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.beard_color = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 0;
e.eye_color_1 = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.eye_color_2 = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.hair_style = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.face = row[33] ? static_cast<uint32_t>(strtoul(row[33], nullptr, 10)) : 0;
e.beard = row[34] ? static_cast<uint32_t>(strtoul(row[34], nullptr, 10)) : 0;
e.drakkin_heritage = row[35] ? static_cast<uint32_t>(strtoul(row[35], nullptr, 10)) : 0;
e.drakkin_tattoo = row[36] ? static_cast<uint32_t>(strtoul(row[36], nullptr, 10)) : 0;
e.drakkin_details = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.wc_1 = row[38] ? static_cast<uint32_t>(strtoul(row[38], nullptr, 10)) : 0;
e.wc_2 = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.wc_3 = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.wc_4 = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.wc_5 = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.wc_6 = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.wc_7 = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.wc_8 = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.wc_9 = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
return e;
}
@@ -601,53 +603,53 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCorpses e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.charname = row[2] ? row[2] : "";
e.zone_id = static_cast<int16_t>(atoi(row[3]));
e.instance_id = static_cast<uint16_t>(strtoul(row[4], nullptr, 10));
e.x = strtof(row[5], nullptr);
e.y = strtof(row[6], nullptr);
e.z = strtof(row[7], nullptr);
e.heading = strtof(row[8], nullptr);
e.instance_id = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.x = row[5] ? strtof(row[5], nullptr) : 0;
e.y = row[6] ? strtof(row[6], nullptr) : 0;
e.z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = row[8] ? strtof(row[8], nullptr) : 0;
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.is_rezzed = static_cast<uint8_t>(strtoul(row[11], nullptr, 10));
e.guild_consent_id = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
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.was_at_graveyard = static_cast<int8_t>(atoi(row[13]));
e.is_locked = static_cast<int8_t>(atoi(row[14]));
e.exp = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.size = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.level = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.race = static_cast<uint32_t>(strtoul(row[18], nullptr, 10));
e.gender = static_cast<uint32_t>(strtoul(row[19], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[20], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[21], nullptr, 10));
e.texture = static_cast<uint32_t>(strtoul(row[22], nullptr, 10));
e.helm_texture = static_cast<uint32_t>(strtoul(row[23], nullptr, 10));
e.copper = static_cast<uint32_t>(strtoul(row[24], nullptr, 10));
e.silver = static_cast<uint32_t>(strtoul(row[25], nullptr, 10));
e.gold = static_cast<uint32_t>(strtoul(row[26], nullptr, 10));
e.platinum = static_cast<uint32_t>(strtoul(row[27], nullptr, 10));
e.hair_color = static_cast<uint32_t>(strtoul(row[28], nullptr, 10));
e.beard_color = static_cast<uint32_t>(strtoul(row[29], nullptr, 10));
e.eye_color_1 = static_cast<uint32_t>(strtoul(row[30], nullptr, 10));
e.eye_color_2 = static_cast<uint32_t>(strtoul(row[31], nullptr, 10));
e.hair_style = static_cast<uint32_t>(strtoul(row[32], nullptr, 10));
e.face = static_cast<uint32_t>(strtoul(row[33], nullptr, 10));
e.beard = static_cast<uint32_t>(strtoul(row[34], nullptr, 10));
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[35], nullptr, 10));
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[36], nullptr, 10));
e.drakkin_details = static_cast<uint32_t>(strtoul(row[37], nullptr, 10));
e.wc_1 = static_cast<uint32_t>(strtoul(row[38], nullptr, 10));
e.wc_2 = static_cast<uint32_t>(strtoul(row[39], nullptr, 10));
e.wc_3 = static_cast<uint32_t>(strtoul(row[40], nullptr, 10));
e.wc_4 = static_cast<uint32_t>(strtoul(row[41], nullptr, 10));
e.wc_5 = static_cast<uint32_t>(strtoul(row[42], nullptr, 10));
e.wc_6 = static_cast<uint32_t>(strtoul(row[43], nullptr, 10));
e.wc_7 = static_cast<uint32_t>(strtoul(row[44], nullptr, 10));
e.wc_8 = static_cast<uint32_t>(strtoul(row[45], nullptr, 10));
e.wc_9 = static_cast<uint32_t>(strtoul(row[46], nullptr, 10));
e.exp = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.size = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.level = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.race = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.gender = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.class_ = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.deity = row[21] ? static_cast<uint32_t>(strtoul(row[21], nullptr, 10)) : 0;
e.texture = row[22] ? static_cast<uint32_t>(strtoul(row[22], nullptr, 10)) : 0;
e.helm_texture = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.copper = row[24] ? static_cast<uint32_t>(strtoul(row[24], nullptr, 10)) : 0;
e.silver = row[25] ? static_cast<uint32_t>(strtoul(row[25], nullptr, 10)) : 0;
e.gold = row[26] ? static_cast<uint32_t>(strtoul(row[26], nullptr, 10)) : 0;
e.platinum = row[27] ? static_cast<uint32_t>(strtoul(row[27], nullptr, 10)) : 0;
e.hair_color = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.beard_color = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 0;
e.eye_color_1 = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.eye_color_2 = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.hair_style = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.face = row[33] ? static_cast<uint32_t>(strtoul(row[33], nullptr, 10)) : 0;
e.beard = row[34] ? static_cast<uint32_t>(strtoul(row[34], nullptr, 10)) : 0;
e.drakkin_heritage = row[35] ? static_cast<uint32_t>(strtoul(row[35], nullptr, 10)) : 0;
e.drakkin_tattoo = row[36] ? static_cast<uint32_t>(strtoul(row[36], nullptr, 10)) : 0;
e.drakkin_details = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.wc_1 = row[38] ? static_cast<uint32_t>(strtoul(row[38], nullptr, 10)) : 0;
e.wc_2 = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.wc_3 = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.wc_4 = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.wc_5 = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.wc_6 = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.wc_7 = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.wc_8 = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.wc_9 = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -672,53 +674,53 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCorpses e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.charid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.charid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.charname = row[2] ? row[2] : "";
e.zone_id = static_cast<int16_t>(atoi(row[3]));
e.instance_id = static_cast<uint16_t>(strtoul(row[4], nullptr, 10));
e.x = strtof(row[5], nullptr);
e.y = strtof(row[6], nullptr);
e.z = strtof(row[7], nullptr);
e.heading = strtof(row[8], nullptr);
e.instance_id = row[4] ? static_cast<uint16_t>(strtoul(row[4], nullptr, 10)) : 0;
e.x = row[5] ? strtof(row[5], nullptr) : 0;
e.y = row[6] ? strtof(row[6], nullptr) : 0;
e.z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = row[8] ? strtof(row[8], nullptr) : 0;
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.is_rezzed = static_cast<uint8_t>(strtoul(row[11], nullptr, 10));
e.guild_consent_id = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
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.was_at_graveyard = static_cast<int8_t>(atoi(row[13]));
e.is_locked = static_cast<int8_t>(atoi(row[14]));
e.exp = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.size = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.level = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.race = static_cast<uint32_t>(strtoul(row[18], nullptr, 10));
e.gender = static_cast<uint32_t>(strtoul(row[19], nullptr, 10));
e.class_ = static_cast<uint32_t>(strtoul(row[20], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[21], nullptr, 10));
e.texture = static_cast<uint32_t>(strtoul(row[22], nullptr, 10));
e.helm_texture = static_cast<uint32_t>(strtoul(row[23], nullptr, 10));
e.copper = static_cast<uint32_t>(strtoul(row[24], nullptr, 10));
e.silver = static_cast<uint32_t>(strtoul(row[25], nullptr, 10));
e.gold = static_cast<uint32_t>(strtoul(row[26], nullptr, 10));
e.platinum = static_cast<uint32_t>(strtoul(row[27], nullptr, 10));
e.hair_color = static_cast<uint32_t>(strtoul(row[28], nullptr, 10));
e.beard_color = static_cast<uint32_t>(strtoul(row[29], nullptr, 10));
e.eye_color_1 = static_cast<uint32_t>(strtoul(row[30], nullptr, 10));
e.eye_color_2 = static_cast<uint32_t>(strtoul(row[31], nullptr, 10));
e.hair_style = static_cast<uint32_t>(strtoul(row[32], nullptr, 10));
e.face = static_cast<uint32_t>(strtoul(row[33], nullptr, 10));
e.beard = static_cast<uint32_t>(strtoul(row[34], nullptr, 10));
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[35], nullptr, 10));
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[36], nullptr, 10));
e.drakkin_details = static_cast<uint32_t>(strtoul(row[37], nullptr, 10));
e.wc_1 = static_cast<uint32_t>(strtoul(row[38], nullptr, 10));
e.wc_2 = static_cast<uint32_t>(strtoul(row[39], nullptr, 10));
e.wc_3 = static_cast<uint32_t>(strtoul(row[40], nullptr, 10));
e.wc_4 = static_cast<uint32_t>(strtoul(row[41], nullptr, 10));
e.wc_5 = static_cast<uint32_t>(strtoul(row[42], nullptr, 10));
e.wc_6 = static_cast<uint32_t>(strtoul(row[43], nullptr, 10));
e.wc_7 = static_cast<uint32_t>(strtoul(row[44], nullptr, 10));
e.wc_8 = static_cast<uint32_t>(strtoul(row[45], nullptr, 10));
e.wc_9 = static_cast<uint32_t>(strtoul(row[46], nullptr, 10));
e.exp = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.size = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.level = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.race = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.gender = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.class_ = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.deity = row[21] ? static_cast<uint32_t>(strtoul(row[21], nullptr, 10)) : 0;
e.texture = row[22] ? static_cast<uint32_t>(strtoul(row[22], nullptr, 10)) : 0;
e.helm_texture = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.copper = row[24] ? static_cast<uint32_t>(strtoul(row[24], nullptr, 10)) : 0;
e.silver = row[25] ? static_cast<uint32_t>(strtoul(row[25], nullptr, 10)) : 0;
e.gold = row[26] ? static_cast<uint32_t>(strtoul(row[26], nullptr, 10)) : 0;
e.platinum = row[27] ? static_cast<uint32_t>(strtoul(row[27], nullptr, 10)) : 0;
e.hair_color = row[28] ? static_cast<uint32_t>(strtoul(row[28], nullptr, 10)) : 0;
e.beard_color = row[29] ? static_cast<uint32_t>(strtoul(row[29], nullptr, 10)) : 0;
e.eye_color_1 = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.eye_color_2 = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.hair_style = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.face = row[33] ? static_cast<uint32_t>(strtoul(row[33], nullptr, 10)) : 0;
e.beard = row[34] ? static_cast<uint32_t>(strtoul(row[34], nullptr, 10)) : 0;
e.drakkin_heritage = row[35] ? static_cast<uint32_t>(strtoul(row[35], nullptr, 10)) : 0;
e.drakkin_tattoo = row[36] ? static_cast<uint32_t>(strtoul(row[36], nullptr, 10)) : 0;
e.drakkin_details = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.wc_1 = row[38] ? static_cast<uint32_t>(strtoul(row[38], nullptr, 10)) : 0;
e.wc_2 = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.wc_3 = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.wc_4 = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.wc_5 = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.wc_6 = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.wc_7 = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.wc_8 = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.wc_9 = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -777,6 +779,154 @@ public:
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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterCurrencyRepository {
public:
struct CharacterCurrency {
@@ -180,23 +179,23 @@ public:
if (results.RowCount() == 1) {
CharacterCurrency e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.platinum = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.gold = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.silver = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.copper = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.platinum_bank = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.gold_bank = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.silver_bank = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.copper_bank = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.platinum_cursor = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.gold_cursor = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.silver_cursor = static_cast<uint32_t>(strtoul(row[11], nullptr, 10));
e.copper_cursor = static_cast<uint32_t>(strtoul(row[12], nullptr, 10));
e.radiant_crystals = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.career_radiant_crystals = static_cast<uint32_t>(strtoul(row[14], nullptr, 10));
e.ebon_crystals = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.career_ebon_crystals = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.platinum = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.gold = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.silver = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.copper = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.platinum_bank = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.gold_bank = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.silver_bank = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.copper_bank = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.platinum_cursor = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.gold_cursor = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.silver_cursor = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.copper_cursor = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.radiant_crystals = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.career_radiant_crystals = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.ebon_crystals = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.career_ebon_crystals = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
return e;
}
@@ -364,23 +363,23 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCurrency e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.platinum = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.gold = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.silver = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.copper = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.platinum_bank = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.gold_bank = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.silver_bank = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.copper_bank = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.platinum_cursor = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.gold_cursor = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.silver_cursor = static_cast<uint32_t>(strtoul(row[11], nullptr, 10));
e.copper_cursor = static_cast<uint32_t>(strtoul(row[12], nullptr, 10));
e.radiant_crystals = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.career_radiant_crystals = static_cast<uint32_t>(strtoul(row[14], nullptr, 10));
e.ebon_crystals = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.career_ebon_crystals = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.platinum = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.gold = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.silver = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.copper = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.platinum_bank = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.gold_bank = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.silver_bank = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.copper_bank = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.platinum_cursor = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.gold_cursor = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.silver_cursor = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.copper_cursor = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.radiant_crystals = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.career_radiant_crystals = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.ebon_crystals = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.career_ebon_crystals = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -405,23 +404,23 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterCurrency e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.platinum = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.gold = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.silver = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.copper = static_cast<uint32_t>(strtoul(row[4], nullptr, 10));
e.platinum_bank = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.gold_bank = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.silver_bank = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.copper_bank = static_cast<uint32_t>(strtoul(row[8], nullptr, 10));
e.platinum_cursor = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.gold_cursor = static_cast<uint32_t>(strtoul(row[10], nullptr, 10));
e.silver_cursor = static_cast<uint32_t>(strtoul(row[11], nullptr, 10));
e.copper_cursor = static_cast<uint32_t>(strtoul(row[12], nullptr, 10));
e.radiant_crystals = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.career_radiant_crystals = static_cast<uint32_t>(strtoul(row[14], nullptr, 10));
e.ebon_crystals = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.career_ebon_crystals = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.platinum = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.gold = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.silver = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.copper = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
e.platinum_bank = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.gold_bank = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.silver_bank = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.copper_bank = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.platinum_cursor = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.gold_cursor = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
e.silver_cursor = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.copper_cursor = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.radiant_crystals = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.career_radiant_crystals = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.ebon_crystals = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.career_ebon_crystals = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterDataRepository {
public:
struct CharacterData {
@@ -524,108 +523,108 @@ public:
if (results.RowCount() == 1) {
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.name = row[2] ? row[2] : "";
e.last_name = row[3] ? row[3] : "";
e.title = row[4] ? row[4] : "";
e.suffix = row[5] ? row[5] : "";
e.zone_id = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.zone_instance = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.y = strtof(row[8], nullptr);
e.x = strtof(row[9], nullptr);
e.z = strtof(row[10], nullptr);
e.heading = strtof(row[11], nullptr);
e.gender = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.race = static_cast<uint16_t>(strtoul(row[13], nullptr, 10));
e.class_ = static_cast<uint8_t>(strtoul(row[14], nullptr, 10));
e.level = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.birthday = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.last_login = static_cast<uint32_t>(strtoul(row[18], nullptr, 10));
e.time_played = static_cast<uint32_t>(strtoul(row[19], nullptr, 10));
e.level2 = static_cast<uint8_t>(strtoul(row[20], nullptr, 10));
e.anon = static_cast<uint8_t>(strtoul(row[21], nullptr, 10));
e.gm = static_cast<uint8_t>(strtoul(row[22], nullptr, 10));
e.face = static_cast<uint32_t>(strtoul(row[23], nullptr, 10));
e.hair_color = static_cast<uint8_t>(strtoul(row[24], nullptr, 10));
e.hair_style = static_cast<uint8_t>(strtoul(row[25], nullptr, 10));
e.beard = static_cast<uint8_t>(strtoul(row[26], nullptr, 10));
e.beard_color = static_cast<uint8_t>(strtoul(row[27], nullptr, 10));
e.eye_color_1 = static_cast<uint8_t>(strtoul(row[28], nullptr, 10));
e.eye_color_2 = static_cast<uint8_t>(strtoul(row[29], nullptr, 10));
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[30], nullptr, 10));
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[31], nullptr, 10));
e.drakkin_details = static_cast<uint32_t>(strtoul(row[32], nullptr, 10));
e.ability_time_seconds = static_cast<uint8_t>(strtoul(row[33], nullptr, 10));
e.ability_number = static_cast<uint8_t>(strtoul(row[34], nullptr, 10));
e.ability_time_minutes = static_cast<uint8_t>(strtoul(row[35], nullptr, 10));
e.ability_time_hours = static_cast<uint8_t>(strtoul(row[36], nullptr, 10));
e.exp = static_cast<uint32_t>(strtoul(row[37], nullptr, 10));
e.exp_enabled = static_cast<uint8_t>(strtoul(row[38], nullptr, 10));
e.aa_points_spent = static_cast<uint32_t>(strtoul(row[39], nullptr, 10));
e.aa_exp = static_cast<uint32_t>(strtoul(row[40], nullptr, 10));
e.aa_points = static_cast<uint32_t>(strtoul(row[41], nullptr, 10));
e.group_leadership_exp = static_cast<uint32_t>(strtoul(row[42], nullptr, 10));
e.raid_leadership_exp = static_cast<uint32_t>(strtoul(row[43], nullptr, 10));
e.group_leadership_points = static_cast<uint32_t>(strtoul(row[44], nullptr, 10));
e.raid_leadership_points = static_cast<uint32_t>(strtoul(row[45], nullptr, 10));
e.points = static_cast<uint32_t>(strtoul(row[46], nullptr, 10));
e.cur_hp = static_cast<uint32_t>(strtoul(row[47], nullptr, 10));
e.mana = static_cast<uint32_t>(strtoul(row[48], nullptr, 10));
e.endurance = static_cast<uint32_t>(strtoul(row[49], nullptr, 10));
e.intoxication = static_cast<uint32_t>(strtoul(row[50], nullptr, 10));
e.str = static_cast<uint32_t>(strtoul(row[51], nullptr, 10));
e.sta = static_cast<uint32_t>(strtoul(row[52], nullptr, 10));
e.cha = static_cast<uint32_t>(strtoul(row[53], nullptr, 10));
e.dex = static_cast<uint32_t>(strtoul(row[54], nullptr, 10));
e.int_ = static_cast<uint32_t>(strtoul(row[55], nullptr, 10));
e.agi = static_cast<uint32_t>(strtoul(row[56], nullptr, 10));
e.wis = static_cast<uint32_t>(strtoul(row[57], nullptr, 10));
e.zone_change_count = static_cast<uint32_t>(strtoul(row[58], nullptr, 10));
e.toxicity = static_cast<uint32_t>(strtoul(row[59], nullptr, 10));
e.hunger_level = static_cast<uint32_t>(strtoul(row[60], nullptr, 10));
e.thirst_level = static_cast<uint32_t>(strtoul(row[61], nullptr, 10));
e.ability_up = static_cast<uint32_t>(strtoul(row[62], nullptr, 10));
e.ldon_points_guk = static_cast<uint32_t>(strtoul(row[63], nullptr, 10));
e.ldon_points_mir = static_cast<uint32_t>(strtoul(row[64], nullptr, 10));
e.ldon_points_mmc = static_cast<uint32_t>(strtoul(row[65], nullptr, 10));
e.ldon_points_ruj = static_cast<uint32_t>(strtoul(row[66], nullptr, 10));
e.ldon_points_tak = static_cast<uint32_t>(strtoul(row[67], nullptr, 10));
e.ldon_points_available = static_cast<uint32_t>(strtoul(row[68], nullptr, 10));
e.tribute_time_remaining = static_cast<uint32_t>(strtoul(row[69], nullptr, 10));
e.career_tribute_points = static_cast<uint32_t>(strtoul(row[70], nullptr, 10));
e.tribute_points = static_cast<uint32_t>(strtoul(row[71], nullptr, 10));
e.tribute_active = static_cast<uint32_t>(strtoul(row[72], nullptr, 10));
e.pvp_status = static_cast<uint8_t>(strtoul(row[73], nullptr, 10));
e.pvp_kills = static_cast<uint32_t>(strtoul(row[74], nullptr, 10));
e.pvp_deaths = static_cast<uint32_t>(strtoul(row[75], nullptr, 10));
e.pvp_current_points = static_cast<uint32_t>(strtoul(row[76], nullptr, 10));
e.pvp_career_points = static_cast<uint32_t>(strtoul(row[77], nullptr, 10));
e.pvp_best_kill_streak = static_cast<uint32_t>(strtoul(row[78], nullptr, 10));
e.pvp_worst_death_streak = static_cast<uint32_t>(strtoul(row[79], nullptr, 10));
e.pvp_current_kill_streak = static_cast<uint32_t>(strtoul(row[80], nullptr, 10));
e.pvp2 = static_cast<uint32_t>(strtoul(row[81], nullptr, 10));
e.pvp_type = static_cast<uint32_t>(strtoul(row[82], nullptr, 10));
e.show_helm = static_cast<uint32_t>(strtoul(row[83], nullptr, 10));
e.group_auto_consent = static_cast<uint8_t>(strtoul(row[84], nullptr, 10));
e.raid_auto_consent = static_cast<uint8_t>(strtoul(row[85], nullptr, 10));
e.guild_auto_consent = static_cast<uint8_t>(strtoul(row[86], nullptr, 10));
e.leadership_exp_on = static_cast<uint8_t>(strtoul(row[87], nullptr, 10));
e.RestTimer = static_cast<uint32_t>(strtoul(row[88], nullptr, 10));
e.air_remaining = static_cast<uint32_t>(strtoul(row[89], nullptr, 10));
e.autosplit_enabled = static_cast<uint32_t>(strtoul(row[90], nullptr, 10));
e.lfp = static_cast<uint8_t>(strtoul(row[91], nullptr, 10));
e.lfg = static_cast<uint8_t>(strtoul(row[92], nullptr, 10));
e.zone_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.zone_instance = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.y = row[8] ? strtof(row[8], nullptr) : 0;
e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.gender = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.race = row[13] ? static_cast<uint16_t>(strtoul(row[13], nullptr, 10)) : 0;
e.class_ = row[14] ? static_cast<uint8_t>(strtoul(row[14], nullptr, 10)) : 0;
e.level = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.deity = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.birthday = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.last_login = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.time_played = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.level2 = row[20] ? static_cast<uint8_t>(strtoul(row[20], nullptr, 10)) : 0;
e.anon = row[21] ? static_cast<uint8_t>(strtoul(row[21], nullptr, 10)) : 0;
e.gm = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
e.face = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.hair_color = row[24] ? static_cast<uint8_t>(strtoul(row[24], nullptr, 10)) : 0;
e.hair_style = row[25] ? static_cast<uint8_t>(strtoul(row[25], nullptr, 10)) : 0;
e.beard = row[26] ? static_cast<uint8_t>(strtoul(row[26], nullptr, 10)) : 0;
e.beard_color = row[27] ? static_cast<uint8_t>(strtoul(row[27], nullptr, 10)) : 0;
e.eye_color_1 = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.eye_color_2 = row[29] ? static_cast<uint8_t>(strtoul(row[29], nullptr, 10)) : 0;
e.drakkin_heritage = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.drakkin_tattoo = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.drakkin_details = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.ability_time_seconds = row[33] ? static_cast<uint8_t>(strtoul(row[33], nullptr, 10)) : 0;
e.ability_number = row[34] ? static_cast<uint8_t>(strtoul(row[34], nullptr, 10)) : 0;
e.ability_time_minutes = row[35] ? static_cast<uint8_t>(strtoul(row[35], nullptr, 10)) : 0;
e.ability_time_hours = row[36] ? static_cast<uint8_t>(strtoul(row[36], nullptr, 10)) : 0;
e.exp = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.exp_enabled = row[38] ? static_cast<uint8_t>(strtoul(row[38], nullptr, 10)) : 1;
e.aa_points_spent = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.aa_exp = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.aa_points = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.group_leadership_exp = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.raid_leadership_exp = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.group_leadership_points = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.raid_leadership_points = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.points = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
e.cur_hp = row[47] ? static_cast<uint32_t>(strtoul(row[47], nullptr, 10)) : 0;
e.mana = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
e.endurance = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
e.intoxication = row[50] ? static_cast<uint32_t>(strtoul(row[50], nullptr, 10)) : 0;
e.str = row[51] ? static_cast<uint32_t>(strtoul(row[51], nullptr, 10)) : 0;
e.sta = row[52] ? static_cast<uint32_t>(strtoul(row[52], nullptr, 10)) : 0;
e.cha = row[53] ? static_cast<uint32_t>(strtoul(row[53], nullptr, 10)) : 0;
e.dex = row[54] ? static_cast<uint32_t>(strtoul(row[54], nullptr, 10)) : 0;
e.int_ = row[55] ? static_cast<uint32_t>(strtoul(row[55], nullptr, 10)) : 0;
e.agi = row[56] ? static_cast<uint32_t>(strtoul(row[56], nullptr, 10)) : 0;
e.wis = row[57] ? static_cast<uint32_t>(strtoul(row[57], nullptr, 10)) : 0;
e.zone_change_count = row[58] ? static_cast<uint32_t>(strtoul(row[58], nullptr, 10)) : 0;
e.toxicity = row[59] ? static_cast<uint32_t>(strtoul(row[59], nullptr, 10)) : 0;
e.hunger_level = row[60] ? static_cast<uint32_t>(strtoul(row[60], nullptr, 10)) : 0;
e.thirst_level = row[61] ? static_cast<uint32_t>(strtoul(row[61], nullptr, 10)) : 0;
e.ability_up = row[62] ? static_cast<uint32_t>(strtoul(row[62], nullptr, 10)) : 0;
e.ldon_points_guk = row[63] ? static_cast<uint32_t>(strtoul(row[63], nullptr, 10)) : 0;
e.ldon_points_mir = row[64] ? static_cast<uint32_t>(strtoul(row[64], nullptr, 10)) : 0;
e.ldon_points_mmc = row[65] ? static_cast<uint32_t>(strtoul(row[65], nullptr, 10)) : 0;
e.ldon_points_ruj = row[66] ? static_cast<uint32_t>(strtoul(row[66], nullptr, 10)) : 0;
e.ldon_points_tak = row[67] ? static_cast<uint32_t>(strtoul(row[67], nullptr, 10)) : 0;
e.ldon_points_available = row[68] ? static_cast<uint32_t>(strtoul(row[68], nullptr, 10)) : 0;
e.tribute_time_remaining = row[69] ? static_cast<uint32_t>(strtoul(row[69], nullptr, 10)) : 0;
e.career_tribute_points = row[70] ? static_cast<uint32_t>(strtoul(row[70], nullptr, 10)) : 0;
e.tribute_points = row[71] ? static_cast<uint32_t>(strtoul(row[71], nullptr, 10)) : 0;
e.tribute_active = row[72] ? static_cast<uint32_t>(strtoul(row[72], nullptr, 10)) : 0;
e.pvp_status = row[73] ? static_cast<uint8_t>(strtoul(row[73], nullptr, 10)) : 0;
e.pvp_kills = row[74] ? static_cast<uint32_t>(strtoul(row[74], nullptr, 10)) : 0;
e.pvp_deaths = row[75] ? static_cast<uint32_t>(strtoul(row[75], nullptr, 10)) : 0;
e.pvp_current_points = row[76] ? static_cast<uint32_t>(strtoul(row[76], nullptr, 10)) : 0;
e.pvp_career_points = row[77] ? static_cast<uint32_t>(strtoul(row[77], nullptr, 10)) : 0;
e.pvp_best_kill_streak = row[78] ? static_cast<uint32_t>(strtoul(row[78], nullptr, 10)) : 0;
e.pvp_worst_death_streak = row[79] ? static_cast<uint32_t>(strtoul(row[79], nullptr, 10)) : 0;
e.pvp_current_kill_streak = row[80] ? static_cast<uint32_t>(strtoul(row[80], nullptr, 10)) : 0;
e.pvp2 = row[81] ? static_cast<uint32_t>(strtoul(row[81], nullptr, 10)) : 0;
e.pvp_type = row[82] ? static_cast<uint32_t>(strtoul(row[82], nullptr, 10)) : 0;
e.show_helm = row[83] ? static_cast<uint32_t>(strtoul(row[83], nullptr, 10)) : 0;
e.group_auto_consent = row[84] ? static_cast<uint8_t>(strtoul(row[84], nullptr, 10)) : 0;
e.raid_auto_consent = row[85] ? static_cast<uint8_t>(strtoul(row[85], nullptr, 10)) : 0;
e.guild_auto_consent = row[86] ? static_cast<uint8_t>(strtoul(row[86], nullptr, 10)) : 0;
e.leadership_exp_on = row[87] ? static_cast<uint8_t>(strtoul(row[87], nullptr, 10)) : 0;
e.RestTimer = row[88] ? static_cast<uint32_t>(strtoul(row[88], nullptr, 10)) : 0;
e.air_remaining = row[89] ? static_cast<uint32_t>(strtoul(row[89], nullptr, 10)) : 0;
e.autosplit_enabled = row[90] ? static_cast<uint32_t>(strtoul(row[90], nullptr, 10)) : 0;
e.lfp = row[91] ? static_cast<uint8_t>(strtoul(row[91], nullptr, 10)) : 0;
e.lfg = row[92] ? static_cast<uint8_t>(strtoul(row[92], nullptr, 10)) : 0;
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.e_aa_effects = static_cast<uint32_t>(strtoul(row[96], nullptr, 10));
e.e_percent_to_aa = static_cast<uint32_t>(strtoul(row[97], nullptr, 10));
e.e_expended_aa_spent = static_cast<uint32_t>(strtoul(row[98], nullptr, 10));
e.aa_points_spent_old = static_cast<uint32_t>(strtoul(row[99], nullptr, 10));
e.aa_points_old = static_cast<uint32_t>(strtoul(row[100], nullptr, 10));
e.e_last_invsnapshot = static_cast<uint32_t>(strtoul(row[101], nullptr, 10));
e.e_aa_effects = row[96] ? static_cast<uint32_t>(strtoul(row[96], nullptr, 10)) : 0;
e.e_percent_to_aa = row[97] ? static_cast<uint32_t>(strtoul(row[97], nullptr, 10)) : 0;
e.e_expended_aa_spent = row[98] ? static_cast<uint32_t>(strtoul(row[98], nullptr, 10)) : 0;
e.aa_points_spent_old = row[99] ? static_cast<uint32_t>(strtoul(row[99], nullptr, 10)) : 0;
e.aa_points_old = row[100] ? static_cast<uint32_t>(strtoul(row[100], nullptr, 10)) : 0;
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);
return e;
@@ -1051,108 +1050,108 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.name = row[2] ? row[2] : "";
e.last_name = row[3] ? row[3] : "";
e.title = row[4] ? row[4] : "";
e.suffix = row[5] ? row[5] : "";
e.zone_id = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.zone_instance = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.y = strtof(row[8], nullptr);
e.x = strtof(row[9], nullptr);
e.z = strtof(row[10], nullptr);
e.heading = strtof(row[11], nullptr);
e.gender = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.race = static_cast<uint16_t>(strtoul(row[13], nullptr, 10));
e.class_ = static_cast<uint8_t>(strtoul(row[14], nullptr, 10));
e.level = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.birthday = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.last_login = static_cast<uint32_t>(strtoul(row[18], nullptr, 10));
e.time_played = static_cast<uint32_t>(strtoul(row[19], nullptr, 10));
e.level2 = static_cast<uint8_t>(strtoul(row[20], nullptr, 10));
e.anon = static_cast<uint8_t>(strtoul(row[21], nullptr, 10));
e.gm = static_cast<uint8_t>(strtoul(row[22], nullptr, 10));
e.face = static_cast<uint32_t>(strtoul(row[23], nullptr, 10));
e.hair_color = static_cast<uint8_t>(strtoul(row[24], nullptr, 10));
e.hair_style = static_cast<uint8_t>(strtoul(row[25], nullptr, 10));
e.beard = static_cast<uint8_t>(strtoul(row[26], nullptr, 10));
e.beard_color = static_cast<uint8_t>(strtoul(row[27], nullptr, 10));
e.eye_color_1 = static_cast<uint8_t>(strtoul(row[28], nullptr, 10));
e.eye_color_2 = static_cast<uint8_t>(strtoul(row[29], nullptr, 10));
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[30], nullptr, 10));
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[31], nullptr, 10));
e.drakkin_details = static_cast<uint32_t>(strtoul(row[32], nullptr, 10));
e.ability_time_seconds = static_cast<uint8_t>(strtoul(row[33], nullptr, 10));
e.ability_number = static_cast<uint8_t>(strtoul(row[34], nullptr, 10));
e.ability_time_minutes = static_cast<uint8_t>(strtoul(row[35], nullptr, 10));
e.ability_time_hours = static_cast<uint8_t>(strtoul(row[36], nullptr, 10));
e.exp = static_cast<uint32_t>(strtoul(row[37], nullptr, 10));
e.exp_enabled = static_cast<uint8_t>(strtoul(row[38], nullptr, 10));
e.aa_points_spent = static_cast<uint32_t>(strtoul(row[39], nullptr, 10));
e.aa_exp = static_cast<uint32_t>(strtoul(row[40], nullptr, 10));
e.aa_points = static_cast<uint32_t>(strtoul(row[41], nullptr, 10));
e.group_leadership_exp = static_cast<uint32_t>(strtoul(row[42], nullptr, 10));
e.raid_leadership_exp = static_cast<uint32_t>(strtoul(row[43], nullptr, 10));
e.group_leadership_points = static_cast<uint32_t>(strtoul(row[44], nullptr, 10));
e.raid_leadership_points = static_cast<uint32_t>(strtoul(row[45], nullptr, 10));
e.points = static_cast<uint32_t>(strtoul(row[46], nullptr, 10));
e.cur_hp = static_cast<uint32_t>(strtoul(row[47], nullptr, 10));
e.mana = static_cast<uint32_t>(strtoul(row[48], nullptr, 10));
e.endurance = static_cast<uint32_t>(strtoul(row[49], nullptr, 10));
e.intoxication = static_cast<uint32_t>(strtoul(row[50], nullptr, 10));
e.str = static_cast<uint32_t>(strtoul(row[51], nullptr, 10));
e.sta = static_cast<uint32_t>(strtoul(row[52], nullptr, 10));
e.cha = static_cast<uint32_t>(strtoul(row[53], nullptr, 10));
e.dex = static_cast<uint32_t>(strtoul(row[54], nullptr, 10));
e.int_ = static_cast<uint32_t>(strtoul(row[55], nullptr, 10));
e.agi = static_cast<uint32_t>(strtoul(row[56], nullptr, 10));
e.wis = static_cast<uint32_t>(strtoul(row[57], nullptr, 10));
e.zone_change_count = static_cast<uint32_t>(strtoul(row[58], nullptr, 10));
e.toxicity = static_cast<uint32_t>(strtoul(row[59], nullptr, 10));
e.hunger_level = static_cast<uint32_t>(strtoul(row[60], nullptr, 10));
e.thirst_level = static_cast<uint32_t>(strtoul(row[61], nullptr, 10));
e.ability_up = static_cast<uint32_t>(strtoul(row[62], nullptr, 10));
e.ldon_points_guk = static_cast<uint32_t>(strtoul(row[63], nullptr, 10));
e.ldon_points_mir = static_cast<uint32_t>(strtoul(row[64], nullptr, 10));
e.ldon_points_mmc = static_cast<uint32_t>(strtoul(row[65], nullptr, 10));
e.ldon_points_ruj = static_cast<uint32_t>(strtoul(row[66], nullptr, 10));
e.ldon_points_tak = static_cast<uint32_t>(strtoul(row[67], nullptr, 10));
e.ldon_points_available = static_cast<uint32_t>(strtoul(row[68], nullptr, 10));
e.tribute_time_remaining = static_cast<uint32_t>(strtoul(row[69], nullptr, 10));
e.career_tribute_points = static_cast<uint32_t>(strtoul(row[70], nullptr, 10));
e.tribute_points = static_cast<uint32_t>(strtoul(row[71], nullptr, 10));
e.tribute_active = static_cast<uint32_t>(strtoul(row[72], nullptr, 10));
e.pvp_status = static_cast<uint8_t>(strtoul(row[73], nullptr, 10));
e.pvp_kills = static_cast<uint32_t>(strtoul(row[74], nullptr, 10));
e.pvp_deaths = static_cast<uint32_t>(strtoul(row[75], nullptr, 10));
e.pvp_current_points = static_cast<uint32_t>(strtoul(row[76], nullptr, 10));
e.pvp_career_points = static_cast<uint32_t>(strtoul(row[77], nullptr, 10));
e.pvp_best_kill_streak = static_cast<uint32_t>(strtoul(row[78], nullptr, 10));
e.pvp_worst_death_streak = static_cast<uint32_t>(strtoul(row[79], nullptr, 10));
e.pvp_current_kill_streak = static_cast<uint32_t>(strtoul(row[80], nullptr, 10));
e.pvp2 = static_cast<uint32_t>(strtoul(row[81], nullptr, 10));
e.pvp_type = static_cast<uint32_t>(strtoul(row[82], nullptr, 10));
e.show_helm = static_cast<uint32_t>(strtoul(row[83], nullptr, 10));
e.group_auto_consent = static_cast<uint8_t>(strtoul(row[84], nullptr, 10));
e.raid_auto_consent = static_cast<uint8_t>(strtoul(row[85], nullptr, 10));
e.guild_auto_consent = static_cast<uint8_t>(strtoul(row[86], nullptr, 10));
e.leadership_exp_on = static_cast<uint8_t>(strtoul(row[87], nullptr, 10));
e.RestTimer = static_cast<uint32_t>(strtoul(row[88], nullptr, 10));
e.air_remaining = static_cast<uint32_t>(strtoul(row[89], nullptr, 10));
e.autosplit_enabled = static_cast<uint32_t>(strtoul(row[90], nullptr, 10));
e.lfp = static_cast<uint8_t>(strtoul(row[91], nullptr, 10));
e.lfg = static_cast<uint8_t>(strtoul(row[92], nullptr, 10));
e.zone_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.zone_instance = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.y = row[8] ? strtof(row[8], nullptr) : 0;
e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.gender = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.race = row[13] ? static_cast<uint16_t>(strtoul(row[13], nullptr, 10)) : 0;
e.class_ = row[14] ? static_cast<uint8_t>(strtoul(row[14], nullptr, 10)) : 0;
e.level = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.deity = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.birthday = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.last_login = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.time_played = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.level2 = row[20] ? static_cast<uint8_t>(strtoul(row[20], nullptr, 10)) : 0;
e.anon = row[21] ? static_cast<uint8_t>(strtoul(row[21], nullptr, 10)) : 0;
e.gm = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
e.face = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.hair_color = row[24] ? static_cast<uint8_t>(strtoul(row[24], nullptr, 10)) : 0;
e.hair_style = row[25] ? static_cast<uint8_t>(strtoul(row[25], nullptr, 10)) : 0;
e.beard = row[26] ? static_cast<uint8_t>(strtoul(row[26], nullptr, 10)) : 0;
e.beard_color = row[27] ? static_cast<uint8_t>(strtoul(row[27], nullptr, 10)) : 0;
e.eye_color_1 = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.eye_color_2 = row[29] ? static_cast<uint8_t>(strtoul(row[29], nullptr, 10)) : 0;
e.drakkin_heritage = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.drakkin_tattoo = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.drakkin_details = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.ability_time_seconds = row[33] ? static_cast<uint8_t>(strtoul(row[33], nullptr, 10)) : 0;
e.ability_number = row[34] ? static_cast<uint8_t>(strtoul(row[34], nullptr, 10)) : 0;
e.ability_time_minutes = row[35] ? static_cast<uint8_t>(strtoul(row[35], nullptr, 10)) : 0;
e.ability_time_hours = row[36] ? static_cast<uint8_t>(strtoul(row[36], nullptr, 10)) : 0;
e.exp = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.exp_enabled = row[38] ? static_cast<uint8_t>(strtoul(row[38], nullptr, 10)) : 1;
e.aa_points_spent = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.aa_exp = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.aa_points = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.group_leadership_exp = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.raid_leadership_exp = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.group_leadership_points = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.raid_leadership_points = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.points = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
e.cur_hp = row[47] ? static_cast<uint32_t>(strtoul(row[47], nullptr, 10)) : 0;
e.mana = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
e.endurance = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
e.intoxication = row[50] ? static_cast<uint32_t>(strtoul(row[50], nullptr, 10)) : 0;
e.str = row[51] ? static_cast<uint32_t>(strtoul(row[51], nullptr, 10)) : 0;
e.sta = row[52] ? static_cast<uint32_t>(strtoul(row[52], nullptr, 10)) : 0;
e.cha = row[53] ? static_cast<uint32_t>(strtoul(row[53], nullptr, 10)) : 0;
e.dex = row[54] ? static_cast<uint32_t>(strtoul(row[54], nullptr, 10)) : 0;
e.int_ = row[55] ? static_cast<uint32_t>(strtoul(row[55], nullptr, 10)) : 0;
e.agi = row[56] ? static_cast<uint32_t>(strtoul(row[56], nullptr, 10)) : 0;
e.wis = row[57] ? static_cast<uint32_t>(strtoul(row[57], nullptr, 10)) : 0;
e.zone_change_count = row[58] ? static_cast<uint32_t>(strtoul(row[58], nullptr, 10)) : 0;
e.toxicity = row[59] ? static_cast<uint32_t>(strtoul(row[59], nullptr, 10)) : 0;
e.hunger_level = row[60] ? static_cast<uint32_t>(strtoul(row[60], nullptr, 10)) : 0;
e.thirst_level = row[61] ? static_cast<uint32_t>(strtoul(row[61], nullptr, 10)) : 0;
e.ability_up = row[62] ? static_cast<uint32_t>(strtoul(row[62], nullptr, 10)) : 0;
e.ldon_points_guk = row[63] ? static_cast<uint32_t>(strtoul(row[63], nullptr, 10)) : 0;
e.ldon_points_mir = row[64] ? static_cast<uint32_t>(strtoul(row[64], nullptr, 10)) : 0;
e.ldon_points_mmc = row[65] ? static_cast<uint32_t>(strtoul(row[65], nullptr, 10)) : 0;
e.ldon_points_ruj = row[66] ? static_cast<uint32_t>(strtoul(row[66], nullptr, 10)) : 0;
e.ldon_points_tak = row[67] ? static_cast<uint32_t>(strtoul(row[67], nullptr, 10)) : 0;
e.ldon_points_available = row[68] ? static_cast<uint32_t>(strtoul(row[68], nullptr, 10)) : 0;
e.tribute_time_remaining = row[69] ? static_cast<uint32_t>(strtoul(row[69], nullptr, 10)) : 0;
e.career_tribute_points = row[70] ? static_cast<uint32_t>(strtoul(row[70], nullptr, 10)) : 0;
e.tribute_points = row[71] ? static_cast<uint32_t>(strtoul(row[71], nullptr, 10)) : 0;
e.tribute_active = row[72] ? static_cast<uint32_t>(strtoul(row[72], nullptr, 10)) : 0;
e.pvp_status = row[73] ? static_cast<uint8_t>(strtoul(row[73], nullptr, 10)) : 0;
e.pvp_kills = row[74] ? static_cast<uint32_t>(strtoul(row[74], nullptr, 10)) : 0;
e.pvp_deaths = row[75] ? static_cast<uint32_t>(strtoul(row[75], nullptr, 10)) : 0;
e.pvp_current_points = row[76] ? static_cast<uint32_t>(strtoul(row[76], nullptr, 10)) : 0;
e.pvp_career_points = row[77] ? static_cast<uint32_t>(strtoul(row[77], nullptr, 10)) : 0;
e.pvp_best_kill_streak = row[78] ? static_cast<uint32_t>(strtoul(row[78], nullptr, 10)) : 0;
e.pvp_worst_death_streak = row[79] ? static_cast<uint32_t>(strtoul(row[79], nullptr, 10)) : 0;
e.pvp_current_kill_streak = row[80] ? static_cast<uint32_t>(strtoul(row[80], nullptr, 10)) : 0;
e.pvp2 = row[81] ? static_cast<uint32_t>(strtoul(row[81], nullptr, 10)) : 0;
e.pvp_type = row[82] ? static_cast<uint32_t>(strtoul(row[82], nullptr, 10)) : 0;
e.show_helm = row[83] ? static_cast<uint32_t>(strtoul(row[83], nullptr, 10)) : 0;
e.group_auto_consent = row[84] ? static_cast<uint8_t>(strtoul(row[84], nullptr, 10)) : 0;
e.raid_auto_consent = row[85] ? static_cast<uint8_t>(strtoul(row[85], nullptr, 10)) : 0;
e.guild_auto_consent = row[86] ? static_cast<uint8_t>(strtoul(row[86], nullptr, 10)) : 0;
e.leadership_exp_on = row[87] ? static_cast<uint8_t>(strtoul(row[87], nullptr, 10)) : 0;
e.RestTimer = row[88] ? static_cast<uint32_t>(strtoul(row[88], nullptr, 10)) : 0;
e.air_remaining = row[89] ? static_cast<uint32_t>(strtoul(row[89], nullptr, 10)) : 0;
e.autosplit_enabled = row[90] ? static_cast<uint32_t>(strtoul(row[90], nullptr, 10)) : 0;
e.lfp = row[91] ? static_cast<uint8_t>(strtoul(row[91], nullptr, 10)) : 0;
e.lfg = row[92] ? static_cast<uint8_t>(strtoul(row[92], nullptr, 10)) : 0;
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.e_aa_effects = static_cast<uint32_t>(strtoul(row[96], nullptr, 10));
e.e_percent_to_aa = static_cast<uint32_t>(strtoul(row[97], nullptr, 10));
e.e_expended_aa_spent = static_cast<uint32_t>(strtoul(row[98], nullptr, 10));
e.aa_points_spent_old = static_cast<uint32_t>(strtoul(row[99], nullptr, 10));
e.aa_points_old = static_cast<uint32_t>(strtoul(row[100], nullptr, 10));
e.e_last_invsnapshot = static_cast<uint32_t>(strtoul(row[101], nullptr, 10));
e.e_aa_effects = row[96] ? static_cast<uint32_t>(strtoul(row[96], nullptr, 10)) : 0;
e.e_percent_to_aa = row[97] ? static_cast<uint32_t>(strtoul(row[97], nullptr, 10)) : 0;
e.e_expended_aa_spent = row[98] ? static_cast<uint32_t>(strtoul(row[98], nullptr, 10)) : 0;
e.aa_points_spent_old = row[99] ? static_cast<uint32_t>(strtoul(row[99], nullptr, 10)) : 0;
e.aa_points_old = row[100] ? static_cast<uint32_t>(strtoul(row[100], nullptr, 10)) : 0;
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);
all_entries.push_back(e);
@@ -1178,108 +1177,108 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.name = row[2] ? row[2] : "";
e.last_name = row[3] ? row[3] : "";
e.title = row[4] ? row[4] : "";
e.suffix = row[5] ? row[5] : "";
e.zone_id = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.zone_instance = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.y = strtof(row[8], nullptr);
e.x = strtof(row[9], nullptr);
e.z = strtof(row[10], nullptr);
e.heading = strtof(row[11], nullptr);
e.gender = static_cast<uint8_t>(strtoul(row[12], nullptr, 10));
e.race = static_cast<uint16_t>(strtoul(row[13], nullptr, 10));
e.class_ = static_cast<uint8_t>(strtoul(row[14], nullptr, 10));
e.level = static_cast<uint32_t>(strtoul(row[15], nullptr, 10));
e.deity = static_cast<uint32_t>(strtoul(row[16], nullptr, 10));
e.birthday = static_cast<uint32_t>(strtoul(row[17], nullptr, 10));
e.last_login = static_cast<uint32_t>(strtoul(row[18], nullptr, 10));
e.time_played = static_cast<uint32_t>(strtoul(row[19], nullptr, 10));
e.level2 = static_cast<uint8_t>(strtoul(row[20], nullptr, 10));
e.anon = static_cast<uint8_t>(strtoul(row[21], nullptr, 10));
e.gm = static_cast<uint8_t>(strtoul(row[22], nullptr, 10));
e.face = static_cast<uint32_t>(strtoul(row[23], nullptr, 10));
e.hair_color = static_cast<uint8_t>(strtoul(row[24], nullptr, 10));
e.hair_style = static_cast<uint8_t>(strtoul(row[25], nullptr, 10));
e.beard = static_cast<uint8_t>(strtoul(row[26], nullptr, 10));
e.beard_color = static_cast<uint8_t>(strtoul(row[27], nullptr, 10));
e.eye_color_1 = static_cast<uint8_t>(strtoul(row[28], nullptr, 10));
e.eye_color_2 = static_cast<uint8_t>(strtoul(row[29], nullptr, 10));
e.drakkin_heritage = static_cast<uint32_t>(strtoul(row[30], nullptr, 10));
e.drakkin_tattoo = static_cast<uint32_t>(strtoul(row[31], nullptr, 10));
e.drakkin_details = static_cast<uint32_t>(strtoul(row[32], nullptr, 10));
e.ability_time_seconds = static_cast<uint8_t>(strtoul(row[33], nullptr, 10));
e.ability_number = static_cast<uint8_t>(strtoul(row[34], nullptr, 10));
e.ability_time_minutes = static_cast<uint8_t>(strtoul(row[35], nullptr, 10));
e.ability_time_hours = static_cast<uint8_t>(strtoul(row[36], nullptr, 10));
e.exp = static_cast<uint32_t>(strtoul(row[37], nullptr, 10));
e.exp_enabled = static_cast<uint8_t>(strtoul(row[38], nullptr, 10));
e.aa_points_spent = static_cast<uint32_t>(strtoul(row[39], nullptr, 10));
e.aa_exp = static_cast<uint32_t>(strtoul(row[40], nullptr, 10));
e.aa_points = static_cast<uint32_t>(strtoul(row[41], nullptr, 10));
e.group_leadership_exp = static_cast<uint32_t>(strtoul(row[42], nullptr, 10));
e.raid_leadership_exp = static_cast<uint32_t>(strtoul(row[43], nullptr, 10));
e.group_leadership_points = static_cast<uint32_t>(strtoul(row[44], nullptr, 10));
e.raid_leadership_points = static_cast<uint32_t>(strtoul(row[45], nullptr, 10));
e.points = static_cast<uint32_t>(strtoul(row[46], nullptr, 10));
e.cur_hp = static_cast<uint32_t>(strtoul(row[47], nullptr, 10));
e.mana = static_cast<uint32_t>(strtoul(row[48], nullptr, 10));
e.endurance = static_cast<uint32_t>(strtoul(row[49], nullptr, 10));
e.intoxication = static_cast<uint32_t>(strtoul(row[50], nullptr, 10));
e.str = static_cast<uint32_t>(strtoul(row[51], nullptr, 10));
e.sta = static_cast<uint32_t>(strtoul(row[52], nullptr, 10));
e.cha = static_cast<uint32_t>(strtoul(row[53], nullptr, 10));
e.dex = static_cast<uint32_t>(strtoul(row[54], nullptr, 10));
e.int_ = static_cast<uint32_t>(strtoul(row[55], nullptr, 10));
e.agi = static_cast<uint32_t>(strtoul(row[56], nullptr, 10));
e.wis = static_cast<uint32_t>(strtoul(row[57], nullptr, 10));
e.zone_change_count = static_cast<uint32_t>(strtoul(row[58], nullptr, 10));
e.toxicity = static_cast<uint32_t>(strtoul(row[59], nullptr, 10));
e.hunger_level = static_cast<uint32_t>(strtoul(row[60], nullptr, 10));
e.thirst_level = static_cast<uint32_t>(strtoul(row[61], nullptr, 10));
e.ability_up = static_cast<uint32_t>(strtoul(row[62], nullptr, 10));
e.ldon_points_guk = static_cast<uint32_t>(strtoul(row[63], nullptr, 10));
e.ldon_points_mir = static_cast<uint32_t>(strtoul(row[64], nullptr, 10));
e.ldon_points_mmc = static_cast<uint32_t>(strtoul(row[65], nullptr, 10));
e.ldon_points_ruj = static_cast<uint32_t>(strtoul(row[66], nullptr, 10));
e.ldon_points_tak = static_cast<uint32_t>(strtoul(row[67], nullptr, 10));
e.ldon_points_available = static_cast<uint32_t>(strtoul(row[68], nullptr, 10));
e.tribute_time_remaining = static_cast<uint32_t>(strtoul(row[69], nullptr, 10));
e.career_tribute_points = static_cast<uint32_t>(strtoul(row[70], nullptr, 10));
e.tribute_points = static_cast<uint32_t>(strtoul(row[71], nullptr, 10));
e.tribute_active = static_cast<uint32_t>(strtoul(row[72], nullptr, 10));
e.pvp_status = static_cast<uint8_t>(strtoul(row[73], nullptr, 10));
e.pvp_kills = static_cast<uint32_t>(strtoul(row[74], nullptr, 10));
e.pvp_deaths = static_cast<uint32_t>(strtoul(row[75], nullptr, 10));
e.pvp_current_points = static_cast<uint32_t>(strtoul(row[76], nullptr, 10));
e.pvp_career_points = static_cast<uint32_t>(strtoul(row[77], nullptr, 10));
e.pvp_best_kill_streak = static_cast<uint32_t>(strtoul(row[78], nullptr, 10));
e.pvp_worst_death_streak = static_cast<uint32_t>(strtoul(row[79], nullptr, 10));
e.pvp_current_kill_streak = static_cast<uint32_t>(strtoul(row[80], nullptr, 10));
e.pvp2 = static_cast<uint32_t>(strtoul(row[81], nullptr, 10));
e.pvp_type = static_cast<uint32_t>(strtoul(row[82], nullptr, 10));
e.show_helm = static_cast<uint32_t>(strtoul(row[83], nullptr, 10));
e.group_auto_consent = static_cast<uint8_t>(strtoul(row[84], nullptr, 10));
e.raid_auto_consent = static_cast<uint8_t>(strtoul(row[85], nullptr, 10));
e.guild_auto_consent = static_cast<uint8_t>(strtoul(row[86], nullptr, 10));
e.leadership_exp_on = static_cast<uint8_t>(strtoul(row[87], nullptr, 10));
e.RestTimer = static_cast<uint32_t>(strtoul(row[88], nullptr, 10));
e.air_remaining = static_cast<uint32_t>(strtoul(row[89], nullptr, 10));
e.autosplit_enabled = static_cast<uint32_t>(strtoul(row[90], nullptr, 10));
e.lfp = static_cast<uint8_t>(strtoul(row[91], nullptr, 10));
e.lfg = static_cast<uint8_t>(strtoul(row[92], nullptr, 10));
e.zone_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.zone_instance = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.y = row[8] ? strtof(row[8], nullptr) : 0;
e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.gender = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
e.race = row[13] ? static_cast<uint16_t>(strtoul(row[13], nullptr, 10)) : 0;
e.class_ = row[14] ? static_cast<uint8_t>(strtoul(row[14], nullptr, 10)) : 0;
e.level = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.deity = row[16] ? static_cast<uint32_t>(strtoul(row[16], nullptr, 10)) : 0;
e.birthday = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 0;
e.last_login = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
e.time_played = row[19] ? static_cast<uint32_t>(strtoul(row[19], nullptr, 10)) : 0;
e.level2 = row[20] ? static_cast<uint8_t>(strtoul(row[20], nullptr, 10)) : 0;
e.anon = row[21] ? static_cast<uint8_t>(strtoul(row[21], nullptr, 10)) : 0;
e.gm = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
e.face = row[23] ? static_cast<uint32_t>(strtoul(row[23], nullptr, 10)) : 0;
e.hair_color = row[24] ? static_cast<uint8_t>(strtoul(row[24], nullptr, 10)) : 0;
e.hair_style = row[25] ? static_cast<uint8_t>(strtoul(row[25], nullptr, 10)) : 0;
e.beard = row[26] ? static_cast<uint8_t>(strtoul(row[26], nullptr, 10)) : 0;
e.beard_color = row[27] ? static_cast<uint8_t>(strtoul(row[27], nullptr, 10)) : 0;
e.eye_color_1 = row[28] ? static_cast<uint8_t>(strtoul(row[28], nullptr, 10)) : 0;
e.eye_color_2 = row[29] ? static_cast<uint8_t>(strtoul(row[29], nullptr, 10)) : 0;
e.drakkin_heritage = row[30] ? static_cast<uint32_t>(strtoul(row[30], nullptr, 10)) : 0;
e.drakkin_tattoo = row[31] ? static_cast<uint32_t>(strtoul(row[31], nullptr, 10)) : 0;
e.drakkin_details = row[32] ? static_cast<uint32_t>(strtoul(row[32], nullptr, 10)) : 0;
e.ability_time_seconds = row[33] ? static_cast<uint8_t>(strtoul(row[33], nullptr, 10)) : 0;
e.ability_number = row[34] ? static_cast<uint8_t>(strtoul(row[34], nullptr, 10)) : 0;
e.ability_time_minutes = row[35] ? static_cast<uint8_t>(strtoul(row[35], nullptr, 10)) : 0;
e.ability_time_hours = row[36] ? static_cast<uint8_t>(strtoul(row[36], nullptr, 10)) : 0;
e.exp = row[37] ? static_cast<uint32_t>(strtoul(row[37], nullptr, 10)) : 0;
e.exp_enabled = row[38] ? static_cast<uint8_t>(strtoul(row[38], nullptr, 10)) : 1;
e.aa_points_spent = row[39] ? static_cast<uint32_t>(strtoul(row[39], nullptr, 10)) : 0;
e.aa_exp = row[40] ? static_cast<uint32_t>(strtoul(row[40], nullptr, 10)) : 0;
e.aa_points = row[41] ? static_cast<uint32_t>(strtoul(row[41], nullptr, 10)) : 0;
e.group_leadership_exp = row[42] ? static_cast<uint32_t>(strtoul(row[42], nullptr, 10)) : 0;
e.raid_leadership_exp = row[43] ? static_cast<uint32_t>(strtoul(row[43], nullptr, 10)) : 0;
e.group_leadership_points = row[44] ? static_cast<uint32_t>(strtoul(row[44], nullptr, 10)) : 0;
e.raid_leadership_points = row[45] ? static_cast<uint32_t>(strtoul(row[45], nullptr, 10)) : 0;
e.points = row[46] ? static_cast<uint32_t>(strtoul(row[46], nullptr, 10)) : 0;
e.cur_hp = row[47] ? static_cast<uint32_t>(strtoul(row[47], nullptr, 10)) : 0;
e.mana = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
e.endurance = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
e.intoxication = row[50] ? static_cast<uint32_t>(strtoul(row[50], nullptr, 10)) : 0;
e.str = row[51] ? static_cast<uint32_t>(strtoul(row[51], nullptr, 10)) : 0;
e.sta = row[52] ? static_cast<uint32_t>(strtoul(row[52], nullptr, 10)) : 0;
e.cha = row[53] ? static_cast<uint32_t>(strtoul(row[53], nullptr, 10)) : 0;
e.dex = row[54] ? static_cast<uint32_t>(strtoul(row[54], nullptr, 10)) : 0;
e.int_ = row[55] ? static_cast<uint32_t>(strtoul(row[55], nullptr, 10)) : 0;
e.agi = row[56] ? static_cast<uint32_t>(strtoul(row[56], nullptr, 10)) : 0;
e.wis = row[57] ? static_cast<uint32_t>(strtoul(row[57], nullptr, 10)) : 0;
e.zone_change_count = row[58] ? static_cast<uint32_t>(strtoul(row[58], nullptr, 10)) : 0;
e.toxicity = row[59] ? static_cast<uint32_t>(strtoul(row[59], nullptr, 10)) : 0;
e.hunger_level = row[60] ? static_cast<uint32_t>(strtoul(row[60], nullptr, 10)) : 0;
e.thirst_level = row[61] ? static_cast<uint32_t>(strtoul(row[61], nullptr, 10)) : 0;
e.ability_up = row[62] ? static_cast<uint32_t>(strtoul(row[62], nullptr, 10)) : 0;
e.ldon_points_guk = row[63] ? static_cast<uint32_t>(strtoul(row[63], nullptr, 10)) : 0;
e.ldon_points_mir = row[64] ? static_cast<uint32_t>(strtoul(row[64], nullptr, 10)) : 0;
e.ldon_points_mmc = row[65] ? static_cast<uint32_t>(strtoul(row[65], nullptr, 10)) : 0;
e.ldon_points_ruj = row[66] ? static_cast<uint32_t>(strtoul(row[66], nullptr, 10)) : 0;
e.ldon_points_tak = row[67] ? static_cast<uint32_t>(strtoul(row[67], nullptr, 10)) : 0;
e.ldon_points_available = row[68] ? static_cast<uint32_t>(strtoul(row[68], nullptr, 10)) : 0;
e.tribute_time_remaining = row[69] ? static_cast<uint32_t>(strtoul(row[69], nullptr, 10)) : 0;
e.career_tribute_points = row[70] ? static_cast<uint32_t>(strtoul(row[70], nullptr, 10)) : 0;
e.tribute_points = row[71] ? static_cast<uint32_t>(strtoul(row[71], nullptr, 10)) : 0;
e.tribute_active = row[72] ? static_cast<uint32_t>(strtoul(row[72], nullptr, 10)) : 0;
e.pvp_status = row[73] ? static_cast<uint8_t>(strtoul(row[73], nullptr, 10)) : 0;
e.pvp_kills = row[74] ? static_cast<uint32_t>(strtoul(row[74], nullptr, 10)) : 0;
e.pvp_deaths = row[75] ? static_cast<uint32_t>(strtoul(row[75], nullptr, 10)) : 0;
e.pvp_current_points = row[76] ? static_cast<uint32_t>(strtoul(row[76], nullptr, 10)) : 0;
e.pvp_career_points = row[77] ? static_cast<uint32_t>(strtoul(row[77], nullptr, 10)) : 0;
e.pvp_best_kill_streak = row[78] ? static_cast<uint32_t>(strtoul(row[78], nullptr, 10)) : 0;
e.pvp_worst_death_streak = row[79] ? static_cast<uint32_t>(strtoul(row[79], nullptr, 10)) : 0;
e.pvp_current_kill_streak = row[80] ? static_cast<uint32_t>(strtoul(row[80], nullptr, 10)) : 0;
e.pvp2 = row[81] ? static_cast<uint32_t>(strtoul(row[81], nullptr, 10)) : 0;
e.pvp_type = row[82] ? static_cast<uint32_t>(strtoul(row[82], nullptr, 10)) : 0;
e.show_helm = row[83] ? static_cast<uint32_t>(strtoul(row[83], nullptr, 10)) : 0;
e.group_auto_consent = row[84] ? static_cast<uint8_t>(strtoul(row[84], nullptr, 10)) : 0;
e.raid_auto_consent = row[85] ? static_cast<uint8_t>(strtoul(row[85], nullptr, 10)) : 0;
e.guild_auto_consent = row[86] ? static_cast<uint8_t>(strtoul(row[86], nullptr, 10)) : 0;
e.leadership_exp_on = row[87] ? static_cast<uint8_t>(strtoul(row[87], nullptr, 10)) : 0;
e.RestTimer = row[88] ? static_cast<uint32_t>(strtoul(row[88], nullptr, 10)) : 0;
e.air_remaining = row[89] ? static_cast<uint32_t>(strtoul(row[89], nullptr, 10)) : 0;
e.autosplit_enabled = row[90] ? static_cast<uint32_t>(strtoul(row[90], nullptr, 10)) : 0;
e.lfp = row[91] ? static_cast<uint8_t>(strtoul(row[91], nullptr, 10)) : 0;
e.lfg = row[92] ? static_cast<uint8_t>(strtoul(row[92], nullptr, 10)) : 0;
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.e_aa_effects = static_cast<uint32_t>(strtoul(row[96], nullptr, 10));
e.e_percent_to_aa = static_cast<uint32_t>(strtoul(row[97], nullptr, 10));
e.e_expended_aa_spent = static_cast<uint32_t>(strtoul(row[98], nullptr, 10));
e.aa_points_spent_old = static_cast<uint32_t>(strtoul(row[99], nullptr, 10));
e.aa_points_old = static_cast<uint32_t>(strtoul(row[100], nullptr, 10));
e.e_last_invsnapshot = static_cast<uint32_t>(strtoul(row[101], nullptr, 10));
e.e_aa_effects = row[96] ? static_cast<uint32_t>(strtoul(row[96], nullptr, 10)) : 0;
e.e_percent_to_aa = row[97] ? static_cast<uint32_t>(strtoul(row[97], nullptr, 10)) : 0;
e.e_expended_aa_spent = row[98] ? static_cast<uint32_t>(strtoul(row[98], nullptr, 10)) : 0;
e.aa_points_spent_old = row[99] ? static_cast<uint32_t>(strtoul(row[99], nullptr, 10)) : 0;
e.aa_points_old = row[100] ? static_cast<uint32_t>(strtoul(row[100], nullptr, 10)) : 0;
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);
all_entries.push_back(e);
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterDisciplinesRepository {
public:
struct CharacterDisciplines {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) {
CharacterDisciplines e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.disc_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.disc_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterDisciplines e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.disc_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.disc_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterDisciplines e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.disc_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.disc_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,6 +16,7 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterExpModifiersRepository {
public:
struct CharacterExpModifiers {
@@ -120,8 +121,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_exp_modifiers_id
)
);
@@ -133,8 +135,8 @@ public:
e.character_id = static_cast<int32_t>(atoi(row[0]));
e.zone_id = static_cast<int32_t>(atoi(row[1]));
e.instance_version = static_cast<int32_t>(atoi(row[2]));
e.aa_modifier = strtof(row[3], nullptr);
e.exp_modifier = strtof(row[4], nullptr);
e.aa_modifier = row[3] ? strtof(row[3], nullptr) : 0;
e.exp_modifier = row[4] ? strtof(row[4], nullptr) : 0;
return e;
}
@@ -269,8 +271,8 @@ public:
e.character_id = static_cast<int32_t>(atoi(row[0]));
e.zone_id = static_cast<int32_t>(atoi(row[1]));
e.instance_version = static_cast<int32_t>(atoi(row[2]));
e.aa_modifier = strtof(row[3], nullptr);
e.exp_modifier = strtof(row[4], nullptr);
e.aa_modifier = row[3] ? strtof(row[3], nullptr) : 0;
e.exp_modifier = row[4] ? strtof(row[4], nullptr) : 0;
all_entries.push_back(e);
}
@@ -298,8 +300,8 @@ public:
e.character_id = static_cast<int32_t>(atoi(row[0]));
e.zone_id = static_cast<int32_t>(atoi(row[1]));
e.instance_version = static_cast<int32_t>(atoi(row[2]));
e.aa_modifier = strtof(row[3], nullptr);
e.exp_modifier = strtof(row[4], nullptr);
e.aa_modifier = row[3] ? strtof(row[3], nullptr) : 0;
e.exp_modifier = row[4] ? strtof(row[4], nullptr) : 0;
all_entries.push_back(e);
}
@@ -358,6 +360,70 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -128,8 +128,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_expedition_lockouts_id
)
);
@@ -138,12 +139,12 @@ public:
if (results.RowCount() == 1) {
CharacterExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.expedition_name = row[2] ? row[2] : "";
e.event_name = row[3] ? row[3] : "";
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] : "";
return e;
@@ -281,12 +282,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.expedition_name = row[2] ? row[2] : "";
e.event_name = row[3] ? row[3] : "";
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] : "";
all_entries.push_back(e);
@@ -312,12 +313,12 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.expedition_name = row[2] ? row[2] : "";
e.event_name = row[3] ? row[3] : "";
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] : "";
all_entries.push_back(e);
@@ -377,6 +378,74 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -108,8 +108,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_inspect_messages_id
)
);
@@ -118,7 +119,7 @@ public:
if (results.RowCount() == 1) {
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] : "";
return e;
@@ -242,7 +243,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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] : "";
all_entries.push_back(e);
@@ -268,7 +269,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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] : "";
all_entries.push_back(e);
@@ -328,6 +329,64 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -136,8 +136,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_instance_safereturns_id
)
);
@@ -146,15 +147,15 @@ public:
if (results.RowCount() == 1) {
CharacterInstanceSafereturns e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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_id = static_cast<int32_t>(atoi(row[3]));
e.safe_zone_id = static_cast<int32_t>(atoi(row[4]));
e.safe_x = strtof(row[5], nullptr);
e.safe_y = strtof(row[6], nullptr);
e.safe_z = strtof(row[7], nullptr);
e.safe_heading = strtof(row[8], nullptr);
e.safe_x = row[5] ? strtof(row[5], nullptr) : 0;
e.safe_y = row[6] ? strtof(row[6], nullptr) : 0;
e.safe_z = row[7] ? strtof(row[7], nullptr) : 0;
e.safe_heading = row[8] ? strtof(row[8], nullptr) : 0;
return e;
}
@@ -297,15 +298,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterInstanceSafereturns e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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_id = static_cast<int32_t>(atoi(row[3]));
e.safe_zone_id = static_cast<int32_t>(atoi(row[4]));
e.safe_x = strtof(row[5], nullptr);
e.safe_y = strtof(row[6], nullptr);
e.safe_z = strtof(row[7], nullptr);
e.safe_heading = strtof(row[8], nullptr);
e.safe_x = row[5] ? strtof(row[5], nullptr) : 0;
e.safe_y = row[6] ? strtof(row[6], nullptr) : 0;
e.safe_z = row[7] ? strtof(row[7], nullptr) : 0;
e.safe_heading = row[8] ? strtof(row[8], nullptr) : 0;
all_entries.push_back(e);
}
@@ -330,15 +331,15 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterInstanceSafereturns e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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_id = static_cast<int32_t>(atoi(row[3]));
e.safe_zone_id = static_cast<int32_t>(atoi(row[4]));
e.safe_x = strtof(row[5], nullptr);
e.safe_y = strtof(row[6], nullptr);
e.safe_z = strtof(row[7], nullptr);
e.safe_heading = strtof(row[8], nullptr);
e.safe_x = row[5] ? strtof(row[5], nullptr) : 0;
e.safe_y = row[6] ? strtof(row[6], nullptr) : 0;
e.safe_z = row[7] ? strtof(row[7], nullptr) : 0;
e.safe_heading = row[8] ? strtof(row[8], nullptr) : 0;
all_entries.push_back(e);
}
@@ -397,6 +398,78 @@ public:
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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterItemRecastRepository {
public:
struct CharacterItemRecast {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) {
CharacterItemRecast e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.recast_type = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.timestamp = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.recast_type = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.timestamp = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterItemRecast e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.recast_type = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.timestamp = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.recast_type = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.timestamp = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterItemRecast e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.recast_type = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.timestamp = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.recast_type = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.timestamp = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_languages_id
)
);
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) {
CharacterLanguages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.lang_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.lang_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -249,9 +250,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterLanguages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.lang_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.lang_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -276,9 +277,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterLanguages e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.lang_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.lang_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -337,6 +338,66 @@ public:
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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterLeadershipAbilitiesRepository {
public:
struct CharacterLeadershipAbilities {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) {
CharacterLeadershipAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.rank = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.rank = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterLeadershipAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.rank = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.rank = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterLeadershipAbilities e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.rank = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.rank = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterMaterialRepository {
public:
struct CharacterMaterial {
@@ -140,13 +139,13 @@ public:
if (results.RowCount() == 1) {
CharacterMaterial e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.blue = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.green = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.red = static_cast<uint8_t>(strtoul(row[4], nullptr, 10));
e.use_tint = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.color = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.blue = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.green = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.red = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.use_tint = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.color = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
return e;
}
@@ -283,13 +282,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterMaterial e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.blue = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.green = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.red = static_cast<uint8_t>(strtoul(row[4], nullptr, 10));
e.use_tint = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.color = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.blue = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.green = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.red = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.use_tint = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.color = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -314,13 +313,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterMaterial e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.blue = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.green = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.red = static_cast<uint8_t>(strtoul(row[4], nullptr, 10));
e.use_tint = static_cast<uint8_t>(strtoul(row[5], nullptr, 10));
e.color = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.blue = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.green = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
e.red = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
e.use_tint = row[5] ? static_cast<uint8_t>(strtoul(row[5], nullptr, 10)) : 0;
e.color = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterMemmedSpellsRepository {
public:
struct CharacterMemmedSpells {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) {
CharacterMemmedSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -252,9 +251,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterMemmedSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -279,9 +278,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterMemmedSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -108,8 +108,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_peqzone_flags_id
)
);
@@ -328,6 +329,64 @@ public:
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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterPetBuffsRepository {
public:
struct CharacterPetBuffs {
@@ -166,7 +165,7 @@ public:
e.counters = static_cast<int32_t>(atoi(row[7]));
e.numhits = static_cast<int32_t>(atoi(row[8]));
e.rune = static_cast<int32_t>(atoi(row[9]));
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;
}
@@ -326,7 +325,7 @@ public:
e.counters = static_cast<int32_t>(atoi(row[7]));
e.numhits = static_cast<int32_t>(atoi(row[8]));
e.rune = static_cast<int32_t>(atoi(row[9]));
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);
}
@@ -361,7 +360,7 @@ public:
e.counters = static_cast<int32_t>(atoi(row[7]));
e.numhits = static_cast<int32_t>(atoi(row[8]));
e.rune = static_cast<int32_t>(atoi(row[9]));
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);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterPetInfoRepository {
public:
struct CharacterPetInfo {
@@ -155,7 +154,7 @@ public:
e.spell_id = static_cast<int32_t>(atoi(row[4]));
e.hp = static_cast<int32_t>(atoi(row[5]));
e.mana = static_cast<int32_t>(atoi(row[6]));
e.size = strtof(row[7], nullptr);
e.size = row[7] ? strtof(row[7], nullptr) : 0;
e.taunting = static_cast<int8_t>(atoi(row[8]));
return e;
@@ -307,7 +306,7 @@ public:
e.spell_id = static_cast<int32_t>(atoi(row[4]));
e.hp = static_cast<int32_t>(atoi(row[5]));
e.mana = static_cast<int32_t>(atoi(row[6]));
e.size = strtof(row[7], nullptr);
e.size = row[7] ? strtof(row[7], nullptr) : 0;
e.taunting = static_cast<int8_t>(atoi(row[8]));
all_entries.push_back(e);
@@ -340,7 +339,7 @@ public:
e.spell_id = static_cast<int32_t>(atoi(row[4]));
e.hp = static_cast<int32_t>(atoi(row[5]));
e.mana = static_cast<int32_t>(atoi(row[6]));
e.size = strtof(row[7], nullptr);
e.size = row[7] ? strtof(row[7], nullptr) : 0;
e.taunting = static_cast<int8_t>(atoi(row[8]));
all_entries.push_back(e);
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterPetInventoryRepository {
public:
struct CharacterPetInventory {
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterPotionbeltRepository {
public:
struct CharacterPotionbelt {
@@ -128,10 +127,10 @@ public:
if (results.RowCount() == 1) {
CharacterPotionbelt e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.potion_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.icon = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.potion_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.icon = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
return e;
}
@@ -260,10 +259,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPotionbelt e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.potion_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.icon = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.potion_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.icon = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -288,10 +287,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterPotionbelt e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.potion_id = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.item_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.icon = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.potion_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
e.item_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.icon = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterSkillsRepository {
public:
struct CharacterSkills {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) {
CharacterSkills e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.skill_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.skill_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -251,9 +250,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterSkills e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.skill_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.skill_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -278,9 +277,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterSkills e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.skill_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.value = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.skill_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.value = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterSpellsRepository {
public:
struct CharacterSpells {
@@ -124,9 +123,9 @@ public:
if (results.RowCount() == 1) {
CharacterSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -251,9 +250,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -278,9 +277,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterSpells e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.slot_id = static_cast<uint16_t>(strtoul(row[1], nullptr, 10));
e.spell_id = static_cast<uint16_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.slot_id = row[1] ? static_cast<uint16_t>(strtoul(row[1], nullptr, 10)) : 0;
e.spell_id = row[2] ? static_cast<uint16_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterStatsRecordRepository {
public:
struct CharacterStatsRecord {
@@ -415,9 +414,9 @@ public:
e.class_ = static_cast<int32_t>(atoi(row[4]));
e.race = static_cast<int32_t>(atoi(row[5]));
e.aa_points = static_cast<int32_t>(atoi(row[6]));
e.hp = strtoll(row[7], nullptr, 10);
e.mana = strtoll(row[8], nullptr, 10);
e.endurance = strtoll(row[9], nullptr, 10);
e.hp = row[7] ? strtoll(row[7], nullptr, 10) : 0;
e.mana = row[8] ? strtoll(row[8], nullptr, 10) : 0;
e.endurance = row[9] ? strtoll(row[9], nullptr, 10) : 0;
e.ac = static_cast<int32_t>(atoi(row[10]));
e.strength = static_cast<int32_t>(atoi(row[11]));
e.stamina = static_cast<int32_t>(atoi(row[12]));
@@ -827,9 +826,9 @@ public:
e.class_ = static_cast<int32_t>(atoi(row[4]));
e.race = static_cast<int32_t>(atoi(row[5]));
e.aa_points = static_cast<int32_t>(atoi(row[6]));
e.hp = strtoll(row[7], nullptr, 10);
e.mana = strtoll(row[8], nullptr, 10);
e.endurance = strtoll(row[9], nullptr, 10);
e.hp = row[7] ? strtoll(row[7], nullptr, 10) : 0;
e.mana = row[8] ? strtoll(row[8], nullptr, 10) : 0;
e.endurance = row[9] ? strtoll(row[9], nullptr, 10) : 0;
e.ac = static_cast<int32_t>(atoi(row[10]));
e.strength = static_cast<int32_t>(atoi(row[11]));
e.stamina = static_cast<int32_t>(atoi(row[12]));
@@ -925,9 +924,9 @@ public:
e.class_ = static_cast<int32_t>(atoi(row[4]));
e.race = static_cast<int32_t>(atoi(row[5]));
e.aa_points = static_cast<int32_t>(atoi(row[6]));
e.hp = strtoll(row[7], nullptr, 10);
e.mana = strtoll(row[8], nullptr, 10);
e.endurance = strtoll(row[9], nullptr, 10);
e.hp = row[7] ? strtoll(row[7], nullptr, 10) : 0;
e.mana = row[8] ? strtoll(row[8], nullptr, 10) : 0;
e.endurance = row[9] ? strtoll(row[9], nullptr, 10) : 0;
e.ac = static_cast<int32_t>(atoi(row[10]));
e.strength = static_cast<int32_t>(atoi(row[11]));
e.stamina = static_cast<int32_t>(atoi(row[12]));
@@ -1050,6 +1049,208 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -124,8 +124,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_task_timers_id
)
);
@@ -134,9 +135,9 @@ public:
if (results.RowCount() == 1) {
CharacterTaskTimers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.task_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
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_group = static_cast<int32_t>(atoi(row[4]));
e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10);
@@ -273,9 +274,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTaskTimers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.task_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
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_group = static_cast<int32_t>(atoi(row[4]));
e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10);
@@ -303,9 +304,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTaskTimers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.task_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
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_group = static_cast<int32_t>(atoi(row[4]));
e.expire_time = strtoll(row[5] ? row[5] : "-1", nullptr, 10);
@@ -367,6 +368,72 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -124,8 +124,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
character_tasks_id
)
);
@@ -134,11 +135,11 @@ public:
if (results.RowCount() == 1) {
CharacterTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.slot = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.slot = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[3]));
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]));
return e;
@@ -274,11 +275,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.slot = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.slot = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[3]));
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]));
all_entries.push_back(e);
@@ -304,11 +305,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CharacterTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.slot = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.taskid = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.slot = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.type = static_cast<int8_t>(atoi(row[3]));
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]));
all_entries.push_back(e);
@@ -368,6 +369,72 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCharacterTributeRepository {
public:
struct CharacterTribute {
@@ -129,9 +128,9 @@ public:
CharacterTribute e{};
e.id = static_cast<int32_t>(atoi(row[0]));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.tier = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.tribute = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.tier = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.tribute = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
return e;
}
@@ -260,9 +259,9 @@ public:
CharacterTribute e{};
e.id = static_cast<int32_t>(atoi(row[0]));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.tier = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.tribute = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.tier = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.tribute = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -288,9 +287,9 @@ public:
CharacterTribute e{};
e.id = static_cast<int32_t>(atoi(row[0]));
e.character_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.tier = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.tribute = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.character_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.tier = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
e.tribute = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -349,6 +348,68 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseChatchannelReservedNamesRepository {
public:
struct ChatchannelReservedNames {
@@ -329,6 +328,64 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseChatchannelsRepository {
public:
struct Chatchannels {
@@ -359,6 +358,70 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
class BaseCommandSubsettingsRepository {
public:
struct CommandSubsettings {
@@ -132,10 +131,10 @@ public:
if (results.RowCount() == 1) {
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.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] : "";
return e;
@@ -267,10 +266,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.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] : "";
all_entries.push_back(e);
@@ -296,10 +295,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.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] : "";
all_entries.push_back(e);
@@ -359,6 +358,70 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -120,8 +120,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
completed_shared_task_activity_state_id
)
);
@@ -130,7 +131,7 @@ public:
if (results.RowCount() == 1) {
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.done_count = static_cast<int32_t>(atoi(row[2]));
e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -266,7 +267,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.done_count = static_cast<int32_t>(atoi(row[2]));
e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -295,7 +296,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.done_count = static_cast<int32_t>(atoi(row[2]));
e.updated_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -358,6 +359,70 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
completed_shared_task_members_id
)
);
@@ -122,8 +123,8 @@ public:
if (results.RowCount() == 1) {
CompletedSharedTaskMembers e{};
e.shared_task_id = strtoll(row[0], nullptr, 10);
e.character_id = strtoll(row[1], nullptr, 10);
e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.character_id = row[1] ? strtoll(row[1], nullptr, 10) : 0;
e.is_leader = static_cast<int8_t>(atoi(row[2]));
return e;
@@ -250,8 +251,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CompletedSharedTaskMembers e{};
e.shared_task_id = strtoll(row[0], nullptr, 10);
e.character_id = strtoll(row[1], nullptr, 10);
e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.character_id = row[1] ? strtoll(row[1], nullptr, 10) : 0;
e.is_leader = static_cast<int8_t>(atoi(row[2]));
all_entries.push_back(e);
@@ -277,8 +278,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CompletedSharedTaskMembers e{};
e.shared_task_id = strtoll(row[0], nullptr, 10);
e.character_id = strtoll(row[1], nullptr, 10);
e.shared_task_id = row[0] ? strtoll(row[0], nullptr, 10) : 0;
e.character_id = row[1] ? strtoll(row[1], nullptr, 10) : 0;
e.is_leader = static_cast<int8_t>(atoi(row[2]));
all_entries.push_back(e);
@@ -338,6 +339,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -124,8 +124,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
completed_shared_tasks_id
)
);
@@ -134,7 +135,7 @@ public:
if (results.RowCount() == 1) {
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.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10);
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -274,7 +275,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10);
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -304,7 +305,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.accepted_time = strtoll(row[2] ? row[2] : "-1", nullptr, 10);
e.expire_time = strtoll(row[3] ? row[3] : "-1", nullptr, 10);
@@ -368,6 +369,72 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -116,8 +116,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
completed_tasks_id
)
);
@@ -126,9 +127,9 @@ public:
if (results.RowCount() == 1) {
CompletedTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.completedtime = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.completedtime = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.taskid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.activityid = static_cast<int32_t>(atoi(row[3]));
return e;
@@ -258,9 +259,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CompletedTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.completedtime = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.completedtime = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.taskid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.activityid = static_cast<int32_t>(atoi(row[3]));
all_entries.push_back(e);
@@ -286,9 +287,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
CompletedTasks e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.completedtime = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.taskid = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.completedtime = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.taskid = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.activityid = static_cast<int32_t>(atoi(row[3]));
all_entries.push_back(e);
@@ -348,6 +349,68 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -116,8 +116,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
content_flags_id
)
);
@@ -347,6 +348,68 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -108,8 +108,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
damageshieldtypes_id
)
);
@@ -118,8 +119,8 @@ public:
if (results.RowCount() == 1) {
Damageshieldtypes e{};
e.spellid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.spellid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
return e;
}
@@ -242,8 +243,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
Damageshieldtypes e{};
e.spellid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.spellid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -268,8 +269,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
Damageshieldtypes e{};
e.spellid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.spellid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -328,6 +329,64 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,7 +16,6 @@
#include "../../strings.h"
#include <ctime>
#include <cereal/cereal.hpp>
class BaseDataBucketsRepository {
public:
struct DataBuckets {
@@ -155,13 +154,13 @@ public:
if (results.RowCount() == 1) {
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.value = row[2] ? row[2] : "";
e.expires = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.character_id = strtoll(row[4], nullptr, 10);
e.npc_id = strtoll(row[5], nullptr, 10);
e.bot_id = strtoll(row[6], nullptr, 10);
e.expires = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.character_id = row[4] ? strtoll(row[4], nullptr, 10) : 0;
e.npc_id = row[5] ? strtoll(row[5], nullptr, 10) : 0;
e.bot_id = row[6] ? strtoll(row[6], nullptr, 10) : 0;
return e;
}
@@ -298,13 +297,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.value = row[2] ? row[2] : "";
e.expires = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.character_id = strtoll(row[4], nullptr, 10);
e.npc_id = strtoll(row[5], nullptr, 10);
e.bot_id = strtoll(row[6], nullptr, 10);
e.expires = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.character_id = row[4] ? strtoll(row[4], nullptr, 10) : 0;
e.npc_id = row[5] ? strtoll(row[5], nullptr, 10) : 0;
e.bot_id = row[6] ? strtoll(row[6], nullptr, 10) : 0;
all_entries.push_back(e);
}
@@ -329,13 +328,13 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.value = row[2] ? row[2] : "";
e.expires = static_cast<uint32_t>(strtoul(row[3], nullptr, 10));
e.character_id = strtoll(row[4], nullptr, 10);
e.npc_id = strtoll(row[5], nullptr, 10);
e.bot_id = strtoll(row[6], nullptr, 10);
e.expires = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
e.character_id = row[4] ? strtoll(row[4], nullptr, 10) : 0;
e.npc_id = row[5] ? strtoll(row[5], nullptr, 10) : 0;
e.bot_id = row[6] ? strtoll(row[6], nullptr, 10) : 0;
all_entries.push_back(e);
}
@@ -394,6 +393,74 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
db_str_id
)
);
@@ -338,6 +339,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -120,8 +120,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
discord_webhooks_id
)
);
@@ -357,6 +358,70 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -116,8 +116,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
discovered_items_id
)
);
@@ -126,9 +127,9 @@ public:
if (results.RowCount() == 1) {
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.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]));
return e;
@@ -258,9 +259,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.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]));
all_entries.push_back(e);
@@ -286,9 +287,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.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]));
all_entries.push_back(e);
@@ -348,6 +349,68 @@ public:
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
+168 -41
View File
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -244,8 +244,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
doors_id
)
);
@@ -259,31 +260,31 @@ public:
e.zone = row[2] ? row[2] : "";
e.version = static_cast<int16_t>(atoi(row[3]));
e.name = row[4] ? row[4] : "";
e.pos_y = strtof(row[5], nullptr);
e.pos_x = strtof(row[6], nullptr);
e.pos_z = strtof(row[7], nullptr);
e.heading = strtof(row[8], nullptr);
e.pos_y = row[5] ? strtof(row[5], nullptr) : 0;
e.pos_x = row[6] ? strtof(row[6], nullptr) : 0;
e.pos_z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.opentype = static_cast<int16_t>(atoi(row[9]));
e.guild = static_cast<int16_t>(atoi(row[10]));
e.lockpick = static_cast<int16_t>(atoi(row[11]));
e.keyitem = static_cast<int32_t>(atoi(row[12]));
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.triggertype = static_cast<int16_t>(atoi(row[15]));
e.disable_timer = static_cast<int8_t>(atoi(row[16]));
e.doorisopen = static_cast<int16_t>(atoi(row[17]));
e.door_param = static_cast<int32_t>(atoi(row[18]));
e.dest_zone = row[19] ? row[19] : "";
e.dest_instance = static_cast<uint32_t>(strtoul(row[20], nullptr, 10));
e.dest_x = strtof(row[21], nullptr);
e.dest_y = strtof(row[22], nullptr);
e.dest_z = strtof(row[23], nullptr);
e.dest_heading = strtof(row[24], nullptr);
e.dest_instance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.dest_x = row[21] ? strtof(row[21], nullptr) : 0;
e.dest_y = row[22] ? strtof(row[22], nullptr) : 0;
e.dest_z = row[23] ? strtof(row[23], nullptr) : 0;
e.dest_heading = row[24] ? strtof(row[24], nullptr) : 0;
e.invert_state = static_cast<int32_t>(atoi(row[25]));
e.incline = static_cast<int32_t>(atoi(row[26]));
e.size = static_cast<uint16_t>(strtoul(row[27], nullptr, 10));
e.buffer = strtof(row[28], nullptr);
e.client_version_mask = static_cast<uint32_t>(strtoul(row[29], nullptr, 10));
e.size = row[27] ? static_cast<uint16_t>(strtoul(row[27], nullptr, 10)) : 100;
e.buffer = row[28] ? strtof(row[28], nullptr) : 0;
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.dz_switch_id = static_cast<int32_t>(atoi(row[31]));
e.min_expansion = static_cast<int8_t>(atoi(row[32]));
@@ -518,31 +519,31 @@ public:
e.zone = row[2] ? row[2] : "";
e.version = static_cast<int16_t>(atoi(row[3]));
e.name = row[4] ? row[4] : "";
e.pos_y = strtof(row[5], nullptr);
e.pos_x = strtof(row[6], nullptr);
e.pos_z = strtof(row[7], nullptr);
e.heading = strtof(row[8], nullptr);
e.pos_y = row[5] ? strtof(row[5], nullptr) : 0;
e.pos_x = row[6] ? strtof(row[6], nullptr) : 0;
e.pos_z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.opentype = static_cast<int16_t>(atoi(row[9]));
e.guild = static_cast<int16_t>(atoi(row[10]));
e.lockpick = static_cast<int16_t>(atoi(row[11]));
e.keyitem = static_cast<int32_t>(atoi(row[12]));
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.triggertype = static_cast<int16_t>(atoi(row[15]));
e.disable_timer = static_cast<int8_t>(atoi(row[16]));
e.doorisopen = static_cast<int16_t>(atoi(row[17]));
e.door_param = static_cast<int32_t>(atoi(row[18]));
e.dest_zone = row[19] ? row[19] : "";
e.dest_instance = static_cast<uint32_t>(strtoul(row[20], nullptr, 10));
e.dest_x = strtof(row[21], nullptr);
e.dest_y = strtof(row[22], nullptr);
e.dest_z = strtof(row[23], nullptr);
e.dest_heading = strtof(row[24], nullptr);
e.dest_instance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.dest_x = row[21] ? strtof(row[21], nullptr) : 0;
e.dest_y = row[22] ? strtof(row[22], nullptr) : 0;
e.dest_z = row[23] ? strtof(row[23], nullptr) : 0;
e.dest_heading = row[24] ? strtof(row[24], nullptr) : 0;
e.invert_state = static_cast<int32_t>(atoi(row[25]));
e.incline = static_cast<int32_t>(atoi(row[26]));
e.size = static_cast<uint16_t>(strtoul(row[27], nullptr, 10));
e.buffer = strtof(row[28], nullptr);
e.client_version_mask = static_cast<uint32_t>(strtoul(row[29], nullptr, 10));
e.size = row[27] ? static_cast<uint16_t>(strtoul(row[27], nullptr, 10)) : 100;
e.buffer = row[28] ? strtof(row[28], nullptr) : 0;
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.dz_switch_id = static_cast<int32_t>(atoi(row[31]));
e.min_expansion = static_cast<int8_t>(atoi(row[32]));
@@ -578,31 +579,31 @@ public:
e.zone = row[2] ? row[2] : "";
e.version = static_cast<int16_t>(atoi(row[3]));
e.name = row[4] ? row[4] : "";
e.pos_y = strtof(row[5], nullptr);
e.pos_x = strtof(row[6], nullptr);
e.pos_z = strtof(row[7], nullptr);
e.heading = strtof(row[8], nullptr);
e.pos_y = row[5] ? strtof(row[5], nullptr) : 0;
e.pos_x = row[6] ? strtof(row[6], nullptr) : 0;
e.pos_z = row[7] ? strtof(row[7], nullptr) : 0;
e.heading = row[8] ? strtof(row[8], nullptr) : 0;
e.opentype = static_cast<int16_t>(atoi(row[9]));
e.guild = static_cast<int16_t>(atoi(row[10]));
e.lockpick = static_cast<int16_t>(atoi(row[11]));
e.keyitem = static_cast<int32_t>(atoi(row[12]));
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.triggertype = static_cast<int16_t>(atoi(row[15]));
e.disable_timer = static_cast<int8_t>(atoi(row[16]));
e.doorisopen = static_cast<int16_t>(atoi(row[17]));
e.door_param = static_cast<int32_t>(atoi(row[18]));
e.dest_zone = row[19] ? row[19] : "";
e.dest_instance = static_cast<uint32_t>(strtoul(row[20], nullptr, 10));
e.dest_x = strtof(row[21], nullptr);
e.dest_y = strtof(row[22], nullptr);
e.dest_z = strtof(row[23], nullptr);
e.dest_heading = strtof(row[24], nullptr);
e.dest_instance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
e.dest_x = row[21] ? strtof(row[21], nullptr) : 0;
e.dest_y = row[22] ? strtof(row[22], nullptr) : 0;
e.dest_z = row[23] ? strtof(row[23], nullptr) : 0;
e.dest_heading = row[24] ? strtof(row[24], nullptr) : 0;
e.invert_state = static_cast<int32_t>(atoi(row[25]));
e.incline = static_cast<int32_t>(atoi(row[26]));
e.size = static_cast<uint16_t>(strtoul(row[27], nullptr, 10));
e.buffer = strtof(row[28], nullptr);
e.client_version_mask = static_cast<uint32_t>(strtoul(row[29], nullptr, 10));
e.size = row[27] ? static_cast<uint16_t>(strtoul(row[27], nullptr, 10)) : 100;
e.buffer = row[28] ? strtof(row[28], nullptr) : 0;
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.dz_switch_id = static_cast<int32_t>(atoi(row[31]));
e.min_expansion = static_cast<int8_t>(atoi(row[32]));
@@ -667,6 +668,132 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
dynamic_zone_members_id
)
);
@@ -122,9 +123,9 @@ public:
if (results.RowCount() == 1) {
DynamicZoneMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.character_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
return e;
}
@@ -249,9 +250,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
DynamicZoneMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.character_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -276,9 +277,9 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
DynamicZoneMembers e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.character_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.character_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -337,6 +338,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -188,8 +188,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
dynamic_zone_templates_id
)
);
@@ -198,7 +199,7 @@ public:
if (results.RowCount() == 1) {
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_version = static_cast<int32_t>(atoi(row[2]));
e.name = row[3] ? row[3] : "";
@@ -207,19 +208,19 @@ public:
e.duration_seconds = static_cast<int32_t>(atoi(row[6]));
e.dz_switch_id = static_cast<int32_t>(atoi(row[7]));
e.compass_zone_id = static_cast<int32_t>(atoi(row[8]));
e.compass_x = strtof(row[9], nullptr);
e.compass_y = strtof(row[10], nullptr);
e.compass_z = strtof(row[11], nullptr);
e.compass_x = row[9] ? strtof(row[9], nullptr) : 0;
e.compass_y = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_z = row[11] ? strtof(row[11], nullptr) : 0;
e.return_zone_id = static_cast<int32_t>(atoi(row[12]));
e.return_x = strtof(row[13], nullptr);
e.return_y = strtof(row[14], nullptr);
e.return_z = strtof(row[15], nullptr);
e.return_h = strtof(row[16], nullptr);
e.return_x = row[13] ? strtof(row[13], nullptr) : 0;
e.return_y = row[14] ? strtof(row[14], nullptr) : 0;
e.return_z = row[15] ? strtof(row[15], nullptr) : 0;
e.return_h = row[16] ? strtof(row[16], nullptr) : 0;
e.override_zone_in = static_cast<int8_t>(atoi(row[17]));
e.zone_in_x = strtof(row[18], nullptr);
e.zone_in_y = strtof(row[19], nullptr);
e.zone_in_z = strtof(row[20], nullptr);
e.zone_in_h = strtof(row[21], nullptr);
e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_h = row[21] ? strtof(row[21], nullptr) : 0;
return e;
}
@@ -401,7 +402,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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_version = static_cast<int32_t>(atoi(row[2]));
e.name = row[3] ? row[3] : "";
@@ -410,19 +411,19 @@ public:
e.duration_seconds = static_cast<int32_t>(atoi(row[6]));
e.dz_switch_id = static_cast<int32_t>(atoi(row[7]));
e.compass_zone_id = static_cast<int32_t>(atoi(row[8]));
e.compass_x = strtof(row[9], nullptr);
e.compass_y = strtof(row[10], nullptr);
e.compass_z = strtof(row[11], nullptr);
e.compass_x = row[9] ? strtof(row[9], nullptr) : 0;
e.compass_y = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_z = row[11] ? strtof(row[11], nullptr) : 0;
e.return_zone_id = static_cast<int32_t>(atoi(row[12]));
e.return_x = strtof(row[13], nullptr);
e.return_y = strtof(row[14], nullptr);
e.return_z = strtof(row[15], nullptr);
e.return_h = strtof(row[16], nullptr);
e.return_x = row[13] ? strtof(row[13], nullptr) : 0;
e.return_y = row[14] ? strtof(row[14], nullptr) : 0;
e.return_z = row[15] ? strtof(row[15], nullptr) : 0;
e.return_h = row[16] ? strtof(row[16], nullptr) : 0;
e.override_zone_in = static_cast<int8_t>(atoi(row[17]));
e.zone_in_x = strtof(row[18], nullptr);
e.zone_in_y = strtof(row[19], nullptr);
e.zone_in_z = strtof(row[20], nullptr);
e.zone_in_h = strtof(row[21], nullptr);
e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_h = row[21] ? strtof(row[21], nullptr) : 0;
all_entries.push_back(e);
}
@@ -447,7 +448,7 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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_version = static_cast<int32_t>(atoi(row[2]));
e.name = row[3] ? row[3] : "";
@@ -456,19 +457,19 @@ public:
e.duration_seconds = static_cast<int32_t>(atoi(row[6]));
e.dz_switch_id = static_cast<int32_t>(atoi(row[7]));
e.compass_zone_id = static_cast<int32_t>(atoi(row[8]));
e.compass_x = strtof(row[9], nullptr);
e.compass_y = strtof(row[10], nullptr);
e.compass_z = strtof(row[11], nullptr);
e.compass_x = row[9] ? strtof(row[9], nullptr) : 0;
e.compass_y = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_z = row[11] ? strtof(row[11], nullptr) : 0;
e.return_zone_id = static_cast<int32_t>(atoi(row[12]));
e.return_x = strtof(row[13], nullptr);
e.return_y = strtof(row[14], nullptr);
e.return_z = strtof(row[15], nullptr);
e.return_h = strtof(row[16], nullptr);
e.return_x = row[13] ? strtof(row[13], nullptr) : 0;
e.return_y = row[14] ? strtof(row[14], nullptr) : 0;
e.return_z = row[15] ? strtof(row[15], nullptr) : 0;
e.return_h = row[16] ? strtof(row[16], nullptr) : 0;
e.override_zone_in = static_cast<int8_t>(atoi(row[17]));
e.zone_in_x = strtof(row[18], nullptr);
e.zone_in_y = strtof(row[19], nullptr);
e.zone_in_z = strtof(row[20], nullptr);
e.zone_in_h = strtof(row[21], nullptr);
e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_h = row[21] ? strtof(row[21], nullptr) : 0;
all_entries.push_back(e);
}
@@ -527,6 +528,104 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -192,8 +192,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
dynamic_zones_id
)
);
@@ -202,29 +203,29 @@ public:
if (results.RowCount() == 1) {
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.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.name = row[4] ? row[4] : "";
e.leader_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.min_players = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.max_players = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.leader_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.min_players = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
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.compass_zone_id = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.compass_x = strtof(row[10], nullptr);
e.compass_y = strtof(row[11], nullptr);
e.compass_z = strtof(row[12], nullptr);
e.safe_return_zone_id = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.safe_return_x = strtof(row[14], nullptr);
e.safe_return_y = strtof(row[15], nullptr);
e.safe_return_z = strtof(row[16], nullptr);
e.safe_return_heading = strtof(row[17], nullptr);
e.zone_in_x = strtof(row[18], nullptr);
e.zone_in_y = strtof(row[19], nullptr);
e.zone_in_z = strtof(row[20], nullptr);
e.zone_in_heading = strtof(row[21], nullptr);
e.has_zone_in = static_cast<uint8_t>(strtoul(row[22], nullptr, 10));
e.compass_zone_id = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.compass_x = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_y = row[11] ? strtof(row[11], nullptr) : 0;
e.compass_z = row[12] ? strtof(row[12], nullptr) : 0;
e.safe_return_zone_id = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.safe_return_x = row[14] ? strtof(row[14], nullptr) : 0;
e.safe_return_y = row[15] ? strtof(row[15], nullptr) : 0;
e.safe_return_z = row[16] ? strtof(row[16], nullptr) : 0;
e.safe_return_heading = row[17] ? strtof(row[17], nullptr) : 0;
e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_heading = row[21] ? strtof(row[21], nullptr) : 0;
e.has_zone_in = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
return e;
}
@@ -409,29 +410,29 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.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.name = row[4] ? row[4] : "";
e.leader_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.min_players = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.max_players = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.leader_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.min_players = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
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.compass_zone_id = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.compass_x = strtof(row[10], nullptr);
e.compass_y = strtof(row[11], nullptr);
e.compass_z = strtof(row[12], nullptr);
e.safe_return_zone_id = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.safe_return_x = strtof(row[14], nullptr);
e.safe_return_y = strtof(row[15], nullptr);
e.safe_return_z = strtof(row[16], nullptr);
e.safe_return_heading = strtof(row[17], nullptr);
e.zone_in_x = strtof(row[18], nullptr);
e.zone_in_y = strtof(row[19], nullptr);
e.zone_in_z = strtof(row[20], nullptr);
e.zone_in_heading = strtof(row[21], nullptr);
e.has_zone_in = static_cast<uint8_t>(strtoul(row[22], nullptr, 10));
e.compass_zone_id = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.compass_x = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_y = row[11] ? strtof(row[11], nullptr) : 0;
e.compass_z = row[12] ? strtof(row[12], nullptr) : 0;
e.safe_return_zone_id = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.safe_return_x = row[14] ? strtof(row[14], nullptr) : 0;
e.safe_return_y = row[15] ? strtof(row[15], nullptr) : 0;
e.safe_return_z = row[16] ? strtof(row[16], nullptr) : 0;
e.safe_return_heading = row[17] ? strtof(row[17], nullptr) : 0;
e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_heading = row[21] ? strtof(row[21], nullptr) : 0;
e.has_zone_in = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -456,29 +457,29 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.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.name = row[4] ? row[4] : "";
e.leader_id = static_cast<uint32_t>(strtoul(row[5], nullptr, 10));
e.min_players = static_cast<uint32_t>(strtoul(row[6], nullptr, 10));
e.max_players = static_cast<uint32_t>(strtoul(row[7], nullptr, 10));
e.leader_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.min_players = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
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.compass_zone_id = static_cast<uint32_t>(strtoul(row[9], nullptr, 10));
e.compass_x = strtof(row[10], nullptr);
e.compass_y = strtof(row[11], nullptr);
e.compass_z = strtof(row[12], nullptr);
e.safe_return_zone_id = static_cast<uint32_t>(strtoul(row[13], nullptr, 10));
e.safe_return_x = strtof(row[14], nullptr);
e.safe_return_y = strtof(row[15], nullptr);
e.safe_return_z = strtof(row[16], nullptr);
e.safe_return_heading = strtof(row[17], nullptr);
e.zone_in_x = strtof(row[18], nullptr);
e.zone_in_y = strtof(row[19], nullptr);
e.zone_in_z = strtof(row[20], nullptr);
e.zone_in_heading = strtof(row[21], nullptr);
e.has_zone_in = static_cast<uint8_t>(strtoul(row[22], nullptr, 10));
e.compass_zone_id = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.compass_x = row[10] ? strtof(row[10], nullptr) : 0;
e.compass_y = row[11] ? strtof(row[11], nullptr) : 0;
e.compass_z = row[12] ? strtof(row[12], nullptr) : 0;
e.safe_return_zone_id = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.safe_return_x = row[14] ? strtof(row[14], nullptr) : 0;
e.safe_return_y = row[15] ? strtof(row[15], nullptr) : 0;
e.safe_return_z = row[16] ? strtof(row[16], nullptr) : 0;
e.safe_return_heading = row[17] ? strtof(row[17], nullptr) : 0;
e.zone_in_x = row[18] ? strtof(row[18], nullptr) : 0;
e.zone_in_y = row[19] ? strtof(row[19], nullptr) : 0;
e.zone_in_z = row[20] ? strtof(row[20], nullptr) : 0;
e.zone_in_heading = row[21] ? strtof(row[21], nullptr) : 0;
e.has_zone_in = row[22] ? static_cast<uint8_t>(strtoul(row[22], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -537,6 +538,106 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -124,8 +124,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
expedition_lockouts_id
)
);
@@ -134,11 +135,11 @@ public:
if (results.RowCount() == 1) {
ExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.expedition_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.expedition_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.event_name = row[2] ? row[2] : "";
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] : "";
return e;
@@ -273,11 +274,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
ExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.expedition_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.expedition_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.event_name = row[2] ? row[2] : "";
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] : "";
all_entries.push_back(e);
@@ -303,11 +304,11 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
ExpeditionLockouts e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.expedition_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.expedition_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.event_name = row[2] ? row[2] : "";
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] : "";
all_entries.push_back(e);
@@ -367,6 +368,72 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -116,8 +116,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
expeditions_id
)
);
@@ -126,10 +127,10 @@ public:
if (results.RowCount() == 1) {
Expeditions e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.add_replay_on_join = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.is_locked = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.add_replay_on_join = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 1;
e.is_locked = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
return e;
}
@@ -257,10 +258,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
Expeditions e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.add_replay_on_join = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.is_locked = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.add_replay_on_join = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 1;
e.is_locked = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -285,10 +286,10 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
Expeditions e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.dynamic_zone_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.add_replay_on_join = static_cast<uint8_t>(strtoul(row[2], nullptr, 10));
e.is_locked = static_cast<uint8_t>(strtoul(row[3], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.dynamic_zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.add_replay_on_join = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 1;
e.is_locked = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
all_entries.push_back(e);
}
@@ -347,6 +348,68 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -184,8 +184,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
faction_association_id
)
);
@@ -196,25 +197,25 @@ public:
e.id = static_cast<int32_t>(atoi(row[0]));
e.id_1 = static_cast<int32_t>(atoi(row[1]));
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.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.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.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.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.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.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.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.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.mod_10 = strtof(row[20], nullptr);
e.mod_10 = row[20] ? strtof(row[20], nullptr) : 0;
return e;
}
@@ -396,25 +397,25 @@ public:
e.id = static_cast<int32_t>(atoi(row[0]));
e.id_1 = static_cast<int32_t>(atoi(row[1]));
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.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.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.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.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.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.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.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.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.mod_10 = strtof(row[20], nullptr);
e.mod_10 = row[20] ? strtof(row[20], nullptr) : 0;
all_entries.push_back(e);
}
@@ -441,25 +442,25 @@ public:
e.id = static_cast<int32_t>(atoi(row[0]));
e.id_1 = static_cast<int32_t>(atoi(row[1]));
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.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.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.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.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.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.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.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.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.mod_10 = strtof(row[20], nullptr);
e.mod_10 = row[20] ? strtof(row[20], nullptr) : 0;
all_entries.push_back(e);
}
@@ -518,6 +519,102 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -124,8 +124,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
faction_base_data_id
)
);
@@ -368,6 +369,72 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -116,8 +116,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
faction_list_mod_id
)
);
@@ -126,8 +127,8 @@ public:
if (results.RowCount() == 1) {
FactionListMod e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.faction_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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_name = row[3] ? row[3] : "";
@@ -257,8 +258,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
FactionListMod e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.faction_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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_name = row[3] ? row[3] : "";
@@ -285,8 +286,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
FactionListMod e{};
e.id = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.faction_id = static_cast<uint32_t>(strtoul(row[1], nullptr, 10));
e.id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
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_name = row[3] ? row[3] : "";
@@ -347,6 +348,68 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
faction_list_id
)
);
@@ -338,6 +339,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -116,8 +116,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
faction_values_id
)
);
@@ -348,6 +349,68 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -144,8 +144,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
fishing_id
)
);
@@ -417,6 +418,82 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -136,8 +136,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
forage_id
)
);
@@ -397,6 +398,78 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
friends_id
)
);
@@ -122,8 +123,8 @@ public:
if (results.RowCount() == 1) {
Friends e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 1;
e.name = row[2] ? row[2] : "";
return e;
@@ -250,8 +251,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
Friends e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 1;
e.name = row[2] ? row[2] : "";
all_entries.push_back(e);
@@ -277,8 +278,8 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
Friends e{};
e.charid = static_cast<uint32_t>(strtoul(row[0], nullptr, 10));
e.type = static_cast<uint8_t>(strtoul(row[1], nullptr, 10));
e.charid = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
e.type = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 1;
e.name = row[2] ? row[2] : "";
all_entries.push_back(e);
@@ -338,6 +339,66 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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
@@ -16,6 +16,7 @@
#include "../../strings.h"
#include <ctime>
class BaseGlobalLootRepository {
public:
struct GlobalLoot {
@@ -168,8 +169,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
global_loot_id
)
);
@@ -178,21 +180,21 @@ public:
if (results.RowCount() == 1) {
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.loottable_id = static_cast<int32_t>(atoi(row[2]));
e.enabled = static_cast<int8_t>(atoi(row[3]));
e.min_level = static_cast<int32_t>(atoi(row[4]));
e.max_level = static_cast<int32_t>(atoi(row[5]));
e.rare = static_cast<int8_t>(atoi(row[6]));
e.raid = static_cast<int8_t>(atoi(row[7]));
e.loottable_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.enabled = row[3] ? static_cast<int8_t>(atoi(row[3])) : 1;
e.min_level = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_level = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.rare = row[6] ? static_cast<int8_t>(atoi(row[6])) : 0;
e.raid = row[7] ? static_cast<int8_t>(atoi(row[7])) : 0;
e.race = row[8] ? row[8] : "";
e.class_ = row[9] ? row[9] : "";
e.bodytype = row[10] ? row[10] : "";
e.zone = row[11] ? row[11] : "";
e.hot_zone = static_cast<int8_t>(atoi(row[12]));
e.min_expansion = static_cast<int8_t>(atoi(row[13]));
e.max_expansion = static_cast<int8_t>(atoi(row[14]));
e.hot_zone = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.min_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.max_expansion = row[14] ? static_cast<int8_t>(atoi(row[14])) : -1;
e.content_flags = row[15] ? row[15] : "";
e.content_flags_disabled = row[16] ? row[16] : "";
@@ -361,21 +363,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.loottable_id = static_cast<int32_t>(atoi(row[2]));
e.enabled = static_cast<int8_t>(atoi(row[3]));
e.min_level = static_cast<int32_t>(atoi(row[4]));
e.max_level = static_cast<int32_t>(atoi(row[5]));
e.rare = static_cast<int8_t>(atoi(row[6]));
e.raid = static_cast<int8_t>(atoi(row[7]));
e.loottable_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.enabled = row[3] ? static_cast<int8_t>(atoi(row[3])) : 1;
e.min_level = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_level = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.rare = row[6] ? static_cast<int8_t>(atoi(row[6])) : 0;
e.raid = row[7] ? static_cast<int8_t>(atoi(row[7])) : 0;
e.race = row[8] ? row[8] : "";
e.class_ = row[9] ? row[9] : "";
e.bodytype = row[10] ? row[10] : "";
e.zone = row[11] ? row[11] : "";
e.hot_zone = static_cast<int8_t>(atoi(row[12]));
e.min_expansion = static_cast<int8_t>(atoi(row[13]));
e.max_expansion = static_cast<int8_t>(atoi(row[14]));
e.hot_zone = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.min_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.max_expansion = row[14] ? static_cast<int8_t>(atoi(row[14])) : -1;
e.content_flags = row[15] ? row[15] : "";
e.content_flags_disabled = row[16] ? row[16] : "";
@@ -402,21 +404,21 @@ public:
for (auto row = results.begin(); row != results.end(); ++row) {
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.loottable_id = static_cast<int32_t>(atoi(row[2]));
e.enabled = static_cast<int8_t>(atoi(row[3]));
e.min_level = static_cast<int32_t>(atoi(row[4]));
e.max_level = static_cast<int32_t>(atoi(row[5]));
e.rare = static_cast<int8_t>(atoi(row[6]));
e.raid = static_cast<int8_t>(atoi(row[7]));
e.loottable_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
e.enabled = row[3] ? static_cast<int8_t>(atoi(row[3])) : 1;
e.min_level = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.max_level = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.rare = row[6] ? static_cast<int8_t>(atoi(row[6])) : 0;
e.raid = row[7] ? static_cast<int8_t>(atoi(row[7])) : 0;
e.race = row[8] ? row[8] : "";
e.class_ = row[9] ? row[9] : "";
e.bodytype = row[10] ? row[10] : "";
e.zone = row[11] ? row[11] : "";
e.hot_zone = static_cast<int8_t>(atoi(row[12]));
e.min_expansion = static_cast<int8_t>(atoi(row[13]));
e.max_expansion = static_cast<int8_t>(atoi(row[14]));
e.hot_zone = row[12] ? static_cast<int8_t>(atoi(row[12])) : 0;
e.min_expansion = row[13] ? static_cast<int8_t>(atoi(row[13])) : -1;
e.max_expansion = row[14] ? static_cast<int8_t>(atoi(row[14])) : -1;
e.content_flags = row[15] ? row[15] : "";
e.content_flags_disabled = row[16] ? row[16] : "";
@@ -477,6 +479,94 @@ public:
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
@@ -6,7 +6,7 @@
* Any modifications to base repositories are to be made by the generator only
*
* @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_GM_IPS_REPOSITORY_H
@@ -112,8 +112,9 @@ public:
{
auto results = db.QueryDatabase(
fmt::format(
"{} WHERE id = {} LIMIT 1",
"{} WHERE {} = {} LIMIT 1",
BaseSelect(),
PrimaryKey(),
gm_ips_id
)
);
@@ -338,6 +339,66 @@ public:
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 GmIps &e
)
{
std::vector<std::string> v;
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.account_id));
v.push_back("'" + Strings::Escape(e.ip_address) + "'");
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<GmIps> &entries
)
{
std::vector<std::string> insert_chunks;
for (auto &e: entries) {
std::vector<std::string> v;
v.push_back("'" + Strings::Escape(e.name) + "'");
v.push_back(std::to_string(e.account_id));
v.push_back("'" + Strings::Escape(e.ip_address) + "'");
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_GM_IPS_REPOSITORY_H

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