Beispiel #1
0
void Monster::diePermCrt() {
    std::map<int, crlasttime>::iterator it;
    crlasttime* crtm=0;
    Monster *temp_mob=0;
    UniqueRoom  *room=0;
    char    perm[80];
    long    t = time(0);
    int     i=0;

    strcpy(perm,getCName());

    if(!inUniqueRoom())
        return;
    room = getUniqueRoomParent();

    for(it = room->permMonsters.begin(); it != room->permMonsters.end() ; it++) {
        crtm = &(*it).second;
        if(!crtm->cr.id)
            continue;
        if(crtm->ltime + crtm->interval > t)
            continue;
        if(!loadMonster(crtm->cr, &temp_mob))
            continue;
        if(temp_mob->getName() == getName()) {
            crtm->ltime = t;
            free_crt(temp_mob);
            break;
        }
        free_crt(temp_mob);
    }

    if(flagIsSet(M_DEATH_SCENE) && !flagIsSet(M_FOLLOW_ATTACKER)) {
        int     fd,n;
        char    tmp[2048], file[80],pName[80];

        strcpy(pName, getCName());
        for(i=0; pName[i]; i++)
            if(pName[i] == ' ')
                pName[i] = '_';

        sprintf(file,"%s/%s_%d", Path::Desc, pName, level);
        fd = open(file,O_RDONLY,0);
        if(fd) {
            n = read(fd,tmp,2048);
            tmp[n] = 0;
            broadcast(nullptr, getRoomParent(), "\n%s", tmp);
        }
        close(fd);
    }
}
void FieldContainerType::dump(      UInt32    OSG_CHECK_ARG(uiIndent),
                              const BitVector OSG_CHECK_ARG(bvFlags )) const
{
    SLOG << "FieldContainerType: "
         << getCName()
         << ", Id: "
         << getId()
         << ", parentP: "
         << (_pParentType ? _pParentType->getCName() : "NONE")
         << ", groupId: "
         << _uiGroupId
         << ", abstract: "
         << ((_pPrototype != NULL) ? "false" : "true")
         << " "
         << _vDescVec.size()
         << std::endl;

    for(UInt32 i = 0; i < _vDescVec.size(); i++)
    {
        SLOG << "Desc : " << _vDescVec[i]->getCName() << std::endl;
    }
}
Beispiel #3
0
int Object::doSpecial(Player* player) {
    BaseRoom* room = player->getRoomParent();
    Socket* sock = player->getSock();
    char    str[80], str2[160];
    unsigned int i=0;

    switch(special) {
    case SP_MAPSC:
        strcpy(str, getCName());
        for(i=0; i<strlen(str); i++)
            if(str[i] == ' ')
                str[i] = '_';
        sprintf(str2, "%s/%s.txt", Path::Sign, str);
        if(flagIsSet(O_LOGIN_FILE))
            viewLoginFile(player->getSock(), str2);
        else
            viewFile(player->getSock(), str2);
        break;
        
    case SP_COMBO:
        char    str[80];
        int     dmg, i;

        str[0] = damage.getSides()+'0';
        str[1] = 0;

        if(damage.getNumber() == 1 || strlen(sock->tempstr[3]) > 70)
            strcpy(sock->tempstr[3], str);
        else
            strcat(sock->tempstr[3], str);

        player->print("Click.\n");
        if(player->getName() == "Bane")
            player->print("Combo so far: %s\n", sock->tempstr[3]);

        broadcast(sock, room, "%M presses %P^x.", player, this);

        if(strlen(sock->tempstr[3]) >= strlen(use_output)) {
            if(strcmp(sock->tempstr[3], use_output)) {
                dmg = mrand(20,40 + player->getLevel());
                player->hp.decrease(dmg);
                player->printColor("You were zapped for %s%d^x damage!\n", player->customColorize("*CC:DAMAGE*").c_str(), dmg);
                broadcast(sock, room, "%M was zapped by %P^x!", player, this);
                sock->tempstr[3][0] = 0;

                if(player->hp.getCur() < 1) {
                    player->print("You died.\n");
                    player->die(ZAPPED);
                }
            } else {
                Exit* toOpen = 0;
                i = 1;
                for(Exit* ext : room->exits) {
                    if(i++ >= damage.getPlus())
                        toOpen = ext;
                }
//              for(i=1, xp = room->first_ext;
//                      xp && i < damage.getPlus();
//                      i++, xp = xp->next_tag)
//                  ;
                if(!toOpen)
                    return(0);
                player->statistics.combo();
                player->print("You opened the %s!\n", toOpen->getCName());
                broadcast(player->getSock(), player->getParent(),
                    "%M opened the %s!", player, toOpen->getCName());
                toOpen->clearFlag(X_LOCKED);
                toOpen->clearFlag(X_CLOSED);
                toOpen->ltime.ltime = time(0);
            }
        }
        break;
        
    default:
        player->print("Nothing.\n");
        break;
    }

    return(0);
}