void cPartys::receive( pClient ps ) { static AmxFunction* addMem, *delMem, *lootMode, *accept, *decline = NULL; if( decline==NULL ) { addMem = new AmxFunction("party_onAddMember"); delMem = new AmxFunction("party_onDelMember"); lootMode = new AmxFunction("party_onCanLoot"); accept = new AmxFunction("party_onAccept"); decline = new AmxFunction("party_onDecline"); } cSubPacketParty<cClientPacket> pkg; pkg.receive( ps ); switch( pkg.subsubcommand ) { case PARTY_SUBCMD_ADD: { clPacketAddPartyMember subpkg; subpkg.receive( ps ); if( subpkg.member.get()==0 ) { addMem->Call( ps->currCharIdx() ); } break; } case PARTY_SUBCMD_REMOVE: { clPacketRemovePartyMember subpkg; subpkg.receive( ps ); uint32_t toRemove = subpkg.member.get(); if( toRemove==0 ) { delMem->Call( ps->currCharIdx(), INVALID ); } else { pChar pc = cSerializable::findCharBySerial( toRemove ); if ( ! pc ) return; delMem->Call( ps->currCharIdx(), pc->getSerial() ); } break; } case PARTY_SUBCMD_MESSAGE: { clPacketPartyTellMessage subpkg; subpkg.receive( ps ); pChar pc = ps->currChar(); P_PARTY party = getParty( pc->party ); if( party!=NULL ) { party->privateMessage( ps->currCharIdx(), subpkg.member.get(), subpkg.message ); if( ps->currCharIdx()!=subpkg.member.get() ) party->privateMessage( ps->currCharIdx(), ps->currCharIdx(), subpkg.message ); } break; } case PARTY_SUBCMD_BROADCAST: { clPacketPartyTellAllMessage subpkg; subpkg.receive( ps ); pChar pc = ps->currChar(); P_PARTY party = getParty( pc->party ); if( party!=NULL ) party->talkToOthers( ps->currCharIdx(), subpkg.message ); break; } case PARTY_SUBCMD_CANLOOT: { clPacketPartyCanLoot subpkg; subpkg.receive( ps ); lootMode->Call( ps->currCharIdx(), subpkg.canLoot ); break; } case PARTY_SUBCMD_ACCEPT: { clPacketPartyAccept subpkg; subpkg.receive( ps ); accept->Call( ps->currCharIdx(), subpkg.leader.get() ); break; } case PARTY_SUBCMD_DECLINE: { clPacketPartyDecline subpkg; subpkg.receive( ps ); decline->Call( ps->currCharIdx(), subpkg.leader.get() ); break; } } }
void PlayerDataProvider::removeParty(int32_t id) { if (Party *party = getParty(id)) { m_parties.erase(id); delete party; } }
s32 main(s32 argc, char *argv[]) { FILE *fp; saveData save; char newName[180] = { 0 }; char mapName[25][3][25]; char charName[50][10]; u8 saveFile[0x11eb4]; u32 i, j; u32 doRename = 0, party = 0, image = 0, verbose = 0, dummy = 0, precision = 7; s32 opt; for (i = 0; i < 25; i++) for (j = 0; j < 3; j++) sprintf(mapName[i][j], "Area %i, Sublevel %i", i, j); sprintf(mapName[0][0], "Cleared Data"); sprintf(mapName[1][1], "Colony 9"); sprintf(mapName[1][2], "New Colony 9"); sprintf(mapName[2][1], "Tephra Cave"); sprintf(mapName[3][1], "Bionis\' Leg"); sprintf(mapName[4][1], "Colony 6"); sprintf(mapName[4][2], "Ether Mine"); sprintf(mapName[5][1], "Satorl Marsh"); sprintf(mapName[6][1], "Makna Forest"); sprintf(mapName[7][1], "Frontier Village"); sprintf(mapName[8][1], "Bionis\' Shoulder"); sprintf(mapName[9][1], "High Entia Tomb"); sprintf(mapName[10][1], "Eryth Sea"); sprintf(mapName[11][1], "Alcamoth"); sprintf(mapName[12][1], "Prison Island"); sprintf(mapName[12][2], "Fallen Prison Island"); sprintf(mapName[13][1], "Valak Mountain"); sprintf(mapName[14][1], "Sword Valley"); sprintf(mapName[15][1], "Galahad Fortress"); sprintf(mapName[16][1], "Fallen Arm"); sprintf(mapName[16][2], "Fallen Arm"); sprintf(mapName[17][1], "Mechonis Field"); sprintf(mapName[19][1], "Agniratha"); sprintf(mapName[20][1], "Central Factory"); sprintf(mapName[21][1], "Bionis\' Interior"); sprintf(mapName[22][1], "Memory Space"); sprintf(mapName[23][1], "Mechonis Core"); sprintf(mapName[24][1], "Junks"); for (i = 0; i < 50; i++) sprintf(charName[i], "Char %i", i); sprintf(charName[1], "Shulk"); sprintf(charName[2], "Ryen"); sprintf(charName[3], "Fiora"); sprintf(charName[4], "Dunban"); sprintf(charName[5], "Sharla"); sprintf(charName[6], "Riki"); sprintf(charName[7], "Melia"); sprintf(charName[8], "Fiora"); sprintf(charName[9], "Dickson"); sprintf(charName[10], "Mumkhar"); sprintf(charName[11], "Alvis"); sprintf(charName[17], "Vanea"); sprintf(charName[25], "Juju"); sprintf(charName[26], "Otharon"); sprintf(charName[27], "Dickson"); sprintf(charName[28], "Dickson"); sprintf(charName[42], "Alvis"); while ((opt = getopt(argc, argv, "a:rpiv")) != -1) { switch (opt) { case 'a': precision = atoi(optarg); break; case 'r': doRename = 1; break; case 'p': party = 1; break; case 'i': image = 1; break; case 'v': verbose = 1; break; default: usage(argv[0]); return 0; break; } } if (optind != argc - 1) { usage(argv[0]); return 0; } if (!doRename && !image) doRename = 1; if (party) doRename = 1; fp = fopen(argv[optind], "rb"); if (fp == NULL) { printf("Could not open %s\n", argv[1]); return 0; } fseek(fp, 0L, SEEK_END); if (ftell(fp) != 0x28000) { printf("Not a Xenoblade save file\n"); return 0; } fseek(fp, 0, SEEK_SET); fread(&saveFile, 0x11eb4, 1, fp); fclose(fp); if (memcmp(saveFile, "USRD", 4) != 0) { if (memcmp(saveFile, "DMMY", 4) == 0) { sprintf(newName, "Dummy save file"); if (verbose) printf("Dummy save file\n"); dummy = 1; } else { printf("Not a Xenoblade save file\n"); return 0; } } if (!dummy) { save = parseSave(saveFile); if (doRename) getData(&save, newName, mapName); if (party) getParty(&save, newName, charName, precision); if (image) convPic(doRename ? newName : argv[optind], saveFile); if (verbose) printSave(&save, charName, mapName); } sprintf(newName + strlen(newName), ".xbsave"); if (verbose && doRename) printf("Renaming to %s\n\n", newName); if ((doRename || dummy) && rename(argv[optind], newName)) printf("Could not rename to %s\n\n", newName); return 0; }