Facebook
From Trivial Penguin, 7 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 416
  1. void Game::thingMoveInternal(Creature *creature, unsigned short from_x, unsigned short from_y, unsigned char from_z,
  2.         unsigned char stackPos, unsigned short itemid, unsigned short to_x, unsigned short to_y, unsigned char to_z, unsigned char count)
  3. {
  4.         Tile *fromTile = getTile(from_x, from_y, from_z);
  5.         if(!fromTile)
  6.                 return;
  7.  
  8.         Tile *toTile   = getTile(to_x, to_y, to_z);
  9.         /*
  10.         if(!toTile){
  11.                 if(dynamic_cast<Player*>(player))
  12.                         dynamic_cast<Player*>(player)->sendCancelWalk("Sorry, not possible...");
  13.                 return;
  14.         }
  15.         */
  16.  
  17.         Thing *thing = fromTile->getThingByStackPos(stackPos);
  18.  
  19. #ifdef __DEBUG__
  20.                                 //                              std::cout << "moving"
  21.                                 /*
  22.                                 << ": from_x: "<< (int)from_x << ", from_y: "<< (int)from_y << ", from_z: "<< (int)from_z
  23.                                 << ", stackpos: "<< (int)stackPos
  24.                                 << ", to_x: "<< (int)to_x << ", to_y: "<< (int)to_y << ", to_z: "<< (int)to_z
  25.                                 */
  26.                                 //<< std::endl;
  27. #endif
  28.  
  29.         if (!thing)
  30.                 return;
  31.  
  32.         Item* item = dynamic_cast<Item*>(thing);
  33.         Creature* creatureMoving = dynamic_cast<Creature*>(thing);
  34.         Player* playerMoving = dynamic_cast<Player*>(creatureMoving);
  35.         Player* player = dynamic_cast<Player*>(creature);
  36.  
  37.  
  38.         Position oldPos;
  39.         oldPos.x = from_x;
  40.         oldPos.y = from_y;
  41.         oldPos.z = from_z;
  42.  
  43.     #ifdef RULY_NOPUSHPARCEL
  44.                                              if (toTile){
  45. ItemVector::iterator brn;
  46. for (brn = toTile->downItems.begin(); brn != toTile->downItems.end(); brn++)
  47. {
  48. if (playerMoving && (*brn)->getID() == 2595 && player != thing || playerMoving && (*brn)->getID() == 2596 && player != thing)
  49. {
  50. player->sendCancel("Sorry not possible.");
  51. return;
  52. }
  53. }  
  54. }
  55. #endif //RULY_NOPUSHPARCEL
  56.  
  57.  
  58.     #ifdef RULY_ZITEM
  59.     if(fromTile && playerMoving && player)//TODO: abs check
  60.     {
  61.         const Tile* down = getTile(to_x, to_y, to_z+1);
  62.        if(down && down->zItem >= 3 && playerMoving->canMovedTo(down)) {
  63. if(getTile(to_x, to_y, to_z) == NULL){
  64.  teleport(playerMoving, Position(to_x, to_y, to_z+1));
  65.             return;
  66. }
  67. }
  68.         else if(toTile && toTile->zItem >= 3 && fromTile->zItem <= 1) {
  69.             playerMoving->sendCancelWalk();
  70.             player->sendCancel("Sorry, not possible.");
  71.             return;
  72.         }
  73.         else if(toTile && toTile->zItem >= 2 && fromTile->zItem <= 0) {
  74.              playerMoving->sendCancelWalk();
  75.              player->sendCancel("Sorry, not possible.");
  76.              return;
  77.         }
  78.         else if(fromTile->zItem >= 3 && player == playerMoving)
  79.         {
  80.                 if(getTile(from_x, from_y, from_z-1) == NULL) //going up
  81.                 {
  82.                     Tile* newTile = getTile(to_x, to_y, to_z-1);
  83.                     if(newTile && newTile->ground && playerMoving->canMovedTo(newTile))
  84.                     {
  85.                         if(newTile->ground->getID() != 460 && newTile->ground->getID() != 459) {
  86.                             teleport(playerMoving, Position(to_x, to_y, to_z-1));
  87.                             return;
  88.                         }
  89.                     }
  90.                 }
  91.         }
  92.     }
  93. #endif //RULY_ZITEM  
  94.  
  95.    
  96.  if(toTile)
  97. {
  98. Thing *tothing = toTile->getThingByStackPos( stackPos );
  99. Item *toItem = dynamic_cast<Item*>( tothing );
  100. if( toItem && !playerMoving && !creatureMoving && toItem->getID() == 2494 )
  101. {
  102. switch( item->getID() )
  103. {
  104. //Undeleteable items
  105. case 1774: //Barrel
  106. case 1770: //Barrel
  107. player->sendTextMessage(MSG_SMALLINFO, "Sorry, not possible.");
  108. player->sendCancelWalk();
  109. return;
  110. break;
  111. default:
  112. removeThing( playerMoving, oldPos, item, true );
  113. return;
  114. break;
  115. }
  116. }
  117. }
  118. #ifdef TP_TRASH_BINS
  119.         if(toTile)
  120.         {
  121.                 Thing *tothing = toTile->getThingByStackPos(stackPos);
  122.                 Item *toItem = dynamic_cast<Item*>(tothing);
  123.  
  124.                 if(item && toItem && !playerMoving && !creature && toItem->isDeleter())
  125.                 {
  126.                         fromTile->removeThing(item);
  127.                         this->FreeThing(item);
  128.                         //creatureBroadcastTileUpdated(oldPos);
  129.                         sendRemoveThing(player, item->pos, item, stackPos);
  130.                         return;
  131.                 }
  132.     }
  133. #endif //TP_TRASH_BINS
  134.  
  135.         // *** Creature moving itself to a non-tile
  136.         if(!toTile && creatureMoving && creatureMoving == creature){
  137.                 //change level begin
  138.                 Tile* downTile = getTile(to_x, to_y, to_z+1);
  139.                 //diagonal begin
  140.                 if(!downTile)
  141.                 {
  142.                          #ifdef RULY_NOPUSHFIELDS
  143.                                                                   if (toTile){
  144. ItemVector::iterator brn;
  145. for (brn = toTile->downItems.begin(); brn != toTile->downItems.end(); brn++)
  146. {
  147. if (playerMoving && (*brn)->getID() == 1492 && player != thing || playerMoving && (*brn)->getID() == 1493 && player != thing || playerMoving && (*brn)->getID() == 1494 && player != thing || playerMoving && (*brn)->getID() == 1491 && player != thing || playerMoving && (*brn)->getID() == 1490 && player != thing || playerMoving && (*brn)->getID() == FIRE_FIELD && player != thing || playerMoving && (*brn)->getID() == FIRE_FIELD2 && player != thing || playerMoving && (*brn)->getID() == FIRE_FIELD3 && player != thing)
  148. {
  149. player->sendCancel("You cannot push players to the fields.");
  150. return;
  151. }
  152. }  
  153. }
  154. #endif //RULY_NOPUSHFIELDS
  155.  
  156.  
  157.                         if(player) {
  158.                                 player->sendTextMessage(MSG_SMALLINFO, "Sorry, not possible.");
  159.                                 player->sendCancelWalk();
  160.                         }
  161.  
  162.                         return;
  163.                 }

Replies to sdfsdf rss

Title Name Language When
Re: sdfsdf Gruff Hummingbird cpp 7 Years ago.