//////////////////////////////////////////////private slots//////////////////////////////////////////////////////////// void MainWindow::sendPressed() { if (!irc) return; if (!irc->isConnected()) return; QString fullmessage = ui->plainTextEditMessage->toPlainText(); if (fullmessage.isEmpty()) return; playSound(SND_SENDMSG); ui->plainTextEditMessage->storeLastMessage(); ui->plainTextEditMessage->clear(); QStringList messages = fullmessage.split("\n", QString::SkipEmptyParts); QWidget *wgt = ui->tabWidget->currentWidget(); if (!wgt) { for (int i=0; i<messages.size(); i++) rawMessage(messages.at(i)); return; } IrcTextBrowser * browser= static_cast<IrcTextBrowser *>(wgt); const QString ch = ui->tabWidget->tabText(ui->tabWidget->currentIndex()); for (int i=0; i<messages.size(); i++) channelMessage(browser, ch, messages.at(i)); }
/////////////////////////////////////////// // Dispatches Zone data packets based on the opCode void EQPacket::dispatchZoneData(const uint8_t *data, size_t len, uint8_t dir, uint16_t opCode) { #ifdef DEBUG_PACKET debug ("dispatchZoneData()"); #endif /* DEBUG_PACKET */ QString tempStr; bool unk = true; switch (opCode) { case OP_ClientUpdate: // old PlayerPosCode: { #ifdef PACKET_PAYLOAD_SIZE_DIAG if ((len != sizeof(playerSpawnPosStruct)) && (len != sizeof(playerSelfPosStruct))) { fprintf(stderr, "WARNING: OP_ClientUpdate (%04x) (dataLen: %d != sizeof(playerSpawnPosStruct):%d or sizeof(playerSpawnSelfStruct):%d)\n", OP_ClientUpdate, len, sizeof(playerSpawnPosStruct), sizeof(playerSelfPosStruct)); unk = true; } else unk = false; #else unk = false; #endif if (len == sizeof(playerSpawnPosStruct)) emit playerUpdate((const playerSpawnPosStruct*)data, len, dir); else if (len == sizeof(playerSelfPosStruct)) emit playerUpdate((const playerSelfPosStruct*)data, len, dir); else unk = true; break; } case OP_MobUpdate: // old MobUpdateCode: { unk = ! ValidatePayload(OP_MobUpdate, spawnPositionUpdate); emit updateSpawns((const spawnPositionUpdate *)data, len, dir); break; } case OP_WearChange: // old SpawnUpdateCode: { unk = ! ValidatePayload(OP_WearChange, SpawnUpdateStruct); SpawnUpdateStruct *su = (SpawnUpdateStruct*)data; // printf("SpawnUpdateCode(id=%d, sub=%d, arg1=%d, arg2=%d)\n", // su->spawnId, su->subcommand, // su->arg1, su->arg2); /* Belith - I believe this is depreciated no? Doesn't work anyway ;) */ switch(su->subcommand) { case 17: emit updateSpawnMaxHP(su, len, dir); break; } break; emit updateSpawnInfo(su, len, dir); } case OP_SpawnAppearance: // old SpawnAppearanceCode: { unk = false; emit spawnAppearance((const spawnAppearanceStruct*)data, len, dir); break; } case OP_CommonMessage: // old ChannelMessageCode: { unk = false; emit channelMessage((const channelMessageStruct*)data, len, dir); break; } case OP_FormattedMessage: // old FormattedMessageCode: { unk = false; emit formattedMessage((const formattedMessageStruct*)data, len, dir); break; } case OP_SimpleMessage: // old SimpleMessageCode: { unk = false; emit simpleMessage((const simpleMessageStruct*)data, len, dir); break; } case OP_SpecialMesg: { unk = false; emit specialMessage((const specialMessageStruct*)data, len, dir); break; } case OP_GuildMOTD: { unk = false; emit guildMOTD((const guildMOTDStruct*)data, len, dir); break; } case OP_Death: // old NewCorpseCode: { unk = ! ValidatePayload(OP_Death, newCorpseStruct); emit killSpawn((const newCorpseStruct*) data, len, dir); break; } /* end CorpseCode */ case OP_DeleteSpawn: // old DeleteSpawnCode: { unk = ! ValidatePayload(OP_DeleteSpawn, deleteSpawnStruct); emit deleteSpawn((const deleteSpawnStruct*)data, len, dir); break; } case OP_ItemLinkResponse: // old ItemInfoCode: { unk = false; if (dir == DIR_SERVER) emit itemInfo((const itemInfoStruct*)data, len, dir); else emit itemInfoReq((const itemInfoReqStruct*)data, len, dir); } case OP_ItemPacket: // old ItemCode: { unk = false; if (dir == DIR_SERVER) emit item((const itemPacketStruct*)data, len, dir); break; } case OP_ItemPlayerPacket: { unk = false; if (dir == DIR_SERVER) emit playerItem((const char*)data, len, dir); break; } case OP_NewSpawn: // old NewSpawnCode: { unk = ! ValidatePayload(OP_NewSpawn, newSpawnStruct); emit newSpawn((const newSpawnStruct*)data, len, dir); break; } case OP_ItemTextFile: // old BookTextCode: { unk = false; printf("BOOK: '%s'\n", ((const bookTextStruct *)data)->text); emit bookText((const bookTextStruct*)data, len, dir); break; } case OP_MoneyOnCorpse: // old MoneyOnCorpseCode: { unk = ! ValidatePayload(OP_MoneyOnCorpse, moneyOnCorpseStruct); emit moneyOnCorpse((const moneyOnCorpseStruct*)data, len, dir); break; } /* end MoneyOnCorpseCode */ case OP_RandomReply: // old RandomCode: { unk = ! ValidatePayload(OP_RandomReply, randomStruct); emit random((const randomStruct*)data, len, dir); break; } case OP_RandomReq: // RandomReqCode: { unk = ! ValidatePayload(OP_RandomReq, randomReqStruct); emit random((const randomReqStruct*)data, len, dir); break; } case OP_Emote: // old EmoteEmoteTextCode: { unk = false; emit emoteText((const emoteTextStruct*)data, len, dir); break; } case OP_CorpseLocResponse: // old CorpseLocCode: { unk = ! ValidatePayload(OP_CorpseLocResponse, corpseLocStruct); emit corpseLoc((const corpseLocStruct*)data, len, dir); break; } case OP_InspectAnswer: // old InspectDataCode: { unk = ! ValidatePayload(OP_InspectAnswer, inspectDataStruct); emit inspectData((const inspectDataStruct *)data, len, dir); break; } case OP_HPUpdate: // old NpcHpUpdateCode: { unk = ! ValidatePayload(OP_HPUpdate, hpNpcUpdateStruct); emit updateNpcHP((const hpNpcUpdateStruct*)data, len, dir); break; } case SPMesgCode: { unk = false; emit spMessage((const spMesgStruct *)data, len, dir); break; } case OP_MemorizeSpell: // old MemSpellCode: { unk = ! ValidatePayload(OP_MemorizeSpell, memSpellStruct); emit handleSpell((const memSpellStruct*)data, len, dir); break; } case OP_BeginCast: // old BeginCastCode { unk = ! ValidatePayload(OP_BeginCast, beginCastStruct); emit beginCast((const beginCastStruct*)data, len, dir); break; } case OP_CastSpell: // old StartCastCode: { unk = ! ValidatePayload(OP_CastSpell, startCastStruct); emit startCast((const startCastStruct*)data, len, dir); break; } case OP_BuffFadeMsg: // old SpellFadeCode: { unk = false; emit spellFaded((const spellFadedStruct*)data, len, dir); break; } case OP_ExpUpdate: // old ExpUpdateCode: { unk = ! ValidatePayload(OP_ExpUpdate, expUpdateStruct); emit updateExp((const expUpdateStruct*)data, len, dir); break; } case OP_LevelUpdate: // old LevelUpUpdateCode: { unk = ! ValidatePayload(OP_LevelUpdate, levelUpUpdateStruct); emit updateLevel((const levelUpUpdateStruct *)data, len, dir); break; } case OP_SkillUpdate: // old SkillIncCode { unk = ! ValidatePayload(OP_SkillUpdate, skillIncStruct); emit increaseSkill((const skillIncStruct *)data, len, dir); break; } case OP_MoveDoor: // old DoorOpenCode: { unk = false; emit doorOpen(data, len, dir); break; } case OP_Illusion: // old IllusionCode: { unk = false; emit illusion(data, len, dir); break; } case OP_ZoneChange: // old ZoneChangeCode: { unk = ! ValidatePayload(OP_ZoneChange, zoneChangeStruct); // in the process of zoning, server hasn't switched yet. emit zoneChange((const zoneChangeStruct*)data, len, dir); break; } case OP_ZoneEntry: // old ZoneEntryCode: { // We're only interested in the server version if (dir == DIR_CLIENT) { unk = ! ValidatePayload(OP_ZoneEntry, ClientZoneEntryStruct); emit zoneEntry((const ClientZoneEntryStruct*)data, len, dir); break; } unk = ! ValidatePayload(OP_ZoneEntry, ServerZoneEntryStruct); emit zoneEntry((const ServerZoneEntryStruct*)data, len, dir); break; } /* end ZoneEntryCode */ case OP_NewZone: // old - NewZoneCode: { unk = ! ValidatePayload(OP_NewZone, newZoneStruct); emit zoneNew((const newZoneStruct*)data, len, dir); if (m_vPacket) printf("New Zone at byte: %ld\n", m_vPacket->FilePos()); break; } case OP_PlayerProfile: // Character Profile server to client - old CharProfileCode { unk = false; ValidatePayload(OP_PlayerProfile, charProfileStruct); emit backfillPlayer((const charProfileStruct*)data, len, DIR_SERVER); break; } case OP_ZoneSpawns: // ZoneSpawnsCode: { unk = false; emit zoneSpawns((const zoneSpawnsStruct*)data, len, dir); break; } case OP_TimeOfDay: // old TimeOfDayCode: { unk = ! ValidatePayload(OP_TimeOfDay, timeOfDayStruct); emit timeOfDay((const timeOfDayStruct*)data, len, dir); break; } case WearChangeCode: { unk = ! ValidatePayload(WearChangeCode, wearChangeStruct); emit spawnWearingUpdate ((const wearChangeStruct*)data, len, dir); break; } case OP_Action: { unk = ! ValidatePayload(OP_Action, actionStruct); emit action((const actionStruct*)data, len, dir); break; } case OP_CastBuff: // old ActionCode: { unk = false; emit action2Message ((const action2Struct *)data, len, dir); break; } case OP_Stamina: /// old StaminaCode: { unk = ! ValidatePayload(OP_Stamina, staminaStruct); emit updateStamina((const staminaStruct *)data, len, dir); break; } case OP_GroundSpawn: // old MakeDropCode: { #ifdef PACKET_PAYLOAD_SIZE_DIAG if ((len != sizeof(makeDropStruct)) && (len != 0)) { fprintf(stderr, "WARNING: OP_GroundSpawn (%04x) (dataLen: %d != sizeof(makeDropStruct):%d or 0)\n", OP_GroundSpawn, len, sizeof(makeDropStruct)); unk = true; } else unk = false; #else unk = false; #endif emit newGroundItem((const makeDropStruct*)data, len, dir); break; } case OP_ClickObject: // Old RemDropCode: { unk = ! ValidatePayload(OP_ClickObject, remDropStruct); emit removeGroundItem((const remDropStruct *)data, len, dir); break; } case OP_ShopRequest: // old OpenVendorCode: { unk = false; emit openVendor(data, len, dir); break; } case OP_ShopEnd: // old CloseVendorCode: { unk = false; emit closeVendor(data, len, dir); break; } case OP_GMTraining: // old OpenGMCode: { unk = false; emit openGM(data, len, dir); break; } case OP_GMEndTrainingResponse: // old CloseGMCode: { unk = false; emit closeGM(data, len, dir); break; } case OP_Consider: // old ConsiderCode: { unk = false; ValidatePayload(OP_Consider, considerStruct); emit consMessage((const considerStruct*)data, len, dir); break; } case OP_TargetMouse: // old ClientTargetCode: { unk = ! ValidatePayload(OP_TargetMouse, clientTargetStruct); emit clientTarget((const clientTargetStruct*) data, len, dir); break; } case OP_SpawnDoor: // old DoorSpawnsCode: { unk = false; #ifdef PACKET_PAYLOAD_SIZE_DIAG // verify size if (len % sizeof(doorStruct) != 0) { printf("WARNING: OP_SpawnDoor (%.04x) (dataLen:%d " "%% sizeof(doorStruct):%d) != 0!\n", OP_SpawnDoor, len, sizeof(doorStruct)); unk = true; break; } #endif int nDoors = len / sizeof(doorStruct); const DoorSpawnsStruct *doorsStruct = (const DoorSpawnsStruct *)data; for (int i = 0; i < nDoors; i++) { emit newDoorSpawn(&doorsStruct->doors[i], len, dir); } emit newDoorSpawns(doorsStruct, len, dir); break; } case OP_Buff: // old BuffDropCode: { unk = ! ValidatePayload(OP_Buff, buffStruct); emit buff((const buffStruct*)data, len, dir); // this is the server 'buff fading' AND the client 'cancel buff' break; } case OP_Logout: // no contents { unk = false; emit logOut(data, len, dir); break; } case OP_SendZonePoints: { unk = false; #ifdef PACKET_PAYLOAD_SIZE_DIAG const zonePointsStruct* zp = (const zonePointsStruct*)data; // verify size if (((len - sizeof(zp->count) - sizeof(zp->unknown0xxx)) % sizeof(zonePointStruct)) != 0) { fprintf(stderr, "WARNING: OP_SendZonePoints (%04x) (dataLen: %d %% sizeof(zonePointStruct):%d) != 0!\n", OP_SendZonePoints, len, sizeof(zonePointStruct)); unk = true; break; } #endif emit zonePoints((const zonePointsStruct*)data, len, dir); break; } case OP_GuildMemberList: // old GuildMemberListCode { unk = false; break; } case OP_GuildMemberUpdate: // old GuildMemberUpdateCode: { unk = false; break; } case OP_SetRunMode: // old cRunToggleCode: { //unk = ! ValidatePayload(cRunToggleCode, cRunToggleStruct); //emit cRunToggle((const cRunToggleStruct*)data, len, dir); unk = false; break; } case OP_Jump: // old cJumpCode: { //no data unk = false; break; } case OP_Camp: // old cStartCampingCode: { //no data unk = false; break; } case OP_SenseHeading: // old cSenseHeadingCode: { //no data unk = false; break; } case OP_Forage: // old ForageCode: { //no data unk = false; break; } #if 0 // ZBTEMP : If we don't bother setting unk, don't bother processing case OP_ConsiderCorpse: //unknown contents // old cConCorpseCode: { //unk = ! ValidatePayload(cConCorpseCode, cConCorpseStruct); //emit cConCorpse((const cConCorpseStruct*)data, len, dir); break; } case OP_LootRequest: //unknown contents - old cLootCorpseCode { //unk = ! ValidatePayload(cLootCorpseCode, cLootCorpseStruct); //emit cLootCorpse((const cLootCorpseStruct*)data, len, dir); break; } case OP_EndLootRequest: //unknown contents - old cDoneLootingCode { //unk = ! ValidatePayload(cDoneLootingCode, cDoneLootingStruct); //emit cDoneLooting((const cDoneLootingStruct*)data, len, dir); break; } case OP_LootComplete: //unknown contents - old sDoneLootingCode { //unk = ! ValidatePayload(sDoneLootingCode, sDoneLootingStruct); //emit sDoneLooting((const sDoneLootingStruct*)data, len, dir); break; } case OP_WhoAllRequest: //unknown contents - old WhoAllReqCode { //unk = ! ValidatePayload(cWhoAllCode, cWhoAllStruct); //emit cWhoAll((const cWhoAllStruct*)data, len, dir); break; } case OP_WhoAllResponse: // old sWhoAllOutputCode: unknown contents { //unk = ! ValidatePayload(sWhoAllOutputCode, sWhoAllOutputStruct); //emit sWhoAllOutput((const sWhoAllOutputStruct*)data, len, dir); break; } case OP_ShopPlayerBuy: //unknown contents - old BuyItemCode { //unk = ! ValidatePayload(xBuyItemCode, xBuyItemStruct); //emit xBuyItem((const xBuyItemStruct*)data, len, dir); //both the client command and the server acknowledgement when buying break; } #endif // ZBTEMP #if 0 // ZBTEMP: OPCode Graveyard case CastOnCode: { unk = false; emit castOn((castOnStruct*)data, len, dir); break; } case ManaDecrementCode: { unk = ! ValidatePayload(ManaDecrementCode, manaDecrementStruct); emit manaChange((struct manaDecrementStruct *)data, len, dir); break; } case BadCastCode: { unk = false; //! ValidatePayload(BadCastCode, badCastStruct); emit interruptSpellCast((const badCastStruct*)data, len, dir); break; } case SysMsgCode: { unk = false; emit systemMessage((const sysMsgStruct*)data, len, dir); break; } case AltExpUpdateCode: { unk = ! ValidatePayload(AltExpUpdateCode, altExpUpdateStruct); emit updateAltExp((const altExpUpdateStruct*)data, len, dir); break; } case Attack2Code: { unk = false; emit attack2Hand1 ((const attack2Struct *)data, len, dir); break; } case NewGuildInZoneCode: { unk = false; break; } case MoneyUpdateCode: { unk = false; emit moneyUpdate((const moneyUpdateStruct*)data, len, dir); break; } case MoneyThingCode: { unk = false; emit moneyThing((const moneyThingStruct*)data, len, dir); break; } case BindWoundCode: { unk = false; emit bindWound((bindWoundStruct*)data, len, dir); break; } case GroupInfoCode: { // Too much still unknown. unk = ! ValidatePayload(GroupInfoCode, groupMemberStruct); emit groupInfo((const groupMemberStruct*)data, len, dir); break; } case GroupInviteCode: { unk = ! ValidatePayload(GroupInviteCode, groupInviteStruct); emit groupInvite((const groupInviteStruct*)data, len, dir); break; } case GroupDeclineCode: { unk = ! ValidatePayload(GroupDeclineCode, groupDeclineStruct); emit groupDecline((const groupDeclineStruct*)data, len, dir); break; } case GroupAcceptCode: { unk = ! ValidatePayload(GroupAcceptCode, groupAcceptStruct); emit groupAccept((const groupAcceptStruct*)data, len, dir); break; } case GroupDeleteCode: { unk = ! ValidatePayload(GroupDeleteCode, groupDeleteStruct); emit groupDelete((const groupDeleteStruct*)data, len, dir); break; } case CharUpdateCode: { break; } case cChatFiltersCode: { //unk = ! ValidatePayload(cChatFiltersCode, cChatFiltersStruct); //emit cChatFilters((const cChatFiltersStruct*)data, len, dir); unk = false; break; } case cOpenSpellBookCode: { //unk = ! ValidatePayload(cOpenSpellBookCode, cOpenSpellBookStruct); //emit cOpenSpellBook((const cOpenSpellBookStruct*)data, len, dir); unk = false; break; } case OP_SwapSpell: // old TradeSpellBookSlotsCode: { unk = ! ValidatePayload(OP_SwapSpell, tradeSpellBookSlotsStruct); emit tradeSpellBookSlots((const tradeSpellBookSlotsStruct*)data, len, dir); break; } case sSpellFizzleRegainCode: //unknown contents, also comes when you Forage { //unk = ! ValidatePayload(sSpellFizzleRegainCode, sSpellFizzleRegainStruct); //emit sSpellFizzleRegain((const sSpellFizzleRegainStruct*)data, len, dir); break; } case sSpellInterruptedCode: //unknown contents { //unk = ! ValidatePayload(sSpellInterruptedCode, sSpellInterruptedStruct); //emit sSpellInterrupted((const sSpellInterruptedStruct*)data, len, dir); break; } case cHideCode: { //no data unk = false; break; } case cSneakCode: { //no data unk = false; break; } case cTrackCode: { //no data unk = false; break; } #endif // ZBTEMP // Currently dead opcodes default: { } } /* end switch(opCode) */ emit decodedZonePacket(data, len, dir, opCode, unk); }