369 lines
12 KiB
Lua
369 lines
12 KiB
Lua
--[[
|
||
Fate of the Gods - Adds roleplay mechanics.
|
||
Copyright © 2020 Hamlet and contributors.
|
||
|
||
Licensed under the EUPL, Version 1.2 or – as soon they will be
|
||
approved by the European Commission – subsequent versions of the
|
||
EUPL (the "Licence");
|
||
You may not use this work except in compliance with the Licence.
|
||
You may obtain a copy of the Licence at:
|
||
|
||
https://joinup.ec.europa.eu/software/page/eupl
|
||
https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32017D0863
|
||
|
||
Unless required by applicable law or agreed to in writing,
|
||
software distributed under the Licence is distributed on an
|
||
"AS IS" basis,
|
||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||
implied.
|
||
See the Licence for the specific language governing permissions
|
||
and limitations under the Licence.
|
||
|
||
--]]
|
||
|
||
|
||
--
|
||
-- Functions
|
||
--
|
||
|
||
-- This is used to read values from the database
|
||
fog.fn_ReadDatabase = function(a_s_keyword)
|
||
local i_VALUE = fog.t_MOD_DATABASE:get_int(a_s_keyword)
|
||
return i_VALUE
|
||
end
|
||
|
||
|
||
-- This is used to check the experience level
|
||
fog.fn_LevelCheck = function(a_s_keyword)
|
||
local i_MODE = 2
|
||
local s_CLASS = ''
|
||
local i_EXPERIENCE_POINTS = fog.fn_ReadDatabase(a_s_keyword)
|
||
|
||
-- Constants
|
||
local I_CLASS_Z_UPPER_LIMIT, I_CLASS_Y_UPPER_LIMIT, I_CLASS_X_UPPER_LIMIT,
|
||
I_CLASS_W_UPPER_LIMIT, I_CLASS_V_UPPER_LIMIT, I_CLASS_U_UPPER_LIMIT,
|
||
I_CLASS_T_UPPER_LIMIT, I_CLASS_S_UPPER_LIMIT, I_CLASS_R_UPPER_LIMIT,
|
||
I_CLASS_Q_UPPER_LIMIT, I_CLASS_P_UPPER_LIMIT, I_CLASS_O_UPPER_LIMIT,
|
||
I_CLASS_N_UPPER_LIMIT, I_CLASS_M_UPPER_LIMIT, I_CLASS_L_UPPER_LIMIT,
|
||
I_CLASS_K_UPPER_LIMIT, I_CLASS_J_UPPER_LIMIT, I_CLASS_I_UPPER_LIMIT,
|
||
I_CLASS_H_UPPER_LIMIT, I_CLASS_G_UPPER_LIMIT, I_CLASS_F_UPPER_LIMIT,
|
||
I_CLASS_E_UPPER_LIMIT, I_CLASS_D_UPPER_LIMIT, I_CLASS_C_UPPER_LIMIT,
|
||
I_CLASS_B_UPPER_LIMIT
|
||
|
||
-- Class A: 75.025.000
|
||
if (i_MODE == 0) then
|
||
I_CLASS_Z_UPPER_LIMIT = 99
|
||
I_CLASS_Y_UPPER_LIMIT = 999
|
||
I_CLASS_X_UPPER_LIMIT = 1999
|
||
I_CLASS_W_UPPER_LIMIT = 2999
|
||
I_CLASS_V_UPPER_LIMIT = 4999
|
||
I_CLASS_U_UPPER_LIMIT = 7999
|
||
I_CLASS_T_UPPER_LIMIT = 12999
|
||
I_CLASS_S_UPPER_LIMIT = 20999
|
||
I_CLASS_R_UPPER_LIMIT = 33999
|
||
I_CLASS_Q_UPPER_LIMIT = 54999
|
||
I_CLASS_P_UPPER_LIMIT = 88999
|
||
I_CLASS_O_UPPER_LIMIT = 143999
|
||
I_CLASS_N_UPPER_LIMIT = 232999
|
||
I_CLASS_M_UPPER_LIMIT = 376999
|
||
I_CLASS_L_UPPER_LIMIT = 609999
|
||
I_CLASS_K_UPPER_LIMIT = 986999
|
||
I_CLASS_J_UPPER_LIMIT = 1596999
|
||
I_CLASS_I_UPPER_LIMIT = 2583999
|
||
I_CLASS_H_UPPER_LIMIT = 4180999
|
||
I_CLASS_G_UPPER_LIMIT = 6764999
|
||
I_CLASS_F_UPPER_LIMIT = 10945999
|
||
I_CLASS_E_UPPER_LIMIT = 17710999
|
||
I_CLASS_D_UPPER_LIMIT = 28656999
|
||
I_CLASS_C_UPPER_LIMIT = 46367999
|
||
I_CLASS_B_UPPER_LIMIT = 75024999
|
||
|
||
-- Class A: 1.677.721.600
|
||
elseif (i_MODE == 1) then
|
||
I_CLASS_Z_UPPER_LIMIT = 99
|
||
I_CLASS_Y_UPPER_LIMIT = 199
|
||
I_CLASS_X_UPPER_LIMIT = 399
|
||
I_CLASS_W_UPPER_LIMIT = 799
|
||
I_CLASS_V_UPPER_LIMIT = 1599
|
||
I_CLASS_U_UPPER_LIMIT = 3199
|
||
I_CLASS_T_UPPER_LIMIT = 6399
|
||
I_CLASS_S_UPPER_LIMIT = 12799
|
||
I_CLASS_R_UPPER_LIMIT = 25599
|
||
I_CLASS_Q_UPPER_LIMIT = 51199
|
||
I_CLASS_P_UPPER_LIMIT = 102399
|
||
I_CLASS_O_UPPER_LIMIT = 204799
|
||
I_CLASS_N_UPPER_LIMIT = 409599
|
||
I_CLASS_M_UPPER_LIMIT = 819199
|
||
I_CLASS_L_UPPER_LIMIT = 1638399
|
||
I_CLASS_K_UPPER_LIMIT = 3276799
|
||
I_CLASS_J_UPPER_LIMIT = 6553599
|
||
I_CLASS_I_UPPER_LIMIT = 13107199
|
||
I_CLASS_H_UPPER_LIMIT = 26214399
|
||
I_CLASS_G_UPPER_LIMIT = 52428799
|
||
I_CLASS_F_UPPER_LIMIT = 104857599
|
||
I_CLASS_E_UPPER_LIMIT = 209715199
|
||
I_CLASS_D_UPPER_LIMIT = 419430399
|
||
I_CLASS_C_UPPER_LIMIT = 838860799
|
||
I_CLASS_B_UPPER_LIMIT = 1677721599
|
||
|
||
-- Class A: 9.227.466
|
||
elseif (i_MODE == 2) then
|
||
I_CLASS_Z_UPPER_LIMIT = 89
|
||
I_CLASS_Y_UPPER_LIMIT = 144
|
||
I_CLASS_X_UPPER_LIMIT = 233
|
||
I_CLASS_W_UPPER_LIMIT = 377
|
||
I_CLASS_V_UPPER_LIMIT = 610
|
||
I_CLASS_U_UPPER_LIMIT = 987
|
||
I_CLASS_T_UPPER_LIMIT = 1597
|
||
I_CLASS_S_UPPER_LIMIT = 2584
|
||
I_CLASS_R_UPPER_LIMIT = 4181
|
||
I_CLASS_Q_UPPER_LIMIT = 6765
|
||
I_CLASS_P_UPPER_LIMIT = 10946
|
||
I_CLASS_O_UPPER_LIMIT = 17711
|
||
I_CLASS_N_UPPER_LIMIT = 28657
|
||
I_CLASS_M_UPPER_LIMIT = 46368
|
||
I_CLASS_L_UPPER_LIMIT = 75025
|
||
I_CLASS_K_UPPER_LIMIT = 121393
|
||
I_CLASS_J_UPPER_LIMIT = 196418
|
||
I_CLASS_I_UPPER_LIMIT = 317811
|
||
I_CLASS_H_UPPER_LIMIT = 514229
|
||
I_CLASS_G_UPPER_LIMIT = 832040
|
||
I_CLASS_F_UPPER_LIMIT = 1346269
|
||
I_CLASS_E_UPPER_LIMIT = 2178309
|
||
I_CLASS_D_UPPER_LIMIT = 3524578
|
||
I_CLASS_C_UPPER_LIMIT = 5702887
|
||
I_CLASS_B_UPPER_LIMIT = 9227465
|
||
|
||
end
|
||
|
||
|
||
if (i_EXPERIENCE_POINTS <= I_CLASS_Z_UPPER_LIMIT) then
|
||
s_CLASS = fog.l10n('class ') .. '"Z"' .. ' - ' ..
|
||
((I_CLASS_Z_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_Z_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_Y_UPPER_LIMIT))
|
||
then
|
||
|
||
s_CLASS = fog.l10n('class ') .. '"Y"' .. ' - ' ..
|
||
((I_CLASS_Y_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_Y_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_X_UPPER_LIMIT))
|
||
then
|
||
|
||
s_CLASS = fog.l10n('class ') .. '"X"' .. ' - ' ..
|
||
((I_CLASS_X_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_X_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_W_UPPER_LIMIT))
|
||
then
|
||
|
||
s_CLASS = fog.l10n('class ') .. '"W"' .. ' - ' ..
|
||
((I_CLASS_W_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_W_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_V_UPPER_LIMIT))
|
||
then
|
||
|
||
s_CLASS = fog.l10n('class ') .. '"V"' .. ' - ' ..
|
||
((I_CLASS_V_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_V_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_U_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"U"' .. ' - ' ..
|
||
((I_CLASS_U_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_U_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_T_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"T"' .. ' - ' ..
|
||
((I_CLASS_T_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_T_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_S_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"S"' .. ' - ' ..
|
||
((I_CLASS_S_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_S_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_R_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"R"' .. ' - ' ..
|
||
((I_CLASS_R_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_R_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_Q_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"Q"' .. ' - ' ..
|
||
((I_CLASS_Q_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_Q_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_P_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"P"' .. ' - ' ..
|
||
((I_CLASS_P_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_P_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_O_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"O"' .. ' - ' ..
|
||
((I_CLASS_O_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_O_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_N_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"N"' .. ' - ' ..
|
||
((I_CLASS_N_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_N_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_M_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"M"' .. ' - ' ..
|
||
((I_CLASS_M_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_M_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_L_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"L"' .. ' - ' ..
|
||
((I_CLASS_L_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_L_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_K_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"K"' .. ' - ' ..
|
||
((I_CLASS_K_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_K_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_J_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"J"' .. ' - ' ..
|
||
((I_CLASS_J_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_J_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_I_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"I"' .. ' - ' ..
|
||
((I_CLASS_I_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_I_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_H_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"H"' .. ' - ' ..
|
||
((I_CLASS_H_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_H_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_G_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"G"' .. ' - ' ..
|
||
((I_CLASS_G_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_G_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_F_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"F"' .. ' - ' ..
|
||
((I_CLASS_F_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_F_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_E_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"E"' .. ' - ' ..
|
||
((I_CLASS_E_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_E_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_D_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"D"' .. ' - ' ..
|
||
((I_CLASS_D_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_D_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_C_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"C"' .. ' - ' ..
|
||
((I_CLASS_C_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
elseif ((i_EXPERIENCE_POINTS > I_CLASS_C_UPPER_LIMIT)
|
||
and (i_EXPERIENCE_POINTS <= I_CLASS_B_UPPER_LIMIT))
|
||
then
|
||
s_CLASS = fog.l10n('class ') .. '"B"' .. ' - ' ..
|
||
((I_CLASS_B_UPPER_LIMIT + 1) - i_EXPERIENCE_POINTS) ..
|
||
fog.l10n('xp to the next class.')
|
||
|
||
else
|
||
s_CLASS = fog.l10n('class ') .. '"A"'
|
||
|
||
end
|
||
|
||
return s_CLASS
|
||
end
|
||
|
||
|
||
-- This is used to update the character's sheet inventory tab
|
||
fog.fn_FogMTGstats = function(a_s_player)
|
||
|
||
-- Constants
|
||
local s_LEVEL_AXE = fog.l10n('Axe: ');
|
||
local s_LEVEL_HOE = fog.l10n('Hoe: ');
|
||
local s_LEVEL_PICK = fog.l10n('Pick: ');
|
||
local s_LEVEL_SHOVEL = fog.l10n('Shovel: ');
|
||
local s_LEVEL_SWORD = fog.l10n('Sword: ');
|
||
|
||
-- Variables
|
||
local s_formspecText = '';
|
||
local s_keyword = a_s_player:get_player_name() .. '_';
|
||
|
||
local i_levelAxe, i_levelHoe, i_levelPick, i_levelShovel, i_levelSword
|
||
|
||
i_levelAxe = fog.fn_LevelCheck(s_keyword .. 'i_xp_axe');
|
||
i_levelHoe = fog.fn_LevelCheck(s_keyword .. 'i_xp_hoe');
|
||
i_levelPick = fog.fn_LevelCheck(s_keyword .. 'i_xp_pick');
|
||
i_levelShovel = fog.fn_LevelCheck(s_keyword .. 'i_xp_shovel');
|
||
i_levelSword = fog.fn_LevelCheck(s_keyword .. 'i_xp_sword');
|
||
|
||
s_formspecText = s_LEVEL_AXE .. i_levelAxe .. ',' ..
|
||
s_LEVEL_HOE .. i_levelHoe .. ',' ..
|
||
s_LEVEL_PICK .. i_levelPick .. ',' ..
|
||
s_LEVEL_SHOVEL .. i_levelShovel .. ',' ..
|
||
s_LEVEL_SWORD .. i_levelSword
|
||
|
||
return s_formspecText
|
||
end
|
||
|
||
|
||
-- This is used to register the charaxter's sheet inventory tab
|
||
sfinv.register_page('fog:charsheet', {
|
||
title = fog.l10n('Character\'s sheet'),
|
||
get = function(self, player, context)
|
||
|
||
local s_formspecString = fog.fn_FogMTGstats(player)
|
||
|
||
return sfinv.make_formspec(player, context,
|
||
'textlist[0,0;7.8,4.5;;' .. s_formspecString .. ']', true)
|
||
end
|
||
})
|