You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							211 lines
						
					
					
						
							7.6 KiB
						
					
					
				
			
		
		
	
	
							211 lines
						
					
					
						
							7.6 KiB
						
					
					
				| // • ▌ ▄ ·.  ▄▄▄·  ▄▄ • ▪   ▄▄· ▄▄▄▄·  ▄▄▄·  ▐▄▄▄  ▄▄▄ . | |
| // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· | |
| // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ | |
| // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ | |
| // ▀▀  █▪▀▀▀ ▀  ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀  ▀  ▀ ▀▀  █▪ ▀▀▀ | |
| //      Magicbane Emulator Project © 2013 - 2022 | |
| //                www.magicbane.com | |
|  | |
|  | |
| package engine.objects; | |
|  | |
| import engine.Enum.DispatchChannel; | |
| import engine.gameManager.DbManager; | |
| import engine.net.ByteBufferWriter; | |
| import engine.net.DispatchMessage; | |
| import engine.net.client.msg.ApplyRuneMsg; | |
| import engine.server.MBServerStatics; | |
| import org.pmw.tinylog.Logger; | |
|  | |
| import java.sql.ResultSet; | |
| import java.sql.SQLException; | |
| import java.util.ArrayList; | |
|  | |
| public class CharacterRune extends AbstractGameObject { | |
|  | |
|     private final RuneBase runeBase; | |
|     private final int player; | |
|     private final ArrayList<SkillReq> skillsGranted; | |
|     private final ArrayList<PowerReq> powersGranted; | |
|     private final ArrayList<RuneBaseEffect> effectsGranted; | |
|  | |
|     /** | |
|      * No Table ID Constructor | |
|      */ | |
|     public CharacterRune(RuneBase runeBase, int characterID) { | |
|         super(); | |
|         this.runeBase = runeBase; | |
|         this.player = characterID; | |
|         if (this.runeBase != null) { | |
|             this.skillsGranted = DbManager.SkillReqQueries.GET_REQS_FOR_RUNE(this.runeBase.getObjectUUID()); | |
|             this.powersGranted = PowerReq.getPowerReqsForRune(this.runeBase.getObjectUUID()); | |
|         } else { | |
|             this.skillsGranted = new ArrayList<>(); | |
|             this.powersGranted = new ArrayList<>(); | |
|         } | |
|         if (this.runeBase != null) | |
|             this.effectsGranted = DbManager.RuneBaseEffectQueries.GET_EFFECTS_FOR_RUNEBASE(this.runeBase.getObjectUUID()); | |
|         else | |
|             this.effectsGranted = new ArrayList<>(); | |
|     } | |
|  | |
|     /** | |
|      * Normal Constructor | |
|      */ | |
|     public CharacterRune(RuneBase runeBase, int characterID, int newUUID) { | |
|         super(newUUID); | |
|         this.runeBase = runeBase; | |
|         this.player = characterID; | |
|         if (this.runeBase != null) { | |
|             this.skillsGranted = DbManager.SkillReqQueries.GET_REQS_FOR_RUNE(this.runeBase.getObjectUUID()); | |
|             this.powersGranted = PowerReq.getPowerReqsForRune(this.runeBase.getObjectUUID()); | |
|         } else { | |
|             this.skillsGranted = new ArrayList<>(); | |
|             this.powersGranted = new ArrayList<>(); | |
|         } | |
|         if (this.runeBase != null) | |
|             this.effectsGranted = DbManager.RuneBaseEffectQueries.GET_EFFECTS_FOR_RUNEBASE(this.runeBase.getObjectUUID()); | |
|         else | |
|             this.effectsGranted = new ArrayList<>(); | |
|     } | |
|  | |
|     /** | |
|      * ResultSet Constructor | |
|      */ | |
|     public CharacterRune(ResultSet rs) throws SQLException { | |
|         super(rs); | |
|  | |
|         this.runeBase = RuneBase.getRuneBase(rs.getInt("RuneBaseID")); | |
|         this.player = rs.getInt("CharacterID"); | |
|         if (this.runeBase != null) { | |
|             this.skillsGranted = DbManager.SkillReqQueries.GET_REQS_FOR_RUNE(this.runeBase.getObjectUUID()); | |
|             this.powersGranted = PowerReq.getPowerReqsForRune(this.runeBase.getObjectUUID()); | |
|             this.effectsGranted = DbManager.RuneBaseEffectQueries.GET_EFFECTS_FOR_RUNEBASE(this.runeBase.getObjectUUID()); | |
|         } else { | |
|             Logger.error("Failed to find RuneBase for CharacterRune " + this.getObjectUUID()); | |
|             this.skillsGranted = new ArrayList<>(); | |
|             this.powersGranted = new ArrayList<>(); | |
|             this.effectsGranted = new ArrayList<>(); | |
|         } | |
|     } | |
|  | |
|     public static void serializeForClientMsg(CharacterRune characterRune, ByteBufferWriter writer) { | |
|         if (characterRune.runeBase != null) { | |
|             int idd = characterRune.runeBase.getObjectUUID(); | |
|             if (idd > 3000 && idd < 3050) | |
|                 writer.putInt(4); | |
|             else | |
|                 writer.putInt(5); | |
|             //			writer.putInt(this.runeBase.getMessageType()); | |
|             writer.putInt(0); | |
|             writer.putInt(characterRune.runeBase.getObjectUUID()); | |
|             writer.putInt(characterRune.getObjectType().ordinal()); | |
|             writer.putInt(characterRune.getObjectUUID()); | |
|         } else { | |
|             for (int i = 0; i < 5; i++) | |
|                 writer.putInt(0); | |
|         } | |
|     } | |
|  | |
|     public static boolean grantRune(PlayerCharacter pc, int runeID) { | |
|         //Verify not too many runes | |
|         ArrayList<CharacterRune> runes = pc.getRunes(); | |
|         boolean worked = false; | |
|         synchronized (runes) { | |
|             if (runes == null || runes.size() > 12) | |
|                 return false; | |
|  | |
|             //Verify player doesn't already have rune | |
|             for (CharacterRune rune : runes) { | |
|                 RuneBase rb = rune.runeBase; | |
|                 if (rb == null || rb.getObjectUUID() == runeID) | |
|                     return false; | |
|             } | |
|  | |
|             RuneBase rb = RuneBase.getRuneBase(runeID); | |
|             if (rb == null) | |
|                 return false; | |
|  | |
|             //Attempt to add rune to database | |
|             CharacterRune toAdd = new CharacterRune(rb, pc.getObjectUUID()); | |
|             CharacterRune rune = null; | |
|             try { | |
|                 rune = DbManager.CharacterRuneQueries.ADD_CHARACTER_RUNE(toAdd); | |
|             } catch (Exception e) { | |
|                 return false; | |
|             } | |
|             if (rune == null) | |
|                 return false; | |
|  | |
|             //attempt add rune to player | |
|             worked = pc.addRune(rune); | |
|  | |
|             //worked, send ApplyRuneMsg | |
|             if (worked) { | |
|                 ApplyRuneMsg arm = new ApplyRuneMsg(pc.getObjectType().ordinal(), pc.getObjectUUID(), runeID, rune.getObjectType().ordinal(), rune.getObjectUUID(), true); | |
|                 DispatchMessage.dispatchMsgToInterestArea(pc, arm, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false); | |
|                 CharacterSkill.calculateSkills(pc); | |
|                 pc.applyBonuses(); | |
|                 return true; | |
|             } else | |
|                 return false; | |
|         } | |
|  | |
|     } | |
|  | |
|     public static boolean removeRune(PlayerCharacter pc, int runeID) { | |
|         ArrayList<CharacterRune> runes = pc.getRunes(); | |
|         synchronized (runes) { | |
|             for (CharacterRune rune : runes) { | |
|                 RuneBase rb = rune.runeBase; | |
|                 if (rb == null) | |
|                     continue; | |
|                 if (rb.getObjectUUID() == runeID && DbManager.CharacterRuneQueries.DELETE_CHARACTER_RUNE(rune)) { | |
|                     runes.remove(runes.indexOf(rune)); | |
|                     CharacterSkill.calculateSkills(pc); | |
|                     pc.applyBonuses(); | |
|                     return true; | |
|                 } | |
|             } | |
|             return false; | |
|         } | |
|     } | |
|  | |
|     /* | |
|      * Getters | |
|      */ | |
|     public RuneBase getRuneBase() { | |
|         return this.runeBase; | |
|     } | |
|  | |
|     public int getRuneBaseID() { | |
|         if (this.runeBase != null) | |
|             return this.runeBase.getObjectUUID(); | |
|         return 0; | |
|     } | |
|  | |
|     public int getPlayerID() { | |
|         return this.player; | |
|     } | |
|  | |
|     /* | |
|      * Serializing | |
|      */ | |
|  | |
|     public ArrayList<SkillReq> getSkillsGranted() { | |
|         return this.skillsGranted; | |
|     } | |
|  | |
|     public ArrayList<PowerReq> getPowersGranted() { | |
|         return this.powersGranted; | |
|     } | |
|  | |
|     public ArrayList<RuneBaseEffect> getEffectsGranted() { | |
|         return this.effectsGranted; | |
|     } | |
|  | |
|     @Override | |
|     public void updateDatabase() { | |
|         DbManager.CharacterRuneQueries.updateDatabase(this); | |
|     } | |
| }
 | |
| 
 |