HomeHome  ­FAQFAQ  ­SearchSearch  ­MemberlistMemberlist  ­UsergroupsUsergroups  ­RegisterRegister  ­Log inLog in  
Post new topic   Reply to topicShare | 
 

 [Release] Maple TV

View previous topic View next topic Go down 
AuthorMessage
Flav



Posts: 24
Join date: 2008-08-16

PostSubject: [Release] Maple TV   Fri Jan 30, 2009 7:32 pm

better version is following

Quote:
[SIZE="7"]Do not release this anywhere else, credits to MrMysterious and Cheetah[/SIZE]
[SIZE="5"]We did not tell you what to add for sendpacketopcode.java, to prevent leechers please do not tell them what to add.[/SIZE]
In UseCashItemHandler find if (itemType == 507) { and replace it with this.

Code:

if (itemType == 507) {
                        switch (itemId / 1000 % 10) {
                            case 1: // Megaphone
                                if (player.getLevel() >= 10) {
                                    player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(2, player.getName() + " : " + slea.readMapleAsciiString()));
                                } else { // Client does it but ehh..
                                    player.dropMessage("You may not use this until you're level 10");
                                }
                                break;
                            case 2: // Super megaphone
                                c.getChannelServer().getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(3, c.getChannel(), player.getName() + " : " + slea.readMapleAsciiString(), (slea.readByte() != 0)).getBytes());
                                break;
                            case 3: // Heart megaphone
                                log.info("Unhandled Megaphone Packet : " + slea.toString());
                                log.info("Megaphone ID: " + itemId);
                                break;
                            case 4: // Skull megaphone
                                log.info("Unhandled Megaphone Packet : " + slea.toString());
                                log.info("Megaphone ID: " + itemId);
                                break;
                            case 5: // Maple TV
                                int tvType = itemId % 10;
                                boolean megassenger = false;
                                boolean ear = false;
                                MapleCharacter victim = null;

                                if (tvType != 1) { // 1 is the odd one out since it doesnt allow 2 players.
                                    if (tvType >= 3) {
                                        megassenger = true;
                                        if (tvType == 3) {
                                            slea.readByte();
                                        }
                                        ear = 1 == slea.readByte();
                                    } else if (tvType != 2) {
                                        slea.readByte();
                                    }
                                    if (tvType != 4) {
                                        victim = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString());
                                    }
                                }
                                List<String> messages = new LinkedList<String>();
                                StringBuilder builder = new StringBuilder();
                                for (int i = 0; i < 5; i++) {
                                    String message = slea.readMapleAsciiString();
                                    if (megassenger) {
                                        builder.append(" ");
                                        builder.append(message); // builder.append(" "+message);
                                    }
                                    messages.add(message);
                                }
                                slea.readInt(); // some random shit
                                if (megassenger) {
                                    c.getChannelServer().getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(3, c.getChannel(), player.getName() + " : " + builder.toString(), ear).getBytes());
                                }
                                if (!MapleTVEffect.isActive()) {
                                    new MapleTVEffect(player, victim, messages, tvType);
                                    MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, itemId, 1, true, false);
                                } else {
                                    player.dropMessage("MapleTV is already in use :D");
                                }
                                break;
                        }
                        MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, itemId, 1, true, false);
                  }


In MaplePacketCreator
Code:


  public static MaplePacket enableTV() {
        // [0F 01] [00 00 00 00] [00] <-- 0x112 in v63,
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
        mplew.writeShort(SendPacketOpcode.ENABLE_TV.getValue()); // enableTV = 0x10F
        mplew.writeInt(0);
        mplew.write(0);
        return mplew.getPacket();
    }

    public static MaplePacket removeTV() {
        // 11 01 <-- 0x10E in v62
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
        mplew.writeShort(SendPacketOpcode.REMOVE_TV.getValue()); // removeTV = 0x111 <-- v63
        return mplew.getPacket();
    }

    public static MaplePacket sendTV(MapleCharacter chr, List<String> messages, int type, MapleCharacter partner) {
        // [10 01] [01] [00 00 03 B1 4F 00 00 00 67 75 00 00 01 75 4B 0F 00 0C E3 FA 10 00 FF FF
        // 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00] [0B 00 64 75 73 74 72 65 6D 6F 76
        // 65 72] [00 00] [07 00] [70 61 63 6B 65 74 73] 00 00 00 00 00 00 00 00 0F 00 00 00
       
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
        mplew.writeShort(SendPacketOpcode.SEND_TV.getValue()); // SEND_TV = 0x11D
        mplew.write(partner != null ? 2 : 0);
        mplew.write(type); // type  Heart = 2  Star = 1  Normal = 0
        addCharLook(mplew, chr, false);
        mplew.writeMapleAsciiString(chr.getName());
        if (partner != null) {
            mplew.writeMapleAsciiString(partner.getName());
        } else {
            mplew.writeShort(0); // could be partner
        }
        for (int i = 0; i < messages.size(); i++) { // for (String message : messages) {
            if (i == 4 && messages.get(4).length() > 15) {
                mplew.writeMapleAsciiString(messages.get(4).substring(0, 15)); // hmm ?
            } else {
                mplew.writeMapleAsciiString(messages.get(i));
            }
        }
        mplew.writeInt(1337); // time limit shit lol 'Your thing still start in blah blah seconds'
        if (partner != null) {
            addCharLook(mplew, partner, false);
        }
        return mplew.getPacket();
    }


In MapleMap find
Code:

if (getTimeLimit() > 0 && getForcedReturnMap() != null) {
            chr.getClient().getSession().write(MaplePacketCreator.getClock(getTimeLimit()));
            chr.startMapTimeLimitTask(this, this.getForcedReturnMap());
        }

and put this under
Code:


if (MapleTVEffect.isActive()) {
            if (hasMapleTV()) {
                chr.getClient().getSession().write(MapleTVEffect.startTV());
            }
        }


Place this somewhere at the bottom
Code:

    public boolean hasMapleTV() {
        int tvIds[] = {9250042, 9250043, 9250045, 9250044, 9270001, 9270002, 9250023, 9250024, 9270003, 9270004, 9250026, 9270006, 9270007, 9250046, 9270000, 9201066};
        for (int id : tvIds) {
            if (this.containsNPC(id)) {
                return true;
            }
        }
        return false;
    }







Make a new class in server/maps
Code:

package net.sf.odinms.server.maps;

import java.rmi.RemoteException;
import java.util.LinkedList;
import java.util.List;
import net.sf.odinms.client.MapleCharacter;
import net.sf.odinms.net.MaplePacket;
import net.sf.odinms.net.world.remote.WorldChannelInterface;
import net.sf.odinms.server.TimerManager;
import net.sf.odinms.tools.MaplePacketCreator;
//@This file is property of Cheetah and XoticStory. ;D
//*

public class MapleTVEffect {

    private static List<String> message = new LinkedList<String>();
    private static MapleCharacter user;
    private static boolean active;
    private static int type;
    private static MapleCharacter partner = null;

    public MapleTVEffect(MapleCharacter user_, MapleCharacter partner_, List<String> msg, int type_) {
        message = msg;
        user = user_;
        type = type_;
        partner = partner_;
        broadCastTV(true);
    }

    public static boolean isActive() {
        return active;
    }

    private static void setActive(boolean set) {
        active = set;
    }

    private static MaplePacket removeTV() {
        return MaplePacketCreator.removeTV();
    }

    public static MaplePacket startTV() {
        return MaplePacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner);
    }

    public static void broadCastTV(boolean active_) {
        WorldChannelInterface wci = user.getClient().getChannelServer().getWorldInterface();
        setActive(active_);
        try {
            if (active_) {
                wci.broadcastMessage(null, MaplePacketCreator.enableTV().getBytes());
                wci.broadcastMessage(null, startTV().getBytes());
                scheduleCancel();
            } else {
                wci.broadcastMessage(null, removeTV().getBytes());
            }

        } catch (RemoteException noob) {
        }
    }

    private static void scheduleCancel() {
        int delay = 15000; // default. cbf adding it to switch
        switch (type) {
            case 0:
            case 3:
                delay = 15000;
                break;
            case 1:
            case 4:
                delay = 30000;
                break;
            case 2:
            case 5:
                delay = 60000;
        }
        TimerManager.getInstance().schedule(new Runnable() {

            @Override
            public void run() {
                broadCastTV(false);
            }
        }, delay);
    }
}


In sendops.properties add
Code:

SEND_TV = 0x10D
REMOVE_TV = 0x10E
ENABLE_TV = 0x10F


Screenshots




Got errors?
Put
Code:

MapleCharacter player = c.getPlayer(); 

after
Code:

if (itemType == 507) {
Back to top Go down
View user profile
 

[Release] Maple TV

View previous topic View next topic Back to top 
Page 1 of 1

Permissions of this forum:You cannot reply to topics in this forum
 :: OdinMS :: Releases-
Post new topic   Reply to topic