diff --git a/data/creaturescripts/creaturescripts.xml b/data/creaturescripts/creaturescripts.xml index a0aa661..acd4814 100644 --- a/data/creaturescripts/creaturescripts.xml +++ b/data/creaturescripts/creaturescripts.xml @@ -1,6 +1,8 @@ + + diff --git a/data/creaturescripts/scripts/login.lua b/data/creaturescripts/scripts/login.lua index 61ee762..bcfb245 100644 --- a/data/creaturescripts/scripts/login.lua +++ b/data/creaturescripts/scripts/login.lua @@ -11,7 +11,10 @@ function onLogin(player) loginStr = string.format("Your last visit on " .. configManager.getString(configKeys.SERVER_NAME) .. ": %s.", os.date("%a %b %d %X %Y", player:getLastLoginSaved())) end player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr) - + + -- Stamina + nextUseStaminaTime[player.uid] = 0 + -- Promotion if player:isPremium() then if player:getVocation():getId() ~= 0 and player:getVocation():getId() < 5 and player:getStorageValue(30018) == 1 then diff --git a/data/creaturescripts/scripts/logout.lua b/data/creaturescripts/scripts/logout.lua new file mode 100644 index 0000000..7c83ff7 --- /dev/null +++ b/data/creaturescripts/scripts/logout.lua @@ -0,0 +1,7 @@ +function onLogout(player) + local playerId = player:getId() + if nextUseStaminaTime[playerId] then + nextUseStaminaTime[playerId] = nil + end + return true +end diff --git a/data/creaturescripts/scripts/playerdeath.lua b/data/creaturescripts/scripts/playerdeath.lua index 7e7ff39..99f4afd 100644 --- a/data/creaturescripts/scripts/playerdeath.lua +++ b/data/creaturescripts/scripts/playerdeath.lua @@ -3,7 +3,10 @@ local maxDeathRecords = 50 function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified) local playerId = player:getId() - + if nextUseStaminaTime[playerId] then + nextUseStaminaTime[playerId] = nil + end + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You are dead.") -- restart blessings values diff --git a/data/creaturescripts/scripts/regeneratestamina.lua b/data/creaturescripts/scripts/regeneratestamina.lua new file mode 100644 index 0000000..02aef45 --- /dev/null +++ b/data/creaturescripts/scripts/regeneratestamina.lua @@ -0,0 +1,27 @@ +function onLogin(player) + if not configManager.getBoolean(configKeys.STAMINA_SYSTEM) then + return true + end + + local lastLogout = player:getLastLogout() + local offlineTime = lastLogout ~= 0 and math.min(os.time() - lastLogout, 86400 * 21) or 0 + offlineTime = offlineTime - 600 + + if offlineTime < 180 then + return true + end + + local staminaMinutes = player:getStamina() + local maxNormalStaminaRegen = 3240 - math.min(3240, staminaMinutes) + + local regainStaminaMinutes = offlineTime / 180 + if regainStaminaMinutes > maxNormalStaminaRegen then + local happyHourStaminaRegen = (offlineTime - (maxNormalStaminaRegen * 180)) / 600 + staminaMinutes = math.min(3360, math.max(3240, staminaMinutes) + happyHourStaminaRegen) + else + staminaMinutes = staminaMinutes + regainStaminaMinutes + end + + player:setStamina(staminaMinutes) + return true +end diff --git a/data/events/scripts/player.lua b/data/events/scripts/player.lua index 86262d7..9d0f656 100644 --- a/data/events/scripts/player.lua +++ b/data/events/scripts/player.lua @@ -135,6 +135,33 @@ local soulCondition = Condition(CONDITION_SOUL, CONDITIONID_DEFAULT) soulCondition:setTicks(4 * 60 * 1000) soulCondition:setParameter(CONDITION_PARAM_SOULGAIN, 1) +local function useStamina(player) + local staminaMinutes = player:getStamina() + if staminaMinutes == 0 then + return + end + + local playerId = player:getId() + local currentTime = os.time() + local timePassed = currentTime - nextUseStaminaTime[playerId] + if timePassed <= 0 then + return + end + + if timePassed > 60 then + if staminaMinutes > 2 then + staminaMinutes = staminaMinutes - 2 + else + staminaMinutes = 0 + end + nextUseStaminaTime[playerId] = currentTime + 120 + else + staminaMinutes = staminaMinutes - 1 + nextUseStaminaTime[playerId] = currentTime + 60 + end + player:setStamina(staminaMinutes) +end + function Player:onGainExperience(source, exp, rawExp) if not source or source:isPlayer() then return exp @@ -149,7 +176,19 @@ function Player:onGainExperience(source, exp, rawExp) -- Apply experience stage multiplier exp = exp * Game.getExperienceStage(self:getLevel()) + + -- Stamina modifier + if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then + useStamina(self) + local staminaMinutes = self:getStamina() + if staminaMinutes > 2400 and self:isPremium() then + exp = exp * 1.5 + elseif staminaMinutes <= 840 then + exp = exp * 0.5 + end + end + return exp end diff --git a/data/global.lua b/data/global.lua index 13608e1..6c2ede8 100644 --- a/data/global.lua +++ b/data/global.lua @@ -44,4 +44,8 @@ end function isNumber(str) return tonumber(str) ~= nil +end + +if not nextUseStaminaTime then + nextUseStaminaTime = {} end \ No newline at end of file diff --git a/nostalrius.sql b/sabrehaven.sql similarity index 99% rename from nostalrius.sql rename to sabrehaven.sql index 4564d28..d6a4e7e 100644 --- a/nostalrius.sql +++ b/sabrehaven.sql @@ -19,7 +19,7 @@ SET time_zone = "+00:00"; /*!40101 SET NAMES utf8mb4 */; -- --- Database: `nostalrius` +-- Database: `sabrehaven` -- -- -------------------------------------------------------- @@ -1171,8 +1171,8 @@ CREATE TABLE `players` ( -- INSERT INTO `players` (`id`, `name`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `save`, `skull`, `skulltime`, `lastlogout`, `blessings`, `onlinetime`, `deletion`, `balance`, `skill_fist`, `skill_fist_tries`, `skill_club`, `skill_club_tries`, `skill_sword`, `skill_sword_tries`, `skill_axe`, `skill_axe_tries`, `skill_dist`, `skill_dist_tries`, `skill_shielding`, `skill_shielding_tries`, `skill_fishing`, `skill_fishing_tries`, `deleted`) VALUES -(1, 'GM Nostalrius', 3, 1234567, 2, 0, 155, 155, 105, 106, 95, 78, 58, 75, 100, 5, 5, 0, 100, 1, 32370, 32231, 7, '', 405, 0, 1547336581, 75260863, 1, 0, 0, 1547336668, 0, 7631, 0, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 0), -(2, 'GM Nostalrius 2', 3, 1234567, 2, 0, 155, 155, 105, 106, 95, 78, 58, 75, 0, 5, 5, 0, 100, 10, 33211, 31646, 13, 0x018000000002000000000360361e001c0000000013d70000001408000000151027000016aecb0300fe, 405, 0, 1547183307, 75260863, 1, 0, 0, 1547183320, 0, 781, 0, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 0), +(1, 'GM Sabrehaven', 3, 1234567, 2, 0, 155, 155, 105, 106, 95, 78, 58, 75, 100, 5, 5, 0, 100, 1, 32370, 32231, 7, '', 405, 0, 1547336581, 75260863, 1, 0, 0, 1547336668, 0, 7631, 0, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 0), +(2, 'GM Sabrehaven 2', 3, 1234567, 2, 0, 155, 155, 105, 106, 95, 78, 58, 75, 0, 5, 5, 0, 100, 10, 33211, 31646, 13, 0x018000000002000000000360361e001c0000000013d70000001408000000151027000016aecb0300fe, 405, 0, 1547183307, 75260863, 1, 0, 0, 1547183320, 0, 781, 0, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 0), (3, 'Mage', 1, 1234567, 89, 2, 1171, 2045, 10982400, 106, 95, 78, 58, 128, 62, 10, 4770, 7200, 2, 1, 32367, 32230, 7, '', 1490, 232, 1547334403, 75260863, 1, 0, 0, 1547335694, 0, 7330, 0, 0, 10, 0, 10, 19, 10, 0, 10, 0, 10, 0, 39, 10439596, 10, 0, 0); --