Esempio n. 1
0
        public override void AddTileCreature(Creature creature, bool knowsCreature)
        {
            if (knowsCreature)
            {
                netmsg.AddByte(0x62);
                netmsg.AddByte(0x00);
                netmsg.AddU32(creature.GetID());
            }
            else
            {
                netmsg.AddByte(0x61);
                netmsg.AddByte(0x00);

                netmsg.AddU32(0); //TODO: Login stuff?
                netmsg.AddU32(creature.GetID());
                netmsg.AddStringL(creature.Name);
            }

            netmsg.AddByte(creature.GetHealthPercentage());  //HP percent
            netmsg.AddByte((byte)creature.CurrentDirection); //Direction

            /*if (creature.isInvisible) {
             *  AddCreatureInvisible();
             * } else if (creature.isUsingChameleon) {
             *  AddByte(0x00);
             *  AddU16((ushort)creature.chameleonItem);
             * } else {*/
            netmsg.AddByte(0x7F); //lookhead
            netmsg.AddByte(0x00);
            netmsg.AddByte(0x00);
            netmsg.AddByte(0x00);
            netmsg.AddByte(0x00);

            //netmsg.AddByte(creature.CharType);

            /*
             * netmsg.AddByte(creature.colorHead);
             * netmsg.AddByte(creature.colorBody);
             * netmsg.AddByte(creature.colorLegs);
             * netmsg.AddByte(creature.colorFeet);
             *///TODO: FINISH THIS
            // }

            netmsg.AddByte(creature.SpellLightLevel);   //light levels
            netmsg.AddByte(0xD7);                       // light color, yellow light = 0xD7

            netmsg.AddU16((ushort)creature.GetSpeed()); //speed
        }
Esempio n. 2
0
        public override void AddTileCreature(Creature creature, bool knowsCreature)
        {
            if (knowsCreature) {
                netmsg.AddByte(0x62);
                netmsg.AddByte(0x00);
                netmsg.AddU32(creature.GetID());
            } else {
                netmsg.AddByte(0x61);
                netmsg.AddByte(0x00);

                netmsg.AddU32(0); //TODO: Login stuff?
                netmsg.AddU32(creature.GetID());
                netmsg.AddStringL(creature.Name);
            }

            netmsg.AddByte(creature.GetHealthPercentage()); //HP percent
            netmsg.AddByte((byte)creature.CurrentDirection); //Direction

            /*if (creature.isInvisible) {
                AddCreatureInvisible();
            } else if (creature.isUsingChameleon) {
                AddByte(0x00);
                AddU16((ushort)creature.chameleonItem);
            } else {*/
            netmsg.AddByte(0x7F); //lookhead
            netmsg.AddByte(0x00);
            netmsg.AddByte(0x00);
            netmsg.AddByte(0x00);
            netmsg.AddByte(0x00);

            //netmsg.AddByte(creature.CharType);
            /*
            netmsg.AddByte(creature.colorHead);
            netmsg.AddByte(creature.colorBody);
            netmsg.AddByte(creature.colorLegs);
            netmsg.AddByte(creature.colorFeet);
             */ //TODO: FINISH THIS
               // }

            netmsg.AddByte(creature.SpellLightLevel); //light levels
            netmsg.AddByte(0xD7); // light color, yellow light = 0xD7

            netmsg.AddU16((ushort)creature.GetSpeed());  //speed
        }
Esempio n. 3
0
        public virtual void HandleChat(Creature creature, string msg)
        {
            lock (lockThis) {

                if (Command.IsCommand(msg, creature)) {
                    Command.ExecuteCommand(this, gameMap, msg, creature);
                    return;
                }

                chatSystem.HandleChat(creature, msg);

                if (msg == "test") { //TODO: REMOVE PLX
                    HandleCreatureTarget(creature, creature);
                } else if (msg == "magic") {
                    ((Player)creature).AppendAddManaSpent(10000);
                } else if (msg == "combat") {
                    for (int i = 0; i < 1000; i++) {
                        ((Player)creature).NotifyOfAttack();
                        creature.AddDamage(0, creature, false);
                    }
                } else if (msg == "distance") {
                    ((Player)creature).buggabugga();
                } else if (msg == "shooteffect") {
                    Position orig = creature.CurrentPosition;
                    Position dest = orig.Clone();
                    dest.x += 4;
                    dest.y += 2;
                    creature.AddShootEffect((byte)DistanceType.EFFECT_ENERGY,
                        orig, dest);
                    SendProtocolMessages();
                } else if (msg == "a") {
                    ((Player)creature).add();
                } else if (msg == "b") {
                    ((Player)creature).remove();
                } else if (msg == "!dragon") {

                } else if (msg == "monster") {
                    List<Monster> monsterList = new List<Monster>();
                   // m.SetMaster(creature);
                    //SendAddCreature(m, gameMap.GetFreePosition(creature.CurrentPosition, m));
                    //SendProtocolMessages();
                    return;
                    //return;
                } else if (msg == "dead") {
                    ThingSet ttSet = gameMap.GetThingsInVicinity(creature.CurrentPosition);
                    AppendAddDamage(creature, creature, creature.CurrentHP, ImmunityType.IMMUNE_PHYSICAL, true);
                } else if (msg == "!up") {
                    Position newPos = creature.CurrentPosition.Clone();
                    newPos.z--; //Z goes down as player goes up :D
                    HandleMove(creature, newPos, creature.CurrentDirection);
                    return;
                } else if (msg == "!down") {
                    Position newPos = creature.CurrentPosition.Clone();
                    newPos.z++;
                    HandleMove(creature, newPos, creature.CurrentDirection);
                    return;
                } else if (msg == "!lighthack") {
                    creature.SpellLightLevel = 10;
                    creature.UpdateCreatureLight(creature);
                } else if (msg == "burn") {
                    creature.Burning = new int[] { 10, 10, 10 };
                    creature.BurningCheck = new BurningCheck();
                    creature.BurningCheck.TimeInCS = 200;
                    creature.BurningCheck.World = this;
                    creature.BurningCheck.CurrentCreature = creature;
                    AddEventInCS(creature.BurningCheck.TimeInCS, creature.BurningCheck.PerformCheck);
                } else if (msg == "position") {
                    creature.AddAnonymousChat(ChatAnonymous.WHITE, "Your position: " +
                        creature.CurrentPosition);
                } else if (msg == "knight") {
                    ((Player)creature).CurrentVocation = Vocation.KNIGHT;
                } else if (msg == "sorcerer") {
                    ((Player)creature).CurrentVocation = Vocation.SORCERER;
                } else if (msg == "druid") {
                    ((Player)creature).CurrentVocation = Vocation.DRUID;
                } else if (msg == "paladin") {
                    ((Player)creature).CurrentVocation = Vocation.PALADIN;
                } else if (msg == "hudini") {
                    creature.CharType++;
                    SendUpdateOutfit(creature);
                    return;
                } else if (msg == "resetoutfit") {
                    creature.CharType = 1;
                    SendUpdateOutfit(creature);
                } else if (msg == "resetoutfit") {
                    creature.CharType = 0;
                    SendUpdateOutfit(creature);
                } else if (msg == "level") {
                    ((Player)creature).AddExperienceGain(1000000);
                } else if (msg.ToLower().StartsWith("item")) {
                    msg = Regex.Split(msg, "\\s+")[1];
                    Item item = Item.CreateItem("sword");
                    item.ItemID = ushort.Parse(msg);
                    AppendAddItem(item, creature.CurrentPosition.Clone());
                } else if (msg == "sd") {
                    Item item = Item.CreateItem(2127);
                    item.Charges = 2;
                    AppendAddItem(item, creature.CurrentPosition.Clone());
                } else if (msg == "vial") {
                    Item item = Item.CreateItem("vial");
                    item.FluidType = Fluids.FLUID_MILK;
                    AppendAddItem(item, creature.CurrentPosition.Clone());
                } else if (msg == "speed") {
                    creature.AddAnonymousChat(ChatAnonymous.WHITE, "Your speed is: " + creature.GetSpeed() + ".");
                }

                if (Spell.IsSpell(msg, SpellType.PLAYER_SAY)) {
                    Spell spell = Spell.CreateSpell(msg, (Player)creature);
                    spellSystem.CastSpell(msg, creature, spell, this);
                }
                SendProtocolMessages();
            }
        }
Esempio n. 4
0
        public void AppendHandleMove(Creature creature, Position newPos, Direction direction, bool validateMove)
        {
            lock (lockThis) {
                Position oldPos = creature.CurrentPosition;
                Tile oldTile = gameMap.GetTile(oldPos);
                Tile newTile = gameMap.GetTile(newPos);
                if (validateMove) {
                    if (newTile == null || newTile.ContainsType(Constants.TYPE_BLOCKING)) {
                        return;
                    }
                }

                foreach (Thing thing in oldTile.GetThings()) {
                    bool proceed = thing.HandleWalkAction(creature, this, WalkType.WALK_OFF);
                    if (!proceed) {
                        return;
                    }
                }
                foreach (Thing thing in newTile.GetThings()) {
                    bool proceed = thing.HandleWalkAction(creature, this, WalkType.WALK_ON);
                    if (!proceed) {
                        return;
                    }
                }

                if (creature.IsNextTo(newPos)) {
                    //TODO: Finish coding speed
                    int speed = GetGroundSpeed(creature.CurrentPosition);
                    int duration = (100 * 90 /*speed*/) / (creature.GetSpeed());
                    creature.LastWalk.SetTimeInCS((uint)duration);

                    if (!creature.LastWalk.Elapsed()) {
                        return;
                    }

                    Position oldPosClone = oldPos.Clone();
                    if (oldPos.y > newPos.y) {
                        direction = Direction.NORTH;
                        oldPosClone.y--;
                        creature.AddScreenMoveByOne(direction, oldPos, oldPosClone, gameMap);
                    } else if (oldPos.y < newPos.y) {
                        direction = Direction.SOUTH;
                        oldPosClone.y++;
                        creature.AddScreenMoveByOne(direction, oldPos, oldPosClone, gameMap);
                    }
                    if (oldPos.x < newPos.x) {
                        direction = Direction.EAST;
                        oldPosClone.x++;
                        creature.AddScreenMoveByOne(direction, oldPos, oldPosClone, gameMap);
                    } else if (oldPos.x > newPos.x) {
                        direction = Direction.WEST;
                        oldPosClone.x--;
                        creature.AddScreenMoveByOne(direction, oldPos, oldPosClone, gameMap);
                    }
                }
                ThingSet tSet = gameMap.GetThingsInVicinity(creature.CurrentPosition);
                byte oldStackPos = gameMap.GetStackPosition(creature, oldPos);
                gameMap.MoveThing(creature, oldPos, newPos);
                creature.CurrentDirection = direction;
                byte newStackPos = gameMap.GetStackPosition(creature, newPos);
                gameMap.GetThingsInVicinity(newPos, tSet);
                creature.HandleMove();

                foreach (Thing thing in tSet.GetThings()) {
                    thing.AddCreatureMove(direction, creature, oldPos, newPos,
                        oldStackPos, newStackPos);
                }

                if (!creature.IsNextTo(oldPos)) {
                    creature.AddTeleport(gameMap);
                }
            }
        }
Esempio n. 5
0
        public void AppendHandleMove(Creature creature, Position newPos, Direction direction, bool validateMove)
        {
            lock (lockThis) {
                Position oldPos  = creature.CurrentPosition;
                Tile     oldTile = gameMap.GetTile(oldPos);
                Tile     newTile = gameMap.GetTile(newPos);
                if (validateMove)
                {
                    if (newTile == null || newTile.ContainsType(Constants.TYPE_BLOCKING))
                    {
                        return;
                    }
                }

                foreach (Thing thing in oldTile.GetThings())
                {
                    bool proceed = thing.HandleWalkAction(creature, this, WalkType.WALK_OFF);
                    if (!proceed)
                    {
                        return;
                    }
                }
                foreach (Thing thing in newTile.GetThings())
                {
                    bool proceed = thing.HandleWalkAction(creature, this, WalkType.WALK_ON);
                    if (!proceed)
                    {
                        return;
                    }
                }

                if (creature.IsNextTo(newPos))
                {
                    //TODO: Finish coding speed
                    int speed    = GetGroundSpeed(creature.CurrentPosition);
                    int duration = (100 * 90 /*speed*/) / (creature.GetSpeed());
                    creature.LastWalk.SetTimeInCS((uint)duration);

                    if (!creature.LastWalk.Elapsed())
                    {
                        return;
                    }

                    Position oldPosClone = oldPos.Clone();
                    if (oldPos.y > newPos.y)
                    {
                        direction = Direction.NORTH;
                        oldPosClone.y--;
                        creature.AddScreenMoveByOne(direction, oldPos, oldPosClone, gameMap);
                    }
                    else if (oldPos.y < newPos.y)
                    {
                        direction = Direction.SOUTH;
                        oldPosClone.y++;
                        creature.AddScreenMoveByOne(direction, oldPos, oldPosClone, gameMap);
                    }
                    if (oldPos.x < newPos.x)
                    {
                        direction = Direction.EAST;
                        oldPosClone.x++;
                        creature.AddScreenMoveByOne(direction, oldPos, oldPosClone, gameMap);
                    }
                    else if (oldPos.x > newPos.x)
                    {
                        direction = Direction.WEST;
                        oldPosClone.x--;
                        creature.AddScreenMoveByOne(direction, oldPos, oldPosClone, gameMap);
                    }
                }
                ThingSet tSet        = gameMap.GetThingsInVicinity(creature.CurrentPosition);
                byte     oldStackPos = gameMap.GetStackPosition(creature, oldPos);
                gameMap.MoveThing(creature, oldPos, newPos);
                creature.CurrentDirection = direction;
                byte newStackPos = gameMap.GetStackPosition(creature, newPos);
                gameMap.GetThingsInVicinity(newPos, tSet);
                creature.HandleMove();

                foreach (Thing thing in tSet.GetThings())
                {
                    thing.AddCreatureMove(direction, creature, oldPos, newPos,
                                          oldStackPos, newStackPos);
                }

                if (!creature.IsNextTo(oldPos))
                {
                    creature.AddTeleport(gameMap);
                }
            }
        }
Esempio n. 6
0
        public virtual void HandleChat(Creature creature, string msg)
        {
            lock (lockThis) {
                if (Command.IsCommand(msg, creature))
                {
                    Command.ExecuteCommand(this, gameMap, msg, creature);
                    return;
                }

                chatSystem.HandleChat(creature, msg);

                if (msg == "test")   //TODO: REMOVE PLX
                {
                    HandleCreatureTarget(creature, creature);
                }
                else if (msg == "magic")
                {
                    ((Player)creature).AppendAddManaSpent(10000);
                }
                else if (msg == "combat")
                {
                    for (int i = 0; i < 1000; i++)
                    {
                        ((Player)creature).NotifyOfAttack();
                        creature.AddDamage(0, creature, false);
                    }
                }
                else if (msg == "distance")
                {
                    ((Player)creature).buggabugga();
                }
                else if (msg == "shooteffect")
                {
                    Position orig = creature.CurrentPosition;
                    Position dest = orig.Clone();
                    dest.x += 4;
                    dest.y += 2;
                    creature.AddShootEffect((byte)DistanceType.EFFECT_ENERGY,
                                            orig, dest);
                    SendProtocolMessages();
                }
                else if (msg == "a")
                {
                    ((Player)creature).add();
                }
                else if (msg == "b")
                {
                    ((Player)creature).remove();
                }
                else if (msg == "!dragon")
                {
                }
                else if (msg == "monster")
                {
                    List <Monster> monsterList = new List <Monster>();
                    // m.SetMaster(creature);
                    //SendAddCreature(m, gameMap.GetFreePosition(creature.CurrentPosition, m));
                    //SendProtocolMessages();
                    return;
                    //return;
                }
                else if (msg == "dead")
                {
                    ThingSet ttSet = gameMap.GetThingsInVicinity(creature.CurrentPosition);
                    AppendAddDamage(creature, creature, creature.CurrentHP, ImmunityType.IMMUNE_PHYSICAL, true);
                }
                else if (msg == "!up")
                {
                    Position newPos = creature.CurrentPosition.Clone();
                    newPos.z--; //Z goes down as player goes up :D
                    HandleMove(creature, newPos, creature.CurrentDirection);
                    return;
                }
                else if (msg == "!down")
                {
                    Position newPos = creature.CurrentPosition.Clone();
                    newPos.z++;
                    HandleMove(creature, newPos, creature.CurrentDirection);
                    return;
                }
                else if (msg == "!lighthack")
                {
                    creature.SpellLightLevel = 10;
                    creature.UpdateCreatureLight(creature);
                }
                else if (msg == "burn")
                {
                    creature.Burning                      = new int[] { 10, 10, 10 };
                    creature.BurningCheck                 = new BurningCheck();
                    creature.BurningCheck.TimeInCS        = 200;
                    creature.BurningCheck.World           = this;
                    creature.BurningCheck.CurrentCreature = creature;
                    AddEventInCS(creature.BurningCheck.TimeInCS, creature.BurningCheck.PerformCheck);
                }
                else if (msg == "position")
                {
                    creature.AddAnonymousChat(ChatAnonymous.WHITE, "Your position: " +
                                              creature.CurrentPosition);
                }
                else if (msg == "knight")
                {
                    ((Player)creature).CurrentVocation = Vocation.KNIGHT;
                }
                else if (msg == "sorcerer")
                {
                    ((Player)creature).CurrentVocation = Vocation.SORCERER;
                }
                else if (msg == "druid")
                {
                    ((Player)creature).CurrentVocation = Vocation.DRUID;
                }
                else if (msg == "paladin")
                {
                    ((Player)creature).CurrentVocation = Vocation.PALADIN;
                }
                else if (msg == "hudini")
                {
                    creature.CharType++;
                    SendUpdateOutfit(creature);
                    return;
                }
                else if (msg == "resetoutfit")
                {
                    creature.CharType = 1;
                    SendUpdateOutfit(creature);
                }
                else if (msg == "resetoutfit")
                {
                    creature.CharType = 0;
                    SendUpdateOutfit(creature);
                }
                else if (msg == "level")
                {
                    ((Player)creature).AddExperienceGain(1000000);
                }
                else if (msg.ToLower().StartsWith("item"))
                {
                    msg = Regex.Split(msg, "\\s+")[1];
                    Item item = Item.CreateItem("sword");
                    item.ItemID = ushort.Parse(msg);
                    AppendAddItem(item, creature.CurrentPosition.Clone());
                }
                else if (msg == "sd")
                {
                    Item item = Item.CreateItem(2127);
                    item.Charges = 2;
                    AppendAddItem(item, creature.CurrentPosition.Clone());
                }
                else if (msg == "vial")
                {
                    Item item = Item.CreateItem("vial");
                    item.FluidType = Fluids.FLUID_MILK;
                    AppendAddItem(item, creature.CurrentPosition.Clone());
                }
                else if (msg == "speed")
                {
                    creature.AddAnonymousChat(ChatAnonymous.WHITE, "Your speed is: " + creature.GetSpeed() + ".");
                }

                if (Spell.IsSpell(msg, SpellType.PLAYER_SAY))
                {
                    Spell spell = Spell.CreateSpell(msg, (Player)creature);
                    spellSystem.CastSpell(msg, creature, spell, this);
                }
                SendProtocolMessages();
            }
        }