mirror of
https://github.com/Terncode/pixel.horse.git
synced 2026-09-25 22:25:53 +02:00
Merge branch 'archive' into archive-update-v0.53.2
This commit is contained in:
@@ -2,38 +2,13 @@ h1(focusTitle) About
|
||||
|
||||
.row.text-large
|
||||
.col-lg-7
|
||||
p.lead.
|
||||
A game of ponies building a town
|
||||
p.lead A Pony Town custom server
|
||||
|
||||
p This game is a derivative work based on #[a(href="https://pony.town") Pony Town]. The developers of Pony Town are not responsible for it in any way.
|
||||
|
||||
h2 Contact
|
||||
p For all inquiries please send an email to #[b {{contactEmail}}]
|
||||
|
||||
//- div
|
||||
hr
|
||||
|
||||
h2.text-success Custom servers
|
||||
|
||||
p.
|
||||
You can #[a.text-success(href="...") download the files] and start your own custom {{title}} server.
|
||||
p.
|
||||
The package contains server files and instruction on steps required to start your own server.
|
||||
It also allows you to customize and modify the game to your liking.
|
||||
p.
|
||||
Feel free to use this to host a server for your friends, fandom, language group or just a general
|
||||
server for everyone.
|
||||
|
||||
a.d-block.mx-auto.my-4.btn.btn-lg.btn-outline-success.px-3(href="..." style="max-width: 400px;")
|
||||
| Download game files
|
||||
|
||||
p.
|
||||
All necessary instructions required to build and run the server are included in README.md file
|
||||
included in the package.
|
||||
p.
|
||||
Running the server requires basic knowledge of configuring and hosting web applications,
|
||||
it's not intended for beginner users.
|
||||
|
||||
hr
|
||||
|
||||
h2 Technology
|
||||
|
||||
p.
|
||||
|
||||
@@ -77,41 +77,6 @@ h1(focusTitle) Account settings
|
||||
| Account removed successfully
|
||||
|
||||
.col-md-6
|
||||
div(style="margin-bottom: 100px;")
|
||||
.clearfix(*ngIf="showSupporter")
|
||||
.form-group
|
||||
h3
|
||||
fa-icon.mr-2([icon]="starIcon" [ngClass]="supporterClass")
|
||||
| Thank you for your support
|
||||
|
||||
supporter-pony.float-right(#pony (mouseenter)="pony.excite()" (mouseleave)="pony.reset()")
|
||||
|
||||
.form-group
|
||||
p Your reward tier: #[b {{supporterTitle}}]
|
||||
p Your rewards include:
|
||||
ul
|
||||
li(*ngFor="let r of supporterRewards")
|
||||
| {{r}}
|
||||
|
||||
p(*ngIf="supporter > 0")
|
||||
| Use <code>/ss hello</code> command to use supporter chat color.
|
||||
|
||||
p(*ngIf="supporter > 1")
|
||||
| Use <code>/s1 hello</code> and <code>/s2 hello</code> commands to use lower tier supporter chat colors.
|
||||
|
||||
.clearfix(*ngIf="showSupporterInfo")
|
||||
.form-group
|
||||
h3 Supporter info
|
||||
|
||||
supporter-pony.float-right(#pony (mouseenter)="pony.excite()" (mouseleave)="pony.reset()")
|
||||
|
||||
.form-group.text-muted
|
||||
p.
|
||||
You've successfully connected your Patreon account to pixel.horse.
|
||||
If you support pixel.horse on Patreon your supporter info will show up here.
|
||||
p.
|
||||
It should take no longer than 10 minutes to register your Patreon pledges.
|
||||
|
||||
div(style="margin-bottom: 100px;")
|
||||
.form-group
|
||||
.float-right
|
||||
|
||||
@@ -35,7 +35,7 @@ export const routes: Routes = [
|
||||
@NgModule({
|
||||
imports: [
|
||||
BrowserModule,
|
||||
RouterModule,
|
||||
RouterModule.forRoot(routes, { anchorScrolling: 'enabled' }),
|
||||
FormsModule,
|
||||
HttpClientModule,
|
||||
PopoverModule.forRoot(),
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
.text-right
|
||||
.d-flex.flex-wrap
|
||||
//- .text-nowrap.mr-2
|
||||
| © 2016-{{date | date:'yyyy'}}
|
||||
| © 2019-{{date | date:'yyyy'}}
|
||||
| #[a.text-muted.mr-1([href]="twitterLink" target="_blank") {{copyright}}] |
|
||||
.text-nowrap
|
||||
a.text-muted.mr-2(*ngIf="twitterLink" [href]="twitterLink" target="_blank" title="Twitter")
|
||||
|
||||
@@ -119,18 +119,21 @@ $chat-pad: 5px;
|
||||
position: fixed;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#friends-box {
|
||||
position: fixed;
|
||||
top: 5px;
|
||||
right: 45px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#swap-box {
|
||||
position: fixed;
|
||||
top: 5px;
|
||||
right: 86px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#notifications {
|
||||
|
||||
@@ -8,8 +8,7 @@ import { GameService } from '../services/gameService';
|
||||
import { Model, Friend } from '../services/model';
|
||||
import { version, host, contactEmail, twitterLink, discordLink, copyrightName } from '../../client/data';
|
||||
import { PonyTownGame } from '../../client/game';
|
||||
import { faTwitter, faPatreon, faEnvelope, faCog, faHome, faGamepad, faInfoCircle, faHorseHead, faDiscord } from '../../client/icons';
|
||||
import { InstallService } from '../services/installService';
|
||||
import { faTwitter, faPatreon, faDiscord, faEnvelope, faCog, faHome, faInfoCircle, faHorseHead, faQuestionCircle } from '../../client/icons';
|
||||
import { OAuthProvider, Entity, FakeEntity, Pony } from '../../common/interfaces';
|
||||
import { registerServiceWorker, isBrowserOutdated, checkIframeKey } from '../../client/clientUtils';
|
||||
import { ErrorReporter } from '../services/errorReporter';
|
||||
@@ -50,7 +49,7 @@ export class App implements OnInit, OnDestroy {
|
||||
readonly discordIcon = faDiscord;
|
||||
readonly cogIcon = faCog;
|
||||
readonly homeIcon = faHome;
|
||||
readonly helpIcon = faGamepad;
|
||||
readonly helpIcon = faQuestionCircle;
|
||||
readonly aboutIcon = faInfoCircle;
|
||||
readonly charactersIcon = faHorseHead;
|
||||
readonly contactEmail = contactEmail;
|
||||
@@ -68,12 +67,11 @@ export class App implements OnInit, OnDestroy {
|
||||
private game: PonyTownGame,
|
||||
private router: Router,
|
||||
private activatedRoute: ActivatedRoute,
|
||||
private installService: InstallService,
|
||||
private errorReporter: ErrorReporter,
|
||||
) {
|
||||
}
|
||||
get canInstall() {
|
||||
return this.installService.canInstall;
|
||||
return false;
|
||||
}
|
||||
get loading() {
|
||||
return this.model.loading;
|
||||
|
||||
@@ -14,7 +14,7 @@ page-loader(*ngIf="!playing")
|
||||
h2.sr-only Character selection
|
||||
.mx-auto(style="max-width: 400px;")
|
||||
discord-button.mb-3
|
||||
install-button.mb-3
|
||||
visit-pt-button.mb-3
|
||||
character-select(
|
||||
[(error)]="error" [newButton]="true" [removeButton]="true" (change)="updateMuzzles()"
|
||||
(preview)="previewPony = $event")
|
||||
|
||||
@@ -5,7 +5,9 @@ h1(focusTitle) Help
|
||||
|
||||
section
|
||||
h2 Contact
|
||||
p For all inquiries please send an email to #[b {{contactEmail}}]
|
||||
p.
|
||||
For technical issues, see the #[a(routerLink="/help" fragment="issues") Common Issues] section. If it doesn't solve your problem,
|
||||
send an email to #[b {{contactEmail}}].
|
||||
|
||||
section
|
||||
h2 Controls
|
||||
@@ -152,15 +154,6 @@ h1(focusTitle) Help
|
||||
li <code>/removetoolbox</code> - removes toolbox from the house (need to be alone in the house or a party leader)
|
||||
li <code>/restoretoolbox</code> - restores toolbox to the house (need to be alone in the house or a party leader)
|
||||
|
||||
section
|
||||
h4 Supporter-only commands
|
||||
|
||||
ul.spaced-list
|
||||
li <code>/ss</code> - supporter colored text
|
||||
li <code>/s1</code> - tier 1 supporter colored text (for use by higher tier supporters)
|
||||
li <code>/s2</code> - tier 2 supporter colored text (for use by higher tier supporters)
|
||||
li <code>/s3</code> - tier 3 supporter colored text (for use by higher tier supporters)
|
||||
|
||||
section
|
||||
h2 Chat emojis
|
||||
p.
|
||||
@@ -176,7 +169,7 @@ h1(focusTitle) Help
|
||||
|
||||
.col-md-5
|
||||
section
|
||||
h2 Common issues
|
||||
h2#issues Common issues
|
||||
|
||||
section
|
||||
h4 Keys stuck when using iPad keyboard
|
||||
@@ -247,13 +240,13 @@ h1(focusTitle) Help
|
||||
using #[b Chrome] or #[b Edge] browsers for best performance.
|
||||
|
||||
section
|
||||
h4 Why can't I create multiple accounts
|
||||
h4#rules Why can't I create multiple accounts
|
||||
p.text-fading.
|
||||
This restriction is in-place to protect you and the game itself from other players in the game.
|
||||
This restriction is in place to protect you and the game itself from other players in the game.
|
||||
p.text-fading.
|
||||
Allowing multiple accounts for single person invalidates ignore and hide systems that
|
||||
allow you to ignore and hide other players that are harassing or bothering you in any way.
|
||||
It also invalidates mute and ban system that is in-place to protect you from players breaking
|
||||
It also invalidates mute and ban system that is in place to protect you from players breaking
|
||||
the game rules to bother or harass others.
|
||||
p.text-fading.
|
||||
Allowing use of multiple accounts at the same time would dramatically increase load on the
|
||||
@@ -263,13 +256,13 @@ h1(focusTitle) Help
|
||||
game anymore.
|
||||
p.text-fading.
|
||||
Use of multiple accounts also invalidates any limits (like character limit) that we put on the accounts.
|
||||
The limits are in-place to prevent large amount of players that we have at the moment from
|
||||
The limits are in place to prevent large amount of players that we have at the moment from
|
||||
exhausting our limited server resources.
|
||||
|
||||
section
|
||||
h4 Why can't I modify the game with hacks or scripts
|
||||
p.text-fading.
|
||||
This restriction is in-place to protect you and the game itself from other players in the game.
|
||||
This restriction is in place to protect you and the game itself from other players in the game.
|
||||
p.text-fading.
|
||||
Almost all third-party scripts used in-game were used to harass other players. Even when the
|
||||
creator of the script did not intend it to be used in that way, the limited knowledge of the
|
||||
|
||||
@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||
import { emojis } from '../../../client/emoji';
|
||||
import { faArrowLeft, faArrowRight, faArrowUp, faArrowDown } from '../../../client/icons';
|
||||
import { contactEmail } from '../../../client/data';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
|
||||
@Component({
|
||||
selector: 'help',
|
||||
@@ -16,4 +17,15 @@ export class Help {
|
||||
readonly emotes = emojis.map(e => e.names[0]);
|
||||
readonly mac = /Macintosh/.test(navigator.userAgent);
|
||||
readonly contactEmail = contactEmail;
|
||||
|
||||
// allow scrolling to #issues and #rules fragments
|
||||
|
||||
constructor(private route: ActivatedRoute) {}
|
||||
|
||||
ngAfterViewInit() {
|
||||
this.route.fragment.subscribe(f => {
|
||||
const element = document.querySelector("#" + f);
|
||||
if (element) setTimeout(() => element.scrollIntoView(), 10);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,13 @@ div(*ngIf="!playing")
|
||||
div(*ngIf="!!account")
|
||||
.form-group
|
||||
discord-button
|
||||
visit-pt-button
|
||||
.form-group(*ngIf="canInstall")
|
||||
install-button
|
||||
.form-group
|
||||
character-select([(error)]="error" [editButton]="true" (preview)="previewPony = $event")
|
||||
.form-group
|
||||
character-preview([pony]="previewInfo" [state]="state" [passive]="true" [name]="previewName" [tag]="previewTag")
|
||||
character-preview([pony]="previewInfo" [state]="state" [passive]="false" [name]="previewName" [tag]="previewTag")
|
||||
.form-group.text-center
|
||||
play-box([(error)]="error")
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@ import { Component } from '@angular/core';
|
||||
import { Model, getPonyTag } from '../../services/model';
|
||||
import { defaultPonyState } from '../../../client/ponyHelpers';
|
||||
import { GameService } from '../../services/gameService';
|
||||
import { InstallService } from '../../services/installService';
|
||||
import { OAuthProvider, PonyObject } from '../../../common/interfaces';
|
||||
import { stand } from '../../../client/ponyAnimations';
|
||||
|
||||
@Component({
|
||||
selector: 'home',
|
||||
@@ -14,10 +14,11 @@ export class Home {
|
||||
state = defaultPonyState();
|
||||
previewPony: PonyObject | undefined = undefined;
|
||||
error?: string;
|
||||
private animationTime = 0;
|
||||
private interval?: any;
|
||||
constructor(
|
||||
private gameService: GameService,
|
||||
private model: Model,
|
||||
private installService: InstallService,
|
||||
) {
|
||||
}
|
||||
get authError() {
|
||||
@@ -27,7 +28,7 @@ export class Home {
|
||||
return this.model.accountAlert;
|
||||
}
|
||||
get canInstall() {
|
||||
return this.installService.canInstall;
|
||||
return false;
|
||||
}
|
||||
get playing() {
|
||||
return this.gameService.playing;
|
||||
@@ -53,4 +54,21 @@ export class Home {
|
||||
signIn(provider: OAuthProvider) {
|
||||
this.model.signIn(provider);
|
||||
}
|
||||
ngOnInit() {
|
||||
let last = Date.now();
|
||||
this.interval = setInterval(() => {
|
||||
const now = Date.now();
|
||||
this.update((now - last) / 1000);
|
||||
last = now;
|
||||
}, 1000 / 24);
|
||||
}
|
||||
ngOnDestroy() {
|
||||
clearInterval(this.interval);
|
||||
}
|
||||
update(delta: number) {
|
||||
this.animationTime += delta;
|
||||
const animation = stand;
|
||||
this.state.animation = animation;
|
||||
this.state.animationFrame = Math.floor(this.animationTime * animation.fps) % animation.frames.length;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user