亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? game.cpp

?? MUD游戲編程光盤代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
    std::list<enemy>::iterator enemyitr = p_room->Enemies().begin();
    while( enemyitr != p_room->Enemies().end() )
    {
        temp += (*enemyitr)->Name() + ", ";
        count++;
        ++enemyitr;
    }

    if( count > 0 )
    {
        temp.erase( temp.size() - 2, 2 );
        desc += temp + "\r\n";
    }


    return desc;
}

void Game::SendRoom( string p_text, room p_room )
{
    std::for_each( p_room->Players().begin(),
                   p_room->Players().end(),
                   playersend( p_text ) );
}



void Game::Move( int p_direction )
{
    Player& p = *m_player;
    room next = p.CurrentRoom()->Adjacent( p_direction );
    room previous = p.CurrentRoom();

    if( next == 0 )
    {
        SendRoom( red + p.Name() + " bumps into the wall to the " +
                  DIRECTIONSTRINGS[p_direction] + "!!!",
                  p.CurrentRoom() );
        return;
    }

    previous->RemovePlayer( p.ID() );

    SendRoom( green + p.Name() + " leaves to the " + 
              DIRECTIONSTRINGS[p_direction] + ".",
              previous );
    SendRoom( green + p.Name() + " enters from the " + 
              DIRECTIONSTRINGS[OppositeDirection(p_direction)] + ".",
              next );
    p.SendString( green + "You walk " + DIRECTIONSTRINGS[p_direction] + "." );

    p.CurrentRoom() = next;
    next->AddPlayer( p.ID() );

    p.SendString( PrintRoom( next ) );
}



void Game::GetItem( string p_item )
{
    Player& p = *m_player;

    if( p_item[0] == '$' )
    {
        // clear off the '$', and convert the result into a number.
        p_item.erase( 0, 1 );
        money m = BasicLib::totype<money>( p_item );

        // make sure there's enough money in the room
        if( m > p.CurrentRoom()->Money() )
        {
            p.SendString( red + bold + "There isn't that much here!" );
        }
        else
        {
            p.Money() += m;
            p.CurrentRoom()->Money() -= m;
            SendRoom( cyan + bold + p.Name() + " picks up $" + 
                      tostring( m ) + ".", p.CurrentRoom() );
        }
        return;
    }

    item i = p.CurrentRoom()->FindItem( p_item );

    if( i == 0 )
    {
        p.SendString( red + bold + "You don't see that here!" );
        return;
    }

    if( !p.PickUpItem( i ) )
    {
        p.SendString( red + bold + "You can't carry that much!" );
        return;
    }

    p.CurrentRoom()->RemoveItem( i );
    SendRoom( cyan + bold + p.Name() + " picks up " + i->Name() + ".", 
              p.CurrentRoom() );
}


void Game::DropItem( string p_item )
{
    Player& p = *m_player;

    if( p_item[0] == '$' )
    {
        // clear off the '$', and convert the result into a number.
        p_item.erase( 0, 1 );
        money m = BasicLib::totype<money>( p_item );

        // make sure there's enough money in the inventory
        if( m > p.Money() )
        {
            p.SendString( red + bold + "You don't have that much!" );
        }
        else
        {
            p.Money() -= m;
            p.CurrentRoom()->Money() += m;
            SendRoom( cyan + bold + p.Name() + " drops $" + 
                      tostring( m ) + ".", p.CurrentRoom() );
        }
        return;
    }

    int i = p.GetItemIndex( p_item );

    if( i == -1 )
    {
        p.SendString( red + bold + "You don't have that!" );
        return;
    }

    SendRoom( cyan + bold + p.Name() + " drops " +
                p.GetItem( i )->Name() + ".", p.CurrentRoom() );
    p.CurrentRoom()->AddItem( p.GetItem( i ) );
    p.DropItem( i );
}


void Game::GotoTrain()
{
            Player& p = *m_player;
            p.Active() = false;
            p.Conn()->AddHandler( new Train( *m_connection, p.ID() ) );
            LogoutMessage( p.Name() + " leaves to edit stats" );
}


string Game::StoreList( entityid p_store )
{
    Store& s = StoreDatabase::get( p_store );

    string output = white + bold + 
              "--------------------------------------------------------------------------------\r\n";
    output += " Welcome to " + s.Name() + "!\r\n";
    output += "--------------------------------------------------------------------------------\r\n";
    output += " Item                           | Price\r\n";
    output += "--------------------------------------------------------------------------------\r\n";

    Store::iterator itr = s.begin();
    while( itr != s.end() )
    {
        output += " " + tostring( (*itr)->Name(), 31 ) + "| ";
        output += tostring( (*itr)->Price() ) + "\r\n";
        ++itr;
    }
    output += bold + 
              "--------------------------------------------------------------------------------\r\n";

    return output;
}

void Game::Buy( const string& p_item )
{
    Player& p = *m_player;
    Store& s = StoreDatabase::get( p.CurrentRoom()->Data() );

    item i = s.find( p_item );
    if( i == 0 )
    {
        p.SendString( red + bold + "Sorry, we don't have that item!" );
        return;
    }

    if( p.Money() < i->Price() )
    {
        p.SendString( red + bold + "Sorry, but you can't afford that!" );
        return;
    }

    if( !p.PickUpItem( i ) )
    {
        p.SendString( red + bold + "Sorry, but you can't carry that much!" );
        return;
    }

    p.Money() -= i->Price();
    SendRoom( cyan + bold + p.Name() + " buys a " + i->Name(), 
              p.CurrentRoom() );
}




void Game::Sell( const string& p_item )
{
    Player& p = *m_player;
    Store& s = StoreDatabase::get( p.CurrentRoom()->Data() );

    int index = p.GetItemIndex( p_item );
    if( index == -1 )
    {
        p.SendString( red + bold + "Sorry, you don't have that!" );
        return;
    }

    item i = p.GetItem( index );
    if( !s.has( i ) )
    {
        p.SendString( red + bold + "Sorry, we don't want that item!" );
        return;
    }

    p.DropItem( index );
    p.Money() += i->Price();
    SendRoom( cyan + bold + p.Name() + " sells a " + i->Name(), 
              p.CurrentRoom() );
}



void Game::EnemyAttack( enemy p_enemy )
{
    Enemy& e = *p_enemy;
    room r = e.CurrentRoom();

    std::list<player>::iterator itr = r->Players().begin();

    std::advance( itr, BasicLib::RandomInt( 0, r->Players().size() - 1 ) );
 
    Player& p = **itr;

    sint64 now = Game::GetTimer().GetMS();

    int damage;
    if( e.Weapon() == 0 )
    {
        damage = BasicLib::RandomInt( 1, 3 );
        e.NextAttackTime() = now + seconds( 1 );
    }
    else
    {
        damage = BasicLib::RandomInt( e.Weapon()->Min(), e.Weapon()->Max() );
        e.NextAttackTime() = now + seconds( e.Weapon()->Speed() );
    }

    if( BasicLib::RandomInt( 0, 99 ) >= e.Accuracy() - p.GetAttr( DODGING ) )
    {
        Game::SendRoom( white + e.Name() + " swings at " + p.Name() + 
                        " but misses!", e.CurrentRoom() );
        return;
    }

    damage += e.StrikeDamage();
    damage -= p.GetAttr( DAMAGEABSORB );

    if( damage < 1 )
        damage = 1;

    p.AddHitpoints( -damage );

    Game::SendRoom( red + e.Name() + " hits " + p.Name() + " for " + 
                    tostring( damage ) + " damage!", e.CurrentRoom() );


    if( p.HitPoints() <= 0 )
        PlayerKilled( p.ID() );
}

void Game::PlayerKilled( player p_player )
{
    Player& p = *p_player;

    Game::SendRoom( red + bold + p.Name() + " has died!", p.CurrentRoom() );
    
    // drop the money
    money m = p.Money() / 10;
    if( m > 0 )
    {
        p.CurrentRoom()->Money() += m;
        p.Money() -= m;
        Game::SendRoom( cyan + "$" + tostring( m ) + 
                        " drops to the ground.", p.CurrentRoom() );
    }

    // drop an item
    if( p.Items() > 0 )
    {
        int index = -1;

        // loop through random numbers until you hit a valid item.
        while( p.GetItem( index = RandomInt( 0, PLAYERITEMS - 1 ) ) == 0 );
        item i = p.GetItem( index );
        p.CurrentRoom()->AddItem( i );
        p.DropItem( index );

        Game::SendRoom( cyan + i->Name() + " drops to the ground.", 
                        p.CurrentRoom() );
    }

    // subtract 10% experience
    int exp = p.Experience() / 10;
    p.Experience() -= exp;
    
    // remove the player from the room and transport him to room 1.
    p.CurrentRoom()->RemovePlayer( p_player );
    p.CurrentRoom() = 1;
    p.CurrentRoom()->AddPlayer( p_player );

    // set the hitpoints to 70% 
    p.SetHitpoints( (int)(p.GetAttr( MAXHITPOINTS ) * 0.7) );
    p.SendString( white + bold + "You have died, but have been ressurected in " +
                  p.CurrentRoom()->Name() );
    p.SendString( red + bold + "You have lost " + tostring( exp ) + " experience!" );
    Game::SendRoom( white + bold + p.Name() + " appears out of nowhere!!" , p.CurrentRoom() );
}



void Game::PlayerAttack( const string& p_enemy )
{
    Player& p = *m_player;
    sint64 now = Game::GetTimer().GetMS();

    if( now < p.NextAttackTime() )
    {
        p.SendString( red + bold + "You can't attack yet!" );
        return;
    }


    enemy ptr = p.CurrentRoom()->FindEnemy( p_enemy );

    if( ptr == 0 )
    {
        p.SendString( red + bold + "You don't see that here!" );
        return;
    }

    Enemy& e = *ptr;

    int damage;
    if( p.Weapon() == 0 )
    {
        damage = BasicLib::RandomInt( 1, 3 );
        p.NextAttackTime() = now + seconds( 1 );
    }
    else
    {
        damage = BasicLib::RandomInt( p.Weapon()->Min(), p.Weapon()->Max() );
        p.NextAttackTime() = now + seconds( p.Weapon()->Speed() );
    }

    if( BasicLib::RandomInt( 0, 99 ) >= p.GetAttr( ACCURACY ) - e.Dodging() )
    {
        SendRoom( white + p.Name() + " swings at " + e.Name() + 
                  " but misses!", p.CurrentRoom() );
        return;
    }

    damage += p.GetAttr( STRIKEDAMAGE );
    damage -= e.DamageAbsorb();

    if( damage < 1 )
        damage = 1;

    e.HitPoints() -= damage;

    SendRoom( red + p.Name() + " hits " + e.Name() + " for " + 
              tostring( damage ) + " damage!", p.CurrentRoom() );


    if( e.HitPoints() <= 0 )
        EnemyKilled( e.ID(), m_player );
}


void Game::EnemyKilled( enemy p_enemy, player p_player )
{
    Enemy& e = *p_enemy;

    SendRoom( cyan + bold + e.Name() + " has died!", e.CurrentRoom() );
    

    // drop the money
    money m = BasicLib::RandomInt( e.MoneyMin(), e.MoneyMax() );
    if( m > 0 )
    {
        e.CurrentRoom()->Money() += m;
        SendRoom( cyan + "$" + tostring( m ) + 
                " drops to the ground.", e.CurrentRoom() );
    }

    // drop all the items
    std::list<loot>::iterator itr = e.LootList().begin();
    while( itr != e.LootList().end() )
    {
        if( BasicLib::RandomInt( 0, 99 ) < itr->second )
        {
            e.CurrentRoom()->AddItem( itr->first );
            SendRoom( cyan + (itr->first)->Name() + 
                      " drops to the ground.", e.CurrentRoom() );
        }
        ++itr;
    }

    // add experience to the player who killed it
    Player& p = *p_player;
    p.Experience() += e.Experience();
    p.SendString( cyan + bold + "You gain " + tostring( e.Experience() ) +
                    " experience." );
    
    // remove the enemy from the game
    EnemyDatabase::Delete( p_enemy );
}

}   // end namespace SimpleMUD

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品中文在线| 欧美色综合影院| 午夜欧美视频在线观看| 亚洲视频在线一区| 中文字幕亚洲视频| 久久精品免费在线观看| 精品毛片乱码1区2区3区| 欧美精品v日韩精品v韩国精品v| 在线观看区一区二| 欧美性大战久久久久久久蜜臀| 欧美中文字幕不卡| 欧美日韩国产另类不卡| 欧美猛男男办公室激情| 日韩一卡二卡三卡国产欧美| 欧美电影免费观看高清完整版在| 日韩午夜激情电影| 中文字幕第一页久久| 国产精品传媒视频| 亚洲一区在线视频| 美女免费视频一区| 久久99精品久久久久久久久久久久| 精品无码三级在线观看视频| 韩国一区二区视频| 99久久精品免费| 91欧美激情一区二区三区成人| 欧美日韩精品电影| 久久综合色鬼综合色| 日本一区二区成人| 亚洲高清不卡在线观看| 免播放器亚洲一区| av电影在线观看一区| 欧美性猛交xxxx乱大交退制版 | 美女脱光内衣内裤视频久久网站| 日本成人在线看| 成a人片国产精品| 欧美久久久久久蜜桃| 欧美va亚洲va国产综合| 亚洲欧洲无码一区二区三区| 亚洲一区二区三区自拍| 国产精品一区二区不卡| 欧美性大战久久| 精品国产一区二区三区忘忧草| 国产精品天干天干在观线| 91行情网站电视在线观看高清版| 中文字幕一区二区三区四区| 日韩精品一区二区三区蜜臀| 亚洲观看高清完整版在线观看| 亚洲一区在线观看视频| 亚洲一区在线观看免费观看电影高清 | 欧美日韩一本到| 国产色产综合产在线视频| 亚洲高清在线视频| 99久久久国产精品| 国产日韩高清在线| 精品一区二区三区不卡| 777亚洲妇女| 亚洲午夜成aⅴ人片| 成人免费福利片| 26uuu精品一区二区| 日韩av一级片| 欧美日韩免费在线视频| √…a在线天堂一区| 国产激情91久久精品导航| 日韩一区二区在线观看视频| 五月天欧美精品| 日本道精品一区二区三区| 最新成人av在线| av中文字幕不卡| 国产精品电影一区二区三区| 国产精品综合视频| 国产网站一区二区| 国产米奇在线777精品观看| 日韩欧美在线网站| 欧美aⅴ一区二区三区视频| 777a∨成人精品桃花网| 日韩国产欧美一区二区三区| 欧美男男青年gay1069videost| 日韩综合一区二区| 日韩免费性生活视频播放| 美国精品在线观看| 精品国产污污免费网站入口 | 懂色av一区二区三区免费看| 久久女同互慰一区二区三区| 国产综合色在线| 欧美—级在线免费片| 成人国产一区二区三区精品| 国产精品成人一区二区三区夜夜夜| 国产91丝袜在线播放九色| 中文字幕一区二区视频| 在线亚洲精品福利网址导航| 午夜精品久久久久久久| 日韩午夜电影在线观看| 国产福利91精品一区| 成人欧美一区二区三区在线播放| 欧美日韩一本到| 精品午夜一区二区三区在线观看 | 丁香六月久久综合狠狠色| 国产精品久线在线观看| 一本色道久久综合狠狠躁的推荐| 亚洲最新视频在线观看| 91精品国产色综合久久| 国产福利一区在线| 一区二区三区四区在线免费观看 | 欧美日韩一级视频| 久久超碰97中文字幕| 欧美韩日一区二区三区四区| 91激情五月电影| 狠狠色丁香婷综合久久| 日韩毛片精品高清免费| 日韩一区二区三区四区五区六区| 国产麻豆精品一区二区| 亚洲精品成a人| 337p日本欧洲亚洲大胆精品| 91黄色免费看| 高清成人免费视频| 欧美a一区二区| 亚洲欧美激情在线| 久久久久成人黄色影片| 欧美性猛交xxxx乱大交退制版| 精品一二三四区| 亚洲va天堂va国产va久| 国产日本欧美一区二区| 欧美精品一卡两卡| 成人av在线网站| 午夜欧美在线一二页| 久久新电视剧免费观看| 欧洲色大大久久| 99久久国产综合精品色伊| 男女激情视频一区| 亚洲成人动漫在线免费观看| 中文av一区二区| 久久久久国产一区二区三区四区 | 国产伦精一区二区三区| 亚洲超丰满肉感bbw| 亚洲欧美日韩久久精品| 国产精品系列在线| 久久久亚洲欧洲日产国码αv| 91麻豆精品国产91久久久久久久久| 91网站最新地址| 99国产精品久| 成人蜜臀av电影| 国产999精品久久久久久绿帽| 免费成人在线观看视频| 免播放器亚洲一区| 日韩国产精品久久久久久亚洲| 亚洲一区中文日韩| 亚洲一区二区3| 夜夜亚洲天天久久| 亚洲精品v日韩精品| 亚洲黄色性网站| 亚洲一区在线看| 亚洲成a人片在线观看中文| 中文字幕一区二区日韩精品绯色| 国产三级久久久| 国产精品国产三级国产专播品爱网| 久久久久久久久久电影| 日本一区二区三区四区 | 欧美日韩高清在线| 日韩视频在线永久播放| 日韩三级在线观看| 欧美tickle裸体挠脚心vk| 欧美成人乱码一区二区三区| 欧美成人午夜电影| 久久亚洲春色中文字幕久久久| 国产香蕉久久精品综合网| 欧美国产日本韩| 亚洲人成亚洲人成在线观看图片| 一区二区三区日韩精品| 日韩av一级片| 国产成人免费视频一区| 91视频在线观看| 精品视频1区2区3区| 精品久久久久久久人人人人传媒| 国产女主播在线一区二区| 亚洲黄色录像片| 婷婷成人综合网| 国产999精品久久久久久绿帽| 99久久久国产精品| 欧美一区二区三区的| 国产视频一区在线播放| 一区二区三区在线视频播放| 日日噜噜夜夜狠狠视频欧美人 | 精品国产区一区| ...xxx性欧美| 另类小说图片综合网| 成人午夜视频在线| 欧美日韩国产小视频在线观看| 精品国产免费一区二区三区香蕉| 国产精品乱码一区二三区小蝌蚪| 亚洲午夜电影在线观看| 国产成人精品午夜视频免费| 欧美视频第二页| 国产精品福利一区二区| 免费在线视频一区| 91小视频在线| 久久精品无码一区二区三区| 亚洲一区二区不卡免费| 波多野结衣视频一区| 精品国产123| 午夜精品久久久久久不卡8050|