bool Jumpropes::LookupCache::lookupHost( LookupObject *obj ) { LookupObject *objCached = findObj( &obj->name ); if ( objCached == NULL ) { if ( Jumpropes::LookupBase::lookupHost( obj ) ) { addObject( obj ); } } else { obj->setValue( objCached ); return true; } return false; }
Jumpropes::LookupObject *Jumpropes::LookupCache::lookupHost( const String *sHost ) { LookupObject *obj = findObj( sHost ); if ( obj == NULL ) { obj = Jumpropes::LookupBase::lookupHost( sHost ); if ( obj != NULL ) { lock.lockWhenAvailable( GFLOCK_INFINITEWAIT ); list.addElement( obj ); lock.unlock(); } } return obj; }
int ballDetection::moveToBall() { cout << "rufe Movetoball auf"<<endl; //cout << "KoordX: "<< KoordX<<endl; //int headingCount = 0; double obj = findObj(); // kleiner wählen damit auf ball in größerer Entfernung gefunden wird while(obj >= 0.5) { p3dxptr->comInt(ArCommands::VEL, 0); //ballimBild = true; //cout << "#Drehungen: "<< headingCount << endl; ArPose currentPose = p3dxptr->getPose(); cout<<"Koorigiere Heading "<<currentPose.getTh()<<endl; if(KoordX >= 0 && KoordX <= 399) { //p3dx.comInt(ArCommands::HEAD, i); cout<<"Setze Heading -10 "<<endl; // headingCount++; p3dxptr->comInt(ArCommands::HEAD, (currentPose.getTh()+5)); ArUtil::sleep(500); } if(KoordX > 399 && KoordX <= 799) { //p3dx.comInt(ArCommands::HEAD, i); cout<<"Setze Heading +10 "<<endl; // headingCount++; p3dxptr->comInt(ArCommands::HEAD, currentPose.getTh()-5); ArUtil::sleep(500); } if(rotateToBall() == 1) { cout << "ball in der Mitte" <<endl; p3dxptr->comInt(ArCommands::VEL, 75); reached(); cout << "Rückgabe Wert 1" << endl; return 1; }else { p3dxptr->comInt(ArCommands::VEL, 75); p3dxptr->comInt(ArCommands::RVEL, 0); cout << "Rückgabe Wert 0" << endl; return 0; } } if(obj < 0.5) { return 0; } }
bool CDirectLink::isLinked(CPObject * search) { return ( findObj(search) ? true : false ); }
char jumpObj(const dikuObject *obj, ulong *numb) { struct rccoord coords; char strn[128], numbStrn[64]; ulong numb2; coords = _gettextposition(); // coords.row -= 2; _settextposition(coords.row, 1); clrline(coords.row); while (TRUE) { sprintf(strn, "&+CJump to which object (%u-%u, ? for list, $ to search): &n", getLowestObjNumber(), getHighestObjNumber()); displayColorString(strn); itoa(obj->objNumber, numbStrn, 10); getStrn(strn, 6, 1, 7, '°', numbStrn, FALSE, FALSE); // check user input if (!strcmp(strn, "?")) { displayObjectTypeList(); } else if (!strcmp(strn, "$")) { strn[0] = 0; _setbkcolor(0); displayColorString("\n&+CEnter substring to search object list for: &n"); getStrn(strn, 25, 1, 7, '°', strn, FALSE, FALSE); upstrn(strn); displayObjectTypeList(strn, FALSE); } else { numb2 = strtoul(strn, NULL, 10); if ((!strnumer(strn)) || (numb2 >= numbLookupEntries) || (!findObj(numb2))) { clrline(coords.row, 7, 0); _settextposition(coords.row, 1); _setbkcolor(0); displayColorString(getMenuPromptName()); return MENU_JUMP_ERROR; } else { *numb = numb2; return MENU_JUMP_VALID; } } } }
dikuObject *realEditObjType(dikuObject *obj, const char allowJump /*= TRUE*/) { usint ch; dikuObject *newObj; char done = FALSE, addedIdentKeyword = FALSE; ulong numb, oldVnum; if (!obj) return NULL; // ya never know oldVnum = obj->objNumber; // copy obj into newObj and display the menu newObj = copyObjectType(obj, FALSE); displayEditObjTypeMenu(newObj); while (TRUE) { ch = toupper(getkey()); #ifndef __UNIX__ if (ch == '$') { displayFreeStack(1, 1, FALSE); } #endif if (checkMenuKey(ch, FALSE) == MENUKEY_ABORT) { // if user changed vnum and aborted, set it back if (newObj->objNumber != oldVnum) { resetAllObjHere(newObj->objNumber, oldVnum, roomHead); resetNumbLoaded(ENTITY_OBJECT, newObj->objNumber, oldVnum); checkAndFixRefstoObj(newObj->objNumber, oldVnum); objLookup[oldVnum] = obj; objLookup[newObj->objNumber] = NULL; } deleteObjectType(newObj, FALSE); _outtext("\n\n"); return NULL; } if (allowJump) { if ((checkMenuKey(ch, FALSE) == MENUKEY_NEXT) && (obj->objNumber != getHighestObjNumber())) { done = TRUE; } if ((checkMenuKey(ch, FALSE) == MENUKEY_PREV) && (obj->objNumber != getLowestObjNumber())) { done = TRUE; } if (checkMenuKey(ch, FALSE) == MENUKEY_JUMP) done = TRUE; } // if interpEditObjTypeMenu is TRUE, user has quit if (!done) done = interpEditObjTypeMenu(ch, newObj, obj, &addedIdentKeyword); if (done) { if (!compareObjectType(obj, newObj)) // changes have been made { deleteObjectTypeAssocLists(obj); memcpy(obj, newObj, sizeof(dikuObject)); delete newObj; numb = obj->objNumber; if (!obj->defaultObj) { if (numb < lowestObjNumber) lowestObjNumber = numb; if (numb > highestObjNumber) highestObjNumber = numb; if (numbObjTypes == 1) lowestObjNumber = highestObjNumber = numb; } madeChanges = TRUE; // recreate all editable and master keyword lists. no choice.. updateAllObjMandElists(); // update if room has objs // recreate inventory keywords for appropriate objs updateInvKeywordsObj(obj); } else deleteObjectType(newObj, FALSE); if (checkMenuKey(ch, FALSE) != MENUKEY_JUMP) _outtext("\n\n"); if (allowJump) { if (checkMenuKey(ch, FALSE) == MENUKEY_JUMP) { switch (jumpObj(obj, &numb)) { case MENU_JUMP_ERROR : return obj; case MENU_JUMP_VALID : return findObj(numb); default : _outtext("ERR in editObjType()\n"); getkey(); return NULL; } } else if (checkMenuKey(ch, FALSE) == MENUKEY_NEXT) { return getNextObj(obj->objNumber); } else if (checkMenuKey(ch, FALSE) == MENUKEY_PREV) { return getPrevObj(obj->objNumber); } } return NULL; } } }
char interpEditObjTypeMenu(usint ch, dikuObject *obj, dikuObject *origObj, char *addedIdentKeyword) { struct rccoord coords; char strn[256], numbStrn[32], newName[256]; stringNode *strnN; ulong i; // edit obj short name if (ch == 'A') { coords = _gettextposition(); _settextposition(coords.row, 1); clrline(coords.row); displayColorString("&+CNew object short name: &n"); // length - 1 - 1 because we gotta allow space for the tilde at the end getStrn(obj->objShortName, MAX_OBJSNAME_LEN - 1 - 1 - 1, 1, 7, '°', obj->objShortName, FALSE, FALSE); remTrailingSpaces(obj->objShortName); remLeadingSpaces(obj->objShortName); displayEditObjTypeMenu(obj); } else // edit obj long name if (ch == 'B') { coords = _gettextposition(); _settextposition(coords.row, 1); clrline(coords.row); displayColorString("&+CNew object long name: &n"); // length - 1 - 1 because we gotta allow space for the tilde at the end getStrn(obj->objLongName, MAX_OBJLNAME_LEN - 1 - 1 - 1, 1, 7, '°', obj->objLongName, FALSE, FALSE); remTrailingSpaces(obj->objLongName); remLeadingSpaces(obj->objLongName); displayEditObjTypeMenu(obj); } else // edit obj keywords if (ch == 'C') { coords = _gettextposition(); _settextposition(coords.row, 1); clrline(coords.row); displayColorString("&+CNew object keywords: &n"); createKeywordString(obj->keywordListHead, strn); strn[strlen(strn) - 1] = '\0'; // get rid of tilde getStrn(strn, MAX_OBJKEY_LEN - 1, 1, 7, '°', strn, FALSE, FALSE); remTrailingSpaces(strn); remLeadingSpaces(strn); strcat(strn, "~"); deleteStringNodes(obj->keywordListHead); obj->keywordListHead = createKeywordList(strn); displayEditObjTypeMenu(obj); } else // edit obj extra flags if (ch == 'D') { editObjExtraFlags(obj, origObj); displayEditObjTypeMenu(obj); } else // edit obj extra2 flags if (ch == 'E') { editObjExtra2Flags(obj, origObj); displayEditObjTypeMenu(obj); } else // edit obj wear flags if (ch == 'F') { editObjWearFlags(obj, origObj); displayEditObjTypeMenu(obj); } else // edit obj anti flags if (ch == 'G') { editObjAntiFlags(obj, origObj); displayEditObjTypeMenu(obj); } else // edit obj anti2 flags if (ch == 'H') { editObjAnti2Flags(obj, origObj); displayEditObjTypeMenu(obj); } else // edit obj type, applies, values if (ch == 'I') { editObjMisc(obj); displayEditObjTypeMenu(obj); } else // edit obj weight, dam bonus, etc if (ch == 'J') { editObjMisc2(obj); displayEditObjTypeMenu(obj); } else // edit obj extra descs if (ch == 'K') { if (editObjExtraDesc(obj, addedIdentKeyword)) { // user aborted, check for _id_ keyword and remove it if (*addedIdentKeyword) { strnN = obj->keywordListHead; while (strnN) { if (!strcmp(strnN->string, "_ID_")) { if (!strnN->Last) // head of list { obj->keywordListHead = obj->keywordListHead->Next; obj->keywordListHead->Last = NULL; delete strnN; } else { strnN->Last->Next = strnN->Next; strnN->Next->Last = strnN->Last; delete strnN; } } strnN = strnN->Next; } } } displayEditObjTypeMenu(obj); } else // edit obj trap info if (ch == 'M') { editObjTrapInfo(obj); displayEditObjTypeMenu(obj); } else // if allowed, edit aff1 flag if (getObjAffectVal() && (ch == 'N')) { editObjAffect1Flags(obj); displayEditObjTypeMenu(obj); } else // ditto for aff2 flag if (getObjAffectVal() && (ch == 'O')) { editObjAffect2Flags(obj); displayEditObjTypeMenu(obj); } else // ditto for aff3 flag if (getObjAffectVal() && (ch == 'P')) { editObjAffect3Flags(obj); displayEditObjTypeMenu(obj); } else // ditto for aff4 flag if (getObjAffectVal() && (ch == 'Q')) { editObjAffect4Flags(obj); displayEditObjTypeMenu(obj); } else // change limit if (ch == 'L') { coords = _gettextposition(); _settextposition(coords.row, 1); clrline(coords.row); displayColorString( "&+CNew limit on loads for this object type (0 = no limit): &n"); itoa(getNumbEntities(ENTITY_OBJECT, obj->objNumber, TRUE), numbStrn, 10); // strn[0] = '\0'; getStrn(strn, 6, 1, 7, '°', numbStrn, FALSE, FALSE); // check user input if (!strnumer(strn)) { clrline(coords.row, 7, 0); _settextposition(coords.row, 1); _setbkcolor(0); displayColorString(getMenuPromptName()); return FALSE; } i = atoi(strn); if ((i <= getNumbEntities(ENTITY_OBJECT, obj->objNumber, FALSE)) && (i != 0)) { _settextposition(coords.row, 1); clrline(coords.row, 7, 0); _setbkcolor(0); displayColorString( "&+CError: Limit being set lower than or equal to the number loaded - press any key&n"); getkey(); clrline(coords.row, 7, 0); _settextposition(coords.row, 1); _setbkcolor(0); displayColorString(getMenuPromptName()); return FALSE; } setEntityOverride(ENTITY_OBJECT, obj->objNumber, i, obj->globalmaxload); obj->maxload = i; madeChanges = TRUE; displayEditObjTypeMenu(obj); } else if (ch == 'R') { coords = _gettextposition(); _settextposition(coords.row, 1); clrline(coords.row); displayColorString( "&+CNew MUD-wide limit on loads for this object type (0 = no limit): &n"); itoa(getNumbEntities(ENTITY_OBJECT, obj->objNumber, TRUE), numbStrn, 10); // strn[0] = '\0'; getStrn(strn, 6, 1, 7, '°', numbStrn, FALSE, FALSE); // check user input if (!strnumer(strn)) { clrline(coords.row, 7, 0); _settextposition(coords.row, 1); _setbkcolor(0); displayColorString(getMenuPromptName()); return FALSE; } i = atoi(strn); if ((i <= getNumbEntities(ENTITY_OBJECT, obj->objNumber, FALSE)) && (i != 0)) { _settextposition(coords.row, 1); clrline(coords.row, 7, 0); _setbkcolor(0); displayColorString( "&+CError: Limit being set lower than or equal to the number loaded - press any key&n"); getkey(); clrline(coords.row, 7, 0); _settextposition(coords.row, 1); _setbkcolor(0); displayColorString(getMenuPromptName()); return FALSE; } setEntityOverride(ENTITY_OBJECT, obj->objNumber, obj->maxload, i); obj->globalmaxload = i; madeChanges = TRUE; displayEditObjTypeMenu(obj); } else // change vnum if ((ch == 'V') && !obj->defaultObj) { coords = _gettextposition(); _settextposition(coords.row, 1); clrline(coords.row); sprintf(strn, "&+YNew object vnum (highest allowed %u): &n", numbLookupEntries - 1); displayColorString(strn); itoa(obj->objNumber, numbStrn, 10); getStrn(strn, 6, 1, 7, '°', numbStrn, FALSE, FALSE); // check user input if ((!strnumer(strn)) || (atoi(strn) >= numbLookupEntries) || (findObj(atoi(strn)))) { clrline(coords.row, 7, 0); _settextposition(coords.row, 1); _setbkcolor(0); displayColorString(getMenuPromptName()); return FALSE; } i = atoi(strn); resetAllObjHere(obj->objNumber, i, roomHead); resetNumbLoaded(ENTITY_OBJECT, obj->objNumber, i); checkAndFixRefstoObj(obj->objNumber, i); objLookup[i] = origObj; objLookup[obj->objNumber] = NULL; obj->objNumber = i; resetEntityPointersByNumb(TRUE, FALSE); _settextposition(1, 1); clrline(1, 0, 0); fixObjName(obj->objShortName, newName); _setbkcolor(0); sprintf(strn, "&n&+gEditing object type #&+c%u&+w, &+L\"&n%s&+L\"&n\n\n", obj->objNumber, newName); displayColorString(strn); clrline(coords.row, 7, 0); _settextposition(coords.row, 1); displayColorString(getMenuPromptName()); } else // quit if (checkMenuKey(ch, FALSE) == MENUKEY_SAVE) return TRUE; return FALSE; }