Example #1
0
 public DelayedEvent(ushort itype, ushort ix, ushort iy, MapComposite im)
 {
     type=itype;
     x=ix;
     y=iy;
     map=im;
 }
Example #2
0
 /**
          * Creates a rectangular trigger for a given map.
          */
 public TriggerArea(MapComposite m, Rectangle r, TriggerAction ptr, bool once)
     : base(ThingType.OBJECT_OTHER, m)
 {
     mZone=r;
     mAction=ptr;
     mOnce=once;
 }
Example #3
0
 //        
 //        friend struct SpawnAreaEventDispatch;
 public SpawnArea(MapComposite map,
                      MonsterClass specy,
                       Rectangle zone,
                      int maxBeings,
                      int spawnRate)
     : base(ThingType.OBJECT_OTHER, map)
 {
     mSpecy=specy;
     //mSpawnedListener=spawnAreaEventDispatch; //TODO Implementieren
     mZone=zone;
     mMaxBeings=maxBeings;
     mSpawnRate=spawnRate;
 }
Example #4
0
        static void warp(Character ptr, MapComposite map, int x, int y)
        {
            //TODO DEBUG555 entfernen
            int debug=555;

            remove(ptr);
            ptr.setMap(map);
            ptr.setPosition(new Point(x, y));
            ptr.clearDestination();
            /* Force update of persistent data on map change, so that
               characters can respawn at the start of the map after a death or
               a disconnection. */
            Program.accountHandler.sendCharacterData(ptr);

            if(map.isActive())
            {
                if(!insert(ptr))
                {
                    ptr.disconnected();
                    Program.gameHandler.kill(ptr);
                }
            }
            else
            {
                MessageOut msg=new MessageOut(Protocol.GAMSG_REDIRECT);
                msg.writeInt32(ptr.getDatabaseID());
                Program.accountHandler.send(msg);
                Program.gameHandler.prepareServerChange(ptr);
            }
        }
Example #5
0
 public static void enqueueWarp(Character ptr, MapComposite m, int x, int y)
 {
     //TODO Implementieren
     //            DelayedEvent e=new DelayedEvent(Event.EVENT_WARP, x, y, m);
     //            enqueueEvent(ptr, e);
 }
Example #6
0
        /**
         * Updates object states on the map.
         */
        static void updateMap(MapComposite map)
        {
            // 1. update object status.
            List< Thing  > things = map.getEverything(); //TODO das könnte man auch weiter unten benutzen?

            foreach(Thing thing in things)
            {
                thing.update();
            }

            // 2. run scripts.
            Script s = map.getScript();
            if(s != null)
            {
                s.update();
            }

            // 3. perform actions.
            if(map.mContent!=null)
            {
            foreach(Thing thing in map.mContent.things)
            {
                if(thing is Being)
                {
                    Being being = (Being)thing;
                    being.perform();
                }
            }
            }

            //Alter Code
            // for (BeingIterator i(map.getWholeMapIterator()); i; ++i)
            // {
            //     (*i).perform();
            // }

            // 4. move objects around and update zones.
            foreach(Thing thing in map.mContent.things)
            {
                if(thing is Being)
                {
                    Being being = (Being)thing;
                    being.move();
                }
            }

            // Alter Code
            //for (BeingIterator i(map.getWholeMapIterator()); i; ++i)
            //{
            //    (*i).move();
            //}

            map.update();
        }
Example #7
0
 /**
  * Prepares a call to the given function.
  * Only one function can be prepared at once.
  */
 //virtual void prepare(const std::string &name) = 0;
 /**
  * Sets associated map.
  */
 public void setMap(MapComposite m)
 {
     mMap=m;
 }
Example #8
0
        /**
         * Informs a player of what happened around the character.
         */
        static void informPlayer(MapComposite map, Character p, int worldTime)
        {
            //MessageOut moveMsg(GPMSG_BEINGS_MOVE);
            //MessageOut damageMsg(GPMSG_BEINGS_DAMAGE);
            //const Point &pold = p.getOldPosition(), ppos = p.getPosition();
            //int pid = p.getPublicID(), pflags = p.getUpdateFlags();
            //int visualRange = Configuration::getValue("game_visualRange", 448);

            //// Inform client about activities of other beings near its character
            //for (BeingIterator i(map.getAroundBeingIterator(p, visualRange)); i; ++i)
            //{
            //    Being *o = *i;

            //    const Point &oold = o.getOldPosition(), opos = o.getPosition();
            //    int otype = o.getType();
            //    int oid = o.getPublicID(), oflags = o.getUpdateFlags();
            //    int flags = 0;

            //    // Check if the character p and the moving object o are around.
            //    bool wereInRange = pold.inRangeOf(oold, visualRange) &&
            //                       !((pflags | oflags) & UPDATEFLAG_NEW_ON_MAP);
            //    bool willBeInRange = ppos.inRangeOf(opos, visualRange);

            //    if (!wereInRange && !willBeInRange)
            //    {
            //        // Nothing to report: o and p are far away from each other.
            //        continue;
            //    }

            //    if (wereInRange && willBeInRange)
            //    {
            //        // Send attack messages.
            //        if ((oflags & UPDATEFLAG_ATTACK) && oid != pid)
            //        {
            //            MessageOut AttackMsg(GPMSG_BEING_ATTACK);
            //            AttackMsg.writeInt16(oid);
            //            AttackMsg.writeInt8(o.getDirection());
            //            AttackMsg.writeInt8(static_cast< Being * >(o).getAttackId());
            //            gameHandler.sendTo(p, AttackMsg);
            //        }

            //        // Send action change messages.
            //        if ((oflags & UPDATEFLAG_ACTIONCHANGE))
            //        {
            //            MessageOut ActionMsg(GPMSG_BEING_ACTION_CHANGE);
            //            ActionMsg.writeInt16(oid);
            //            ActionMsg.writeInt8(static_cast< Being * >(o).getAction());
            //            gameHandler.sendTo(p, ActionMsg);
            //        }

            //        // Send looks change messages.
            //        if (oflags & UPDATEFLAG_LOOKSCHANGE)
            //        {
            //            MessageOut LooksMsg(GPMSG_BEING_LOOKS_CHANGE);
            //            LooksMsg.writeInt16(oid);
            //            Character * c = static_cast<Character * >(o);
            //            serializeLooks(c, LooksMsg, false);
            //            LooksMsg.writeInt16(c.getHairStyle());
            //            LooksMsg.writeInt16(c.getHairColor());
            //            LooksMsg.writeInt16(c.getGender());
            //            gameHandler.sendTo(p, LooksMsg);
            //        }

            //        // Send direction change messages.
            //        if (oflags & UPDATEFLAG_DIRCHANGE)
            //        {
            //            MessageOut DirMsg(GPMSG_BEING_DIR_CHANGE);
            //            DirMsg.writeInt16(oid);
            //            DirMsg.writeInt8(o.getDirection());
            //            gameHandler.sendTo(p, DirMsg);
            //        }

            //        // Send damage messages.
            //        if (o.canFight())
            //        {
            //            Being *victim = static_cast< Being * >(o);
            //            const Hits &hits = victim.getHitsTaken();
            //            for (Hits::const_iterator j = hits.begin(),
            //                 j_end = hits.end(); j != j_end; ++j)
            //            {
            //                damageMsg.writeInt16(oid);
            //                damageMsg.writeInt16(*j);
            //            }
            //        }

            //        if (oold == opos)
            //        {
            //            // o does not move, nothing more to report.
            //            continue;
            //        }
            //    }

            //    if (!willBeInRange)
            //    {
            //        // o is no longer visible from p. Send leave message.
            //        MessageOut leaveMsg(GPMSG_BEING_LEAVE);
            //        leaveMsg.writeInt16(oid);
            //        gameHandler.sendTo(p, leaveMsg);
            //        continue;
            //    }

            //    if (!wereInRange)
            //    {
            //        // o is now visible by p. Send enter message.
            //        MessageOut enterMsg(GPMSG_BEING_ENTER);
            //        enterMsg.writeInt8(otype);
            //        enterMsg.writeInt16(oid);
            //        enterMsg.writeInt8(static_cast< Being *>(o).getAction());
            //        enterMsg.writeInt16(opos.x);
            //        enterMsg.writeInt16(opos.y);
            //        enterMsg.writeInt8(o.getDirection());
            //        switch (otype)
            //        {
            //            case OBJECT_CHARACTER:
            //            {
            //                Character *q = static_cast< Character * >(o);
            //                enterMsg.writeString(q.getName());
            //                enterMsg.writeInt8(q.getHairStyle());
            //                enterMsg.writeInt8(q.getHairColor());
            //                enterMsg.writeInt8(q.getGender());
            //                serializeLooks(q, enterMsg, true);
            //            } break;

            //            case OBJECT_MONSTER:
            //            {
            //                Monster *q = static_cast< Monster * >(o);
            //                enterMsg.writeInt16(q.getSpecy().getId());
            //                enterMsg.writeString(q.getName());
            //            } break;

            //            case OBJECT_NPC:
            //            {
            //                NPC *q = static_cast< NPC * >(o);
            //                enterMsg.writeInt16(q.getNPC());
            //                enterMsg.writeString(q.getName());
            //            } break;

            //            default:
            //                assert(false); // TODO
            //        }
            //        gameHandler.sendTo(p, enterMsg);
            //    }

            //    if (opos != oold)
            //    {
            //        // Add position check coords every 5 seconds.
            //        if (worldTime % 50 == 0)
            //            flags |= MOVING_POSITION;

            //        flags |= MOVING_DESTINATION;
            //    }

            //    // Send move messages.
            //    moveMsg.writeInt16(oid);
            //    moveMsg.writeInt8(flags);
            //    if (flags & MOVING_POSITION)
            //    {
            //        moveMsg.writeInt16(oold.x);
            //        moveMsg.writeInt16(oold.y);
            //    }

            //    if (flags & MOVING_DESTINATION)
            //    {
            //        moveMsg.writeInt16(opos.x);
            //        moveMsg.writeInt16(opos.y);
            //        // We multiply the sent speed (in tiles per second) by ten
            //        // to get it within a byte with decimal precision.
            //        // For instance, a value of 4.5 will be sent as 45.
            //        moveMsg.writeInt8((unsigned short)
            //            (o.getModifiedAttribute(ATTR_MOVE_SPEED_TPS) * 10));
            //    }
            //}

            //// Do not send a packet if nothing happened in p's range.
            //if (moveMsg.getLength() > 2)
            //    gameHandler.sendTo(p, moveMsg);

            //if (damageMsg.getLength() > 2)
            //    gameHandler.sendTo(p, damageMsg);

            //// Inform client about status change.
            //p.sendStatus();

            //// Inform client about health change of party members
            //for (CharacterIterator i(map.getWholeMapIterator()); i; ++i)
            //{
            //    Character *c = *i;

            //    // Make sure its not the same character
            //    if (c == p)
            //        continue;

            //    // make sure they are in the same party
            //    if (c.getParty() == p.getParty())
            //    {
            //        int cflags = c.getUpdateFlags();
            //        if (cflags & UPDATEFLAG_HEALTHCHANGE)
            //        {
            //            MessageOut healthMsg(GPMSG_BEING_HEALTH_CHANGE);
            //            healthMsg.writeInt16(c.getPublicID());
            //            healthMsg.writeInt16(c.getModifiedAttribute(ATTR_HP));
            //            healthMsg.writeInt16(c.getModifiedAttribute(ATTR_MAX_HP));
            //            gameHandler.sendTo(p, healthMsg);
            //        }
            //    }
            //}

            //// Inform client about items on the ground around its character
            //MessageOut itemMsg(GPMSG_ITEMS);
            //for (FixedActorIterator i(map.getAroundBeingIterator(p, visualRange)); i;
            //                                                                        ++i)
            //{
            //    assert((*i).getType() == OBJECT_ITEM ||
            //           (*i).getType() == OBJECT_EFFECT);

            //    Actor *o = *i;
            //    Point opos = o.getPosition();
            //    int oflags = o.getUpdateFlags();
            //    bool willBeInRange = ppos.inRangeOf(opos, visualRange);
            //    bool wereInRange = pold.inRangeOf(opos, visualRange) &&
            //                       !((pflags | oflags) & UPDATEFLAG_NEW_ON_MAP);

            //    if (willBeInRange ^ wereInRange)
            //    {
            //        switch (o.getType())
            //        {
            //            case OBJECT_ITEM:
            //            {
            //                Item *o = static_cast< Item * >(*i);
            //                if (oflags & UPDATEFLAG_NEW_ON_MAP)
            //                {
            //                    /* Send a specific message to the client when an item appears
            //                       out of nowhere, so that a sound/animation can be performed. */
            //                    MessageOut appearMsg(GPMSG_ITEM_APPEAR);
            //                    appearMsg.writeInt16(o.getItemClass().getDatabaseID());
            //                    appearMsg.writeInt16(opos.x);
            //                    appearMsg.writeInt16(opos.y);
            //                    gameHandler.sendTo(p, appearMsg);
            //                }
            //                else
            //                {
            //                    itemMsg.writeInt16(willBeInRange ? o.getItemClass().getDatabaseID() : 0);
            //                    itemMsg.writeInt16(opos.x);
            //                    itemMsg.writeInt16(opos.y);
            //                }
            //            }
            //            break;
            //            case OBJECT_EFFECT:
            //            {
            //                Effect *o = static_cast< Effect * >(*i);
            //                o.show();
            //                // Don't show old effects
            //                if (!(oflags & UPDATEFLAG_NEW_ON_MAP))
            //                    break;
            //                Being *b = o.getBeing();
            //                if (b)
            //                {
            //                    MessageOut effectMsg(GPMSG_CREATE_EFFECT_BEING);
            //                    effectMsg.writeInt16(o.getEffectId());
            //                    effectMsg.writeInt16(b.getPublicID());
            //                    gameHandler.sendTo(p, effectMsg);
            //                } else {
            //                    MessageOut effectMsg(GPMSG_CREATE_EFFECT_POS);
            //                    effectMsg.writeInt16(o.getEffectId());
            //                    effectMsg.writeInt16(opos.x);
            //                    effectMsg.writeInt16(opos.y);
            //                    gameHandler.sendTo(p, effectMsg);
            //                }
            //            }
            //            break;
            //            default: break;
            //        } // Switch
            //    }
            //}

            //// Do not send a packet if nothing happened in p's range.
            //if (itemMsg.getLength() > 2)
            //    gameHandler.sendTo(p, itemMsg);
        }
Example #9
0
        ThingType mType; /**< Type of this thing. */

        #endregion Fields

        #region Constructors

        //, MapComposite *map = 0)
        public Thing(ThingType type)
        {
            mMap=null;
            mType=type;
        }
Example #10
0
 void updateMapVar(MapComposite map, string name, string value)
 {
     MessageOut msg=new MessageOut(Protocol.GAMSG_SET_VAR_MAP);
     msg.writeInt32(map.getID());
     msg.writeString(name);
     msg.writeString(value);
     send(msg);
 }
Example #11
0
 public WarpAction(MapComposite m, int x, int y)
 {
     mMap=m;
     mX=(ushort)x;
     mY=(ushort)y;
 }
Example #12
0
 void updateMapVar(MapComposite map, string name, string value)
 {
     //MessageOut msg(GAMSG_SET_VAR_MAP);
     //msg.writeInt32(map.getID());
     //msg.writeString(name);
     //msg.writeString(value);
     //send(msg);
 }
Example #13
0
        public new void setMap(MapComposite mapComposite)
        {
            Point p=getPosition();

            MapComposite oldMapComposite=getMap();

            if(oldMapComposite!=null)
            {
                Map oldMap=oldMapComposite.getMap();
                int oldTileWidth=oldMap.getTileWidth();
                int oldTileHeight=oldMap.getTileHeight();
                oldMap.freeTile(p.x/oldTileWidth, p.y/oldTileHeight, getBlockType());
            }

            base.setMap(mapComposite); //TODO Überprüfen ob es wie im ORiginal funktioniert
            Map map=mapComposite.getMap();
            int tileWidth=map.getTileWidth();
            int tileHeight=map.getTileHeight();
            map.blockTile(p.x/tileWidth, p.y/tileHeight, getBlockType());
            /* the last line might look illogical because the current position is
             * invalid on the new map, but it is necessary to block the old position
             * because the next call of setPosition() will automatically free the old
             * position. When we don't block the position now the occupation counting
             * will be off.
             */
        }
Example #14
0
 /**
  * Sets the map this thing is located on.
  */
 public virtual void setMap(MapComposite map)
 {
     mMap=map;
 }
Example #15
0
        public static int initialize(string mapReferenceFile)
        {
            // Indicates the number of maps loaded successfully
            int loadedMaps=0;

            XmlData doc=new XmlData(mapReferenceFile);

            if(doc.ExistElement("maps")==false)
            {
                Logger.Write(LogLevel.Error, "Item Manager: Error while parsing map database ({0})!", mapReferenceFile);
                return loadedMaps;
            }

            Logger.Write(LogLevel.Information, "Loading map reference: {0}", mapReferenceFile);

            //Für jeden Mapknoten
            List<XmlNode> nodes=doc.GetElements("maps.map");

            foreach(XmlNode node in nodes)
            {
                if(node.Name!="map") continue;

                int id=Convert.ToInt32(node.Attributes["id"].Value);
                string name=node.Attributes["name"].Value;

                if(id>0&&name!="")
                {
                    // Testing if the file is actually in the maps folder
                    string file="maps/"+name+".tmx";
                    bool mapFileExists=ResourceManager.exists(file);

                    if(mapFileExists)
                    {
                        maps[id]=new MapComposite(id, name);
                        ++loadedMaps;
                    }
                }
                else
                {
                    if(name=="")
                    {
                        Logger.Write(LogLevel.Warning, "Invalid unnamed map Id: {0}.", id);
                    }
                    else
                    {
                        Logger.Write(LogLevel.Warning, "Invalid map Id: {0}.", id);
                    }
                }
            }

            if(loadedMaps>0)
            {
                Logger.Write(LogLevel.Information, "{0} valid map file references were loaded.", loadedMaps);
            }

            return loadedMaps;
        }
Example #16
0
        static void warp(Character ptr, MapComposite map, int x, int y)
        {
            //remove(ptr);
            //ptr.setMap(map);
            //ptr.setPosition(Point(x, y));
            //ptr.clearDestination();
            ///* Force update of persistent data on map change, so that
            //   characters can respawn at the start of the map after a death or
            //   a disconnection. */
            //accountHandler.sendCharacterData(ptr);

            //if (map.isActive())
            //{
            //    if (!insert(ptr))
            //    {
            //        ptr.disconnected();
            //        gameHandler.kill(ptr);
            //        delete ptr;
            //    }
            //}
            //else
            //{
            //    MessageOut msg(GAMSG_REDIRECT);
            //    msg.writeInt32(ptr.getDatabaseID());
            //    accountHandler.send(msg);
            //    gameHandler.prepareServerChange(ptr);
            //}
        }
Example #17
0
        /**
         * Updates object states on the map.
         */
        static void updateMap(MapComposite map)
        {
            //// 1. update object status.
            //const std::vector< Thing * > &things = map.getEverything();
            //for (std::vector< Thing * >::const_iterator i = things.begin(),
            //     i_end = things.end(); i != i_end; ++i)
            //{
            //    (*i).update();
            //}

            //// 2. run scripts.
            //if (Script *s = map.getScript())
            //{
            //    s.update();
            //}

            //// 3. perform actions.
            //for (BeingIterator i(map.getWholeMapIterator()); i; ++i)
            //{
            //    (*i).perform();
            //}

            //// 4. move objects around and update zones.
            //for (BeingIterator i(map.getWholeMapIterator()); i; ++i)
            //{
            //    (*i).move();
            //}
            //map.update();
        }
Example #18
0
 static void enqueueWarp(Character ptr, MapComposite m, int x, int y)
 {
     //DelayedEvent e = { EVENT_WARP, x, y, m };
     //enqueueEvent(ptr, e);
 }
Example #19
0
 public Thing(ThingType type, MapComposite map)
 {
     mMap=map;
     mType=type;
 }