示例#1
0
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;
		}
	}

}
示例#2
0
void PlayerDataProvider::removeParty(int32_t id) {
	if (Party *party = getParty(id)) {
		m_parties.erase(id);
		delete party;
	}
}
示例#3
0
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;
}