void AXHackTrigger::Tick(float DeltaSeconds) { Super::Tick(DeltaSeconds); for (int32 i = 0; i < Users.Num(); i++) { if (!Users[i].bUsing) continue; AXCharacter* XCharacter = Cast<AXCharacter>(Users[i].UserController->GetPawn()); UXCharacterMovement* XCharacterMovement = Cast<UXCharacterMovement>(XCharacter->GetCharacterMovement()); int32 UserTeam = XCharacter->GetTeamNum(); if (UserTeam != TeamNum) { float NeededSkill = XCharacter->HackCost * XCharacter->HackRate * DeltaSeconds; if (XCharacterMovement->HasNeededSkill(NeededSkill)) { float Hackage = XCharacter->HackRate * DeltaSeconds; TeamProgress[UserTeam] += Hackage; Users[i].ProgressValue += Hackage; XCharacterMovement->UseSkill(NeededSkill); } } } if (Users.Num()>0) { for (int32 i = 0; i < ARRAY_COUNT(TeamProgress); i++) { if (TeamProgress[i]>TotalHackSeconds) { HandleHacked(i); } } } DecayHackProcess(DeltaSeconds); RemoveIdleUsers(); if (UserCount(0, true) + UserCount(1, true) == 0) { CurrentAmbientSound = NULL; AmbientSoundUpdated(); } if (!ProgressExists()) { SetActorTickEnabled(false); } }
void printuser(const user* u) { if (u != NULL) { heading_fill("Name | Jobs"); const user* start=u; const int count = UserCount(u); for (int i=0;i<count;i++) { u=start; while (u != NULL) { if (UserNo(start,u)==i) { int initial = printf ("%s%-18s| ",UserColourStr(i,1),u->realname) - strlen(UserColourStr(i,1)); for (;initial<(twidth);initial++) {printf(" ");} //fill in some white space printf("\n"); printSomeJobs(u->jobs,R,u->runcount); printSomeJobs(u->jobs,Q,u->queuecount); printSomeJobs(u->jobs,S,0); printf("%s",resetstr); } u=u->next; } } } }
void AXHackTrigger::DecayHackProcess(float DeltaTime) { for (int32 i = 0; i < ARRAY_COUNT(TeamProgress); i++) { if (TeamProgress[i]>0 && UserCount(i, true) == 0) { if (UserCount(i) > 0) { for (int32 u = 0; u < Users.Num(); u++) { AXPlayerController* XController = Users[u].UserController; if (XController->GetTeamNum() == TeamNum) { Users[u].ProgressValue = FMath::Max<float>(0.f, Users[u].ProgressValue - DecayRate * DeltaTime / UserCount(u)); } } } TeamProgress[i] = FMath::Max<float>(0.f, TeamProgress[i] - DecayRate * DeltaTime); } } }