//void LandSatt(int &isp) void CheckBallLanded(int ¤t_player) { if (isplaying[current_player].BallLanded == true || isplaying[current_player].BallInHole) { isplaying[current_player].BallLanded = false; isplaying[current_player].score++; if (isplaying[current_player].BallInHole) { players.finished_hole++; } if (players.finished_hole == players.players) { ++ActiveGolfCourse; if(ActiveGolfCourse==9 || players.tournament==false) { if(players.tournament) { players.finished=true; //Gör det möjligt att komma in på highscore Highscore(DSurface.InitPlayerSurface,isplaying,players); } for(int i=0; i < NUMBER_OF_PLAYERS; i++) { isplaying[i].BallInHole=false; } players = Players(); } else { bredd=GolfCourseWidth[ActiveGolfCourse]; hojd=GolfCourseHeight[ActiveGolfCourse]; yta=tyta[ActiveGolfCourse]; players.finished_hole = 0; for(int i=0; i<players.players; i++) { isplaying[i].BallInHole=false; isplaying[i].ball=GolfBallPosition[ActiveGolfCourse]; } current_player = 0; BreddHojd(isplaying[current_player].ball); //Centrerar skärmen } // Byt bana } else { while (isplaying[(++current_player) % players.players].BallInHole == true) //Stegar frammåt till nästa spelare som itne satt den ; current_player %= players.players; BreddHojd(isplaying[current_player].ball); } } }
NamedScript void AddXP(int PlayerNum, long int XP, long int Rank) { // Scale XP/Rank Gains using the XP Scaling Option XP = (int)(XP * GetCVarFixed("drpg_scalexp")); Players(PlayerNum).ComboTimer = COMBO_MAX; Players(PlayerNum).Combo++; Players(PlayerNum).XPGained += XP; Players(PlayerNum).RankGained += Rank; Players(PlayerNum).Payout.XP += XP; Players(PlayerNum).Payout.Rank += Rank; if (Players(PlayerNum).Aura.Type[AURA_WHITE].Active) { if (Players(PlayerNum).Aura.Time > 0) Players(PlayerNum).Combo++; if (Player.Aura.Type[AURA_WHITE].Level >= 3 && XP > 0 && Rank > 0) Players(PlayerNum).BonusGained += XP + Rank; } }
void CDynGameData::CheckBurn() { int a;//,mod; for(a=0; a<Players().size(); a++) if (!Players()[a]->iDead) { Players()[a]->CheckBurning( this ); } std::vector< CEnemy >::iterator iter = iRuntimeData->Enemies().begin(); while(iter != iRuntimeData->Enemies().end() ) { if (iter->CheckBurning( this )) { iRuntimeData->KillEnemy( iter ); } else ++iter; } }
bool CDynGameData::TestEnemyLocation( CCoord<int>& aPos, bool aStrictCheck ) { int plyDist = KCharacterSpriteSize; const int KEnemyRad = 9; if ( aStrictCheck ) plyDist = KCharacterSpriteSize*5; if (iRuntimeData->Level().Reachable( aPos.Add(KBlockSpriteSize/2, KBlockSpriteSize/2).Div( KBlockSpriteSize ) ) ) { std::vector< CEnemy >::iterator iter = iRuntimeData->Enemies().begin(); while(iter != iRuntimeData->Enemies().end() ) { if (CMath::GetDist(aPos,iter->Location()) < KEnemyRad*2 ) { DEBUG1("CDynGameData::TestEnemyLocation: other enemy %s too close.\n",iter->Location().String().c_str() ); return false; } ++iter; } for(int b=0; b < iRuntimeData->Level().StartPositions() && !aStrictCheck; b++) { // don't put enemies on start blocks. if (CMath::GetDist( aPos, iRuntimeData->Level().StartPosition( b ).Mul( KBlockSpriteSize )) < KBlockSpriteSize ) { DEBUG0("CDynGameData::TestEnemyLocation: enemy on startblock\n"); return false; } } for(int c=0; c < Players().size(); c++) { if ( CMath::GetDist( aPos, iAnyPlayer[c]->Location() ) < plyDist ) { DEBUG0("CDynGameData::TestEnemyLocation: player too close\n"); return false; } } return true; } else { DEBUG0("CDynGameData::TestEnemyLocation: enemy unreachable\n"); return false; } }
// Arena Script NamedScript MapSpecial void ArenaLoop() { int BonusRandomizer, Buttons, OldButtons; bool Ready; ArenaSetEnvironment(AEVENT_NONE); // Arena Loop while (true) { // Stop the script if the Arena is stopped or the Arena activator dies if (!ArenaActive || ClassifyActor(Players(ArenaPlayerNumber).TID) & ACTOR_DEAD) { ArenaStop(); return; } // Arena HUD ArenaDrawHUD(); // Arena Status Handling if (ArenaState == ARENA_INTERMISSION) { BonusRandomizer = Random(-10, ABONUS_MAX - 1); ArenaMod = -1; ArenaGetBonus(BonusRandomizer); ArenaSetEnvironment(AEVENT_NONE); ArenaState = ARENA_WAITING; } else if (ArenaState == ARENA_WAITING) { Buttons = GetPlayerInput(ArenaPlayerNumber, INPUT_BUTTONS); OldButtons = GetPlayerInput(ArenaPlayerNumber, INPUT_OLDBUTTONS); Ready = true; SetHudSize(0, 0, false); SetFont("BIGFONT"); if (ArenaPlayerNumber == PlayerNumber()) { if (!Player.InMenu && !Player.InShop && !Player.OutpostMenu) { HudMessage("Press \Cd%jS\C- to start the next wave\nPress \Cd%jS\C- to exit the Arena", "+use" , "+speed"); EndHudMessage(HUDMSG_PLAIN, 0, "White", 1.5, 0.75, 0.05); } if (Buttons & BT_USE && (!Player.InMenu && !Player.InShop && !Player.OutpostMenu && !Player.CrateOpen) && !Player.MenuBlock) { // Check to see if others are still in the menu for (int i = 0; i < MAX_PLAYERS; i++) if (Players(i).InMenu || Players(i).InShop) Ready = false; if (Ready) { ArenaKeyTimer++; ArenaKeyTimerType = AKTIMER_CONTINUE; if (ArenaKeyTimer > ARENA_HOLDTIME) { // Multiplayer Countdown if (InMultiplayer) { SetFont("BIGFONT"); for (int i = 3; i > 0; i--) { HudMessage("%d", i); EndHudMessageBold(HUDMSG_FADEOUT, 0, "Green", 0.5, 0.5, 0.25, 0.75); Delay(35); } } ArenaWave++; ArenaState = ARENA_READY; } } else { PrintError("Someone is currently in a menu"); ActivatorSound("menu/error", 127); } } else if (Buttons & BT_SPEED && (!Player.InMenu && !Player.InShop && !Player.OutpostMenu && !Player.CrateOpen)) { ArenaKeyTimer++; ArenaKeyTimerType = AKTIMER_STOP; if (ArenaKeyTimer > ARENA_HOLDTIME) { ArenaStop(); return; } } else ArenaKeyTimer = 0; // Reset menu block if (Buttons == 0 && OldButtons == 0) Player.MenuBlock = false; } }