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; } }
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); }