View difference between Paste ID: Q9a7PLYE and BR92W93D
SHOW: | | - or go back to the newest paste.
1
### Eclipse Workspace Patch 1.0
2
#P aCis_gameserver405
3
diff --git config/GameModeSystem.properties config/GameModeSystem.properties
4
new file mode 100644
5
index 0000000..f9226ad
6
--- /dev/null
7
+++ config/GameModeSystem.properties
8
@@ -0,0 +1,17 @@
9
+#==========================================================================
10
+#   GAME MODE SYSTEM - PVE - PVP - NORMAL - WITH BONUS 
11
+#==========================================================================
12
+
13
+GameModeSystemEnable = True
14
+PvPModeRateXp = 50
15
+PvPModeRateSp = 50
16
+PvPModeRateDropCurency = 50
17
+PvPModeRateDropSpoil = 50
18
+PvPModeRateDropItems = 50
19
+PvPModeRateRaidDropItems = 50
20
+NormalModeRateXp = 20
21
+NormalModeRateSp = 20
22
+NormalModeRateDropCurency = 20
23
+NormalModeRateDropSpoil = 20
24
+NormalModeRateDropItems = 20
25
+NormalModeRateRaidDropItems = 20
26
diff --git java/Base/GameModeSystem/ChangeModeManager.java java/Base/GameModeSystem/ChangeModeManager.java
27
new file mode 100644
28
index 0000000..3f9e220
29
--- /dev/null
30
+++ java/Base/GameModeSystem/ChangeModeManager.java
31
@@ -0,0 +1,156 @@
32
+package Base.GameModeSystem;
33
+
34
+import net.sf.l2j.Config;
35
+import net.sf.l2j.gameserver.enums.ZoneId;
36
+import net.sf.l2j.gameserver.model.actor.Player;
37
+
38
+public class ChangeModeManager
39
+{
40
+	public static boolean verifyChangeMode(Player activeChar)
41
+	{
42
+		if (activeChar == null)
43
+		{
44
+			return false;
45
+		}
46
+		
47
+		if (!Config.GAME_MODE_ENABLE)
48
+		{
49
+			activeChar.sendMessage("El Change Mode System Esta Desactivado.");
50
+			return false;
51
+		}
52
+		
53
+		if (activeChar.isMoving())
54
+		{
55
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego SI Te Estas Moviendo");
56
+			return false;
57
+		}
58
+		
59
+		if (activeChar.isInParty())
60
+		{
61
+			activeChar.sendMessage("Sal De La Party Para Cambiar de Modo De Juego");
62
+			return false;
63
+		}
64
+		
65
+		if (activeChar.isInDuel())
66
+		{
67
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
68
+			return false;
69
+		}
70
+		
71
+		if (activeChar.isInArena())
72
+		{
73
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
74
+			return false;
75
+		}
76
+		
77
+
78
+		
79
+		if (activeChar.isInJail())
80
+		{
81
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
82
+			return false;
83
+		}
84
+		
85
+		if (activeChar.isInPartyMatchRoom())
86
+		{
87
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
88
+			return false;
89
+		}
90
+		
91
+
92
+		
93
+		if (activeChar.isInsideZone(ZoneId.BOSS))
94
+		{
95
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
96
+			return false;
97
+		}
98
+		
99
+		if (activeChar.isInsideZone(ZoneId.CASTLE))
100
+		{
101
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
102
+			return false;
103
+		}
104
+		
105
+		if (activeChar.isInsideZone(ZoneId.DANGER_AREA))
106
+		{
107
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
108
+			return false;
109
+		}
110
+		
111
+
112
+		
113
+		if (activeChar.isInsideZone(ZoneId.NO_SUMMON_FRIEND))
114
+		{
115
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
116
+			return false;
117
+		}
118
+		
119
+		if (activeChar.isInsideZone(ZoneId.JAIL))
120
+		{
121
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
122
+			return false;
123
+		}
124
+		
125
+		if (activeChar.isInsideZone(ZoneId.MONSTER_TRACK))
126
+		{
127
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
128
+			return false;
129
+		}
130
+		
131
+
132
+		
133
+		if (activeChar.isInsideZone(ZoneId.PVP))
134
+		{
135
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
136
+			return false;
137
+		}
138
+		
139
+
140
+		
141
+		if (activeChar.isInsideZone(ZoneId.SIEGE))
142
+		{
143
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
144
+			return false;
145
+		}
146
+		
147
+		if (activeChar.isInsideZone(ZoneId.NO_RESTART))
148
+		{
149
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
150
+			return false;
151
+		}
152
+		
153
+		if (activeChar.isIn7sDungeon())
154
+		{
155
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
156
+			return false;
157
+		}
158
+		
159
+
160
+		
161
+		if (activeChar.isInOlympiadMode())
162
+		{
163
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego SI Estas En Olympiadas");
164
+			return false;
165
+		}
166
+		
167
+
168
+		
169
+		if (activeChar.isInObserverMode())
170
+		{
171
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego SI Estas en ObserverMode");
172
+			return false;
173
+		}
174
+		
175
+
176
+		
177
+		if (activeChar.isInCombat())
178
+		{
179
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Si Estas en Combate");
180
+			return false;
181
+		}
182
+		
183
+
184
+		
185
+		return true;
186
+	}
187
+}
188
diff --git java/net/sf/l2j/Config.java java/net/sf/l2j/Config.java
189
index 30397a1..7065ef2 100644
190
--- java/net/sf/l2j/Config.java
191
+++ java/net/sf/l2j/Config.java
192
@@ -33,32 +33,42 @@
193
 	public static final String LOGINSERVER_FILE = "./config/loginserver.properties";
194
 	public static final String NPCS_FILE = "./config/npcs.properties";
195
 	public static final String PLAYERS_FILE = "./config/players.properties";
196
+	public static final String GAME_MODE_FILE = "./config/GameModeSystem.properties";
197
 	public static final String SERVER_FILE = "./config/server.properties";
198
 	public static final String SIEGE_FILE = "./config/siege.properties";
199
 	
200
201
+	// --------------------------------------------------
202
+	// Game Mode System - PVE - PVP - NORMAL
203
+	// --------------------------------------------------
204
+	public static boolean GAME_MODE_ENABLE;
205
 	
206
+	public static double PVP_MODE_RATE_XP;
207
+	public static double PVP_MODE_RATE_SP;
208
+	public static double PVP_MODE_RATE_DROP_CURRENCY;
209
+	public static double PVP_MODE_RATE_DROP_SPOIL;
210
+	public static double PVP_MODE_RATE_DROP_ITEMS;
211
+	public static double PVP_MODE_RATE_DROP_ITEMS_BY_RAID;
212
 	
213
+	public static double NORMAL_MODE_RATE_XP;
214
+	public static double NORMAL_MODE_RATE_SP;
215
+	public static double NORMAL_MODE_RATE_DROP_CURRENCY;
216
+	public static double NORMAL_MODE_RATE_DROP_SPOIL;
217
+	public static double NORMAL_MODE_RATE_DROP_ITEMS;
218
+	public static double NORMAL_MODE_RATE_DROP_ITEMS_BY_RAID;
219
 	
220
 	// --------------------------------------------------
221
 	// Clans settings
222
 	// --------------------------------------------------
223
224
 	/** Clans */
225
 	public static int CLAN_JOIN_DAYS;
226
 	public static int CLAN_CREATE_DAYS;
227
@@ -835,6 +845,29 @@
228
 	}
229
 	
230
 	/**
231
+	 * Loads GameModeSystem settings.
232
+	 */
233
+	private static final void loadGameMode()
234
+	{
235
+		final ExProperties gamemode = initProperties(GAME_MODE_FILE);
236
+		
237
+		GAME_MODE_ENABLE = gamemode.getProperty("GameModeSystemEnable", true);
238
+		PVP_MODE_RATE_XP = gamemode.getProperty("PvPModeRateXp", 2.);
239
+		PVP_MODE_RATE_SP = gamemode.getProperty("PvPModeRateSp", 2.);
240
+		PVP_MODE_RATE_DROP_CURRENCY = gamemode.getProperty("PvPModeRateDropCurency", 2.);
241
+		PVP_MODE_RATE_DROP_SPOIL = gamemode.getProperty("PvPModeRateDropSpoil", 2.);
242
+		PVP_MODE_RATE_DROP_ITEMS = gamemode.getProperty("PvPModeRateDropItems", 2.);
243
+		PVP_MODE_RATE_DROP_ITEMS_BY_RAID = gamemode.getProperty("PvPModeRateRaidDropItems", 2.);
244
+		NORMAL_MODE_RATE_XP = gamemode.getProperty("NormalModeRateXp", 2.);
245
+		NORMAL_MODE_RATE_SP = gamemode.getProperty("NormalModeRateSp", 2.);
246
+		NORMAL_MODE_RATE_DROP_CURRENCY = gamemode.getProperty("NormalModeRateDropCurency", 2.);
247
+		NORMAL_MODE_RATE_DROP_SPOIL = gamemode.getProperty("NormalModeRateDropSpoil", 2.);
248
+		NORMAL_MODE_RATE_DROP_ITEMS = gamemode.getProperty("NormalModeRateDropItems", 2.);
249
+		NORMAL_MODE_RATE_DROP_ITEMS_BY_RAID = gamemode.getProperty("NormalModeRateRaidDropItems", 2.);
250
+		
251
+	}
252
+	
253
+	/**
254
 	 * Loads hex ID settings.
255
 	 */
256
 	private static final void loadHexID()
257
@@ -1292,6 +1323,9 @@
258
 		// geoengine settings
259
 		loadGeoengine();
260
 		
261
+		// gamemode settings
262
+		loadGameMode();
263
+		
264
 		// hexID
265
 		loadHexID();
266
 		
267
diff --git java/net/sf/l2j/gameserver/enums/DropType.java java/net/sf/l2j/gameserver/enums/DropType.java
268
index 57dbb7b..bcc057c 100644
269
--- java/net/sf/l2j/gameserver/enums/DropType.java
270
+++ java/net/sf/l2j/gameserver/enums/DropType.java
271
@@ -1,6 +1,8 @@
272
 package net.sf.l2j.gameserver.enums;
273
 
274
 import net.sf.l2j.Config;
275
+import net.sf.l2j.gameserver.model.actor.Npc;
276
+import net.sf.l2j.gameserver.model.actor.Player;
277
 
278
 public enum DropType
279
 {
280
@@ -9,17 +11,51 @@
281
 	DROP,
282
 	HERB;
283
 	
284
-	public double getDropRate(boolean isRaid)
285
+	public double getDropRate(Player player, Npc npc, boolean isRaid)
286
 	{
287
 		switch (this)
288
 		{
289
 			case SPOIL:
290
+				if (player.isPVPMode())
291
+				{
292
+					return Config.PVP_MODE_RATE_DROP_SPOIL;
293
+				}
294
+				
295
+				if (player.isNormalMode())
296
+				{
297
+					return Config.NORMAL_MODE_RATE_DROP_SPOIL;
298
+				}
299
+				
300
 				return Config.RATE_DROP_SPOIL;
301
 			
302
 			case CURRENCY:
303
+				
304
+				if (player.isPVPMode())
305
+				{
306
+					return Config.PVP_MODE_RATE_DROP_CURRENCY;
307
+				}
308
+				
309
+				if (player.isNormalMode())
310
+				{
311
+					return Config.NORMAL_MODE_RATE_DROP_CURRENCY;
312
+				}
313
+				
314
 				return Config.RATE_DROP_CURRENCY;
315
 			
316
 			case DROP:
317
+				
318
+				if (player.isPVPMode())
319
+				{
320
+					if (isRaid)
321
+						return Config.PVP_MODE_RATE_DROP_ITEMS_BY_RAID;
322
+				}
323
+				
324
+				if (player.isNormalMode())
325
+				{
326
+					if (isRaid)
327
+						return Config.NORMAL_MODE_RATE_DROP_ITEMS_BY_RAID;
328
+				}
329
+				
330
 				return isRaid ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS;
331
 			
332
 			case HERB:
333
diff --git java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java
334
index 35df73c..4dacb70 100644
335
--- java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java
336
+++ java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java
337
@@ -4,6 +4,7 @@
338
 import java.util.Map;
339
 
340
 import net.sf.l2j.gameserver.handler.usercommandhandlers.DressMe;
341
+import net.sf.l2j.gameserver.handler.voicedcommandhandlers.GameMode;
342
 
343
 public class VoicedCommandHandler
344
 {
345
@@ -18,6 +19,7 @@
346
 	{
347
 		//Codigos para colocar aqui dentro
348
 		registerHandler(new DressMe());
349
+		registerHandler(new GameMode());
350
 		
351
 	}
352
 	
353
diff --git java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminInfo.java java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminInfo.java
354
index 0dba20a..1924f58 100644
355
--- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminInfo.java
356
+++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminInfo.java
357
@@ -111,11 +111,11 @@
358
 							{
359
 								final int page = (st.hasMoreTokens()) ? Integer.parseInt(st.nextToken()) : 1;
360
 								
361
-								sendDropInfos(targetNpc, html, page, subCommand.equalsIgnoreCase("drop"));
362
+								sendDropInfos(player, targetNpc, html, page, subCommand.equalsIgnoreCase("drop"));
363
 							}
364
 							catch (Exception e)
365
 							{
366
-								sendDropInfos(targetNpc, html, 1, true);
367
+								sendDropInfos(player, targetNpc, html, 1, true);
368
 							}
369
 							break;
370
 						
371
@@ -289,12 +289,13 @@
372
 	
373
 	/**
374
 	 * Feed a {@link NpcHtmlMessage} with <b>DROPS</b> or <b>SPOILS</b> informations regarding a {@link Npc}.
375
+	 * @param player
376
 	 * @param npc : The {@link Npc} used as reference.
377
 	 * @param html : The {@link NpcHtmlMessage} used as reference.
378
 	 * @param page : The current page we are checking.
379
 	 * @param isDrop : If true, we check drops only. If false, we check spoils.
380
 	 */
381
-	private static void sendDropInfos(Npc npc, NpcHtmlMessage html, int page, boolean isDrop)
382
+	private static void sendDropInfos(Player player, Npc npc, NpcHtmlMessage html, int page, boolean isDrop)
383
 	{
384
 		// Load static htm.
385
 		html.setFile("data/html/admin/npcinfo/default.htm");
386
@@ -305,7 +306,7 @@
387
 		final Pagination<DropCategory> list = new Pagination<>(npc.getTemplate().getDropData().stream(), page, PAGE_LIMIT_1, dc -> (isDrop) ? dc.getDropType() != DropType.SPOIL : dc.getDropType() == DropType.SPOIL);
388
 		for (DropCategory category : list)
389
 		{
390
-			double catChance = category.getChance() * category.getDropType().getDropRate(npc.isRaidBoss());
391
+			double catChance = category.getChance() * category.getDropType().getDropRate(player, npc, npc.isRaidBoss());
392
 			double chanceMultiplier = 1;
393
 			double countMultiplier = 1;
394
 			
395
diff --git java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/GameMode.java java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/GameMode.java
396
new file mode 100644
397
index 0000000..3d5d529
398
--- /dev/null
399
+++ java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/GameMode.java
400
@@ -0,0 +1,311 @@
401
+package net.sf.l2j.gameserver.handler.voicedcommandhandlers;
402
+
403
+import java.sql.Connection;
404
+import java.sql.PreparedStatement;
405
+import java.sql.SQLException;
406
+
407
+import net.sf.l2j.commons.pool.ConnectionPool;
408
+
409
+import net.sf.l2j.Config;
410
+import net.sf.l2j.gameserver.enums.ZoneId;
411
+import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
412
+import net.sf.l2j.gameserver.model.World;
413
+import net.sf.l2j.gameserver.model.actor.Player;
414
+import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
415
+import net.sf.l2j.gameserver.taskmanager.PvpFlagTaskManager;
416
+
417
+public class GameMode implements IVoicedCommandHandler
418
+{
419
+	private static final String[] VOICED_COMMANDS =
420
+	{
421
+		"pve",
422
+		"pvp",
423
+		"normal",
424
+		"mode"
425
+	};
426
+	
427
+	@Override
428
+	public boolean useVoicedCommand(String command, Player activeChar, String params)
429
+	{
430
+		if (activeChar == null)
431
+		{
432
+			return false;
433
+		}
434
+		
435
+		if (!Config.GAME_MODE_ENABLE)
436
+		{
437
+			activeChar.sendMessage("El Change Mode System Esta Desactivado.");
438
+			return false;
439
+		}
440
+		
441
+		if (activeChar.isMoving())
442
+		{
443
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego SI Te Estas Moviendo");
444
+			return false;
445
+		}
446
+		
447
+		if (activeChar.isInParty())
448
+		{
449
+			
450
+			activeChar.sendMessage("Sal De La Party Para Cambiar de Modo De Juego");
451
+			return false;
452
+		}
453
+		
454
+		if (activeChar.isInDuel())
455
+		{
456
+			
457
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
458
+			return false;
459
+		}
460
+		
461
+		if (activeChar.isInArena())
462
+		{
463
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
464
+			return false;
465
+		}
466
+		
467
+		if (activeChar.isInJail())
468
+		{
469
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
470
+			return false;
471
+		}
472
+		
473
+		if (activeChar.isInPartyMatchRoom())
474
+		{
475
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
476
+			return false;
477
+		}
478
+		
479
+		if (activeChar.isInsideZone(ZoneId.BOSS))
480
+		{
481
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
482
+			return false;
483
+		}
484
+		
485
+		if (activeChar.isInsideZone(ZoneId.CASTLE))
486
+		{
487
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
488
+			return false;
489
+		}
490
+		
491
+		if (activeChar.isInsideZone(ZoneId.DANGER_AREA))
492
+		{
493
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
494
+			return false;
495
+		}
496
+		
497
+		if (activeChar.isInsideZone(ZoneId.NO_SUMMON_FRIEND))
498
+		{
499
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
500
+			return false;
501
+		}
502
+		
503
+		if (activeChar.isInsideZone(ZoneId.JAIL))
504
+		{
505
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
506
+			return false;
507
+		}
508
+		
509
+		if (activeChar.isInsideZone(ZoneId.MONSTER_TRACK))
510
+		{
511
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
512
+			return false;
513
+		}
514
+		
515
+		if (activeChar.isInsideZone(ZoneId.PVP))
516
+		{
517
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
518
+			return false;
519
+		}
520
+		
521
+		if (activeChar.isInsideZone(ZoneId.SIEGE))
522
+		{
523
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
524
+			return false;
525
+		}
526
+		
527
+		if (activeChar.isInsideZone(ZoneId.NO_RESTART))
528
+		{
529
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
530
+			return false;
531
+		}
532
+		
533
+		if (activeChar.isIn7sDungeon())
534
+		{
535
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Ahora");
536
+			return false;
537
+		}
538
+		
539
+		if (activeChar.isInOlympiadMode())
540
+		{
541
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego SI Estas En Olympiadas");
542
+			return false;
543
+		}
544
+		
545
+		if (activeChar.isInObserverMode())
546
+		{
547
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego SI Estas ObserverMode");
548
+			return false;
549
+		}
550
+		
551
+		if ((activeChar.isInCombat()))
552
+		{
553
+			activeChar.sendMessage("No Puedes Cambiar El Modo De Juego Si Estas En Combate");
554
+			return false;
555
+		}
556
+		
557
+		if (command.equalsIgnoreCase(VOICED_COMMANDS[0]))
558
+		{ // PVE Mode
559
+			
560
+			if (activeChar.isPVEMode())
561
+			{
562
+				activeChar.sendMessage("Ya estas en el modo PVE.");
563
+				return false;
564
+			}
565
+			
566
+			if (activeChar.getPvpFlag() == 0 && activeChar.getKarma() == 0)
567
+			{
568
+				activeChar.setPVEMode(true);
569
+				activeChar.setGameModeService(0);
570
+				activeChar.setPVPMode(false);
571
+				activeChar.setNormalMode(false);
572
+				setActiveCharGameMode(activeChar, "PVE MODE");
573
+				activeChar.sendMessage("Has cambiado al modo PVE. - No Podran Matarte Otros Jugadores");
574
+				activeChar.sendMessage("Tampoco Podras Atacar a Otros Jugadores - No Obtendras El Bonus");
575
+				activeChar.decayMe();
576
+				World.getInstance().addPlayer(activeChar);
577
+				activeChar.broadcastUserInfo();
578
+				activeChar.spawnMe();
579
+				return true;
580
+			}
581
+			activeChar.sendMessage(" Estas con Flag o Tienes Karma No puedes Activar el modo PvE Con Karma o Flag");
582
+			return false;
583
+			
584
+		}
585
+		else if (command.equalsIgnoreCase(VOICED_COMMANDS[1]))
586
+		{ // PVP Mode
587
+			
588
+			if (activeChar.isPVPMode())
589
+			{
590
+				activeChar.sendMessage("Ya estas en el modo PVP.");
591
+				return false;
592
+			}
593
+			
594
+			if (activeChar.getStatus().getLevel() < 76 && !activeChar.isGM())
595
+			{
596
+				activeChar.sendMessage("Necesitas Minimo Ser LvL 76 Para Activar El Modo PvP");
597
+				return false;
598
+			}
599
+			
600
+			if (!activeChar.isInsideZone(ZoneId.TOWN) && !activeChar.isGM())
601
+			{
602
+				activeChar.sendMessage("Solo Puedes Cambiar El Modo En Una Ciudad.");
603
+				return false;
604
+			}
605
+			
606
+			activeChar.updatePvPFlag(1);
607
+			activeChar.setPVEMode(false);
608
+			activeChar.setPVPMode(true);
609
+			activeChar.setGameModeService(1);
610
+			activeChar.setNormalMode(false);
611
+			setActiveCharGameMode(activeChar, "PVP MODE");
612
+			activeChar.sendMessage("Has cambiado al modo PVP. - Obtendras un Bonus de 50%");
613
+			activeChar.decayMe();
614
+			World.getInstance().addPlayer(activeChar);
615
+			activeChar.broadcastUserInfo();
616
+			activeChar.spawnMe();
617
+			return true;
618
+		}
619
+		else if (command.equalsIgnoreCase(VOICED_COMMANDS[2]))
620
+		{
621
+			
622
+			if (activeChar.isNormalMode())
623
+			{
624
+				activeChar.sendMessage("Ya estas en el modo Normal.");
625
+				return false;
626
+			}
627
+			
628
+			if (!activeChar.isInsideZone(ZoneId.TOWN) && !activeChar.isGM())
629
+			{
630
+				activeChar.sendMessage("Solo Puedes Cambiar El Modo En Una Ciudad.");
631
+				return false;
632
+			}
633
+			
634
+			if (activeChar.getPvpFlag() > 0)
635
+			{
636
+				
637
+				PvpFlagTaskManager.getInstance().add(activeChar, Config.PVP_NORMAL_TIME);
638
+				
639
+				activeChar.updatePvPFlag(1);
640
+				activeChar.setPVEMode(false);
641
+				activeChar.setPVPMode(false);
642
+				activeChar.setNormalMode(true);
643
+				activeChar.setGameModeService(2);
644
+				activeChar.sendMessage("Has cambiado al modo Normal. - Obtendras un Bonus de 20%");
645
+				
646
+				setActiveCharGameMode(activeChar, "NORMAL MODE");
647
+				activeChar.decayMe();
648
+				World.getInstance().addPlayer(activeChar);
649
+				activeChar.broadcastUserInfo();
650
+				activeChar.spawnMe();
651
+				
652
+			}
653
+			else
654
+			{
655
+				
656
+				activeChar.setPVEMode(false);
657
+				activeChar.setPVPMode(false);
658
+				activeChar.setNormalMode(true);
659
+				activeChar.setGameModeService(2);
660
+				setActiveCharGameMode(activeChar, "NORMAL MODE");
661
+				activeChar.sendMessage("Has cambiado al modo Normal. - Obtendras un Bonus de 20%");
662
+				activeChar.decayMe();
663
+				World.getInstance().addPlayer(activeChar);
664
+				activeChar.broadcastUserInfo();
665
+				activeChar.spawnMe();
666
+				return true;
667
+			}
668
+			
669
+		}
670
+		
671
+		else if (command.equalsIgnoreCase(VOICED_COMMANDS[3]))
672
+		{ // PVP Mode
673
+			showModeSystemHTML(activeChar);
674
+			return true;
675
+		}
676
+		
677
+		return false;
678
+	}
679
+	
680
+	private static void setActiveCharGameMode(Player activeChar, String gameMode)
681
+	{
682
+		try (Connection con = ConnectionPool.getConnection())
683
+		{
684
+			String sql = "REPLACE INTO Character_Game_Mode (object_id, char_name, game_mode) VALUES (?, ?, ?)";
685
+			try (PreparedStatement ps = con.prepareStatement(sql))
686
+			{
687
+				ps.setInt(1, activeChar.getObjectId());
688
+				ps.setString(2, activeChar.getName());
689
+				ps.setString(3, gameMode);
690
+				ps.execute();
691
+			}
692
+		}
693
+		catch (SQLException e)
694
+		{
695
+			// Manejo de excepciones
696
+		}
697
+	}
698
+	
699
+	private static void showModeSystemHTML(Player player)
700
+	{
701
+		NpcHtmlMessage html = new NpcHtmlMessage(0);
702
+		html.setFile("data/html/mods/ChangeModeSystem/ModeSystem.htm");
703
+		player.sendPacket(html);
704
+	}
705
+	
706
+	@Override
707
+	public String[] getVoicedCommandList()
708
+	{
709
+		return VOICED_COMMANDS;
710
+	}
711
+}
712
diff --git java/net/sf/l2j/gameserver/model/actor/Creature.java java/net/sf/l2j/gameserver/model/actor/Creature.java
713
index 44a34c5..0928279 100644
714
--- java/net/sf/l2j/gameserver/model/actor/Creature.java
715
+++ java/net/sf/l2j/gameserver/model/actor/Creature.java
716
@@ -117,6 +117,7 @@
717
 	
718
 	private final Map<Integer, Long> _disabledSkills = new ConcurrentHashMap<>();
719
 	private boolean _allSkillsDisabled;
720
+	private int _GameModeService;
721
 	
722
 	public Creature(int objectId, CreatureTemplate template)
723
 	{
724
@@ -1791,6 +1792,16 @@
725
 			setTarget(null);
726
 	}
727
 	
728
+	public void setGameModeService(int premiumService)
729
+	{
730
+		_GameModeService = premiumService;
731
+	}
732
+	
733
+	public int getGameModeService()
734
+	{
735
+		return _GameModeService;
736
+	}
737
+	
738
 	/**
739
 	 * @return The {@link List} of GMs {@link Player}s in surrounding regions.
740
 	 */
741
diff --git java/net/sf/l2j/gameserver/model/actor/Npc.java java/net/sf/l2j/gameserver/model/actor/Npc.java
742
index 16013ae..4c736eb 100644
743
--- java/net/sf/l2j/gameserver/model/actor/Npc.java
744
+++ java/net/sf/l2j/gameserver/model/actor/Npc.java
745
@@ -874,18 +874,40 @@
746
 	}
747
 	
748
 	/**
749
+	 * @param GameMode
750
 	 * @return The Exp reward of this {@link Npc} based on its {@link NpcTemplate} and modified by {@link Config#RATE_XP}.
751
 	 */
752
-	public int getExpReward()
753
+	public int getExpReward(int GameMode)
754
 	{
755
+		if (GameMode == 1)
756
+		{
757
+			return (int) (getTemplate().getRewardExp() * Config.PVP_MODE_RATE_XP);
758
+		}
759
+		
760
+		if (GameMode == 2)
761
+		{
762
+			return (int) (getTemplate().getRewardExp() * Config.NORMAL_MODE_RATE_XP);
763
+		}
764
+		
765
 		return (int) (getTemplate().getRewardExp() * Config.RATE_XP);
766
 	}
767
 	
768
 	/**
769
+	 * @param GameMode
770
 	 * @return The SP reward of this {@link Npc} based on its {@link NpcTemplate} and modified by {@link Config#RATE_SP}.
771
 	 */
772
-	public int getSpReward()
773
+	public int getSpReward(int GameMode)
774
 	{
775
+		if (GameMode == 1)
776
+		{
777
+			return (int) (getTemplate().getRewardExp() * Config.PVP_MODE_RATE_SP);
778
+		}
779
+		
780
+		if (GameMode == 2)
781
+		{
782
+			return (int) (getTemplate().getRewardExp() * Config.NORMAL_MODE_RATE_SP);
783
+		}
784
+		
785
 		return (int) (getTemplate().getRewardSp() * Config.RATE_SP);
786
 	}
787
 	
788
diff --git java/net/sf/l2j/gameserver/model/actor/Playable.java java/net/sf/l2j/gameserver/model/actor/Playable.java
789
index 525de4a..bf420f5 100644
790
--- java/net/sf/l2j/gameserver/model/actor/Playable.java
791
+++ java/net/sf/l2j/gameserver/model/actor/Playable.java
792
@@ -354,6 +354,13 @@
793
 		if (isInSameActiveOlympiadMatch(targetPlayer))
794
 			return true;
795
 		
796
+		// Check if either the caster or the target is in PvE mode.
797
+		if (getActingPlayer().isPVEMode() || targetPlayer.isPVEMode())
798
+		{
799
+			
800
+			return false;
801
+		}
802
+		
803
 		// No checks for players in Duel.
804
 		if (isInSameActiveDuel(targetPlayer))
805
 			return true;
806
diff --git java/net/sf/l2j/gameserver/model/actor/Player.java java/net/sf/l2j/gameserver/model/actor/Player.java
807
index 35bca86..de81940 100644
808
--- java/net/sf/l2j/gameserver/model/actor/Player.java
809
+++ java/net/sf/l2j/gameserver/model/actor/Player.java
810
@@ -3,6 +3,7 @@
811
 import java.sql.Connection;
812
 import java.sql.PreparedStatement;
813
 import java.sql.ResultSet;
814
+import java.sql.SQLException;
815
 import java.util.ArrayList;
816
 import java.util.Arrays;
817
 import java.util.Collection;
818
@@ -490,6 +475,10 @@
819
 	
820
 	private int _mailPosition;
821
 	
822
+	private boolean isPVEMode = false;
823
+	private boolean isPVPMode = false;
824
+	private boolean isNormalMode = false;
825
+	
826
 	private static final int FALLING_VALIDATION_DELAY = 10000;
827
 	private volatile long _fallingTimestamp;
828
 	
829
830
@@ -7469,6 +7445,61 @@
831
 		return formal != null && formal.getItem().getBodyPart() == Item.SLOT_ALLDRESS;
832
 	}
833
 	
834
+	public boolean isPVEMode()
835
+	{
836
+		return isPVEMode;
837
+	}
838
+	
839
+	public void setPVEMode(boolean b)
840
+	{
841
+		isPVEMode = b;
842
+	}
843
+	
844
+	public boolean isPVPMode()
845
+	{
846
+		return isPVPMode;
847
+	}
848
+	
849
+	public void setPVPMode(boolean b)
850
+	{
851
+		isPVPMode = b;
852
+	}
853
+	
854
+	public boolean isNormalMode()
855
+	{
856
+		return isNormalMode;
857
+	}
858
+	
859
+	public void setNormalMode(boolean b)
860
+	{
861
+		isNormalMode = b;
862
+	}
863
+	
864
+	public String getGameMode()
865
+	{
866
+		try (Connection con = ConnectionPool.getConnection())
867
+		{
868
+			String sql = "SELECT game_mode FROM Character_Game_Mode WHERE object_id = ?";
869
+			try (PreparedStatement ps = con.prepareStatement(sql))
870
+			{
871
+				ps.setInt(1, getObjectId());
872
+				try (ResultSet rs = ps.executeQuery())
873
+				{
874
+					if (rs.next())
875
+					{
876
+						return rs.getString("game_mode");
877
+					}
878
+				}
879
+			}
880
+		}
881
+		catch (SQLException e)
882
+		{
883
+			// Manejo de excepciones
884
+		}
885
+		
886
+		return "Desconocido";
887
+	}
888
+	
889
 	public final void startFakeDeath()
890
 	{
891
 		_isFakeDeath = true;
892
893
\ No newline at end of file
894
diff --git java/net/sf/l2j/gameserver/model/actor/attack/PlayableAttack.java java/net/sf/l2j/gameserver/model/actor/attack/PlayableAttack.java
895
index d264edd..28f35e3 100644
896
--- java/net/sf/l2j/gameserver/model/actor/attack/PlayableAttack.java
897
+++ java/net/sf/l2j/gameserver/model/actor/attack/PlayableAttack.java
898
@@ -31,6 +31,14 @@
899
 				return false;
900
 			}
901
 			
902
+			if (_actor.getActingPlayer().isPVEMode())
903
+			{
904
+				
905
+				_actor.sendMessage("Desactiva El Modo PvE Para Atacar A Otros Jugadores");
906
+				return false;
907
+				
908
+			}
909
+			
910
 			if (target.isInsideZone(ZoneId.PEACE))
911
 			{
912
 				_actor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IN_PEACEZONE));
913
diff --git java/net/sf/l2j/gameserver/model/actor/instance/Monster.java java/net/sf/l2j/gameserver/model/actor/instance/Monster.java
914
index c2e7083..4641f6e 100644
915
--- java/net/sf/l2j/gameserver/model/actor/instance/Monster.java
916
+++ java/net/sf/l2j/gameserver/model/actor/instance/Monster.java
917
@@ -150,7 +150,7 @@
918
 				{
919
 					final int levelDiff = attacker.getStatus().getLevel() - getStatus().getLevel();
920
 					final float penalty = (attacker.hasServitor()) ? ((Servitor) attacker.getSummon()).getExpPenalty() : 0;
921
-					final int[] expSp = calculateExpAndSp(levelDiff, damage, totalDamage);
922
+					final int[] expSp = calculateExpAndSp(attacker, levelDiff, damage, totalDamage, attacker.getGameModeService());
923
 					
924
 					long exp = expSp[0];
925
 					int sp = expSp[1];
926
@@ -222,10 +222,24 @@
927
 				final int levelDiff = partyLvl - getStatus().getLevel();
928
 				
929
 				// Calculate Exp and SP rewards.
930
-				final int[] expSp = calculateExpAndSp(levelDiff, partyDmg, totalDamage);
931
+				final int[] expSpPvPMode = calculateExpAndSp(attacker, levelDiff, partyDmg, totalDamage, 1);
932
+				long exp_pvp_mode = expSpPvPMode[0];
933
+				int sp_pvp_mode = expSpPvPMode[1];
934
+				
935
+				// Calculate Exp and SP rewards.
936
+				final int[] expSpNormalMode = calculateExpAndSp(attacker, levelDiff, partyDmg, totalDamage, 2);
937
+				long exp_normal_mode = expSpNormalMode[0];
938
+				int sp_normal_mode = expSpNormalMode[1];
939
+				
940
+				// Calculate Exp and SP rewards.
941
+				final int[] expSp = calculateExpAndSp(attacker, levelDiff, partyDmg, totalDamage, 0);
942
 				long exp = expSp[0];
943
 				int sp = expSp[1];
944
 				
945
+				exp_pvp_mode *= partyMul;
946
+				sp_pvp_mode *= partyMul;
947
+				exp_normal_mode *= partyMul;
948
+				sp_normal_mode *= partyMul;
949
 				exp *= partyMul;
950
 				sp *= partyMul;
951
 				
952
@@ -234,11 +248,13 @@
953
 				{
954
 					attacker.sendPacket(SystemMessageId.OVER_HIT);
955
 					exp += _overhitState.calculateOverhitExp(exp);
956
+					exp_pvp_mode += _overhitState.calculateOverhitExp(exp_pvp_mode);
957
+					exp_normal_mode += _overhitState.calculateOverhitExp(exp_normal_mode);
958
 				}
959
 				
960
 				// Distribute Experience and SP rewards to Player Party members in the known area of the last attacker.
961
 				if (partyDmg > 0)
962
-					attackerParty.distributeXpAndSp(exp, sp, rewardedMembers, partyLvl, playersWithPets);
963
+					attackerParty.distributeXpAndSp(exp_pvp_mode, sp_pvp_mode, exp_normal_mode, sp_normal_mode, exp, sp, rewardedMembers, partyLvl, playersWithPets);
964
 			}
965
 		}
966
 	}
967
@@ -391,16 +407,18 @@
968
 	
969
 	/**
970
 	 * Calculate the XP and SP to distribute to the attacker of the {@link Monster}.
971
+	 * @param player
972
 	 * @param diff : The difference of level between the attacker and the {@link Monster}.
973
 	 * @param damage : The damages done by the attacker.
974
 	 * @param totalDamage : The total damage done.
975
+	 * @param GameMode
976
 	 * @return an array consisting of xp and sp values.
977
 	 */
978
-	private int[] calculateExpAndSp(int diff, int damage, long totalDamage)
979
+	private int[] calculateExpAndSp(Player player, int diff, int damage, long totalDamage, int GameMode)
980
 	{
981
 		// Calculate damage ratio.
982
-		double xp = (double) getExpReward() * damage / totalDamage;
983
-		double sp = (double) getSpReward() * damage / totalDamage;
984
+		double xp = (double) getExpReward(GameMode) * damage / totalDamage;
985
+		double sp = (double) getSpReward(GameMode) * damage / totalDamage;
986
 		
987
 		// Calculate level ratio.
988
 		if (diff > 5)
989
@@ -410,6 +428,18 @@
990
 			sp = sp * pow;
991
 		}
992
 		
993
+		if (player.getGameModeService() == 1)
994
+		{
995
+			xp *= Config.PVP_MODE_RATE_XP;
996
+			sp *= Config.PVP_MODE_RATE_SP;
997
+		}
998
+		
999
+		if (player.getGameModeService() == 2)
1000
+		{
1001
+			xp *= Config.NORMAL_MODE_RATE_XP;
1002
+			sp *= Config.NORMAL_MODE_RATE_SP;
1003
+		}
1004
+		
1005
 		// If the XP is inferior or equals 0, don't reward any SP. Both XP and SP can't be inferior to 0.
1006
 		if (xp <= 0)
1007
 		{
1008
@@ -483,7 +513,7 @@
1009
 				continue;
1010
 			
1011
 			// Calculate drops of this category.
1012
-			for (IntIntHolder drop : category.calculateDrop(levelMultiplier, isRaid))
1013
+			for (IntIntHolder drop : category.calculateDrop(player, this, levelMultiplier, isRaid))
1014
 			{
1015
 				if (type == DropType.SPOIL)
1016
 					getSpoilState().add(drop);
1017
diff --git java/net/sf/l2j/gameserver/model/group/Party.java java/net/sf/l2j/gameserver/model/group/Party.java
1018
index f697b7d..bacb259 100644
1019
--- java/net/sf/l2j/gameserver/model/group/Party.java
1020
+++ java/net/sf/l2j/gameserver/model/group/Party.java
1021
@@ -628,13 +628,17 @@
1022
 	 * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T GIVE rewards to Pet</B></FONT><BR>
1023
 	 * <BR>
1024
 	 * Exception are Pets that leech from the owner's XP; they get the exp indirectly, via the owner's exp gain.<BR>
1025
+	 * @param xpReward_pvp_mode
1026
+	 * @param spReward_pvp_mode
1027
+	 * @param xpReward_normal_mode
1028
+	 * @param spReward_normal_mode
1029
 	 * @param xpReward : The Experience reward to distribute.
1030
 	 * @param spReward : The SP reward to distribute.
1031
 	 * @param rewardedMembers : The {@link Player}s' {@link List} to reward.
1032
 	 * @param topLvl : The maximum level.
1033
 	 * @param rewards : The {@link Map} of {@link Creature}s and {@link RewardInfo}.
1034
 	 */
1035
-	public void distributeXpAndSp(long xpReward, int spReward, List<Player> rewardedMembers, int topLvl, Map<Creature, RewardInfo> rewards)
1036
+	public void distributeXpAndSp(long xpReward_pvp_mode, int spReward_pvp_mode, long xpReward_normal_mode, int spReward_normal_mode, long xpReward, int spReward, List<Player> rewardedMembers, int topLvl, Map<Creature, RewardInfo> rewards)
1037
 	{
1038
 		final List<Player> validMembers = new ArrayList<>();
1039
 		
1040
@@ -681,7 +685,13 @@
1041
 		
1042
 		xpReward *= partyRate * Config.RATE_PARTY_XP;
1043
 		spReward *= partyRate * Config.RATE_PARTY_SP;
1044
+		xpReward_pvp_mode *= partyRate * Config.RATE_PARTY_XP;
1045
+		spReward_pvp_mode *= partyRate * Config.RATE_PARTY_SP;
1046
+		xpReward_normal_mode *= partyRate * Config.RATE_PARTY_XP;
1047
+		spReward_normal_mode *= partyRate * Config.RATE_PARTY_SP;
1048
 		
1049
+		long xpRew = 0;
1050
+		int spRew = 0;
1051
 		int sqLevelSum = 0;
1052
 		for (Player member : validMembers)
1053
 			sqLevelSum += member.getStatus().getLevel() * member.getStatus().getLevel();
1054
@@ -692,6 +702,24 @@
1055
 			if (member.isDead())
1056
 				continue;
1057
 			
1058
+			if (member.getGameModeService() == 0)
1059
+			{
1060
+				xpRew = xpReward;
1061
+				spRew = spReward;
1062
+			}
1063
+			
1064
+			if (member.getGameModeService() == 1)
1065
+			{
1066
+				xpRew = xpReward_pvp_mode;
1067
+				spRew = spReward_pvp_mode;
1068
+			}
1069
+			
1070
+			if (member.getGameModeService() == 2)
1071
+			{
1072
+				xpRew = xpReward_normal_mode;
1073
+				spRew = spReward_normal_mode;
1074
+			}
1075
+			
1076
 			// Calculate and add the EXP and SP reward to the member.
1077
 			if (validMembers.contains(member))
1078
 			{
1079
@@ -701,8 +729,8 @@
1080
 				final double sqLevel = member.getStatus().getLevel() * member.getStatus().getLevel();
1081
 				final double preCalculation = (sqLevel / sqLevelSum) * (1 - penalty);
1082
 				
1083
-				final long xp = Math.round(xpReward * preCalculation);
1084
-				final int sp = (int) (spReward * preCalculation);
1085
+				final long xp = Math.round(xpRew * preCalculation);
1086
+				final int sp = (int) (spRew * preCalculation);
1087
 				
1088
 				// Set new karma.
1089
 				member.updateKarmaLoss(xp);
1090
diff --git java/net/sf/l2j/gameserver/model/item/DropCategory.java java/net/sf/l2j/gameserver/model/item/DropCategory.java
1091
index 0d43736..d059fb6 100644
1092
--- java/net/sf/l2j/gameserver/model/item/DropCategory.java
1093
+++ java/net/sf/l2j/gameserver/model/item/DropCategory.java
1094
@@ -7,6 +7,8 @@
1095
 import net.sf.l2j.commons.random.Rnd;
1096
 
1097
 import net.sf.l2j.gameserver.enums.DropType;
1098
+import net.sf.l2j.gameserver.model.actor.Player;
1099
+import net.sf.l2j.gameserver.model.actor.instance.Monster;
1100
 import net.sf.l2j.gameserver.model.holder.IntIntHolder;
1101
 
1102
 public class DropCategory
1103
@@ -68,14 +70,16 @@
1104
 	
1105
 	/**
1106
 	 * Calculates drops of this {@link DropCategory}.
1107
+	 * @param player
1108
+	 * @param monster
1109
 	 * @param levelMultiplier : The input level modifier of the last attacker.
1110
 	 * @param raid : The NPC is raid boss.
1111
 	 * @return The list of {@link IntIntHolder} holding item ID and item count.
1112
 	 */
1113
-	public List<IntIntHolder> calculateDrop(double levelMultiplier, boolean raid)
1114
+	public List<IntIntHolder> calculateDrop(Player player, Monster monster, double levelMultiplier, boolean raid)
1115
 	{
1116
 		// Get base category chance and apply level multiplier and drop rate config based on type.
1117
-		double chance = getChance() * levelMultiplier * getDropType().getDropRate(raid) * DropData.MAX_CHANCE / 100;
1118
+		double chance = getChance() * levelMultiplier * getDropType().getDropRate(player, monster, raid) * DropData.MAX_CHANCE / 100;
1119
 		
1120
 		// Check chance exceeding 100% limit and calculate drop chance multiplier.
1121
 		double multiplier;
1122
diff --git java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java
1123
index 288946d..23be218 100644
1124
--- java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java
1125
+++ java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java
1126
@@ -54,6 +54,22 @@
1127
 			return;
1128
 		}
1129
 		
1130
+		// Check if target is in PVE mode
1131
+		if (target instanceof Player && ((Player) target).isPVEMode() && !player.isGM())
1132
+		{
1133
+			player.sendMessage("El Usuario: " + target.getName() + " esta en modo PvE");
1134
+			player.sendPacket(ActionFailed.STATIC_PACKET);
1135
+			return;
1136
+		}
1137
+		
1138
+		// Check if attacker is in PVE mode
1139
+		if (player.isPVEMode() && !player.isGM())
1140
+		{
1141
+			player.sendMessage("Debes desactivar el modo PvE para atacar a otros jugadores");
1142
+			player.sendPacket(ActionFailed.STATIC_PACKET);
1143
+			return;
1144
+		}
1145
+		
1146
 		// (player.getTarget() == target) -> This happens when you control + click a target without having had it selected beforehand. Behaves as the Action packet and will NOT trigger an attack.
1147
 		target.onAction(player, (player.getTarget() == target), _isShiftAction);
1148
 	}
1149
diff --git java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
1150
index 3efda23..0a00998 100644
1151
--- java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
1152
+++ java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
1153
@@ -102,6 +102,70 @@
1154
 		player.updateEffectIcons();
1155
 		player.sendPacket(new EtcStatusUpdate(player));
1156
 		
1157
+		if (Config.GAME_MODE_ENABLE)
1158
+		{
1159
+			
1160
+			String gameMode = player.getGameMode();
1161
+			if (gameMode.equalsIgnoreCase("PVE MODE"))
1162
+			{
1163
+				player.setPVEMode(true);
1164
+				player.setGameModeService(0);
1165
+				player.setPVPMode(false);
1166
+				player.setNormalMode(false);
1167
+				player.decayMe();
1168
+				World.getInstance().addPlayer(player);
1169
+				player.sendMessage("Estas En PvE Mode - Los jugadores no podran atacarte");
1170
+				player.sendMessage("Puedes Cambiarlo Con: - .pve - .pvp - .normal");
1171
+				player.broadcastUserInfo();
1172
+				player.spawnMe();
1173
+			}
1174
+			else if (gameMode.equalsIgnoreCase("PVP MODE"))
1175
+			{
1176
+				
1177
+				player.updatePvPFlag(1);
1178
+				player.setPVEMode(false);
1179
+				player.setPVPMode(true);
1180
+				player.setGameModeService(1);
1181
+				player.setNormalMode(false);
1182
+				player.sendMessage("Estas En PVP Mode - Recibes un bonus de 50% de Exp - Sp - Drop - Adena");
1183
+				player.sendMessage("Puedes Cambiarlo Con: - .pve - .pvp - .normal");
1184
+				player.decayMe();
1185
+				World.getInstance().addPlayer(player);
1186
+				player.broadcastUserInfo();
1187
+				player.spawnMe();
1188
+			}
1189
+			else if (gameMode.equalsIgnoreCase("NORMAL MODE"))
1190
+			{
1191
+				
1192
+				player.setPVEMode(false);
1193
+				player.setPVPMode(false);
1194
+				player.setNormalMode(true);
1195
+				player.setGameModeService(2);
1196
+				player.sendMessage("Estas En Normal Mode - Recibes un bonus de 20% de Exp - Sp - Drop - Adena");
1197
+				player.sendMessage("Puedes Cambiarlo Con: - .pve - .pvp - .normal");
1198
+				player.decayMe();
1199
+				World.getInstance().addPlayer(player);
1200
+				player.broadcastUserInfo();
1201
+				player.spawnMe();
1202
+			}
1203
+			
1204
+			if (!player.isPVPMode() && !player.isPVEMode())
1205
+			{
1206
+				player.setPVEMode(false);
1207
+				player.setPVPMode(false);
1208
+				player.setNormalMode(true);
1209
+				player.setGameModeService(2);
1210
+				player.sendMessage("Estas En Normal Mode - Recibes un bonus de 20% de Exp - Sp - Drop - Adena");
1211
+				player.sendMessage("Puedes Cambiarlo Con: - .pve - .pvp - .normal");
1212
+				player.decayMe();
1213
+				World.getInstance().addPlayer(player);
1214
+				showModeSystemHTML(player);
1215
+				player.broadcastUserInfo();
1216
+				player.spawnMe();
1217
+			}
1218
+			
1219
+		}
1220
+		
1221
 		// Clan checks.
1222
 		final Clan clan = player.getClan();
1223
 		if (clan != null)
1224
@@ -286,6 +350,14 @@
1225
 		player.sendPacket(ActionFailed.STATIC_PACKET);
1226
 	}
1227
 	
1228
+	@SuppressWarnings("static-method")
1229
+	private void showModeSystemHTML(Player player)
1230
+	{
1231
+		NpcHtmlMessage html = new NpcHtmlMessage(0);
1232
+		html.setFile("data/html/mods/ChangeModeSystem/ModeSystem.htm");
1233
+		player.sendPacket(html);
1234
+	}
1235
+	
1236
 	@Override
1237
 	protected boolean triggersOnActionRequest()
1238
 	{
1239
diff --git java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
1240
index d74f2a3..c4ab884 100644
1241
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
1242
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
1243
@@ -38,7 +38,9 @@
1244
 import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
1245
 import net.sf.l2j.gameserver.network.serverpackets.PlaySound;
1246
 import net.sf.l2j.gameserver.scripting.QuestState;
1247
+import net.sf.l2j.gameserver.taskmanager.PvpFlagTaskManager;
1248
 
1249
+import Base.GameModeSystem.ChangeModeManager;
1250
 import Base.Skin.DressMeData;
1251
 import Base.Skin.SkinPackage;
1252
 
1253
@@ -109,6 +111,122 @@
1254
 			ach.useVoicedCommand(_command.substring(7), player, null);
1255
 		}
1256
 		
1257
+		else if (_command.startsWith("PvEMode"))
1258
+		{
1259
+			
1260
+			if (ChangeModeManager.verifyChangeMode(player))
1261
+			{
1262
+				
1263
+				if (player.isPVEMode())
1264
+				{
1265
+					player.sendMessage("Ya estas en el modo PVE.");
1266
+					return;
1267
+				}
1268
+				
1269
+				if (player.getPvpFlag() == 0 && player.getKarma() == 0)
1270
+				{
1271
+					player.setPVEMode(true);
1272
+					player.setGameModeService(0);
1273
+					player.setPVPMode(false);
1274
+					player.setNormalMode(false);
1275
+					player.decayMe();
1276
+					World.getInstance().addPlayer(player);
1277
+					player.sendMessage("Estas En PvE Mode - Los jugadores no podran atacarte");
1278
+					player.sendMessage("Puedes Cambiarlo Con: - .pve - .pvp - .normal");
1279
+					player.broadcastUserInfo();
1280
+					player.spawnMe();
1281
+				}
1282
+				else
1283
+				{
1284
+					player.sendMessage(" Estas con Flag o Tienes Karma No puedes Activar el modo PvE Con Karma o Flag");
1285
+				}
1286
+			}
1287
+			
1288
+		}
1289
+		
1290
+		else if (_command.startsWith("PvPMode"))
1291
+		{
1292
+			
1293
+			if (ChangeModeManager.verifyChangeMode(player))
1294
+			{
1295
+				if (player.isPVPMode())
1296
+				{
1297
+					player.sendMessage("Ya estas en el modo PVP.");
1298
+					return;
1299
+				}
1300
+				
1301
+				if (!player.isInsideZone(ZoneId.TOWN) && !player.isGM())
1302
+				{
1303
+					player.sendMessage("Solo Puedes Cambiar El Modo En Una Ciudad.");
1304
+					return;
1305
+				}
1306
+				
1307
+				if (player.getStatus().getLevel() < 76 && !player.isGM())
1308
+				{
1309
+					player.sendMessage("Necesitas Minimo Ser LvL 76 Para Activar El Modo PvP.");
1310
+					return;
1311
+				}
1312
+				
1313
+				player.updatePvPFlag(1);
1314
+				player.setPVEMode(false);
1315
+				player.setPVPMode(true);
1316
+				player.setGameModeService(1);
1317
+				player.setNormalMode(false);
1318
+				player.sendMessage("Has cambiado al modo PVP. - Obtendras un Bonus de 50%");
1319
+				player.decayMe();
1320
+				World.getInstance().addPlayer(player);
1321
+				player.broadcastUserInfo();
1322
+				player.spawnMe();
1323
+			}
1324
+			
1325
+		}
1326
+		
1327
+		else if (_command.startsWith("NormalMode"))
1328
+		{
1329
+			if (ChangeModeManager.verifyChangeMode(player))
1330
+			{
1331
+				
1332
+				if (player.isNormalMode())
1333
+				{
1334
+					player.sendMessage("Ya estas en el modo Normal.");
1335
+					return;
1336
+				}
1337
+				
1338
+				if (!player.isInsideZone(ZoneId.TOWN) && !player.isGM())
1339
+				{
1340
+					player.sendMessage("Solo Puedes Cambiar El Modo En Una Ciudad.");
1341
+					return;
1342
+				}
1343
+				
1344
+				if (player.getPvpFlag() > 0)
1345
+				{
1346
+					PvpFlagTaskManager.getInstance().add(player, Config.PVP_NORMAL_TIME);
1347
+					
1348
+					player.updatePvPFlag(1);
1349
+					player.setPVEMode(false);
1350
+					player.setPVPMode(false);
1351
+					player.setNormalMode(true);
1352
+					player.setGameModeService(2);
1353
+					player.sendMessage("Has cambiado al modo Normal. - Obtendras un Bonus de 20%");
1354
+					player.decayMe();
1355
+					World.getInstance().addPlayer(player);
1356
+					player.broadcastUserInfo();
1357
+					player.spawnMe();
1358
+				}
1359
+				player.setPvpFlag(0);
1360
+				player.setPVEMode(false);
1361
+				player.setPVPMode(false);
1362
+				player.setNormalMode(true);
1363
+				player.setGameModeService(2);
1364
+				player.sendMessage("Has cambiado al modo Normal. - Obtendras un Bonus de 20%");
1365
+				player.decayMe();
1366
+				World.getInstance().addPlayer(player);
1367
+				player.broadcastUserInfo();
1368
+				player.spawnMe();
1369
+			}
1370
+			
1371
+		}
1372
+		
1373
 		else if (_command.startsWith("custom_"))
1374
 		{
1375
 			Player player2 = getClient().getPlayer();
1376
diff --git java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelAnswerStart.java java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelAnswerStart.java
1377
index 82913b7..c02d826 100644
1378
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelAnswerStart.java
1379
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelAnswerStart.java
1380
@@ -1,5 +1,6 @@
1381
 package net.sf.l2j.gameserver.network.clientpackets;
1382
 
1383
+import net.sf.l2j.Config;
1384
 import net.sf.l2j.gameserver.data.manager.DuelManager;
1385
 import net.sf.l2j.gameserver.model.actor.Player;
1386
 import net.sf.l2j.gameserver.model.group.CommandChannel;
1387
@@ -34,6 +35,18 @@
1388
 		player.setActiveRequester(null);
1389
 		requestor.onTransactionResponse();
1390
 		
1391
+		
1392
+		
1393
+	       if (Config.GAME_MODE_ENABLE)
1394
+	       {
1395
+	          if (requestor.isPVEMode())
1396
+	           {
1397
+	              player.sendMessage("Estas en PVE MODE o el jugador que intentas retar a un duelo lo esta");
1398
+	               return;
1399
+	           }
1400
+	       }
1401
+		
1402
+		
1403
 		if (_duelAccepted)
1404
 		{
1405
 			// Check if duel is possible.
1406
diff --git java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelStart.java java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelStart.java
1407
index 7ce0499..134f42e 100644
1408
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelStart.java
1409
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelStart.java
1410
@@ -1,5 +1,6 @@
1411
 package net.sf.l2j.gameserver.network.clientpackets;
1412
 
1413
+import net.sf.l2j.Config;
1414
 import net.sf.l2j.gameserver.model.World;
1415
 import net.sf.l2j.gameserver.model.actor.Player;
1416
 import net.sf.l2j.gameserver.model.group.CommandChannel;
1417
@@ -34,6 +35,26 @@
1418
 			return;
1419
 		}
1420
 		
1421
+		
1422
+		
1423
+		       if (Config.GAME_MODE_ENABLE)
1424
+			       {
1425
+			           if (player.isPVEMode())
1426
+			           {
1427
+			        	   player.sendMessage("Desactiva El PVE MODE");
1428
+			               return;
1429
+			           }
1430
+			           
1431
+			           if (target.isPVEMode())
1432
+			           {
1433
+			        	   player.sendMessage("El Jugador: " + target.getName() + " Esta en PvE Mode");
1434
+			               return;
1435
+			           }
1436
+			       }
1437
+		
1438
+		
1439
+		
1440
+		
1441
 		// Check if duel is possible.
1442
 		if (!player.canDuel())
1443
 		{
1444
diff --git java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java
1445
index 4d4552d..4db7299 100644
1446
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java
1447
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java
1448
@@ -1,5 +1,6 @@
1449
 package net.sf.l2j.gameserver.network.clientpackets;
1450
 
1451
+import net.sf.l2j.Config;
1452
 import net.sf.l2j.gameserver.enums.LootRule;
1453
 import net.sf.l2j.gameserver.model.World;
1454
 import net.sf.l2j.gameserver.model.actor.Player;
1455
@@ -34,6 +35,9 @@
1456
 			return;
1457
 		}
1458
 		
1459
+		
1460
+		
1461
+		
1462
 		if (target.getBlockList().isBlockingAll())
1463
 		{
1464
 			requestor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_BLOCKED_EVERYTHING).addCharName(target));
1465
@@ -52,6 +56,18 @@
1466
 			return;
1467
 		}
1468
 		
1469
+		
1470
+	      if (Config.GAME_MODE_ENABLE)
1471
+	       {
1472
+	           
1473
+	           if (!requestor.getGameMode().equals(target.getGameMode()))
1474
+	           {
1475
+	               requestor.sendMessage("No puedes invitar a la party a un jugador con un modo de juego diferente.");
1476
+	               return;
1477
+	           }
1478
+	       }
1479
+		
1480
+		
1481
 		if (target.isInParty())
1482
 		{
1483
 			requestor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_IS_ALREADY_IN_PARTY).addCharName(target));
1484
diff --git java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinPartyRoom.java java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinPartyRoom.java
1485
index 7e692a5..54cfa0e 100644
1486
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinPartyRoom.java
1487
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinPartyRoom.java
1488
@@ -1,5 +1,6 @@
1489
 package net.sf.l2j.gameserver.network.clientpackets;
1490
 
1491
+import net.sf.l2j.Config;
1492
 import net.sf.l2j.gameserver.data.manager.PartyMatchRoomManager;
1493
 import net.sf.l2j.gameserver.model.actor.Player;
1494
 import net.sf.l2j.gameserver.model.group.PartyMatchRoom;
1495
@@ -39,6 +40,15 @@
1496
 			return;
1497
 		}
1498
 		
1499
+		       if (Config.GAME_MODE_ENABLE)
1500
+			       {
1501
+			           if (player.isPVEMode())
1502
+			           {
1503
+			               player.sendMessage("Desactiva El PVE MODE");
1504
+			              return;
1505
+			          }
1506
+			      }
1507
+		
1508
 		// Remove from waiting list
1509
 		PartyMatchRoomManager.getInstance().removeWaitingPlayer(player);
1510
 		
1511
diff --git java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinSiege.java java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinSiege.java
1512
index d9bea2c..742316f 100644
1513
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinSiege.java
1514
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinSiege.java
1515
@@ -1,5 +1,6 @@
1516
 package net.sf.l2j.gameserver.network.clientpackets;
1517
 
1518
+import net.sf.l2j.Config;
1519
 import net.sf.l2j.gameserver.data.manager.CastleManager;
1520
 import net.sf.l2j.gameserver.data.manager.ClanHallManager;
1521
 import net.sf.l2j.gameserver.model.actor.Player;
1522
@@ -40,6 +41,18 @@
1523
 		if (clan == null)
1524
 			return;
1525
 		
1526
+		
1527
+	       if (Config.GAME_MODE_ENABLE)
1528
+	       {
1529
+	           if (player.isPVEMode())
1530
+	           {
1531
+	               player.sendMessage("Desactiva El PVE MODE");
1532
+	              return;
1533
+	          }
1534
+	      }
1535
+		
1536
+		
1537
+		
1538
 		// Check Castle entity associated to the id.
1539
 		final Castle castle = CastleManager.getInstance().getCastleById(_id);
1540
 		if (castle != null)
1541
diff --git java/net/sf/l2j/gameserver/network/clientpackets/RequestOlympiadMatchList.java java/net/sf/l2j/gameserver/network/clientpackets/RequestOlympiadMatchList.java
1542
index ca9934d..ed8061c 100644
1543
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestOlympiadMatchList.java
1544
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestOlympiadMatchList.java
1545
@@ -2,6 +2,7 @@
1546
 
1547
 import net.sf.l2j.commons.lang.StringUtil;
1548
 
1549
+import net.sf.l2j.Config;
1550
 import net.sf.l2j.gameserver.model.actor.Player;
1551
 import net.sf.l2j.gameserver.model.olympiad.Olympiad;
1552
 import net.sf.l2j.gameserver.model.olympiad.OlympiadGameManager;
1553
@@ -22,6 +23,21 @@
1554
 		if (player == null || !player.isInObserverMode())
1555
 			return;
1556
 		
1557
+		
1558
+		
1559
+	       if (Config.GAME_MODE_ENABLE)
1560
+	       {
1561
+	           if (player.isPVEMode())
1562
+	           {
1563
+	               player.sendMessage("Desactiva El PVE MODE");
1564
+	              return;
1565
+	          }
1566
+	      }
1567
+		
1568
+		
1569
+		
1570
+		
1571
+		
1572
 		int i = 0;
1573
 		
1574
 		final StringBuilder sb = new StringBuilder(1500);
1575
diff --git java/net/sf/l2j/gameserver/network/clientpackets/RequestOlympiadObserverEnd.java java/net/sf/l2j/gameserver/network/clientpackets/RequestOlympiadObserverEnd.java
1576
index 7b1d873..4c18905 100644
1577
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestOlympiadObserverEnd.java
1578
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestOlympiadObserverEnd.java
1579
@@ -1,5 +1,6 @@
1580
 package net.sf.l2j.gameserver.network.clientpackets;
1581
 
1582
+import net.sf.l2j.Config;
1583
 import net.sf.l2j.gameserver.model.actor.Player;
1584
 
1585
 public final class RequestOlympiadObserverEnd extends L2GameClientPacket
1586
@@ -16,6 +17,16 @@
1587
 		if (player == null)
1588
 			return;
1589
 		
1590
+		
1591
+	       if (Config.GAME_MODE_ENABLE)
1592
+	       {
1593
+	           if (player.isPVEMode())
1594
+	           {
1595
+	               player.sendMessage("Desactiva El PVE MODE");
1596
+	              return;
1597
+	          }
1598
+	      }
1599
+		
1600
 		if (!player.isInObserverMode())
1601
 			return;
1602
 		
1603
diff --git java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java
1604
index 1fdf282..cdcecaf 100644
1605
--- java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java
1606
+++ java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java
1607
@@ -37,15 +37,24 @@
1608
 			final Player player = entry.getKey();
1609
 			final long timeLeft = entry.getValue();
1610
 			
1611
-			// Time is running out, clear PvP flag and remove from list.
1612
-			if (currentTime > timeLeft)
1613
-				remove(player, true);
1614
-			// Time almost runned out, update to blinking PvP flag.
1615
-			else if (currentTime > (timeLeft - 5000))
1616
-				player.updatePvPFlag(2);
1617
-			// Time didn't run out, keep PvP flag.
1618
+			if (!player.isPVPMode())
1619
+			{
1620
+				// Time is running out, clear PvP flag and remove from list.
1621
+				if (currentTime > timeLeft)
1622
+					remove(player, true);
1623
+				// Time almost run out, update to blinking PvP flag.
1624
+				else if (currentTime > (timeLeft - 5000))
1625
+					player.updatePvPFlag(2);
1626
+				// Time didn't run out, keep PvP flag.
1627
+				else
1628
+					player.updatePvPFlag(1);
1629
+			}
1630
 			else
1631
+			{
1632
+				// Player is in PvP mode, set PvP flag to 1.
1633
 				player.updatePvPFlag(1);
1634
+			}
1635
+			
1636
 		}
1637
 	}
1638
 	
1639
diff --git java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java
1640
index b963bd0..e0268f7 100644
1641
--- java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java
1642
+++ java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java
1643
@@ -12,10 +12,30 @@
1644
 public class CharInfo extends L2GameServerPacket
1645
 {
1646
 	private final Player _player;
1647
+	private String _title;
1648
+	private int _titleColor;
1649
 	
1650
 	public CharInfo(Player player)
1651
 	{
1652
 		_player = player;
1653
+		if (!GameModeInfo())
1654
+		{
1655
+			if (!player.getAppearance().isVisible())
1656
+			{
1657
+				_title = "Invisible";
1658
+			}
1659
+			else
1660
+			{
1661
+				
1662
+				_title = _player.getTitle();
1663
+			}
1664
+			_titleColor = player.getAppearance().getTitleColor();
1665
+		}
1666
+		else
1667
+		{
1668
+			_title = "PVE MODE";
1669
+			_titleColor = 0x00FFFF;
1670
+		}
1671
 	}
1672
 	
1673
 	@Override
1674
@@ -116,7 +136,7 @@
1675
 		writeD(_player.getAppearance().getHairColor());
1676
 		writeD(_player.getAppearance().getFace());
1677
 		
1678
-		writeS((canSeeInvis) ? "Invisible" : _player.getTitle());
1679
+		writeS(_title);
1680
 		
1681
 		writeD(_player.getClanId());
1682
 		writeD(_player.getClanCrestId());
1683
@@ -156,7 +176,19 @@
1684
 		writeD(_player.getHeading());
1685
 		writeD(_player.getPledgeClass());
1686
 		writeD(_player.getPledgeType());
1687
-		writeD(_player.getAppearance().getTitleColor());
1688
+		writeD(_titleColor);
1689
 		writeD(CursedWeaponManager.getInstance().getCurrentStage(_player.getCursedWeaponEquippedId()));
1690
 	}
1691
+	
1692
+	public boolean GameModeInfo()
1693
+	{
1694
+		if (Config.GAME_MODE_ENABLE)
1695
+		{
1696
+			if (_player.isPVEMode())
1697
+			{
1698
+				return true;
1699
+			}
1700
+		}
1701
+		return false;
1702
+	}
1703
 }
1704
\ No newline at end of file
1705
diff --git java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java
1706
index b1679c0..14a37db 100644
1707
--- java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java
1708
+++ java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java
1709
@@ -14,6 +14,9 @@
1710
 	private final Player _player;
1711
 	private int _relation;
1712
 	
1713
+	private String _title;
1714
+	private int _titleColor;
1715
+	
1716
 	public UserInfo(Player player)
1717
 	{
1718
 		_player = player;
1719
@@ -24,6 +27,26 @@
1720
 			_relation |= 0x180;
1721
 		if (_player.getSiegeState() == 2)
1722
 			_relation |= 0x80;
1723
+		
1724
+		if (!GameModeInfo())
1725
+		{
1726
+			if (!player.getAppearance().isVisible())
1727
+			{
1728
+				_title = "Invisible";
1729
+			}
1730
+			else
1731
+			{
1732
+				
1733
+				_title = _player.getTitle();
1734
+			}
1735
+			_titleColor = player.getAppearance().getTitleColor();
1736
+		}
1737
+		else
1738
+		{
1739
+			_title = "PVE MODE";
1740
+			_titleColor = 0x00FFFF;
1741
+		}
1742
+		
1743
 	}
1744
 	
1745
 	@Override
1746
@@ -171,7 +194,7 @@
1747
 		writeD(_player.getAppearance().getFace());
1748
 		writeD((_player.isGM()) ? 1 : 0);
1749
 		
1750
-		writeS((_player.getPolymorphTemplate() != null) ? "Morphed" : _player.getTitle());
1751
+		writeS((_player.getPolymorphTemplate() != null) ? "Morphed" : _title);
1752
 		
1753
 		writeD(_player.getClanId());
1754
 		writeD(_player.getClanCrestId());
1755
@@ -211,7 +234,19 @@
1756
 		writeC((_player.isRunning()) ? 0x01 : 0x00);
1757
 		writeD(_player.getPledgeClass());
1758
 		writeD(_player.getPledgeType());
1759
-		writeD(_player.getAppearance().getTitleColor());
1760
+		writeD(_titleColor);
1761
 		writeD(CursedWeaponManager.getInstance().getCurrentStage(_player.getCursedWeaponEquippedId()));
1762
 	}
1763
+	
1764
+	public boolean GameModeInfo()
1765
+	{
1766
+		if (Config.GAME_MODE_ENABLE)
1767
+		{
1768
+			if (_player.isPVEMode())
1769
+			{
1770
+				return true;
1771
+			}
1772
+		}
1773
+		return false;
1774
+	}
1775
 }
1776
\ No newline at end of file
1777
1778
diff --git server/gameserver/data/html/mods/ChangeModeSystem/ModeSystem.htm server/gameserver/data/html/mods/ChangeModeSystem/ModeSystem.htm
1779
new file mode 100644
1780
index 0000000..6e94618
1781
--- /dev/null
1782
+++ server/gameserver/data/html/mods/ChangeModeSystem/ModeSystem.htm
1783
@@ -0,0 +1,57 @@
1784
+<html>
1785
+<head>
1786
+    <title>L2Wins - Modos De Juego</title>
1787
+</head>
1788
+<body>
1789
+
1790
+    <center><font color="00FF00">Bienvenido a L2Wins.</font></center>
1791
+    <br>
1792
+    <center><font color="00FF00">Elige tu Modo de Juego.</font></center>
1793
+<center>
1794
+<br1>
1795
+<font color="00FF00">Por Defecto Entras En Normal Mode.</font>
1796
+<br1>
1797
+<font color="00FF00">Puedes Cambiarlo Escribiendo - .pve - .pvp - .normal</font>
1798
+<br1>
1799
+<font color="00FF00">Los Modos De Juego PvP - Normal Mode.</font>
1800
+<br1>
1801
+<font color="00FF00">Tienen Un Bonus General de EXP-SP-DROP-ADENA.</font>
1802
+<br1>
1803
+<font color="00FF00">En el Modo PvE No Podran Matarte.</font>
1804
+<br1>
1805
+<font color="00FF00">Tampoco Podras Atacar A Otro Jugador.</font>
1806
+<br1>
1807
+<font color="00FF00">Solo Podras Estar En Party Con Gente.</font>
1808
+<br1>
1809
+<font color="00FF00">Que Tenga Tu Mismo Modo De Juego.</font>
1810
+
1811
+</center>
1812
+
1813
+    <br>
1814
+
1815
+    <table>
1816
+        <tr>
1817
+            <td width="160" align="center"><font color="FFFF00">PvE Mode</font></td>
1818
+            <td width="160" align="center"><font color="800080">PvP Mode</font></td>
1819
+            <td width="160" align="center"><font color="CCFFCC"><font color="FF6600">Normal Mode</font></font></td>
1820
+        </tr>
1821
+</table>
1822
+     <table>
1823
+        <tr>
1824
+            <td width="160" align="center"><font color="FFFF00">Bonus 0%</font></td>
1825
+            <td width="160" align="center"><font color="800080">Bonus 50%</font></td>
1826
+            <td width="160" align="center"><font color="CCFFCC"><font color="FF6600">Bonus 20%</font></font></td>
1827
+        </tr>
1828
+</table>
1829
+
1830
+
1831
+<br>
1832
+<table>
1833
+        <tr>
1834
+            <td width="160" align="center"><button value="Use" action="bypass -h PvEMode" width="75" height="21" back="L2UI.DefaultButton_click" fore="L2UI.DefaultButton"></td>
1835
+            <td width="160" align="center"><button value="Use" action="bypass -h PvPMode" width="75" height="21" back="L2UI.DefaultButton_click" fore="L2UI.DefaultButton"></td>
1836
+            <td width="160" align="center"><button value="Use" action="bypass -h NormalMode" width="75" height="21" back="L2UI.DefaultButton_click" fore="L2UI.DefaultButton"></td>
1837
+        </tr>
1838
+    </table>
1839
+</body>
1840
+</html>
1841