mirror of
https://github.com/Tereneckla/mod-profession-experience.git
synced 2026-01-13 00:58:38 +00:00
Initial commit
This commit is contained in:
8
.editorconfig
Normal file
8
.editorconfig
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
tab_width = 4
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
max_line_length = 80
|
||||||
105
.gitattributes
vendored
Normal file
105
.gitattributes
vendored
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
## AUTO-DETECT
|
||||||
|
## Handle line endings automatically for files detected as
|
||||||
|
## text and leave all files detected as binary untouched.
|
||||||
|
## This will handle all files NOT defined below.
|
||||||
|
* text=auto eol=lf
|
||||||
|
|
||||||
|
# Text
|
||||||
|
*.conf text
|
||||||
|
*.conf.dist text
|
||||||
|
*.cmake text
|
||||||
|
|
||||||
|
## Scripts
|
||||||
|
*.sh text
|
||||||
|
*.fish text
|
||||||
|
*.lua text
|
||||||
|
|
||||||
|
## SQL
|
||||||
|
*.sql text
|
||||||
|
|
||||||
|
## C++
|
||||||
|
*.c text
|
||||||
|
*.cc text
|
||||||
|
*.cxx text
|
||||||
|
*.cpp text
|
||||||
|
*.c++ text
|
||||||
|
*.hpp text
|
||||||
|
*.h text
|
||||||
|
*.h++ text
|
||||||
|
*.hh text
|
||||||
|
|
||||||
|
|
||||||
|
## For documentation
|
||||||
|
|
||||||
|
# Documents
|
||||||
|
*.doc diff=astextplain
|
||||||
|
*.DOC diff=astextplain
|
||||||
|
*.docx diff=astextplain
|
||||||
|
*.DOCX diff=astextplain
|
||||||
|
*.dot diff=astextplain
|
||||||
|
*.DOT diff=astextplain
|
||||||
|
*.pdf diff=astextplain
|
||||||
|
*.PDF diff=astextplain
|
||||||
|
*.rtf diff=astextplain
|
||||||
|
*.RTF diff=astextplain
|
||||||
|
|
||||||
|
## DOCUMENTATION
|
||||||
|
*.markdown text
|
||||||
|
*.md text
|
||||||
|
*.mdwn text
|
||||||
|
*.mdown text
|
||||||
|
*.mkd text
|
||||||
|
*.mkdn text
|
||||||
|
*.mdtxt text
|
||||||
|
*.mdtext text
|
||||||
|
*.txt text
|
||||||
|
AUTHORS text
|
||||||
|
CHANGELOG text
|
||||||
|
CHANGES text
|
||||||
|
CONTRIBUTING text
|
||||||
|
COPYING text
|
||||||
|
copyright text
|
||||||
|
*COPYRIGHT* text
|
||||||
|
INSTALL text
|
||||||
|
license text
|
||||||
|
LICENSE text
|
||||||
|
NEWS text
|
||||||
|
readme text
|
||||||
|
*README* text
|
||||||
|
TODO text
|
||||||
|
|
||||||
|
## GRAPHICS
|
||||||
|
*.ai binary
|
||||||
|
*.bmp binary
|
||||||
|
*.eps binary
|
||||||
|
*.gif binary
|
||||||
|
*.ico binary
|
||||||
|
*.jng binary
|
||||||
|
*.jp2 binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.jpx binary
|
||||||
|
*.jxr binary
|
||||||
|
*.pdf binary
|
||||||
|
*.png binary
|
||||||
|
*.psb binary
|
||||||
|
*.psd binary
|
||||||
|
*.svg text
|
||||||
|
*.svgz binary
|
||||||
|
*.tif binary
|
||||||
|
*.tiff binary
|
||||||
|
*.wbmp binary
|
||||||
|
*.webp binary
|
||||||
|
|
||||||
|
|
||||||
|
## ARCHIVES
|
||||||
|
*.7z binary
|
||||||
|
*.gz binary
|
||||||
|
*.jar binary
|
||||||
|
*.rar binary
|
||||||
|
*.tar binary
|
||||||
|
*.zip binary
|
||||||
|
|
||||||
|
## EXECUTABLES
|
||||||
|
*.exe binary
|
||||||
|
*.pyc binary
|
||||||
72
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
72
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
name: Bug report
|
||||||
|
description: Create a bug report to help us improve.
|
||||||
|
title: "Bug: "
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
id: current
|
||||||
|
attributes:
|
||||||
|
label: Current Behaviour
|
||||||
|
description: |
|
||||||
|
Description of the problem or issue here.
|
||||||
|
Include entries of affected creatures / items / quests / spells etc.
|
||||||
|
If this is a crash, post the crashlog (upload to https://gist.github.com/) and include the link here.
|
||||||
|
Never upload files! Use GIST for text and YouTube for videos!
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: expected
|
||||||
|
attributes:
|
||||||
|
label: Expected Behaviour
|
||||||
|
description: |
|
||||||
|
Tell us what should happen instead.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: reproduce
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce the problem
|
||||||
|
description: |
|
||||||
|
What does someone else need to do to encounter the same bug?
|
||||||
|
placeholder: |
|
||||||
|
1. Step 1
|
||||||
|
2. Step 2
|
||||||
|
3. Step 3
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: extra
|
||||||
|
attributes:
|
||||||
|
label: Extra Notes
|
||||||
|
description: |
|
||||||
|
Do you have any extra notes that can help solve the issue that does not fit any other field?
|
||||||
|
placeholder: |
|
||||||
|
None
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
id: commit
|
||||||
|
attributes:
|
||||||
|
label: AC rev. hash/commit
|
||||||
|
description: |
|
||||||
|
Copy the result of the `.server debug` command (if you need to run it from the client get a prat addon)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: os
|
||||||
|
attributes:
|
||||||
|
label: Operating system
|
||||||
|
description: |
|
||||||
|
The Operating System the Server is running on.
|
||||||
|
i.e. Windows 11 x64, Debian 10 x64, macOS 12, Ubuntu 20.04
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: custom
|
||||||
|
attributes:
|
||||||
|
label: Custom changes or Modules
|
||||||
|
description: |
|
||||||
|
List which custom changes or modules you have applied, i.e. Eluna module, etc.
|
||||||
|
placeholder: |
|
||||||
|
None
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
33
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
33
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Feature request
|
||||||
|
description: Suggest an idea for this project
|
||||||
|
title: "Feature: "
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thank you for taking your time to fill out a feature request. Remember to fill out all fields including the title above.
|
||||||
|
An issue that is not properly filled out will be closed.
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Describe your feature request or suggestion in detail
|
||||||
|
description: |
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: solution
|
||||||
|
attributes:
|
||||||
|
label: Describe a possible solution to your feature or suggestion in detail
|
||||||
|
description: |
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
id: additional
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: |
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
18
.github/README.md
vendored
Normal file
18
.github/README.md
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#  AzerothCore
|
||||||
|
|
||||||
|
## mod-profession-experience
|
||||||
|
|
||||||
|
Module for azerothcore to reward experience when crafting or gathering with professions
|
||||||
|
|
||||||
|
## This module currently requires:
|
||||||
|
- AzerothCore https://github.com/azerothcore/azerothcore-wotlk/commit/fd262c3ab109afec7d191c97d2b44f58eb4a1477
|
||||||
|
|
||||||
|
## How to install
|
||||||
|
|
||||||
|
1. Simply place the module under the `modules` folder of your AzerothCore source folder.
|
||||||
|
2. Re-run cmake and launch a clean build of AzerothCore
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
- Enable or disable professions in conf
|
||||||
|
- Change the experience gained for performing actions in conf
|
||||||
15
.github/workflows/core-build.yml
vendored
Normal file
15
.github/workflows/core-build.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
name: core-build
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'master'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- 'master'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
uses: azerothcore/reusable-workflows/.github/workflows/core_build_modules.yml@main
|
||||||
|
with:
|
||||||
|
module_repo: ${{ github.event.repository.name }}
|
||||||
15
.github/workflows/core_codestyle.yml
vendored
Normal file
15
.github/workflows/core_codestyle.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
name: Codestyle Checks
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-codestyle:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Check Codestyling
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Check Codestyling
|
||||||
|
run: source ./apps/ci/ci-codestyle.sh
|
||||||
48
.gitignore
vendored
Normal file
48
.gitignore
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
!.gitignore
|
||||||
|
|
||||||
|
#
|
||||||
|
#Generic
|
||||||
|
#
|
||||||
|
|
||||||
|
.directory
|
||||||
|
.mailmap
|
||||||
|
*.orig
|
||||||
|
*.rej
|
||||||
|
*.*~
|
||||||
|
.hg/
|
||||||
|
*.kdev*
|
||||||
|
.DS_Store
|
||||||
|
CMakeLists.txt.user
|
||||||
|
*.bak
|
||||||
|
*.patch
|
||||||
|
*.diff
|
||||||
|
*.REMOTE.*
|
||||||
|
*.BACKUP.*
|
||||||
|
*.BASE.*
|
||||||
|
*.LOCAL.*
|
||||||
|
|
||||||
|
#
|
||||||
|
# IDE & other softwares
|
||||||
|
#
|
||||||
|
/.settings/
|
||||||
|
/.externalToolBuilders/*
|
||||||
|
# exclude in all levels
|
||||||
|
nbproject/
|
||||||
|
.sync.ffs_db
|
||||||
|
*.kate-swp
|
||||||
|
|
||||||
|
#
|
||||||
|
# Eclipse
|
||||||
|
#
|
||||||
|
*.pydevproject
|
||||||
|
.metadata
|
||||||
|
.gradle
|
||||||
|
tmp/
|
||||||
|
*.tmp
|
||||||
|
*.swp
|
||||||
|
*~.nib
|
||||||
|
local.properties
|
||||||
|
.settings/
|
||||||
|
.loadpath
|
||||||
|
.project
|
||||||
|
.cproject
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 AzerothCore
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
0
apps/.gitkeep
Normal file
0
apps/.gitkeep
Normal file
0
apps/ci/.gitkeep
Normal file
0
apps/ci/.gitkeep
Normal file
40
apps/ci/ci-codestyle.sh
Normal file
40
apps/ci/ci-codestyle.sh
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "Codestyle check script:"
|
||||||
|
echo
|
||||||
|
|
||||||
|
declare -A singleLineRegexChecks=(
|
||||||
|
["LOG_.+GetCounter"]="Use ObjectGuid::ToString().c_str() method instead of ObjectGuid::GetCounter() when logging. Check the lines above"
|
||||||
|
["[[:blank:]]$"]="Remove whitespace at the end of the lines above"
|
||||||
|
["\t"]="Replace tabs with 4 spaces in the lines above"
|
||||||
|
)
|
||||||
|
|
||||||
|
for check in ${!singleLineRegexChecks[@]}; do
|
||||||
|
echo " Checking RegEx: '${check}'"
|
||||||
|
|
||||||
|
if grep -P -r -I -n ${check} src; then
|
||||||
|
echo
|
||||||
|
echo "${singleLineRegexChecks[$check]}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
declare -A multiLineRegexChecks=(
|
||||||
|
["LOG_[^;]+GetCounter"]="Use ObjectGuid::ToString().c_str() method instead of ObjectGuid::GetCounter() when logging. Check the lines above"
|
||||||
|
["\n\n\n"]="Multiple blank lines detected, keep only one. Check the files above"
|
||||||
|
)
|
||||||
|
|
||||||
|
for check in ${!multiLineRegexChecks[@]}; do
|
||||||
|
echo " Checking RegEx: '${check}'"
|
||||||
|
|
||||||
|
if grep -Pzo -r -I ${check} src; then
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
echo "${multiLineRegexChecks[$check]}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Everything looks good"
|
||||||
0
conf/.gitkeep
Normal file
0
conf/.gitkeep
Normal file
91
conf/mod-profession-experience.conf.dist
Normal file
91
conf/mod-profession-experience.conf.dist
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
|
||||||
|
#
|
||||||
|
|
||||||
|
[worldserver]
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Profession Experience Configuration
|
||||||
|
########################################
|
||||||
|
#
|
||||||
|
# ProfessionExperience.MultGray
|
||||||
|
# ProfessionExperience.MultGreen
|
||||||
|
# ProfessionExperience.MultYellow
|
||||||
|
# ProfessionExperience.MultOrange
|
||||||
|
# Description: Multiplicator to experience when using a skill with this difficulty
|
||||||
|
# Default: 0.0 - (ProfessionExperience.MultGray)
|
||||||
|
# 0.75 - (ProfessionExperience.MultGreen)
|
||||||
|
# 1.0 - (ProfessionExperience.MultYellow)
|
||||||
|
# 1.25 - (ProfessionExperience.MultOrange)
|
||||||
|
|
||||||
|
ProfessionExperience.MultGray = 0.0
|
||||||
|
ProfessionExperience.MultGreen = 0.75
|
||||||
|
ProfessionExperience.MultYellow = 1.0
|
||||||
|
ProfessionExperience.MultOrange = 1.25
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# ProfessionExperience.*.Enabled
|
||||||
|
# Description: Enable experience gain when crafting or gathering with this profession. Enchanting governs both Enchanting and Disenchanting
|
||||||
|
# Default: 0 - (Disabled, ProfessionExperience.Alchemy.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Blacksmith.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Cooking.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Enchanting.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Engineering.Enabled)
|
||||||
|
# 1 - (Enabled, ProfessionExperience.Fishing.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.FirstAid.Enabled)
|
||||||
|
# 1 - (Enabled, ProfessionExperience.Herbalism.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Inscription.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Jewelcrafting.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Leatherworking.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Lockpick.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Milling.Enabled)
|
||||||
|
# 1 - (Enabled, ProfessionExperience.Mining.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Prospecting.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Skinning.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Smelting.Enabled)
|
||||||
|
# 0 - (Disabled, ProfessionExperience.Tailoring.Enabled)
|
||||||
|
|
||||||
|
ProfessionExperience.Alchemy.Enabled = 0
|
||||||
|
ProfessionExperience.Blacksmith.Enabled = 0
|
||||||
|
ProfessionExperience.Cooking.Enabled = 0
|
||||||
|
ProfessionExperience.Enchanting.Enabled = 0
|
||||||
|
ProfessionExperience.Engineering.Enabled = 0
|
||||||
|
ProfessionExperience.Fishing.Enabled = 1
|
||||||
|
ProfessionExperience.FirstAid.Enabled = 0
|
||||||
|
ProfessionExperience.Herbalism.Enabled = 1
|
||||||
|
ProfessionExperience.Inscription.Enabled = 0
|
||||||
|
ProfessionExperience.Jewelcrafting.Enabled = 0
|
||||||
|
ProfessionExperience.Leatherworking.Enabled = 0
|
||||||
|
ProfessionExperience.Lockpick.Enabled = 0
|
||||||
|
ProfessionExperience.Milling.Enabled = 0
|
||||||
|
ProfessionExperience.Mining.Enabled = 1
|
||||||
|
ProfessionExperience.Prospecting.Enabled = 0
|
||||||
|
ProfessionExperience.Skinning.Enabled = 0
|
||||||
|
ProfessionExperience.Smelting.Enabled = 0
|
||||||
|
ProfessionExperience.Tailoring.Enabled = 0
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# ProfessionExperience.*.Experience
|
||||||
|
# Description: Part of a level gained for performing the action
|
||||||
|
# Default: 0.01 - (1%, All of them)
|
||||||
|
|
||||||
|
ProfessionExperience.Alchemy.Experience = 0.01
|
||||||
|
ProfessionExperience.Blacksmith.Experience = 0.01
|
||||||
|
ProfessionExperience.Cooking.Experience = 0.01
|
||||||
|
ProfessionExperience.Enchanting.Experience = 0.01
|
||||||
|
ProfessionExperience.Engineering.Experience = 0.01
|
||||||
|
ProfessionExperience.Fishing.Experience = 0.01
|
||||||
|
ProfessionExperience.FirstAid.Experience = 0.01
|
||||||
|
ProfessionExperience.Herbalism.Experience = 0.01
|
||||||
|
ProfessionExperience.Inscription.Experience = 0.01
|
||||||
|
ProfessionExperience.Jewelcrafting.Experience = 0.01
|
||||||
|
ProfessionExperience.Leatherworking.Experience = 0.01
|
||||||
|
ProfessionExperience.Lockpick.Experience = 0.01
|
||||||
|
ProfessionExperience.Milling.Experience = 0.01
|
||||||
|
ProfessionExperience.Mining.Experience = 0.01
|
||||||
|
ProfessionExperience.Prospecting.Experience = 0.01
|
||||||
|
ProfessionExperience.Skinning.Experience = 0.01
|
||||||
|
ProfessionExperience.Smelting.Experience = 0.01
|
||||||
|
ProfessionExperience.Tailoring.Experience = 0.01
|
||||||
0
data/.gitkeep
Normal file
0
data/.gitkeep
Normal file
0
data/sql/db-auth/.gitkeep
Normal file
0
data/sql/db-auth/.gitkeep
Normal file
0
data/sql/db-characters/.gitkeep
Normal file
0
data/sql/db-characters/.gitkeep
Normal file
0
data/sql/db-world/.gitkeep
Normal file
0
data/sql/db-world/.gitkeep
Normal file
0
include.sh
Normal file
0
include.sh
Normal file
25
pull_request_template.md
Normal file
25
pull_request_template.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<!-- First of all, THANK YOU for your contribution. -->
|
||||||
|
|
||||||
|
## Changes Proposed:
|
||||||
|
-
|
||||||
|
-
|
||||||
|
|
||||||
|
## Issues Addressed:
|
||||||
|
<!-- If your fix has a relating issue, link it below -->
|
||||||
|
- Closes
|
||||||
|
|
||||||
|
## SOURCE:
|
||||||
|
<!-- If you can, include a source that can strengthen your claim -->
|
||||||
|
|
||||||
|
## Tests Performed:
|
||||||
|
<!-- Does it build without errors? Did you test in-game? What did you test? On which OS did you test? Describe any other tests performed -->
|
||||||
|
-
|
||||||
|
-
|
||||||
|
|
||||||
|
|
||||||
|
## How to Test the Changes:
|
||||||
|
<!-- Describe in a detailed step-by-step order how to test the changes -->
|
||||||
|
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
13
src/PE_loader.cpp
Normal file
13
src/PE_loader.cpp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
|
||||||
|
*/
|
||||||
|
|
||||||
|
// From SC
|
||||||
|
void AddProfessionExpScripts();
|
||||||
|
|
||||||
|
// Add all
|
||||||
|
void Addmod_profession_experienceScripts()
|
||||||
|
{
|
||||||
|
AddProfessionExpScripts();
|
||||||
|
}
|
||||||
|
|
||||||
277
src/ProfessionExp.cpp
Normal file
277
src/ProfessionExp.cpp
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Chat.h"
|
||||||
|
#include "Config.h"
|
||||||
|
#include "ConfigValueCache.h"
|
||||||
|
#include "Player.h"
|
||||||
|
#include "ScriptMgr.h"
|
||||||
|
|
||||||
|
enum class PEConfig
|
||||||
|
{
|
||||||
|
ALCHEMY_ENABLED,
|
||||||
|
ALCHEMY_EXPERIENCE,
|
||||||
|
BLACKSMITH_ENABLED,
|
||||||
|
BLACKSMITH_EXPERIENCE,
|
||||||
|
COOKING_ENABLED,
|
||||||
|
COOKING_EXPERIENCE,
|
||||||
|
ENCHANTING_ENABLED,
|
||||||
|
ENCHANTING_EXPERIENCE,
|
||||||
|
ENGINEERING_ENABLED,
|
||||||
|
ENGINEERING_EXPERIENCE,
|
||||||
|
FISHING_ENABLED,
|
||||||
|
FISHING_EXPERIENCE,
|
||||||
|
FIRST_AID_ENABLED,
|
||||||
|
FIRST_AID_EXPERIENCE,
|
||||||
|
HERBALISM_ENABLED,
|
||||||
|
HERBALISM_EXPERIENCE,
|
||||||
|
INSCRIPTION_ENABLED,
|
||||||
|
INSCRIPTION_EXPERIENCE,
|
||||||
|
JEWELCRAFTING_ENABLED,
|
||||||
|
JEWELCRAFTING_EXPERIENCE,
|
||||||
|
LEATHERWORKING_ENABLED,
|
||||||
|
LEATHERWORKING_EXPERIENCE,
|
||||||
|
LOCKPICK_ENABLED,
|
||||||
|
LOCKPICK_EXPERIENCE,
|
||||||
|
MILLING_ENABLED,
|
||||||
|
MILLING_EXPERIENCE,
|
||||||
|
MINING_ENABLED,
|
||||||
|
MINING_EXPERIENCE,
|
||||||
|
PROSPECTING_ENABLED,
|
||||||
|
PROSPECTING_EXPERIENCE,
|
||||||
|
SKINNING_ENABLED,
|
||||||
|
SKINNING_EXPERIENCE,
|
||||||
|
SMELTING_ENABLED,
|
||||||
|
SMELTING_EXPERIENCE,
|
||||||
|
TAILORING_ENABLED,
|
||||||
|
TAILORING_EXPERIENCE,
|
||||||
|
MULT_GREY,
|
||||||
|
MULT_GREEN,
|
||||||
|
MULT_YELLOW,
|
||||||
|
MULT_ORANGE,
|
||||||
|
|
||||||
|
NUM_CONFIGS,
|
||||||
|
};
|
||||||
|
|
||||||
|
class PEConfigData : public ConfigValueCache<PEConfig>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PEConfigData() : ConfigValueCache(PEConfig::NUM_CONFIGS) { };
|
||||||
|
|
||||||
|
void BuildConfigCache() override
|
||||||
|
{
|
||||||
|
SetConfigValue<bool>(PEConfig::ALCHEMY_ENABLED, "ProfessionExperience.Alchemy.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::ALCHEMY_EXPERIENCE, "ProfessionExperience.Alchemy.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::BLACKSMITH_ENABLED, "ProfessionExperience.Blacksmith.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::BLACKSMITH_EXPERIENCE, "ProfessionExperience.Blacksmith.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::COOKING_ENABLED, "ProfessionExperience.Cooking.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::COOKING_EXPERIENCE, "ProfessionExperience.Cooking.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::ENCHANTING_ENABLED, "ProfessionExperience.Enchanting.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::ENCHANTING_EXPERIENCE, "ProfessionExperience.Enchanting.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::ENGINEERING_ENABLED, "ProfessionExperience.Engineering.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::ENGINEERING_EXPERIENCE, "ProfessionExperience.Engineering.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::FISHING_ENABLED, "ProfessionExperience.Fishing.Enabled", true);
|
||||||
|
SetConfigValue<float>(PEConfig::FISHING_EXPERIENCE, "ProfessionExperience.Fishing.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::FIRST_AID_ENABLED, "ProfessionExperience.FirstAid.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::FIRST_AID_EXPERIENCE, "ProfessionExperience.FirstAid.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::HERBALISM_ENABLED, "ProfessionExperience.Herbalism.Enabled", true);
|
||||||
|
SetConfigValue<float>(PEConfig::HERBALISM_EXPERIENCE, "ProfessionExperience.Herbalism.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::INSCRIPTION_ENABLED, "ProfessionExperience.Inscription.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::INSCRIPTION_EXPERIENCE, "ProfessionExperience.Inscription.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::JEWELCRAFTING_ENABLED, "ProfessionExperience.Jewelcrafting.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::JEWELCRAFTING_EXPERIENCE, "ProfessionExperience.Jewelcrafting.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::LEATHERWORKING_ENABLED, "ProfessionExperience.Leatherworking.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::LEATHERWORKING_EXPERIENCE, "ProfessionExperience.Leatherworking.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::LOCKPICK_ENABLED, "ProfessionExperience.Lockpick.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::LOCKPICK_EXPERIENCE, "ProfessionExperience.Lockpick.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::MILLING_ENABLED, "ProfessionExperience.Milling.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::MILLING_EXPERIENCE, "ProfessionExperience.Milling.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::MINING_ENABLED, "ProfessionExperience.Mining.Enabled", true);
|
||||||
|
SetConfigValue<float>(PEConfig::MINING_EXPERIENCE, "ProfessionExperience.Mining.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::PROSPECTING_ENABLED, "ProfessionExperience.Prospecting.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::PROSPECTING_EXPERIENCE, "ProfessionExperience.Prospecting.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::SKINNING_ENABLED, "ProfessionExperience.Skinning.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::SKINNING_EXPERIENCE, "ProfessionExperience.Skinning.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::SMELTING_ENABLED, "ProfessionExperience.Smelting.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::SMELTING_EXPERIENCE, "ProfessionExperience.Smelting.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<bool>(PEConfig::TAILORING_ENABLED, "ProfessionExperience.Tailoring.Enabled", false);
|
||||||
|
SetConfigValue<float>(PEConfig::TAILORING_EXPERIENCE, "ProfessionExperience.Tailoring.Experience", 0.01, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value > 0.0f; }, "> 0");
|
||||||
|
|
||||||
|
SetConfigValue<float>(PEConfig::MULT_GREY, "ProfessionExperience.MultGrey", 0.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
|
SetConfigValue<float>(PEConfig::MULT_GREEN, "ProfessionExperience.MultGreen", 0.75f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
|
SetConfigValue<float>(PEConfig::MULT_YELLOW, "ProfessionExperience.MultYellow", 1.0f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
|
SetConfigValue<float>(PEConfig::MULT_ORANGE, "ProfessionExperience.MultOrange", 1.25f, ConfigValueCache::Reloadable::Yes, [](float const& value) { return value >= 0.0f; }, ">= 0");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
static PEConfigData peConfigData;
|
||||||
|
|
||||||
|
class RewardExperienceScript : public PlayerScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RewardExperienceScript() : PlayerScript("RewardExperienceScript", {
|
||||||
|
PLAYERHOOK_ON_UPDATE_CRAFTING_SKILL,
|
||||||
|
PLAYERHOOK_ON_UPDATE_GATHERING_SKILL,
|
||||||
|
PLAYERHOOK_ON_UPDATE_FISHING_SKILL,
|
||||||
|
}) { }
|
||||||
|
|
||||||
|
bool OnPlayerUpdateFishingSkill(Player* player, int32 skill, int32 zone_skill, int32 /*chance*/, int32 /*roll*/) override
|
||||||
|
{
|
||||||
|
if (peConfigData.GetConfigValue<bool>(PEConfig::FISHING_ENABLED))
|
||||||
|
RewardXP(player, skill, zone_skill + 100, zone_skill + 50, zone_skill + 25, peConfigData.GetConfigValue<float>(PEConfig::FISHING_EXPERIENCE));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnPlayerUpdateGatheringSkill(Player* player, uint32 skillId, uint32 currentLevel, uint32 gray, uint32 green, uint32 yellow, uint32& /*gain*/) override
|
||||||
|
{
|
||||||
|
PEConfig enabledSetting;
|
||||||
|
PEConfig experienceSetting;
|
||||||
|
switch (skillId)
|
||||||
|
{
|
||||||
|
case SKILL_HERBALISM:
|
||||||
|
enabledSetting = PEConfig::HERBALISM_ENABLED;
|
||||||
|
experienceSetting = PEConfig::HERBALISM_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_MINING:
|
||||||
|
enabledSetting = PEConfig::MINING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::MINING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_SKINNING:
|
||||||
|
enabledSetting = PEConfig::SKINNING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::SKINNING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_LOCKPICKING:
|
||||||
|
enabledSetting = PEConfig::LOCKPICK_ENABLED;
|
||||||
|
experienceSetting = PEConfig::LOCKPICK_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_JEWELCRAFTING:
|
||||||
|
enabledSetting = PEConfig::PROSPECTING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::PROSPECTING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_INSCRIPTION:
|
||||||
|
enabledSetting = PEConfig::MILLING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::MILLING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (peConfigData.GetConfigValue<bool>(enabledSetting))
|
||||||
|
RewardXP(player, currentLevel, gray, green, yellow, peConfigData.GetConfigValue<float>(experienceSetting));
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnPlayerUpdateCraftingSkill(Player *player, SkillLineAbilityEntry const* skill, uint32 currentLevel, uint32& /*gain*/) override
|
||||||
|
{
|
||||||
|
PEConfig enabledSetting;
|
||||||
|
PEConfig experienceSetting;
|
||||||
|
switch (skill->SkillLine)
|
||||||
|
{
|
||||||
|
case SKILL_ALCHEMY:
|
||||||
|
enabledSetting = PEConfig::ALCHEMY_ENABLED;
|
||||||
|
experienceSetting = PEConfig::ALCHEMY_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_BLACKSMITHING:
|
||||||
|
enabledSetting = PEConfig::BLACKSMITH_ENABLED;
|
||||||
|
experienceSetting = PEConfig::BLACKSMITH_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_COOKING:
|
||||||
|
enabledSetting = PEConfig::COOKING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::COOKING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_ENCHANTING:
|
||||||
|
enabledSetting = PEConfig::ENCHANTING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::ENCHANTING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_ENGINEERING:
|
||||||
|
enabledSetting = PEConfig::ENGINEERING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::ENGINEERING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_FIRST_AID:
|
||||||
|
enabledSetting = PEConfig::FIRST_AID_ENABLED;
|
||||||
|
experienceSetting = PEConfig::FIRST_AID_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_INSCRIPTION:
|
||||||
|
enabledSetting = PEConfig::INSCRIPTION_ENABLED;
|
||||||
|
experienceSetting = PEConfig::INSCRIPTION_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_JEWELCRAFTING:
|
||||||
|
enabledSetting = PEConfig::JEWELCRAFTING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::JEWELCRAFTING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_LEATHERWORKING:
|
||||||
|
enabledSetting = PEConfig::LEATHERWORKING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::LEATHERWORKING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_MINING:
|
||||||
|
enabledSetting = PEConfig::SMELTING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::SMELTING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
case SKILL_TAILORING:
|
||||||
|
enabledSetting = PEConfig::TAILORING_ENABLED;
|
||||||
|
experienceSetting = PEConfig::TAILORING_EXPERIENCE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (peConfigData.GetConfigValue<bool>(enabledSetting))
|
||||||
|
{
|
||||||
|
uint32 gray = skill->TrivialSkillLineRankHigh;
|
||||||
|
uint32 green = (skill->TrivialSkillLineRankHigh + skill->TrivialSkillLineRankLow) / 2;
|
||||||
|
uint32 yellow = skill->TrivialSkillLineRankLow;
|
||||||
|
RewardXP(player, currentLevel, gray, green, yellow, peConfigData.GetConfigValue<float>(experienceSetting));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RewardXP(Player* player, uint32 currentLevel, uint32 gray, uint32 green, uint32 yellow, float xpFraction)
|
||||||
|
{
|
||||||
|
uint32 xp = player->GetUInt32Value(PLAYER_NEXT_LEVEL_XP) * xpFraction;
|
||||||
|
if (currentLevel >= gray)
|
||||||
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_GREY);
|
||||||
|
else if (currentLevel >= green)
|
||||||
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_GREEN);
|
||||||
|
else if (currentLevel >= yellow)
|
||||||
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_YELLOW);
|
||||||
|
else
|
||||||
|
xp = xp * peConfigData.GetConfigValue<float>(PEConfig::MULT_ORANGE);
|
||||||
|
|
||||||
|
player->GiveXP(xp, nullptr);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class LoadPEConfigScript : public WorldScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LoadPEConfigScript() : WorldScript("LoadPEConfigScript", {
|
||||||
|
WORLDHOOK_ON_BEFORE_CONFIG_LOAD
|
||||||
|
}) { }
|
||||||
|
|
||||||
|
void OnBeforeConfigLoad(bool reload) override
|
||||||
|
{
|
||||||
|
peConfigData.Initialize(reload);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add all scripts in one
|
||||||
|
void AddProfessionExpScripts()
|
||||||
|
{
|
||||||
|
new RewardExperienceScript();
|
||||||
|
new LoadPEConfigScript();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user