/** * Copyright (C) 2013-2014 Project-Vethrfolnir * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.vethrfolnir.game.services.dao; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.vethrfolnir.game.entitys.GameObject; import com.vethrfolnir.game.entitys.components.Positioning; import com.vethrfolnir.game.entitys.components.creature.CreatureMapping; import com.vethrfolnir.game.entitys.components.inventory.Inventory; import com.vethrfolnir.game.entitys.components.player.PlayerState; import com.vethrfolnir.game.entitys.components.player.PlayerStats; import com.vethrfolnir.game.templates.PlayerTemplate; import com.vethrfolnir.tools.Tools; /** * @author Vlad * */ public class PlayerDAO extends DAO { public PlayerTemplate loadPlayer(int charId) { return enqueueAndWait((con, proc, buff)-> { PreparedStatement st = con.prepareStatement("select * from characters where charId=?"); st.setInt(1, charId); ResultSet rs = st.executeQuery(); if(rs.next()) { PlayerTemplate template = new PlayerTemplate(); template.name = rs.getString("name"); template.charId = charId; template.classId = rs.getInt("classId"); template.level = rs.getInt("level"); template.currentExperience = rs.getLong("currentExperience"); template.slot = rs.getInt("slot"); template.mapId = rs.getInt("mapId"); template.x = rs.getInt("x"); template.y = rs.getInt("y"); template.guild = rs.getInt("guild"); template.guildRank = rs.getInt("guildRank"); template.strength = rs.getInt("strength"); template.agility = rs.getInt("agility"); template.vitality = rs.getInt("vitality"); template.energy = rs.getInt("energy"); template.command = rs.getInt("command"); template.freePoints = rs.getInt("freePoints"); template.masterPoints = rs.getInt("masterPoints"); template.masterLevel = rs.getInt("masterLevel"); template.expandedInventory = rs.getInt("expandedInventory"); template.credits = rs.getInt("credits"); template.zen = rs.getInt("zen"); template.accessLevel = rs.getInt("accessLevel");; return template; } return null; }); } /** * @param entity */ public void savePlayer(GameObject entity) { enqueueVoidAndWait((con, buff) -> { PlayerState state = entity.get(PlayerState.class); PlayerStats stats = entity.get(PlayerStats.class); Positioning positioning = entity.get(Positioning.class); Inventory inv = entity.get(CreatureMapping.Inventory); int pointer = 1; PreparedStatement st = con.prepareStatement("update characters set level=?, classId=?, currentExperience=?, mapId=?, x=?, y=?, guild=?, guildRank=?, strength=?, agility=?, vitality=?, energy=?, command=?, freePoints=?, masterPoints=?, masterLevel=?, expandedInventory=?, credits=?, zen=?, accessLevel=?, wearSet=? where charid=?"); st.setInt(pointer++, stats.getLevel()); st.setInt(pointer++, state.getClassId().classId); st.setInt(pointer++, (int) stats.getCurrentExperience()); st.setInt(pointer++, positioning.getMapId()); st.setInt(pointer++, positioning.getX()); st.setInt(pointer++, positioning.getY()); st.setInt(pointer++, 0); // Guild st.setInt(pointer++, 0); // Guild Rank st.setInt(pointer++, stats.getStrength()); st.setInt(pointer++, stats.getAgility()); st.setInt(pointer++, stats.getVitality()); st.setInt(pointer++, stats.getEnergy()); st.setInt(pointer++, stats.getCommand()); st.setInt(pointer++, stats.getFreePoints()); st.setInt(pointer++, stats.getMasterPoints()); st.setInt(pointer++, stats.getMasterLevel()); st.setInt(pointer++, state.getInventoryExpanded()); st.setInt(pointer++, 0); // Credits st.setInt(pointer++, state.getZen()); st.setInt(pointer++, state.getAccessLevel()); st.setBytes(pointer++, Tools.toBytes(inv.getWearBytes())); st.setInt(pointer++, state.getCharId()); st.execute(); }); } }