int SuccUBusScript::updateState(uint oldId, uint newId, int index) { if (newId == 230199) { return _isRoom101 ? 230148 : newId; } else if (newId >= 230208 && newId <= 230235) { addResponse(70158 - getRandomBit()); return newId; } else if (newId >= 230061 && newId <= 230063) { if (getValue(2)) return 230125; } static const uint UPDATE_STATES[][2] = { { 230078, 1 }, { 230106, 2 }, { 230112, 3 }, { 230115, 4 }, { 230127, 5 }, { 230140, 6 }, { 230156, 7 }, { 230157, 8 }, { 230159, 9 }, { 230160, 10 }, { 230161, 11 }, { 230072, 12 } }; for (int idx = 0; idx < 12; ++idx) { if (UPDATE_STATES[idx][0] == newId) { setState(UPDATE_STATES[idx][1]); break; } } return newId; }
ScriptChangedResult ParrotScript::scriptChanged(const TTroomScript *roomScript, uint id) { if (id >= 280000 && id <= 280276) { if (id == 280258) { if (CTrueTalkManager::_currentNPC) { CGameObject *chicken; if (CTrueTalkManager::_currentNPC->find("Chicken", &chicken, FIND_PET)) id = 280147 - getRandomBit(); } id = getDialogueId(id); } else { if ((id == 280146 || id == 280147) && CTrueTalkManager::_currentNPC) { CGameObject *chicken; if (!CTrueTalkManager::_currentNPC->find("Chicken", &chicken, FIND_PET)) id = 280142; } addResponse(getDialogueId(id)); if (id == 280192) addResponse(getDialogueId(280222)); applyResponse(); } } if (id >= 80000 && id <= 80244) { if ((id == 80155 || id == 80156) && CTrueTalkManager::_currentNPC) { CGameObject *chicken; if (!CTrueTalkManager::_currentNPC->find("Chicken", &chicken, FIND_PET)) id = 80151; } addResponse(id); if (id == 80201) addResponse(getDialogueId(280222)); applyResponse(); } return (id == 3) ? SCR_2 : SCR_1; }
static int receiveSegment(Connection *conn, Segment *sgm) { char ssgm[RUSP_SGMS]; long double timeout; timeout = getTimeoutValue(&(conn->timeout)); if (selectSocket(conn->sock.fd, timeout) == 0) return 0; if (pthread_mutex_lock(&(conn->sock.mtx)) > 0) ERREXIT("Cannot lock sock mutex for read."); if (readCSocket(conn->sock.fd, ssgm, RUSP_SGMS) == -1) { if (pthread_mutex_unlock(&(conn->sock.mtx)) > 0) ERREXIT("Cannot unlock sock mutex for read."); DBGPRINT(RUSP_DEBUG, "Cannot read connected socket: peer disconnected."); return -1; } if (pthread_mutex_unlock(&(conn->sock.mtx)) > 0) ERREXIT("Cannot unlock sock mutex for read."); deserializeSegment(ssgm, sgm); if (getRandomBit(RUSP_DROP)) { char strsgm[RUSP_SGM_STR+1]; segmentToString(*sgm, strsgm); DBGPRINT(RUSP_DEBUG, "SEGMENT DROPPPED: %s", strsgm); return 0; } DBGFUNC(RUSP_DEBUG, printInSegment(getSocketPeer(conn->sock.fd), *sgm)); return 1; }
int SuccUBusScript::process(const TTroomScript *roomScript, const TTsentence *sentence) { if (!CTrueTalkManager::getStateValue(1)) return 2; if (roomScript && roomScript->_scriptId == 101) _isRoom101 = true; int currState = getState(); if (currState) { int currMode = sentence->_field2C; bool modeFlag1 = currMode == 11 || currMode == 13; bool modeFlag2 = currMode == 12; setState(0); switch (currState) { case 1: if (currMode == 3 || currMode == 10) return setResponse(70050, 0); break; case 2: if (modeFlag1 || modeFlag2) return setResponse(70070 + (getRandomBit() ? 254 : 0), 0); break; case 3: if (currMode == 3 || currMode == 10) return setResponse(70074, 0); break; case 4: if (currMode == 4) return setResponse(70077, 0); if (currMode == 3) return setResponse(getDialogueId(230117), 0); break; case 5: if (currMode == 3 || currMode == 10) return setResponse(70089, 0); break; case 6: if (modeFlag1) return setResponse(70103, 0); if (modeFlag2) return setResponse(70102, 0); break; case 7: if (modeFlag1) return setResponse(getDialogueId(230157), 0); break; case 8: if (modeFlag1) return setResponse(getDialogueId(230159), 0); break; case 9: if (modeFlag1) return setResponse(getDialogueId(230160), 0); break; case 10: if (modeFlag1) return setResponse(getDialogueId(230161), 0); break; case 11: if (modeFlag1) return setResponse(getDialogueId(230142), 0); break; case 12: return setResponse(70030, 0); default: break; } } if (processEntries(&_entries, _entryCount, roomScript, sentence) != 2) { uint tagId = g_vm->_trueTalkManager->_quotes.find(sentence->_normalizedLine.c_str()); if (tagId && chooseResponse(roomScript, sentence, tagId) != 2) { addResponse(getDialogueId(230030)); applyResponse(); } } return 2; }