View difference between Paste ID: UQK9Buk7 and zqJb7aMm
SHOW: | | - or go back to the newest paste.
1
### Eclipse Workspace Patch 1.0
2
#P aCis_gameserver
3
Index: java/net/sf/l2j/util/DDSConverter.java
4
===================================================================
5
--- java/net/sf/l2j/util/DDSConverter.java	(revision 0)
6
+++ java/net/sf/l2j/util/DDSConverter.java	(working copy)
7
@@ -0,0 +1,348 @@
8
+package net.sf.l2j.util;
9
+
10
+
11
+import java.awt.image.BufferedImage;
12
+import java.io.File;
13
+import java.io.IOException;
14
+import java.nio.ByteBuffer;
15
+import java.nio.ByteOrder;
16
+import java.util.logging.Logger;
17
+
18
+import javax.imageio.ImageIO;
19
+
20
+public class DDSConverter
21
+{
22
+    public static final Logger _log = Logger.getLogger(DDSConverter.class.getName());
23
+
24
+    protected static class Color
25
+    {
26
+
27
+        @Override
28
+        public boolean equals(Object obj)
29
+        {
30
+            if (this == obj)
31
+            {
32
+                return true;
33
+            }
34
+            if ((obj == null) || (getClass() != obj.getClass()))
35
+            {
36
+                return false;
37
+            }
38
+            Color color = (Color) obj;
39
+            if (b != color.b)
40
+            {
41
+                return false;
42
+            }
43
+            if (g != color.g)
44
+            {
45
+                return false;
46
+            }
47
+            return r == color.r;
48
+        }
49
+
50
+        @Override
51
+        public int hashCode()
52
+        {
53
+            int i = r;
54
+            i = (29 * i) + g;
55
+            i = (29 * i) + b;
56
+            return i;
57
+        }
58
+
59
+        protected int r;
60
+        protected int g;
61
+        protected int b;
62
+
63
+        public Color()
64
+        {
65
+            r = g = b = 0;
66
+        }
67
+
68
+        public Color(int i, int j, int k)
69
+        {
70
+            r = i;
71
+            g = j;
72
+            b = k;
73
+        }
74
+    }
75
+
76
+    public static ByteBuffer convertToDDS(File file) throws IOException
77
+    {
78
+        if (file == null)
79
+        {
80
+            String s = "nullValue.FileIsNull";
81
+            _log.severe(s);
82
+            throw new IllegalArgumentException(s);
83
+        }
84
+        if (!file.exists() || !file.canRead())
85
+        {
86
+            String s1 = "DDSConverter.NoFileOrNoPermission";
87
+            _log.severe(s1);
88
+            throw new IllegalArgumentException(s1);
89
+        }
90
+        BufferedImage bufferedimage = ImageIO.read(file);
91
+        if (bufferedimage == null)
92
+        {
93
+            return null;
94
+        }
95
+        if (bufferedimage.getColorModel().hasAlpha())
96
+        {
97
+            return convertToDxt3(bufferedimage);
98
+        }
99
+        return convertToDxt1NoTransparency(bufferedimage);
100
+    }
101
+
102
+    public static ByteBuffer convertToDxt1NoTransparency(BufferedImage bufferedimage)
103
+    {
104
+        if (bufferedimage == null)
105
+        {
106
+            return null;
107
+        }
108
+        int ai[] = new int[16];
109
+        int i = 128 + ((bufferedimage.getWidth() * bufferedimage.getHeight()) / 2);
110
+        ByteBuffer bytebuffer = ByteBuffer.allocate(i);
111
+        bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
112
+        buildHeaderDxt1(bytebuffer, bufferedimage.getWidth(), bufferedimage.getHeight());
113
+        int j = bufferedimage.getWidth() / 4;
114
+        int k = bufferedimage.getHeight() / 4;
115
+        for (int l = 0; l < k; l++)
116
+        {
117
+            for (int i1 = 0; i1 < j; i1++)
118
+            {
119
+                BufferedImage bufferedimage1 = bufferedimage.getSubimage(i1 * 4, l * 4, 4, 4);
120
+                bufferedimage1.getRGB(0, 0, 4, 4, ai, 0, 4);
121
+                Color acolor[] = getColors888(ai);
122
+                for (int j1 = 0; j1 < ai.length; j1++)
123
+                {
124
+                    ai[j1] = getPixel565(acolor[j1]);
125
+                    acolor[j1] = getColor565(ai[j1]);
126
+                }
127
+
128
+                int ai1[] = determineExtremeColors(acolor);
129
+                if (ai[ai1[0]] < ai[ai1[1]])
130
+                {
131
+                    int k1 = ai1[0];
132
+                    ai1[0] = ai1[1];
133
+                    ai1[1] = k1;
134
+                }
135
+                bytebuffer.putShort((short) ai[ai1[0]]);
136
+                bytebuffer.putShort((short) ai[ai1[1]]);
137
+                long l1 = computeBitMask(acolor, ai1);
138
+                bytebuffer.putInt((int) l1);
139
+            }
140
+        }
141
+        return bytebuffer;
142
+    }
143
+
144
+    public static ByteBuffer convertToDxt3(BufferedImage bufferedimage)
145
+    {
146
+        if (bufferedimage == null)
147
+        {
148
+            return null;
149
+        }
150
+        if (!bufferedimage.getColorModel().hasAlpha())
151
+        {
152
+            return convertToDxt1NoTransparency(bufferedimage);
153
+        }
154
+        int ai[] = new int[16];
155
+        int i = 128 + (bufferedimage.getWidth() * bufferedimage.getHeight());
156
+        ByteBuffer bytebuffer = ByteBuffer.allocate(i);
157
+        bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
158
+        buildHeaderDxt3(bytebuffer, bufferedimage.getWidth(), bufferedimage.getHeight());
159
+        int j = bufferedimage.getWidth() / 4;
160
+        int k = bufferedimage.getHeight() / 4;
161
+        for (int l = 0; l < k; l++)
162
+        {
163
+            for (int i1 = 0; i1 < j; i1++)
164
+            {
165
+                BufferedImage bufferedimage1 = bufferedimage.getSubimage(i1 * 4, l * 4, 4, 4);
166
+                bufferedimage1.getRGB(0, 0, 4, 4, ai, 0, 4);
167
+                Color acolor[] = getColors888(ai);
168
+                for (int j1 = 0; j1 < ai.length; j1 += 2)
169
+                {
170
+                    bytebuffer.put((byte) ((ai[j1] >>> 28) | (ai[j1 + 1] >>> 24)));
171
+                }
172
+
173
+                for (int k1 = 0; k1 < ai.length; k1++)
174
+                {
175
+                    ai[k1] = getPixel565(acolor[k1]);
176
+                    acolor[k1] = getColor565(ai[k1]);
177
+                }
178
+
179
+                int ai1[] = determineExtremeColors(acolor);
180
+                if (ai[ai1[0]] < ai[ai1[1]])
181
+                {
182
+                    int l1 = ai1[0];
183
+                    ai1[0] = ai1[1];
184
+                    ai1[1] = l1;
185
+                }
186
+                bytebuffer.putShort((short) ai[ai1[0]]);
187
+                bytebuffer.putShort((short) ai[ai1[1]]);
188
+                long l2 = computeBitMask(acolor, ai1);
189
+                bytebuffer.putInt((int) l2);
190
+            }
191
+        }
192
+        return bytebuffer;
193
+    }
194
+
195
+    protected static void buildHeaderDxt1(ByteBuffer bytebuffer, int i, int j)
196
+    {
197
+        bytebuffer.rewind();
198
+        bytebuffer.put((byte) 68);
199
+        bytebuffer.put((byte) 68);
200
+        bytebuffer.put((byte) 83);
201
+        bytebuffer.put((byte) 32);
202
+        bytebuffer.putInt(124);
203
+        int k = 0xa1007;
204
+        bytebuffer.putInt(k);
205
+        bytebuffer.putInt(j);
206
+        bytebuffer.putInt(i);
207
+        bytebuffer.putInt((i * j) / 2);
208
+        bytebuffer.putInt(0);
209
+        bytebuffer.putInt(0);
210
+        bytebuffer.position(bytebuffer.position() + 44);
211
+        bytebuffer.putInt(32);
212
+        bytebuffer.putInt(4);
213
+        bytebuffer.put((byte) 68);
214
+        bytebuffer.put((byte) 88);
215
+        bytebuffer.put((byte) 84);
216
+        bytebuffer.put((byte) 49);
217
+        bytebuffer.putInt(0);
218
+        bytebuffer.putInt(0);
219
+        bytebuffer.putInt(0);
220
+        bytebuffer.putInt(0);
221
+        bytebuffer.putInt(0);
222
+        bytebuffer.putInt(4096);
223
+        bytebuffer.putInt(0);
224
+        bytebuffer.position(bytebuffer.position() + 12);
225
+    }
226
+
227
+    protected static void buildHeaderDxt3(ByteBuffer bytebuffer, int i, int j)
228
+    {
229
+        bytebuffer.rewind();
230
+        bytebuffer.put((byte) 68);
231
+        bytebuffer.put((byte) 68);
232
+        bytebuffer.put((byte) 83);
233
+        bytebuffer.put((byte) 32);
234
+        bytebuffer.putInt(124);
235
+        int k = 0xa1007;
236
+        bytebuffer.putInt(k);
237
+        bytebuffer.putInt(j);
238
+        bytebuffer.putInt(i);
239
+        bytebuffer.putInt(i * j);
240
+        bytebuffer.putInt(0);
241
+        bytebuffer.putInt(0);
242
+        bytebuffer.position(bytebuffer.position() + 44);
243
+        bytebuffer.putInt(32);
244
+        bytebuffer.putInt(4);
245
+        bytebuffer.put((byte) 68);
246
+        bytebuffer.put((byte) 88);
247
+        bytebuffer.put((byte) 84);
248
+        bytebuffer.put((byte) 51);
249
+        bytebuffer.putInt(0);
250
+        bytebuffer.putInt(0);
251
+        bytebuffer.putInt(0);
252
+        bytebuffer.putInt(0);
253
+        bytebuffer.putInt(0);
254
+        bytebuffer.putInt(4096);
255
+        bytebuffer.putInt(0);
256
+        bytebuffer.position(bytebuffer.position() + 12);
257
+    }
258
+
259
+    protected static int[] determineExtremeColors(Color acolor[])
260
+    {
261
+        int i = 0x80000000;
262
+        int ai[] = new int[2];
263
+        for (int j = 0; j < (acolor.length - 1); j++)
264
+        {
265
+            for (int k = j + 1; k < acolor.length; k++)
266
+            {
267
+                int l = distance(acolor[j], acolor[k]);
268
+                if (l > i)
269
+                {
270
+                    i = l;
271
+                    ai[0] = j;
272
+                    ai[1] = k;
273
+                }
274
+            }
275
+
276
+        }
277
+        return ai;
278
+    }
279
+
280
+    protected static long computeBitMask(Color acolor[], int ai[])
281
+    {
282
+        Color acolor1[] =
283
+        {
284
+            null,
285
+            null,
286
+            new Color(),
287
+            new Color()
288
+        };
289
+        acolor1[0] = acolor[ai[0]];
290
+        acolor1[1] = acolor[ai[1]];
291
+        if (acolor1[0].equals(acolor1[1]))
292
+        {
293
+            return 0L;
294
+        }
295
+        acolor1[2].r = ((2 * acolor1[0].r) + acolor1[1].r + 1) / 3;
296
+        acolor1[2].g = ((2 * acolor1[0].g) + acolor1[1].g + 1) / 3;
297
+        acolor1[2].b = ((2 * acolor1[0].b) + acolor1[1].b + 1) / 3;
298
+        acolor1[3].r = (acolor1[0].r + (2 * acolor1[1].r) + 1) / 3;
299
+        acolor1[3].g = (acolor1[0].g + (2 * acolor1[1].g) + 1) / 3;
300
+        acolor1[3].b = (acolor1[0].b + (2 * acolor1[1].b) + 1) / 3;
301
+        long l = 0L;
302
+        for (int i = 0; i < acolor.length; i++)
303
+        {
304
+            int j = 0x7fffffff;
305
+            int k = 0;
306
+            for (int i1 = 0; i1 < acolor1.length; i1++)
307
+            {
308
+                int j1 = distance(acolor[i], acolor1[i1]);
309
+                if (j1 < j)
310
+                {
311
+                    j = j1;
312
+                    k = i1;
313
+                }
314
+            }
315
+
316
+            l |= k << (i * 2);
317
+        }
318
+        return l;
319
+    }
320
+
321
+    protected static int getPixel565(Color color)
322
+    {
323
+        int i = color.r >> 3;
324
+        int j = color.g >> 2;
325
+        int k = color.b >> 3;
326
+        return (i << 11) | (j << 5) | k;
327
+    }
328
+
329
+    protected static Color getColor565(int i)
330
+    {
331
+        Color color = new Color();
332
+        color.r = (int) (i & 63488L) >> 11;
333
+        color.g = (int) (i & 2016L) >> 5;
334
+        color.b = (int) (i & 31L);
335
+        return color;
336
+    }
337
+
338
+    protected static Color[] getColors888(int ai[])
339
+    {
340
+        Color acolor[] = new Color[ai.length];
341
+        for (int i = 0; i < ai.length; i++)
342
+        {
343
+            acolor[i] = new Color();
344
+            acolor[i].r = (int) (ai[i] & 0xff0000L) >> 16;
345
+            acolor[i].g = (int) (ai[i] & 65280L) >> 8;
346
+            acolor[i].b = (int) (ai[i] & 255L);
347
+        }
348
+        return acolor;
349
+    }
350
+
351
+    protected static int distance(Color color, Color color1)
352
+    {
353
+        return ((color1.r - color.r) * (color1.r - color.r)) + ((color1.g - color.g) * (color1.g - color.g)) + ((color1.b - color.b) * (color1.b - color.b));
354
+    }
355
+}
356
\ No newline at end of file
357
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2BufferArchiveInstance.java
358
===================================================================
359
--- java/net/sf/l2j/gameserver/model/actor/instance/L2BufferArchiveInstance.java	(revision 0)
360
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2BufferArchiveInstance.java	(working copy)
361
@@ -0,0 +1,339 @@
362
+ /*
363
+ * This program is free software; you can redistribute it and/or modify
364
+ * it under the terms of the GNU General Public License as published by
365
+ * the Free Software Foundation; either version 2, or (at your option)
366
+ * any later version.
367
+ *
368
+ * This program is distributed in the hope that it will be useful,
369
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
370
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
371
+ * GNU General Public License for more details.
372
+ *
373
+ * You should have received a copy of the GNU General Public License
374
+ * along with this program; if not, write to the Free Software
375
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
376
+ * 02111-1307, USA.
377
+ *
378
+ * http://www.gnu.org/copyleft/gpl.html
379
+ */
380
+package net.sf.l2j.gameserver.model.actor.instance;
381
+
382
+import java.io.File;
383
+import java.util.StringTokenizer;
384
+
385
+import net.sf.l2j.Config;
386
+import net.sf.l2j.gameserver.ai.CtrlIntention;
387
+import net.sf.l2j.gameserver.datatables.SkillTable;
388
+import net.sf.l2j.gameserver.model.L2Effect;
389
+import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
390
+import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
391
+import net.sf.l2j.gameserver.network.serverpackets.MyTargetSelected;
392
+import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
393
+import net.sf.l2j.gameserver.network.serverpackets.PledgeCrest;
394
+import net.sf.l2j.gameserver.network.serverpackets.ValidateLocation;
395
+import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
396
+import net.sf.l2j.gameserver.templates.skills.L2SkillType;
397
+import net.sf.l2j.util.DDSConverter;
398
+import net.sf.l2j.util.StringUtil;
399
+
400
+/**
401
+ * @author Elfocrash
402
+ */
403
+public final class L2BufferArchiveInstance extends L2NpcInstance
404
+{
405
+    public L2BufferArchiveInstance(int objectId, NpcTemplate template)
406
+    {
407
+        super(objectId, template);
408
+    }
409
+
410
+    int state = 0;
411
+    @Override
412
+    public void onAction(L2PcInstance client)
413
+    {
414
+        if (this != client.getTarget())
415
+        {
416
+            client.setTarget(this);
417
+            client.sendPacket(new MyTargetSelected(getObjectId(), 0));
418
+            client.sendPacket(new ValidateLocation(this));
419
+        }
420
+        else
421
+        {
422
+            client.sendPacket(new MyTargetSelected(getObjectId(), 0));
423
+            client.getAI().setIntention(CtrlIntention.INTERACT, this);
424
+
425
+            if (!isInsideRadius(client, 150, false, false))
426
+                client.sendPacket(ActionFailed.STATIC_PACKET);
427
+            else
428
+                showMessageWindow(client);
429
+        }
430
+    }
431
+
432
+    @Override
433
+    public void onBypassFeedback(L2PcInstance client, String command)
434
+    {
435
+        if (!client.isDead())
436
+        {
437
+            StringTokenizer st = new StringTokenizer(command, " ");
438
+            String actualCommand = st.nextToken();
439
+
440
+            int buffid = 0;
441
+            int bufflevel = 1;
442
+            if (st.countTokens() == 2)
443
+            {
444
+                buffid = Integer.valueOf(st.nextToken());
445
+                bufflevel = Integer.valueOf(st.nextToken());
446
+            }
447
+            else if (st.countTokens() == 1)
448
+                buffid = Integer.valueOf(st.nextToken());
449
+
450
+            if (actualCommand.equalsIgnoreCase("getbuff"))
451
+            {
452
+                if (buffid != 0)
453
+                {
454
+                    MagicSkillUse mgc = new MagicSkillUse(this, client, buffid, bufflevel, 500, 0);
455
+                    SkillTable.getInstance().getInfo(buffid, bufflevel).getEffects(this, client);
456
+                    showMessageWindow(client);
457
+                    client.broadcastPacket(mgc);
458
+                }
459
+            }
460
+            else if (actualCommand.equalsIgnoreCase("restore"))
461
+            {
462
+                MagicSkillUse mgc = new MagicSkillUse(this, client, 1258, 4, 500, 0);
463
+                client.setCurrentHpMp(client.getMaxHp(), client.getMaxMp());
464
+                client.setCurrentCp(client.getMaxCp());
465
+                showMessageWindow(client);
466
+                client.broadcastPacket(mgc);
467
+            }
468
+            else if (actualCommand.equalsIgnoreCase("cancel"))
469
+            {
470
+                MagicSkillUse mgc = new MagicSkillUse(this, client, 1056, 12, 500, 0);
471
+                client.stopAllEffects();
472
+                showMessageWindow(client);
473
+                client.broadcastPacket(mgc);
474
+            }
475
+            else if (actualCommand.equalsIgnoreCase("setstate0"))
476
+            {
477
+               state = 0;
478
+               showMessageWindow(client);
479
+            }
480
+            else if (actualCommand.equalsIgnoreCase("setstate1"))
481
+            {
482
+               state = 1;
483
+               showMessageWindow(client);
484
+            }
485
+            else if (actualCommand.equalsIgnoreCase("setstate2"))
486
+            {
487
+               state = 2;
488
+               showMessageWindow(client);
489
+            }
490
+            else if (actualCommand.equalsIgnoreCase("setstate3"))
491
+            {
492
+               state = 3;
493
+               showMessageWindow(client);
494
+            }
495
+            else
496
+                super.onBypassFeedback(client, command);
497
+        }
498
+    }
499
+
500
+    private static int getCurrentBuffs(L2PcInstance activechar)
501
+    {
502
+        int i = 0;
503
+
504
+        for (L2Effect e : activechar.getAllEffects())
505
+        {
506
+            if (e.getSkill().getSkillType() == L2SkillType.BUFF)
507
+            i++;
508
+    }
509
+
510
+    return i;
511
+    }
512
+
513
+    private void showMessageWindow(L2PcInstance client)
514
+    {
515
+        NpcHtmlMessage html = new NpcHtmlMessage(1);
516
+        final StringBuilder sb = StringUtil.startAppend(3500, "<html><body>");
517
+        int imgId = 0;
518
+        
519
+        switch (getCurrentBuffs(client)) {
520
+        case 0:  imgId = 20010;
521
+                generateLogo(client, 20010);
522
+                 break;
523
+        case 1:  imgId = 20011;
524
+        generateLogo(client, 20011);
525
+                 break;
526
+        case 2:  imgId = 20012;
527
+        generateLogo(client, 20012);
528
+                 break;
529
+        case 3:  imgId = 20013;
530
+        generateLogo(client, 20013);
531
+                 break;
532
+        case 4:  imgId = 20014;
533
+        generateLogo(client, 20014);
534
+                 break;
535
+        case 5:  imgId = 20015;
536
+        generateLogo(client, 20015);
537
+                 break;
538
+        case 6:  imgId = 20016;
539
+        generateLogo(client, 20016);
540
+                 break;
541
+        case 7:  imgId = 20017;
542
+        generateLogo(client, 20017);
543
+                 break;
544
+        case 8:  imgId = 20018;
545
+        generateLogo(client, 20018);
546
+                 break;
547
+        case 9:  imgId = 20019;
548
+        generateLogo(client, 20019);
549
+                 break;
550
+        case 10: imgId = 20020;
551
+        generateLogo(client, 20020);
552
+                 break;
553
+        case 11: imgId = 20021;
554
+        generateLogo(client, 20021);
555
+                 break;
556
+        case 12: imgId = 20022;
557
+        generateLogo(client, 20022);
558
+                 break;
559
+        case 13:  imgId = 20023;
560
+        generateLogo(client, 20023);
561
+                break;
562
+        case 14:  imgId = 20024;
563
+        generateLogo(client, 20024);
564
+                break;
565
+        case 15:  imgId = 20025;
566
+        generateLogo(client, 20025);
567
+                break;
568
+        case 16:  imgId = 20026;
569
+        generateLogo(client, 20026);
570
+                break;
571
+        case 17:  imgId = 20027;
572
+        generateLogo(client, 20027);
573
+                break;
574
+        case 18:  imgId = 20028;
575
+        generateLogo(client, 20028);
576
+                break;
577
+        case 19:  imgId = 20029;
578
+        generateLogo(client, 20029);
579
+                break;
580
+        case 20:  imgId = 20030;
581
+        generateLogo(client, 20030);
582
+                break;
583
+        case 21:  imgId = 20031;
584
+        generateLogo(client, 20031);
585
+                break;
586
+        case 22: imgId = 20032;
587
+        generateLogo(client, 20032);
588
+                break;
589
+        case 23: imgId = 20033;
590
+        generateLogo(client, 20033);
591
+                break;
592
+        case 24: imgId = 20034;
593
+        generateLogo(client, 20034);
594
+                break;
595
+        default: imgId = 20034;
596
+        generateLogo(client, 20034);
597
+                 break;
598
+    }
599
+
600
+
601
+        sb.append("<center><font color=\"FF9900\">AIO Buffer Laena</font></center>");
602
+
603
+        sb.append("<table width=\"256\" cellpadding=\"5\" bgcolor=\"000000\"><tr><td><img src=\"Crest.crest_" + Config.SERVER_ID + "_" + imgId + "\" width=256 height=16></td></tr></table>");
604
+
605
+        if(state ==0)
606
+       {
607
+        sb.append("<br><center><font color=\"FF9900\">Buffs</font></center><table width=\"256\" cellpadding=\"5\">");
608
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1204 130\" width=32 height=32 back=\"icon.skill1204\" fore=\"icon.skill1204\"></td>");
609
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1040 130\" width=32 height=32 back=\"icon.skill1040\" fore=\"icon.skill1040\"></td>");
610
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1068 130\" width=32 height=32 back=\"icon.skill1068\" fore=\"icon.skill1068\"></td>");
611
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1036 130\" width=32 height=32 back=\"icon.skill1036\" fore=\"icon.skill1036\"></td><");
612
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1035 130\" width=32 height=32 back=\"icon.skill1035\" fore=\"icon.skill1035\"></td></tr>");
613
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1045 130\" width=32 height=32 back=\"icon.skill1045\" fore=\"icon.skill1045\"></td>");
614
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1048 130\" width=32 height=32 back=\"icon.skill1048\" fore=\"icon.skill1048\"></td>");
615
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1062 130\" width=32 height=32 back=\"icon.skill1062\" fore=\"icon.skill1062\"></td>");
616
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1086 130\" width=32 height=32 back=\"icon.skill1086\" fore=\"icon.skill1086\"></td>");
617
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1240 130\" width=32 height=32 back=\"icon.skill1240\" fore=\"icon.skill1240\"></td></tr>");
618
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1242 130\" width=32 height=32 back=\"icon.skill1242\" fore=\"icon.skill1242\"></td>");
619
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1077 130\" width=32 height=32 back=\"icon.skill1077\" fore=\"icon.skill1077\"></td>");
620
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1268 130\" width=32 height=32 back=\"icon.skill1268\" fore=\"icon.skill1268\"></td>");
621
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1087 130\" width=32 height=32 back=\"icon.skill1087\" fore=\"icon.skill1087\"></td>");
622
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1085 130\" width=32 height=32 back=\"icon.skill1085\" fore=\"icon.skill1085\"></td></tr>");
623
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1059 130\" width=32 height=32 back=\"icon.skill1059\" fore=\"icon.skill1059\"></td>");
624
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1303 130\" width=32 height=32 back=\"icon.skill1303\" fore=\"icon.skill1303\"></td>");
625
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1078 130\" width=32 height=32 back=\"icon.skill1078\" fore=\"icon.skill1078\"></td>");
626
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1243 130\" width=32 height=32 back=\"icon.skill1243\" fore=\"icon.skill1243\"></td>");
627
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1259 130\" width=32 height=32 back=\"icon.skill1259\" fore=\"icon.skill1259\"></td></tr>"
628
+                + "<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 1304 130\" width=32 height=32 back=\"icon.skill1304\" fore=\"icon.skill1304\"></td></tr></table>");
629
+       }
630
+       else
631
+           sb.append("<br><center><a action=\"bypass npc_%objectId%_setstate0\">Buffs [+]</a></center>");
632
+
633
+
634
+       if(state == 1)
635
+       {
636
+        sb.append("<center><font color=\"FF9900\">Dances</font></center><table width=\"200\" cellpadding=\"5\">");
637
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 271 130\" width=32 height=32 back=\"icon.skill0271\" fore=\"icon.skill0271\"></td>");
638
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 274 130\" width=32 height=32 back=\"icon.skill0274\" fore=\"icon.skill0274\"></td>");
639
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 275 130\" width=32 height=32 back=\"icon.skill0275\" fore=\"icon.skill0275\"></td>");
640
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 272 130\" width=32 height=32 back=\"icon.skill0272\" fore=\"icon.skill0272\"></td></tr>");
641
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 310 130\" width=32 height=32 back=\"icon.skill0310\" fore=\"icon.skill0310\"></td>");
642
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 273 130\" width=32 height=32 back=\"icon.skill0273\" fore=\"icon.skill0273\"></td>");
643
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 276 130\" width=32 height=32 back=\"icon.skill0276\" fore=\"icon.skill0276\"></td>");
644
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 277 130\" width=32 height=32 back=\"icon.skill0277\" fore=\"icon.skill0277\"></td></tr></table>");
645
+       }
646
+       else
647
+           sb.append("<br><center><a action=\"bypass npc_%objectId%_setstate1\">Dances [+]</a></center>");
648
+
649
+       if(state == 2)
650
+       {
651
+        sb.append("<center><font color=\"FF9900\">Songs</font></center><table width=\"200\" cellpadding=\"5\">");
652
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 264 130\" width=32 height=32 back=\"icon.skill0264\" fore=\"icon.skill0264\"></td>");
653
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 304 130\" width=32 height=32 back=\"icon.skill0304\" fore=\"icon.skill0304\"></td>");
654
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 268 130\" width=32 height=32 back=\"icon.skill0268\" fore=\"icon.skill0268\"></td>");
655
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 267 130\" width=32 height=32 back=\"icon.skill0267\" fore=\"icon.skill0267\"></td></tr>");
656
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_getbuff 266 130\" width=32 height=32 back=\"icon.skill0266\" fore=\"icon.skill0266\"></td>");
657
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 269 130\" width=32 height=32 back=\"icon.skill0269\" fore=\"icon.skill0269\"></td>");
658
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 265 130\" width=32 height=32 back=\"icon.skill0265\" fore=\"icon.skill0265\"></td>");
659
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_getbuff 270 130\" width=32 height=32 back=\"icon.skill0270\" fore=\"icon.skill0270\"></td></tr></table>");
660
+       }
661
+       else
662
+           sb.append("<br><center><a action=\"bypass npc_%objectId%_setstate2\">Song [+]</a></center>");
663
+
664
+       if(state == 3)
665
+       {
666
+        sb.append("<center><font color=\"FF9900\">Restore/Cancel</font></center><table width=\"100\" cellpadding=\"5\">");
667
+        sb.append("<tr><td><button action=\"bypass npc_" + getObjectId() + "_restore\" width=32 height=32 back=\"icon.skill0058\" fore=\"icon.skill0058\"></td>");
668
+        sb.append("<td><button action=\"bypass npc_" + getObjectId() + "_cancel\" width=32 height=32 back=\"icon.skill1056\" fore=\"icon.skill1056\"></td></tr>");
669
+       }
670
+       else
671
+           sb.append("<br><center><a action=\"bypass npc_%objectId%_setstate3\">Restore/Cancel [+]</a></center>");
672
+
673
+       // sb.append("</table>");
674
+
675
+
676
+        sb.append("</body></html>");
677
+
678
+        html.setHtml(sb.toString());
679
+        html.replace("%objectId%", String.valueOf(getObjectId()));
680
+        html.replace("%charname%", client.getName());
681
+        client.sendPacket(html);
682
+    }
683
+
684
+    public static void generateLogo(L2PcInstance activeChar, int imgId)
685
+    {
686
+            try
687
+            {
688
+                
689
+                	 File captcha = new File("data/images/"+imgId+".png");
690
+                     PledgeCrest packet = new PledgeCrest(imgId, DDSConverter.convertToDDS(captcha).array());
691
+                     activeChar.sendPacket(packet);
692
+        
693
+            }
694
+            catch (Exception e)
695
+            {
696
+            }
697
+
698
+    }
699
+  
700
+}
701
\ No newline at end of file
702
Index: java/net/sf/l2j/gameserver/network/serverpackets/PledgeCrest.java
703
===================================================================
704
--- java/net/sf/l2j/gameserver/network/serverpackets/PledgeCrest.java	(revision 65)
705
+++ java/net/sf/l2j/gameserver/network/serverpackets/PledgeCrest.java	(working copy)
706
@@ -3,42 +3,36 @@
707
  * the terms of the GNU General Public License as published by the Free Software
708
  * Foundation, either version 3 of the License, or (at your option) any later
709
  * version.
710
- * 
711
+ *
712
  * This program is distributed in the hope that it will be useful, but WITHOUT
713
  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
714
  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
715
  * details.
716
- * 
717
+ *
718
  * You should have received a copy of the GNU General Public License along with
719
  * this program. If not, see <http://www.gnu.org/licenses/>.
720
  */
721
 package net.sf.l2j.gameserver.network.serverpackets;
722
 
723
-import net.sf.l2j.gameserver.cache.CrestCache;
724
-import net.sf.l2j.gameserver.cache.CrestCache.CrestType;
725
-
726
 public class PledgeCrest extends L2GameServerPacket
727
 {
728
-	private final int _crestId;
729
-	private final byte[] _data;
730
-	
731
-	public PledgeCrest(int crestId)
732
-	{
733
-		_crestId = crestId;
734
-		_data = CrestCache.getCrest(CrestType.PLEDGE, _crestId);
735
-	}
736
-	
737
-	@Override
738
-	protected final void writeImpl()
739
-	{
740
-		writeC(0x6c);
741
-		writeD(_crestId);
742
-		if (_data != null)
743
-		{
744
-			writeD(_data.length);
745
-			writeB(_data);
746
-		}
747
-		else
748
-			writeD(0);
749
-	}
750
+    private final int _crestId;
751
+    private final byte[] _data;
752
+    private final int _crestSize;
753
+
754
+     public PledgeCrest(int crestId, byte[] data)
755
+    {
756
+        _crestId = crestId;
757
+        _data = data;
758
+        _crestSize = _data.length;
759
+    }
760
+
761
+    @Override
762
+    protected final void writeImpl()
763
+    {
764
+        writeC(0x6c);
765
+        writeD(_crestId);
766
+        writeD(_crestSize);
767
+        writeB(_data);
768
+    }
769
 }
770
\ No newline at end of file
771
Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestPledgeCrest.java
772
===================================================================
773
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestPledgeCrest.java	(revision 65)
774
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestPledgeCrest.java	(working copy)
775
@@ -3,38 +3,66 @@
776
  * the terms of the GNU General Public License as published by the Free Software
777
  * Foundation, either version 3 of the License, or (at your option) any later
778
  * version.
779
- * 
780
+ *
781
  * This program is distributed in the hope that it will be useful, but WITHOUT
782
  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
783
  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
784
  * details.
785
- * 
786
+ *
787
  * You should have received a copy of the GNU General Public License along with
788
  * this program. If not, see <http://www.gnu.org/licenses/>.
789
  */
790
 package net.sf.l2j.gameserver.network.clientpackets;
791
 
792
+import java.util.logging.Logger;
793
+
794
+import net.sf.l2j.Config;
795
+import net.sf.l2j.gameserver.cache.CrestCache;
796
+import net.sf.l2j.gameserver.cache.CrestCache.CrestType;
797
 import net.sf.l2j.gameserver.network.serverpackets.PledgeCrest;
798
 
799
 public final class RequestPledgeCrest extends L2GameClientPacket
800
 {
801
-	private int _crestId;
802
-	
803
-	@Override
804
-	protected void readImpl()
805
-	{
806
-		_crestId = readD();
807
-	}
808
-	
809
-	@Override
810
-	protected void runImpl()
811
-	{
812
-		sendPacket(new PledgeCrest(_crestId));
813
-	}
814
-	
815
-	@Override
816
-	protected boolean triggersOnActionRequest()
817
-	{
818
-		return false;
819
-	}
820
+    private static Logger _log = Logger.getLogger(RequestPledgeCrest.class.getName());
821
+    private int _crestId;
822
+
823
+    @Override
824
+    protected void readImpl()
825
+    {
826
+        _crestId = readD();
827
+    }
828
+
829
+    @Override
830
+    protected void runImpl()
831
+    {
832
+        if (_crestId == 0)
833
+            {
834
+                    return;
835
+            }
836
+            if (Config.DEBUG)
837
+            {
838
+                    _log.fine("crestid " + _crestId + " requested");
839
+            }
840
+
841
+            byte[] data = CrestCache.getCrest(CrestType.PLEDGE, _crestId);
842
+
843
+            if (data != null)
844
+            {
845
+                    PledgeCrest pc = new PledgeCrest(_crestId, data);
846
+                    sendPacket(pc);
847
+            }
848
+            else
849
+            {
850
+                    if (Config.DEBUG)
851
+                    {
852
+                            _log.fine("crest is missing:" + _crestId);
853
+                    }
854
+            }
855
+    }
856
+
857
+    @Override
858
+    protected boolean triggersOnActionRequest()
859
+    {
860
+        return false;
861
+    }
862
 }
863
\ No newline at end of file