int list_global_opers(Channel *c, User *u) { int j, i , carryon, count = 0; User *u2; char *access; noticeLang(c->ci->bi->nick, u, LANG_GOLIST_HEADER); for (j = 0; j < 1024; j++) { for (u2 = userlist[j]; u2; u2 = u2->next) { carryon = 0; /* Prevent listing of users with +H */ if (finduser((u2->nick)) && !has_umode_H(u2) && !has_umode_B(u2) && !is_ulined(u2->server->name)) { i = 0; while (i < excempt_nr) { if (!ListExempts[i] || !u2->nick) break; if (my_match_wild_nocase(ListExempts[i], u2->nick)) { carryon = 1; break; } i++; } if (carryon) continue; if (is_oper(u2)) { count++; access = getLangString(u->na, LANG_GOLIST_OPER_ONLY); if (is_services_oper(u2)) access = getLangString(u->na, LANG_GOLIST_OPER_AND_SO); if (is_services_admin(u2)) access = getLangString(u->na, LANG_GOLIST_OPER_AND_SA); if (is_services_root(u2)) access = getLangString(u->na, LANG_GOLIST_OPER_AND_SRA); notice(c->ci->bi->nick, u->nick, "%-15s - %s", u2->nick, access); } } } } if (count == 0) noticeLang(c->ci->bi->nick, u, LANG_GOLIST_NONE); noticeLang(c->ci->bi->nick, u, LANG_GOLIST_FOOTER, count); return MOD_CONT; }
void LoLEngine::setHandItem(Item itemIndex) { if (itemIndex && _itemProperties[_itemsInPlay[itemIndex].itemPropertyIndex].flags & 0x80) { runItemScript(-1, itemIndex, 0x400, 0, 0); if (_itemsInPlay[itemIndex].shpCurFrame_flg & 0x8000) itemIndex = 0; } int mouseOffs = 0; if (itemIndex && !(_flagsTable[31] & 0x02)) { mouseOffs = 10; if (!_currentControlMode || textEnabled()) _txt->printMessage(0, getLangString(0x403E), getLangString(_itemProperties[_itemsInPlay[itemIndex].itemPropertyIndex].nameStringId)); } _itemInHand = itemIndex; _screen->setMouseCursor(mouseOffs, mouseOffs, getItemIconShapePtr(itemIndex)); }
int list_admins(Channel *c, User *u) { int j, i , carryon, count = 0; User *u2; noticeLang(c->ci->bi->nick, u, LANG_ADLIST_HEADER); for (j = 0; j < 1024; j++) { for (u2 = userlist[j]; u2; u2 = u2->next) { carryon = 0; /* Prevent listing of users with +H */ if (finduser((u2->nick)) && !has_umode_H(u2) && !has_umode_B(u2) && !is_ulined(u2->server->name)) { i = 0; while (i < excempt_nr) { if (!ListExempts[i] || !u2->nick) break; if (!stricmp(u2->nick, ListExempts[i])) carryon = 1; i++; } if (carryon) continue; if (is_oper(u2)) { if (is_services_root(u2)) { count++; notice(c->ci->bi->nick, u->nick, "%-15s - %s", u2->nick, getLangString(u->na, LANG_ADLIST_SRA)); continue; } if (is_services_admin(u2)) { count++; notice(c->ci->bi->nick, u->nick, "%-15s - %s", u2->nick, getLangString(u->na, LANG_ADLIST_SA)); } } } } } if (count == 0) noticeLang(c->ci->bi->nick, u, LANG_ADLIST_NONE); noticeLang(c->ci->bi->nick, u, LANG_ADLIST_FOOTER, count); return MOD_CONT; }
void LoLEngine::timerSpecialCharacterUpdate(int timerNum) { int v = 0; for (int i = 0; i < 4; i++) { if (!(_characters[i].flags & 1)) continue; for (int ii = 0; ii < 5; ii++) { if (!(_characters[i].characterUpdateEvents[ii])) continue; if (--_characters[i].characterUpdateDelay[ii] > 0) { if (_characters[i].characterUpdateDelay[ii] > v) v = _characters[i].characterUpdateDelay[ii]; continue; } switch (_characters[i].characterUpdateEvents[ii] - 1) { case 0: if (_characters[i].weaponHit) { _characters[i].weaponHit = 0; _characters[i].characterUpdateDelay[ii] = calcMonsterSkillLevel(i, 6); if (_characters[i].characterUpdateDelay[ii] > v) v = _characters[i].characterUpdateDelay[ii]; } else { _characters[i].flags &= 0xfffb; } gui_drawCharPortraitWithStats(i); break; case 1: _characters[i].damageSuffered = 0; gui_drawCharPortraitWithStats(i); break; case 2: _characters[i].flags &= 0xffbf; gui_drawCharPortraitWithStats(i); break; case 3: v = rollDice(1, 2); if (inflictDamage(i, v, 0x8000, 0, 0x80)) { _txt->printMessage(2, getLangString(0x4022), _characters[i].name); _characters[i].characterUpdateDelay[ii] = 10; if (_characters[i].characterUpdateDelay[ii] > v) v = _characters[i].characterUpdateDelay[ii]; } break; case 4: _characters[i].flags &= 0xfeff; _txt->printMessage(0, getLangString(0x4027), _characters[i].name); gui_drawCharPortraitWithStats(i); break; case 5: setTemporaryFaceFrame(i, 0, 0, 1); break; case 6: _characters[i].flags &= 0xefff; gui_drawCharPortraitWithStats(i); break; case 7: restoreSwampPalette(); break; default: break; } if (_characters[i].characterUpdateDelay[ii] <= 0) _characters[i].characterUpdateEvents[ii] = 0; } } if (v) { _timer->enable(3); _timer3Para = v * 15; } else { _timer->disable(3); } }
Common::Error LoLEngine::loadGameState(int slot) { const uint16 *cdf[] = { _charDefsMan, _charDefsWoman, _charDefsKieran, _charDefsMan, _charDefsAkshel }; const char *fileName = getSavegameFilename(slot); SaveHeader header; Common::InSaveFile *saveFile = openSaveForReading(fileName, header); if (!saveFile) { _txt->printMessage(2, "%s", getLangString(0x425d)); return Common::kNoError; } _screen->fadeClearSceneWindow(10); completeDoorOperations(); _screen->fillRect(112, 0, 287, 119, 0, 0); _screen->updateScreen(); Common::SeekableSubReadStreamEndian in(saveFile, saveFile->pos(), saveFile->size(), !header.originalSave, DisposeAfterUse::YES); for (int i = 0; i < 4; i++) { LoLCharacter *c = &_characters[i]; c->flags = in.readUint16BE(); in.read(c->name, 11); c->raceClassSex = in.readByte(); c->id = in.readSint16BE(); c->curFaceFrame = in.readByte(); c->tempFaceFrame = in.readByte(); c->screamSfx = in.readByte(); for (int ii = 0; ii < 8; ii++) c->itemsMight[ii] = in.readUint16BE(); for (int ii = 0; ii < 8; ii++) c->protectionAgainstItems[ii] = in.readUint16BE(); c->itemProtection = in.readUint16BE(); c->hitPointsCur = in.readSint16BE(); c->hitPointsMax = in.readUint16BE(); c->magicPointsCur = in.readSint16BE(); c->magicPointsMax = in.readUint16BE(); c->field_41 = in.readByte(); c->damageSuffered = in.readUint16BE(); c->weaponHit = in.readUint16BE(); c->totalMightModifier = in.readUint16BE(); c->totalProtectionModifier = in.readUint16BE(); c->might = in.readUint16BE(); c->protection = in.readUint16BE(); c->nextAnimUpdateCountdown = in.readSint16BE(); for (int ii = 0; ii < 11; ii++) c->items[ii] = in.readUint16BE(); for (int ii = 0; ii < 3; ii++) c->skillLevels[ii] = in.readByte(); for (int ii = 0; ii < 3; ii++) c->skillModifiers[ii] = in.readSByte(); for (int ii = 0; ii < 3; ii++) c->experiencePts[ii] = in.readUint32BE(); for (int ii = 0; ii < 5; ii++) c->characterUpdateEvents[ii] = in.readByte(); for (int ii = 0; ii < 5; ii++) c->characterUpdateDelay[ii] = in.readByte(); if (c->flags & 1) { loadCharFaceShapes(i, c->id); c->defaultModifiers = cdf[c->raceClassSex]; } } in.read(_wllBuffer4, 80); _currentBlock = in.readUint16BE(); _partyPosX = in.readUint16BE(); _partyPosY = in.readUint16BE(); _updateFlags = in.readUint16BE(); _scriptDirection = in.readByte(); _selectedSpell = in.readByte(); _sceneDefaultUpdate = in.readByte(); _compassBroken = in.readByte(); _drainMagic = in.readByte(); _currentDirection = in.readUint16BE(); _compassDirection = in.readUint16BE(); _selectedCharacter = in.readSByte(); _currentLevel = in.readByte(); for (int i = 0; i < 48; i++) _inventory[i] = in.readSint16BE(); _inventoryCurItem = in.readSint16BE(); _itemInHand = in.readSint16BE(); _lastMouseRegion = in.readSint16BE(); if (header.version <= 15) { uint16 flags[40]; memset(flags, 0, sizeof(flags)); if (header.version == 14) { for (int i = 0; i < 16; i++) flags[i] = in.readUint16BE(); flags[26] = in.readUint16BE(); flags[36] = in.readUint16BE(); } else if (header.version == 15) { for (int i = 0; i < 40; i++) flags[i] = in.readUint16BE(); } memset(_flagsTable, 0, sizeof(_flagsTable)); for (uint i = 0; i < ARRAYSIZE(flags); ++i) { for (uint k = 0; k < 16; ++k) { if (flags[i] & (1 << k)) setGameFlag(((i << 4) & 0xFFF0) | (k & 0x000F)); } } } else { uint32 flagsSize = in.readUint32BE(); assert(flagsSize <= sizeof(_flagsTable)); in.read(_flagsTable, flagsSize); } for (int i = 0; i < 24; i++) _globalScriptVars[i] = in.readUint16BE(); _brightness = in.readByte(); _lampOilStatus = in.readByte(); _lampEffect = in.readSByte(); _credits = in.readUint16BE(); for (int i = 0; i < 8; i++) _globalScriptVars2[i] = in.readUint16BE(); in.read(_availableSpells, 7); _hasTempDataFlags = in.readUint32BE(); for (int i = 0; i < 400; i++) { ItemInPlay *t = &_itemsInPlay[i]; t->nextAssignedObject = in.readUint16BE(); t->nextDrawObject = in.readUint16BE(); t->flyingHeight = in.readByte(); t->block = in.readUint16BE(); t->x = in.readUint16BE(); t->y = in.readUint16BE(); t->level = in.readSByte(); t->itemPropertyIndex = in.readUint16BE(); t->shpCurFrame_flg = in.readUint16BE(); t->destDirection = in.readByte(); t->hitOffsX = in.readSByte(); t->hitOffsY = in.readSByte(); t->currentSubFrame = in.readByte(); } for (int i = 0; i < 1024; i++) { LevelBlockProperty *l = &_levelBlockProperties[i]; l->assignedObjects = l->drawObjects = 0; l->direction = 5; } for (int i = 0; i < 29; i++) { if (!(_hasTempDataFlags & (1 << i))) continue; if (_lvlTempData[i]) { delete[] _lvlTempData[i]->wallsXorData; delete[] _lvlTempData[i]->flags; delete[] _lvlTempData[i]->monsters; delete[] _lvlTempData[i]->flyingObjects; delete _lvlTempData[i]; } _lvlTempData[i] = new LevelTempData; _lvlTempData[i]->wallsXorData = new uint8[4096]; _lvlTempData[i]->flags = new uint8[1024]; _lvlTempData[i]->monsters = new MonsterInPlay[30]; _lvlTempData[i]->flyingObjects = new FlyingObject[8]; LevelTempData *l = _lvlTempData[i]; in.read(l->wallsXorData, 4096); in.read(l->flags, 1024); for (int ii = 0; ii < 30; ii++) { MonsterInPlay *m = &l->monsters[ii]; m->nextAssignedObject = in.readUint16BE(); m->nextDrawObject = in.readUint16BE(); m->flyingHeight = in.readByte(); m->block = in.readUint16BE(); m->x = in.readUint16BE(); m->y = in.readUint16BE(); m->shiftStep = in.readSByte(); m->destX = in.readUint16BE(); m->destY = in.readUint16BE(); m->destDirection = in.readByte(); m->hitOffsX = in.readSByte(); m->hitOffsY = in.readSByte(); m->currentSubFrame = in.readByte(); m->mode = in.readByte(); m->fightCurTick = in.readSByte(); m->id = in.readByte(); m->direction = in.readByte(); m->facing = in.readByte(); m->flags = in.readUint16BE(); m->damageReceived = in.readUint16BE(); m->hitPoints = in.readSint16BE(); m->speedTick = in.readByte(); m->type = in.readByte(); m->numDistAttacks = in.readByte(); m->curDistWeapon = in.readByte(); m->distAttackTick = in.readSByte(); m->assignedItems = in.readUint16BE(); m->properties = &_monsterProperties[m->type]; in.read(m->equipmentShapes, 4); } for (int ii = 0; ii < 8; ii++) { FlyingObject *m = &l->flyingObjects[ii]; m->enable = in.readByte(); m->objectType = in.readByte(); m->attackerId = in.readUint16BE(); m->item = in.readSint16BE(); m->x = in.readUint16BE(); m->y = in.readUint16BE(); m->flyingHeight = in.readByte(); m->direction = in.readByte(); m->distance = in.readByte(); m->field_D = in.readSByte(); m->c = in.readByte(); m->flags = in.readByte(); m->wallFlags = in.readByte(); } l->monsterDifficulty = in.readByte(); } calcCharPortraitXpos(); memset(_moneyColumnHeight, 0, sizeof(_moneyColumnHeight)); int t = _credits; _credits = 0; giveCredits(t, 0); setDelayedCursorUpdate(); loadLevel(_currentLevel); gui_drawPlayField(); timerSpecialCharacterUpdate(0); _flagsTable[73] |= 0x08; while (!_screen->isMouseVisible()) _screen->showMouse(); return Common::kNoError; }