diff --git a/Lua/TFS_10/revscriptsys/player_history.lua b/Lua/TFS_10/revscriptsys/player_history.lua new file mode 100644 index 0000000..1673f0f --- /dev/null +++ b/Lua/TFS_10/revscriptsys/player_history.lua @@ -0,0 +1,229 @@ +-- Auto install tables if we dont got them yet (first install) +db.query([[ + CREATE TABLE IF NOT EXISTS `player_history_skill` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `player_id` int(11) NOT NULL, + `lastlogin` bigint(20) unsigned NOT NULL, + `lastlogout` bigint(20) unsigned NOT NULL, + `town_id` int(11) NOT NULL, + `lastip` int(10) unsigned NOT NULL, + `skull` tinyint(1) NOT NULL, + `blessings` tinyint(2) NOT NULL, + `onlinetime` int(11) NOT NULL, + `balance` bigint(20) unsigned NOT NULL, + `level` int(11) NOT NULL, + `experience` bigint(20) NOT NULL, + `maglevel` int(11) NOT NULL, + `skill_fist` int(10) unsigned NOT NULL, + `skill_club` int(10) unsigned NOT NULL, + `skill_sword` int(10) unsigned NOT NULL, + `skill_axe` int(10) unsigned NOT NULL, + `skill_dist` int(10) unsigned NOT NULL, + `skill_shielding` int(10) unsigned NOT NULL, + `skill_fishing` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; +]]) + + +-- Auto populate table if it is empty +local resultId = db.storeQuery("SELECT `id` FROM `player_history_skill` LIMIT 1;") +if resultId == false then + db.asyncQuery([[ + INSERT INTO `player_history_skill` ( + `player_id`, + `lastlogin`, + `lastlogout`, + `town_id`, + `lastip`, + `skull`, + `blessings`, + `onlinetime`, + `balance`, + `level`, + `experience`, + `maglevel`, + `skill_fist`, + `skill_club`, + `skill_sword`, + `skill_axe`, + `skill_dist`, + `skill_shielding`, + `skill_fishing` + ) + SELECT + `p`.`id` AS `player_id`, + `zp`.`created` AS `lastlogin`, + CASE WHEN `p`.`lastlogout` > 0 + THEN `p`.`lastlogout` + ELSE `zp`.`created` + END AS `lastlogout`, + `p`.`town_id`, + `p`.`lastip`, + `p`.`skull`, + `p`.`blessings`, + `p`.`onlinetime`, + `p`.`balance`, + `p`.`level`, + `p`.`experience`, + `p`.`maglevel`, + `p`.`skill_fist`, + `p`.`skill_club`, + `p`.`skill_sword`, + `p`.`skill_axe`, + `p`.`skill_dist`, + `p`.`skill_shielding`, + `p`.`skill_fishing` + FROM `players` AS `p` + INNER JOIN `znote_players` AS `zp` + ON `p`.`id` = `zp`.`player_id` + ORDER BY `zp`.`created` + ]]) +else + result.free(resultId) +end + + +-- Logout event, triggered by logout, and death +function historyLogoutEvent(player) + local blessdec = 0 + local i = 0 + while player:hasBlessing(i+1) do + blessdec = blessdec+2^i + i = i+1 + end + + local playerGuid = player:getGuid() + db.query([[ + INSERT INTO `player_history_skill` ( + `player_id`, + `lastlogin`, + `lastlogout`, + `town_id`, + `lastip`, + `skull`, + `blessings`, + `onlinetime`, + `balance`, + `level`, + `experience`, + `maglevel`, + `skill_fist`, + `skill_club`, + `skill_sword`, + `skill_axe`, + `skill_dist`, + `skill_shielding`, + `skill_fishing` + ) VALUES ( + ]]..table.concat({ + playerGuid, + player:getLastLoginSaved(), + os.time(), + player:getTown():getId(), + player:getIp(), + player:getSkull(), + blessdec, + "(SELECT `onlinetime` FROM `players` WHERE `id`='"..playerGuid.."') + ".. os.time() - player:getLastLoginSaved(), + player:getBankBalance(), + player:getLevel(), + player:getExperience(), + player:getMagicLevel(), + player:getSkillLevel(SKILL_FIST), + player:getSkillLevel(SKILL_CLUB), + player:getSkillLevel(SKILL_SWORD), + player:getSkillLevel(SKILL_AXE), + player:getSkillLevel(SKILL_DISTANCE), + player:getSkillLevel(SKILL_SHIELD), + player:getSkillLevel(SKILL_FISHING) + }, ",")..[[ + ); + ]]) +end + + +-- Log player state on logout +local player_history_skill = CreatureEvent("player_history_skill") +function player_history_skill.onLogout(player) + --print("2-logout["..player:getName().."]") + historyLogoutEvent(player) + return true +end +player_history_skill:register() + + +-- And on death +local player_history_skill_death = CreatureEvent("player_history_skill_death") +function player_history_skill_death.onDeath(creature, corpse, killer, mostDamageKiller, lastHitUnjustified, mostDamageUnjustified) + --print("3-death["..creature:getName().."]") + historyLogoutEvent(Player(creature)) +end +player_history_skill_death:register() + + +-- If this is first login, insert current progress +local player_history_skill_login = CreatureEvent("player_history_skill_login") +function player_history_skill_login.onLogin(player) + --print("1-login["..player:getName().."]") + player:registerEvent("player_history_skill_death") + + local playerGuid = player:getGuid() + local resultId = db.storeQuery("SELECT `id` FROM `player_history_skill` WHERE `player_id`="..playerGuid.." LIMIT 1;") + if resultId == false then + db.query([[ + INSERT INTO `player_history_skill` ( + `player_id`, + `lastlogin`, + `lastlogout`, + `town_id`, + `lastip`, + `skull`, + `blessings`, + `onlinetime`, + `balance`, + `level`, + `experience`, + `maglevel`, + `skill_fist`, + `skill_club`, + `skill_sword`, + `skill_axe`, + `skill_dist`, + `skill_shielding`, + `skill_fishing` + ) + SELECT + `p`.`id` AS `player_id`, + `zp`.`created` AS `lastlogin`, + CASE WHEN `p`.`lastlogout` > 0 + THEN `p`.`lastlogout` + ELSE `zp`.`created` + END AS `lastlogout`, + `p`.`town_id`, + `p`.`lastip`, + `p`.`skull`, + `p`.`blessings`, + `p`.`onlinetime`, + `p`.`balance`, + `p`.`level`, + `p`.`experience`, + `p`.`maglevel`, + `p`.`skill_fist`, + `p`.`skill_club`, + `p`.`skill_sword`, + `p`.`skill_axe`, + `p`.`skill_dist`, + `p`.`skill_shielding`, + `p`.`skill_fishing` + FROM `players` AS `p` + INNER JOIN `znote_players` AS `zp` + ON `p`.`id` = `zp`.`player_id` + WHERE `p`.`id` = ]]..playerGuid..[[ + ]]) + else + result.free(resultId) + end + return true +end +player_history_skill_login:register() diff --git a/layout/aside.php b/layout/aside.php index cc07d98..25fa56c 100644 --- a/layout/aside.php +++ b/layout/aside.php @@ -11,6 +11,7 @@ include 'layout/widgets/charactersearch.php'; include 'layout/widgets/topplayers.php'; include 'layout/widgets/highscore.php'; + if ($config['powergamers']['enabled']) include 'layout/widgets/powergamers.php'; include 'layout/widgets/serverinfo.php'; if ($config['ServerEngine'] !== 'TFS_02') include 'layout/widgets/houses.php'; if ($follow["enabled"]): ?> diff --git a/layout/menu.php b/layout/menu.php index 07c864a..516ffdc 100644 --- a/layout/menu.php +++ b/layout/menu.php @@ -22,6 +22,7 @@
Powergamers |
+ ||||||||
---|---|---|---|---|---|---|---|---|
Name | +k Diff | ++ | + | + | + | + | + | + |
+ | + | + | + | + | + | + | + | + |