예제 #1
0
int fh_privileged( dbref target, dbref player, FLAG flag, int fflags, int reset ) {
    int has_it;

    if( !God( player ) ) {

        if( !isPlayer( player ) || ( player != Owner( player ) ) ) {
            return 0;
        }
        if( isPlayer( target ) ) {
            return 0;
        }

        if( fflags & FLAG_WORD3 ) {
            has_it = ( Flags3( player ) & flag ) ? 1 : 0;
        } else if( fflags & FLAG_WORD2 ) {
            has_it = ( Flags2( player ) & flag ) ? 1 : 0;
        } else {
            has_it = ( Flags( player ) & flag ) ? 1 : 0;
        }

        if( !has_it ) {
            return 0;
        }
    }
    return ( fh_any( target, player, flag, fflags, reset ) );
}
예제 #2
0
파일: flags.cpp 프로젝트: sanjayui/tinymux
static bool fh_ascii(dbref target, dbref player, FLAG flag, int fflags, bool reset)
{
    bool result;

    if (!isPlayer(target))
    {
        return false;
    }
    result = fh_any(target, player, flag, fflags, reset);

    if (result)
    {
        DESC *dtemp;

        DESC_ITER_PLAYER(target, dtemp)
        {
            if (!reset)
                dtemp->encoding = CHARSET_ASCII;
            else
                dtemp->encoding = dtemp->negotiated_encoding;
        }
    }

    return result;
}
예제 #3
0
int fh_dark_bit( dbref target, dbref player, FLAG flag, int fflags, int reset ) {
    if( !reset && isPlayer( target ) && !( ( target == player ) &&
                                           Can_Hide( player ) ) && ( !Wizard( player ) && !God( player ) ) ) {
        return 0;
    }
    return ( fh_any( target, player, flag, fflags, reset ) );
}
예제 #4
0
파일: match.cpp 프로젝트: sanjayui/tinymux
void match_player(void)
{
    if (md.confidence >= CON_DBREF)
    {
        return;
    }
    if (Good_obj(md.absolute_form) && isPlayer(md.absolute_form))
    {
        promote_match(md.absolute_form, CON_DBREF);
        return;
    }
    if (*md.string == LOOKUP_TOKEN)
    {
        UTF8 *p;
        for (p = md.string + 1; mux_isspace(*p); p++)
        {
            ; // Nothing.
        }
        dbref match = lookup_player(NOTHING, p, true);
        if (Good_obj(match))
        {
            promote_match(match, CON_TOKEN);
        }
    }
}
예제 #5
0
void PvpInternal::setPermFactionEnemyFlags(TangibleObject &dest)
{
	FATAL(!dest.isAuthoritative(), ("setPermFactionEnemyFlags on non-authoritative object"));

	// run through the current enemies list and remove any permanent factional enemies
	TangibleObject::PvpEnemies &enemies = dest.getPvpEnemies();
	unsigned int pos = 0;
	while (pos < enemies.size())
	{
		if (!(enemies.get(pos).expireTime) && (enemies.get(pos).enemyId == NetworkId::cms_invalid) && isFactionAligned(enemies.get(pos).enemyFaction))
			enemies.erase(pos);
		else
			++pos;
	}
	// add any permanent factional enemy flags
	Pvp::FactionId align = getAlignedFaction(dest);
	Pvp::PvpType pvpType = dest.getPvpType();

	// if player character is neutral, see if he's a mercenary
	if (PvpData::isNeutralFactionId(align) && isPlayer(dest))
	{
		align = dest.getPvpMercenaryFaction();
		pvpType = dest.getPvpMercenaryType();
	}

	if ((pvpType == PvpType_Declared) && align)
	{
		std::vector<Pvp::FactionId> const &opposingFactions = PvpFactions::getOpposingFactions(align);
		for (std::vector<Pvp::FactionId>::const_iterator j = opposingFactions.begin(); j != opposingFactions.end(); ++j)
			enemies.push_back(PvpEnemy(NetworkId::cms_invalid, *j, 0));
	}
}
예제 #6
0
파일: flags.cpp 프로젝트: sanjayui/tinymux
static bool fh_unicode(dbref target, dbref player, FLAG flag, int fflags, bool reset)
{
    if (!isPlayer(target))
    {
        return false;
    }

    if (fh_any(target, player, flag, fflags, reset))
    {
        DESC *dtemp;

        DESC_ITER_PLAYER(target, dtemp)
        {
            if (!reset)
            {
                if (CHARSET_UTF8 != dtemp->encoding)
                {
                    // Since we are changing to the UTF-8 character set, the
                    // printable state machine needs to be initialized.
                    //
                    dtemp->encoding = CHARSET_UTF8;
                    dtemp->raw_codepoint_state = CL_PRINT_START_STATE;
                }
            }
            else
            {
                dtemp->encoding = dtemp->negotiated_encoding;
            }
        }
        return true;
    }
    return false;
}
예제 #7
0
char *flag_description( dbref player, dbref target ) {
    char *buff, *bp;

    FLAGENT *fp;

    int otype;

    FLAG fv;

    /*
     * Allocate the return buffer
     */

    otype = Typeof( target );
    bp = buff = alloc_mbuf( "flag_description" );

    /*
     * Store the header strings and object type
     */

    safe_mb_str( ( char * ) "Type: ", buff, &bp );
    safe_mb_str( ( char * ) object_types[otype].name, buff, &bp );
    safe_mb_str( ( char * ) " Flags:", buff, &bp );
    if( object_types[otype].perm != CA_PUBLIC ) {
        return buff;
    }
    /*
     * Store the type-invariant flags
     */

    for( fp = gen_flags; fp->flagname; fp++ ) {
        if( fp->flagflag & FLAG_WORD3 ) {
            fv = Flags3( target );
        } else if( fp->flagflag & FLAG_WORD2 ) {
            fv = Flags2( target );
        } else {
            fv = Flags( target );
        }
        if( fv & fp->flagvalue ) {
            if( ( fp->listperm & CA_WIZARD ) && !Wizard( player ) ) {
                continue;
            }
            if( ( fp->listperm & CA_GOD ) && !God( player ) ) {
                continue;
            }
            /*
             * don't show CONNECT on dark wizards to mortals
             */
            if( isPlayer( target ) && isConnFlag( fp ) &&
                    Can_Hide( target ) && Hidden( target ) &&
                    !See_Hidden( player ) ) {
                continue;
            }
            safe_mb_chr( ' ', buff, &bp );
            safe_mb_str( ( char * ) fp->flagname, buff, &bp );
        }
    }

    return buff;
}
예제 #8
0
MagicType Creature::getCastingType() const {
    CreatureClass cls = getClass();

    if(isPlayer()) {
        if(getAsConstPlayer()->getSecondClass() == CreatureClass::MAGE)
            cls = CreatureClass::MAGE;
        else if(getAsConstPlayer()->getSecondClass() == CreatureClass::CLERIC)
            cls = CreatureClass::CLERIC;
    }

    switch(cls) {
        case CreatureClass::DUNGEONMASTER:
        case CreatureClass::CARETAKER:
        case CreatureClass::BUILDER:

        // pure arcane
        case CreatureClass::MAGE:
        case CreatureClass::LICH:
        // hybrid arcane
        case CreatureClass::BARD:
        case CreatureClass::PUREBLOOD:
            return(Arcane);
        // pure divine
        case CreatureClass::CLERIC:
        case CreatureClass::DRUID:
        // hybrid divine
        case CreatureClass::PALADIN:
        case CreatureClass::RANGER:
        case CreatureClass::DEATHKNIGHT:
            return(Divine);
        default:
            return(NO_MAGIC_TYPE);
    }
}
예제 #9
0
파일: Unit.cpp 프로젝트: gdxn96/swarm-wars
void Unit::changeState(UNIT_STATE state)
{
	if ((isPlayer() && !m_isSelected && m_state == UNIT_STATE::WAITING))
	{
		//return;
	}
	if (m_state != state)
	{
		if (!m_isSelected || (m_isSelected && !isPlayer() && m_state == UNIT_STATE::WAITING) || (!isPlayer() && m_state == UNIT_STATE::FIRING))
		{
			m_previousState = m_state;
			m_state = state;
		}
	}
		
}
예제 #10
0
int has_flag( dbref player, dbref it, char *flagname ) {
    FLAGENT *fp;

    FLAG fv;

    fp = find_flag( it, flagname );
    if( fp == NULL ) {	/* find_flag() uppercases the string */
        if( !strcmp( flagname, "PLAYER" ) ) {
            return isPlayer( it );
        }
        if( !strcmp( flagname, "THING" ) ) {
            return isThing( it );
        }
        if( !strcmp( flagname, "ROOM" ) ) {
            return isRoom( it );
        }
        if( !strcmp( flagname, "EXIT" ) ) {
            return isExit( it );
        }
        return 0;
    }
    if( fp->flagflag & FLAG_WORD3 ) {
        fv = Flags3( it );
    } else if( fp->flagflag & FLAG_WORD2 ) {
        fv = Flags2( it );
    } else {
        fv = Flags( it );
    }

    if( fv & fp->flagvalue ) {
        if( ( fp->listperm & CA_WIZARD ) && !Wizard( player ) ) {
            return 0;
        }
        if( ( fp->listperm & CA_GOD ) && !God( player ) ) {
            return 0;
        }
        /*
         * don't show CONNECT on dark wizards to mortals
         */
        if( isPlayer( it ) && isConnFlag( fp ) &&
                Can_Hide( it ) && Hidden( it ) && !See_Hidden( player ) ) {
            return 0;
        }
        return 1;
    }
    return 0;
}
예제 #11
0
HS_DBREF CHSInterface::ConsoleUser(int objnum)
{
    HS_DBREF dbUser;

    dbUser = GetLock(objnum, LOCK_USE);

    if (dbUser == HSNOTHING || objnum == HSNOTHING)
        return HSNOTHING;

#ifndef TM3
    if (IsPlayer(dbUser))
#else
    if (isPlayer(dbUser))
#endif
    {
        // If the user is not in the same location as the object,
        // set the lock to the object and return NOTHING.
#ifdef PENNMUSH
        if (Location(dbUser) != Location(objnum)
            || !HasFlag(dbUser, TYPE_PLAYER, PLAYER_CONNECT)
            && IsPlayer(dbUser))
#else
        if (Location(dbUser) != Location(objnum) || !Connected(dbUser)
            && isPlayer(dbUser))
#endif
        {
            SetLock(objnum, objnum, LOCK_USE);


            // Delete attribute from player.
            hsInterface.AtrDel(dbUser, "MCONSOLE", GOD);
#ifdef PENNMUSH
            notify_except(db[Location(objnum)].contents, dbUser,
                          tprintf("%s unmans the %s.", Name(dbUser),
                                  Name(objnum)), 0);
#else
            notify_except(Location(objnum), dbUser, NOTHING,
                          tprintf("%s unmans the %s.", Name(dbUser),
                                  Name(objnum)), 0);
#endif

            return NOTHING;
        }
    }

    return dbUser;
}
예제 #12
0
void Character::collisionAction(Character *c) {
	if(!c || (c->isNPC() || !isNPC()) || (c->isPlayer() || !isPlayer())) {
		// Stop movement timer
		m_movementTimer.stop();
		
		// Update collision state
		m_inCollision = true;
		
		// Exit function to avoid problems if c == NULL
		return;
	}
	
	if(c->isMonster() && isPlayer()) {
		// Hurt player
		hurt(m_x + m_hitboxW / 2 - c->x() + c->hitboxW() / 2, m_y + m_hitboxH / 2 - c->y() + c->hitboxH() / 2);
	}
}
예제 #13
0
bool Creature::isPureCaster() const {
    int second = isPlayer() ? getAsConstPlayer()->hasSecondClass() : 0;
    return( (cClass == CreatureClass::MAGE && !second) ||
            cClass == CreatureClass::LICH ||
            (cClass == CreatureClass::CLERIC && !second) ||
            cClass == CreatureClass::DRUID
    );
}
예제 #14
0
파일: GoBoard.cpp 프로젝트: Vallalan/Go
/*
  Determines if the position is available to have a stone placed in it

  param x,y: integer coordinates of the stone to place

  return bool: whether a stone can be placed there
*/
bool GoBoard::isValidMove( int x, int y)
{
  if( isOnBoard( x, y ) && isPlayer( EMPTY, x, y ) && !isKo( x, y ))
    {
      return true;
    }
  return false;
}
예제 #15
0
파일: powers.c 프로젝트: TinyMUSH/TinyMUSH
int ph_restrict_player(dbref target, dbref player, POWER power, int fpowers, int reset)
{
    if (isPlayer(target) && !Wizard(player) && !God(player)) {
	return 0;
    }

    return (ph_any(target, player, power, fpowers, reset));
}
예제 #16
0
// NFY_DRAIN or NFY_NFYALL
//
static int CallBack_NotifySemaphoreDrainOrAll(PTASK_RECORD p)
{
    if (p->fpTask == Task_SemaphoreTimeout)
    {
        // This represents a semaphore.
        //
        BQUE *point = (BQUE *)(p->arg_voidptr);
        if (  point->sem == Notify_Sem
           && (  point->attr == Notify_Attr
              || !Notify_Attr))
        {
            Notify_Num_Done++;
            if (Notify_Key == NFY_DRAIN)
            {
                // Discard the command
                //
                giveto(point->executor, mudconf.waitcost);
                a_Queue(Owner(point->executor), -1);

                for (int i = 0; i < MAX_GLOBAL_REGS; i++)
                {
                    if (point->scr[i])
                    {
                        RegRelease(point->scr[i]);
                        point->scr[i] = NULL;
                    }
                }

                MEMFREE(point->text);
                point->text = NULL;
                free_qentry(point);

                return IU_REMOVE_TASK;
            }
            else
            {
                // Allow the command to run. The priority may have been
                // PRIORITY_SUSPEND, so we need to change it.
                //
                if (isPlayer(point->enactor))
                {
                    p->iPriority = PRIORITY_PLAYER;
                }
                else
                {
                    p->iPriority = PRIORITY_OBJECT;
                }
                p->ltaWhen.GetUTC();
                p->fpTask = Task_RunQueueEntry;
                return IU_UPDATE_TASK;
            }
        }
    }
    return IU_NEXT_TASK;
}
예제 #17
0
static int CallBack_HaltQueue(PTASK_RECORD p)
{
    if (  p->fpTask == Task_RunQueueEntry
#ifdef QUERY_SLAVE
       || p->fpTask == Task_SQLTimeout
#endif // QUERY_SLAVE
       || p->fpTask == Task_SemaphoreTimeout)
    {
        // This is a @wait, timed Semaphore Task, or timed SQL Query.
        //
        BQUE *point = (BQUE *)(p->arg_voidptr);
        if (que_want(point, Halt_Player_Target, Halt_Object_Target))
        {
            // Accounting for pennies and queue quota.
            //
            dbref dbOwner = point->executor;
            if (!isPlayer(dbOwner))
            {
                dbOwner = Owner(dbOwner);
            }
            if (dbOwner != Halt_Player_Run)
            {
                if (Halt_Player_Run != NOTHING)
                {
                    giveto(Halt_Player_Run, mudconf.waitcost * Halt_Entries_Run);
                    a_Queue(Halt_Player_Run, -Halt_Entries_Run);
                }
                Halt_Player_Run = dbOwner;
                Halt_Entries_Run = 0;
            }
            Halt_Entries++;
            Halt_Entries_Run++;
            if (p->fpTask == Task_SemaphoreTimeout)
            {
                add_to(point->sem, -1, point->attr);
            }

            for (int i = 0; i < MAX_GLOBAL_REGS; i++)
            {
                if (point->scr[i])
                {
                    RegRelease(point->scr[i]);
                    point->scr[i] = NULL;
                }
            }

            MEMFREE(point->text);
            point->text = NULL;
            free_qentry(point);
            return IU_REMOVE_TASK;
        }
    }
    return IU_NEXT_TASK;
}
예제 #18
0
void RegularBattleScene::onHpChange(int spot, int)
{
    info.animatedSpot = spot;
    if (isPlayer(spot) && info.percentage[spot]) {
        info.animatedValue = gui.bars[spot]->value() * data()->poke(spot).totalLife() / 100;
    } else {
        info.animatedValue = gui.bars[spot]->value();
    }
    pause();
    animateHpBar();
}
예제 #19
0
파일: powers.c 프로젝트: TinyMUSH/TinyMUSH
int ph_privileged(dbref target, dbref player, POWER power, int fpowers, int reset)
{
    if (!God(player)) {
	if (!isPlayer(player) || (player != Owner(player))) {
	    return 0;
	}

	if (isPlayer(target)) {
	    return 0;
	}

	if (Powers(player) & power) {
	    return (ph_any(target, player, power, fpowers, reset));
	} else {
	    return 0;
	}
    }

    return (ph_any(target, player, power, fpowers, reset));
}
예제 #20
0
bool Creature::isHybridCaster() const {
    CreatureClass second = isPlayer() ? getAsConstPlayer()->getSecondClass() : CreatureClass::NONE;
    return( cClass == CreatureClass::BARD ||
            cClass == CreatureClass::DEATHKNIGHT ||
            cClass == CreatureClass::PALADIN ||
            cClass == CreatureClass::RANGER ||
            cClass == CreatureClass::PUREBLOOD ||
            second == CreatureClass::MAGE ||
            (cClass == CreatureClass::MAGE && second != CreatureClass::NONE) ||
            (cClass == CreatureClass::CLERIC && second != CreatureClass::NONE)
    );
}
예제 #21
0
파일: flags.cpp 프로젝트: sanjayui/tinymux
static bool fh_dark_bit(dbref target, dbref player, FLAG flag, int fflags, bool reset)
{
    if (  !reset
       && isPlayer(target)
       && !(  (target == player)
           && Can_Hide(player))
       && !Wizard(player))
    {
        return false;
    }
    return (fh_any(target, player, flag, fflags, reset));
}
예제 #22
0
void do_report(dbref executor, dbref caller, dbref enactor, int extra)
{
    UNUSED_PARAMETER(caller);
    UNUSED_PARAMETER(enactor);
    UNUSED_PARAMETER(extra);

    char *buff = alloc_mbuf("do_report");
    int nBin[NPERIODS];
    int i;

    for (i = 0; i < NPERIODS; i++)
    {
        nBin[i] = 0;
    }

    CLinearTimeAbsolute ltaNow, ltaPlayer;
    ltaNow.GetLocal();

    const int PeriodInSeconds = 28800;

    int iPlayer;
    DO_WHOLE_DB(iPlayer)
    {
        if (isPlayer(iPlayer))
        {
            int aowner, aflags;
            char *player_last = atr_get(iPlayer, A_LAST, &aowner, &aflags);

            if (ltaPlayer.SetString(player_last))
            {
                CLinearTimeDelta ltd(ltaPlayer, ltaNow);
                int ltdSeconds = ltd.ReturnSeconds();
                int iBin = ltdSeconds / PeriodInSeconds;
                if (0 <= iBin && iBin < NPERIODS)
                {
                    nBin[iBin]++;
                }
            }
            free_lbuf(player_last);
        }
    }

    int iHour, nSum = 0;
    notify(executor, "Day   Hours     Players  Total");
    for (i = 0, iHour = 0; i < NPERIODS; i++, iHour += 8)
    {
        nSum += nBin[i];
        mux_sprintf(buff, MBUF_SIZE, "%3d %03d - %03d: %6d %6d",
            iHour/24 + 1, iHour, iHour+8, nBin[i], nSum);
        notify(executor, buff);
    }
    free_mbuf(buff);
}
예제 #23
0
파일: flags.cpp 프로젝트: sanjayui/tinymux
/* ---------------------------------------------------------------------------
 * fh_privileged: You can set this flag on a non-player object, if you
 * yourself have this flag and are a player who owns themselves (i.e.,
 * no robots). Only God can set this on a player.
 */
static bool fh_privileged
(
    dbref target,
    dbref player,
    FLAG flag,
    int fflags,
    bool reset
)
{
    if (!God(player))
    {
        if (  isPlayer(target)
#if !defined(FIRANMUX)
           || !isPlayer(player)
           || player != Owner(player)
#endif // FIRANMUX
           || (db[player].fs.word[fflags] & flag) == 0)
        {
            return false;
        }
    }
    return (fh_any(target, player, flag, fflags, reset));
}
예제 #24
0
파일: Unit.cpp 프로젝트: gdxn96/swarm-wars
void Unit::setTargetAngle(float targetAngle)
{
	if (targetAngle != 2 * PI && targetAngle != m_targetAngle)
	{
		m_targetAngle = NormalizeAngle(targetAngle);
		m_state = UNIT_STATE::MOVING;
	}
	else if (isPlayer() && targetAngle != m_targetAngle)
	{
		m_targetAngle = m_positionAngle;
		m_state = UNIT_STATE::WAITING;
	}
	
}
예제 #25
0
RegularBattleScene::RegularBattleScene(battledata_ptr dat, BattleDefaultTheme *theme, bool logNames) : mData(dat), unpausing(false),
    pauseCount(0), info(dat->numberOfSlots()), mLogNames(logNames)
{
    gui.theme = theme;

    /* Sets the bar in non-percentage mode for players */
    for (int i = 0; i < data()->numberOfSlots(); i++) {
        if (isPlayer(i)) {
            info.percentage[i] = false;
        }
    }

    setupGui();
    updateTimers();
}
예제 #26
0
파일: flags.cpp 프로젝트: sanjayui/tinymux
/* ---------------------------------------------------------------------------
 * fh_player_bit: Can set and reset this on everything but players.
 */
static bool fh_player_bit
(
    dbref target,
    dbref player,
    FLAG flag,
    int fflags,
    bool reset
)
{
    if (isPlayer(target))
    {
        return false;
    }
    return (fh_any(target, player, flag, fflags, reset));
}
예제 #27
0
파일: flags.cpp 프로젝트: sanjayui/tinymux
/*
 * ---------------------------------------------------------------------------
 * * fh_restrict_player (renamed from fh_fixed): Only Wizards can set
 * * this on players, but ordinary players can set it on other types
 * * of objects.
 */
static bool fh_restrict_player
(
    dbref target,
    dbref player,
    FLAG flag,
    int fflags,
    bool reset
)
{
    if (  isPlayer(target)
       && !Wizard(player))
    {
        return false;
    }
    return (fh_any(target, player, flag, fflags, reset));
}
예제 #28
0
파일: betting.cpp 프로젝트: silliaris/poker
int betRound() {
	
	int bet;
	P_PLAYER playerOnTurn = game.flow.pCurrentPlayer;
	if (game.flow.round == 0)
		playerOnTurn = game.bet.smallBlindPlayer;

	//auto-bets
	if (game.flow.round == 0) {
		smallBlindBet(playerOnTurn);
		playerOnTurn = nextPlayer();
		bigBlindBet(playerOnTurn);
		playerOnTurn = nextPlayer();
	}

	//manual bets
	for (int i = 0; i < MAX_PLAYERS; i++) {
		printf("Player on turn: %s - %d\n", playerOnTurn->name, i);

		if (playerOnTurn->isInGame && !playerOnTurn->allIn) {
			if (isPlayer(playerOnTurn))
				bet = betPlayer(playerOnTurn);
			else
				bet = betAI(playerOnTurn);

			switch (bet) {
				case -1: //fold
					playerOnTurn->isInGame = 0;
					break;
				case 0:	//check
					break;
				default: //raise - resatrt bet round
					i = -1;
					break;
			}
		}
		
		playerOnTurn = nextPlayer();
		
		//end betting if other players folded
		if (countPlayersInGame() < 2)
			return 0;
	}
	return 1;
}
예제 #29
0
파일: flags.cpp 프로젝트: sanjayui/tinymux
static bool fh_hear_bit(dbref target, dbref player, FLAG flag, int fflags, bool reset)
{
    if (isPlayer(target) && (flag & MONITOR))
    {
        if (Can_Monitor(player))
        {
            return (fh_any(target, player, flag, fflags, reset));
        }
        else
        {
            return false;
        }
    }

    bool could_hear = Hearer(target);
    bool result = fh_any(target, player, flag, fflags, reset);
    handle_ears(target, could_hear, Hearer(target));
    return result;
}
예제 #30
0
TRIGGER( targetobj )(obj user, obj usedon)
{
  if(usedon == NULL())
  {
    removeObjVar(this, "bountyPlayer");
    removeObjVar(this, "bountyPlayerName");
    return(0x00);
  }
  if(!isPlayer(usedon))
  {
    removeObjVar(this, "bountyPlayer");
    removeObjVar(this, "bountyPlayerName");
    return(0x00);
  }
  systemMessage(user, getName(usedon) + " selected.");
  setObjVar(this, "bountyPlayer", usedon);
  setObjVar(this, "bountyPlayerName", getName(usedon));
  return(0x00);
}