This commit is contained in:
DesertMermaid 2024-11-16 10:43:18 -08:00
parent d7cdc78f6b
commit f882d44775
2 changed files with 207 additions and 66 deletions

View file

@ -44,31 +44,58 @@
<div v-if="showFaqModal" class="modal-overlay" @click="closeFaqModal">
<div class="modal-content" @click.stop>
<h2>Frequently Asked Questions</h2>
<hr>
<ul class="faq-list">
<li>
<strong>Do you need an idea person?</strong>
<p>No. Not now, likely not ever.</p>
<li>
<strong>"Do you need an idea person?"</strong>
<p>No. Not now, and likely not ever.</p>
</li>
<hr>
<li>
<strong>Do you need an asset creator? What would you pay me?</strong>
<strong>"Do you need an asset creator? What would you pay me?"</strong>
<p>
This applies to graphics, models, sounds, music, etc. Racing to tell us random ideas and demanding payment isn't how this works.
Provide a portfolio and your price sheets. We offer indie rates based on quality. If all you can offer is low-quality work, others will carry the load for you.
This applies to graphics, models, sounds, music, and similar work. Suggesting random ideas and demanding payment isnt how this works.
Provide a portfolio and clear price sheets. We offer fair indie rates based on quality. If your work is lower quality, understand that others
may carry more of the creative load.
</p>
</li>
<hr>
<li>
<strong>If I'm hired to work on sound effects, that means I'm the sound director, right?</strong>
<p>No, it doesn't. Roles like "director" require experience, leadership, and proven track records. Don't expect a salary or profit share from a freelance role.</p>
<strong>"If I'm hired to work on sound effects, that means I'm the sound director, right?"</strong>
<p>
No, it doesnt. Roles like "director" require experience, leadership skills, and a proven track record. Freelance roles are just thatfreelance.
Dont expect a salary or profit share from such a position. Additionally, if we hire you to create assets, <b>we</b> decide whats needed,
unless creative freedom is explicitly granted. Thank you for understanding.
</p>
</li>
<hr>
<li>
<strong>Well, how much WOULD you pay me?</strong>
<p>Provide your portfolio and rates. If you dont have one, we'll assess based on <i>your</i> quality against indie standards.</p>
<strong>"Well, how much WOULD you pay me?"</strong>
<p>
Provide your portfolio and rates. If you dont have one, well evaluate your work against indie standards to make a fair offer. We're not presently hiring.
</p>
</li>
<hr>
<li>
<strong>(Discussion that includes:) "My idea, COPYRIGHT!"</strong>
<p>In no fucking world does this work, my dude. Ideas aren't copyrightable - tangible things like art, sound effects, full games, etc <i>are</i>. If you seriously believe otherwise... grow up, seriously.</p>
<strong>On suggesting ideas and claiming ownership</strong>
<p>
Ideas, concepts, and words alone are not copyrightableonly tangible creations such as art, sound effects, or completed works can be protected by copyright.
Claiming ownership of an idea without contributing to its execution is not recognized in the professional world. That said, we value constructive suggestions and
may acknowledge meaningful contributions with in-game benefits or recognition. However, we maintain a zero-tolerance policy for unfounded claims or disruptive behavior,
to ensure a fair and respectful environment for everyone.
</p>
</li>
</ul>
<hr>
<li>
<strong>"You guys make games, so I want you to make this concept of mine!"</strong>
<p>
Not for free. We have our own projects to focus on, and <u>we are not for hire at this time</u>. Additionally, being an "idea person" is not a paid position in the game
development industry. Successful game creation requires collaboration, execution, and tangible contributions.
</p>
</li>
</ul>
<hr>
<button @click="closeFaqModal" class="close-button">Close</button>
</div>
</div>
@ -139,7 +166,7 @@ export default {
},
},
methods: {
filterByTag(tag) {
filterByTag(tag: string) {
this.selectedTag = tag;
},
closeFaqModal() {
@ -263,7 +290,9 @@ export default {
border-radius: 8px;
max-width: 600px;
width: 90%;
text-align: left;
max-height: 80vh; /* Limits height to 80% of the viewport */
overflow-y: auto; /* Enables vertical scrolling if content overflows */
text-align: center;
}
.modal-content h2 {
@ -313,5 +342,4 @@ export default {
.faq-button:hover {
background: #74a8e0;
}
</style>

View file

@ -48,13 +48,15 @@
</span>
</p>
<p>
<p v-if="showPlayerCount">
<i class="fas fa-users players-icon"></i>
Players Online: {{ modalData.playersOnline || 0 }} / {{ modalData.maxPlayers || 0 }}
Players Online: {{ displayPlayerCount }}
</p>
<h3>About</h3>
<p v-if="modalData.about" v-html="modalData.about"></p>
<p v-else>No description available.</p>
<h3>Connection Instructions</h3>
<div v-if="modalData.instructions">
<p class="ip-display" v-if="modalData.instructions.public">
@ -66,22 +68,46 @@
<span class="ip">{{ modalData.instructions.local }}</span>
</p>
</div>
<h3 v-if="modalData.installInstructions">Installation Instructions</h3>
<p v-if="modalData.installInstructions">{{ modalData.installInstructions }}</p>
<a v-if="modalData.link" :href="modalData.link" target="_blank" class="link">
Download Modpack
</a>
&nbsp;
<button @click="closeModal" class="close-button">Close</button>
&nbsp;&nbsp;<button @click="closeModal" class="close-button">Close</button>
</div>
</div>
</div>
</template>
<script lang="ts">
export default {
import { defineComponent } from "vue";
interface ServerInstructions {
public: string;
local: string;
}
interface Server {
name?: string;
banner: string;
status: string;
playersOnline?: number;
maxPlayers?: number;
about: string;
instructions: ServerInstructions;
installInstructions?: string;
queryIP: string;
link: string | null;
}
export default defineComponent({
data() {
return {
showModal: false,
modalData: {},
modalData: {} as Server,
alwaysOnServers: {
"Minecraft Java Modern": {
banner: "minecraft-modern-banner.jpg",
@ -93,6 +119,7 @@ export default {
public: "",
local: "192.168.1.201",
},
installInstructions: "Download Minecraft Java Edition from Mojang's website.",
queryIP: "",
link: "",
},
@ -104,8 +131,9 @@ export default {
about: "This is the Minecraft Java 1.12.2 server with mods.",
instructions: {
public: "",
local: "192.168.1.3",
local: "",
},
installInstructions: "Install Forge 1.12.2 and download the modpack provided.",
queryIP: "",
link: "",
},
@ -119,8 +147,10 @@ export default {
public: "",
local: "192.168.1.121",
},
installInstructions:
"Use TModLoader from Steam (not base Terraria) and download our pack.",
queryIP: "",
link: "",
link: "https://steamcommunity.com/sharedfiles/filedetails/?id=2943030068",
},
"Team Fortress 2": {
banner: "tf2-banner.jpg",
@ -132,73 +162,156 @@ export default {
public: "",
local: "192.168.1.203",
},
installInstructions: "Download Team Fortress 2 for free on Steam.",
queryIP: "",
link: "",
},
},
} as Record<string, Server>, // Add type Record<string, Server> for alwaysOnServers
toggledServers: {
"Core Keeper": {
banner: "tf2-banner.jpg",
banner: "core-keeper-banner.jpg",
status: "unknown",
playersOnline: 0,
maxPlayers: 16,
about: "...",
about: "Explore, mine, and survive in this pixelated adventure.",
instructions: {
public: "",
local: "192.168.1.204",
},
installInstructions: "Available on Steam. Ensure your game is up to date.",
queryIP: "",
link: null,
},
ECO: { status: "unknown", queryIP: "http://eco.example.com/status" },
Enshrouded: { status: "unknown", queryIP: "http://enshrouded.example.com/status" },
Empyrion: { status: "unknown", queryIP: "http://empyrion.example.com/status" },
Palworld: { status: "unknown", queryIP: "http://palworld.example.com/status" },
"Survive The Nights": { status: "unknown", queryIP: "http://survivethenights.example.com/status" },
Valheim: { status: "unknown", queryIP: "http://valheim.example.com/status" },
"V Rising": { status: "unknown", queryIP: "http://vrising.example.com/status" },
},
ECO: {
banner: "eco-banner.jpg",
status: "unknown",
playersOnline: 0,
maxPlayers: 50,
about: "A global survival game where players build an ecosystem.",
instructions: {
public: "eco.example.com",
local: "",
},
installInstructions:
"Download ECO from the official website or Steam. Use the provided IP.",
queryIP: "http://eco.example.com/status",
link: null,
},
Enshrouded: {
banner: "enshrouded-banner.jpg",
status: "unknown",
playersOnline: 0,
maxPlayers: 16,
about: "A survival crafting game in a mysterious fantasy setting.",
instructions: {
public: "",
local: "",
},
installInstructions: undefined,
queryIP: "http://enshrouded.example.com/status",
link: null,
},
Empyrion: {
banner: "empyrion-banner.jpg",
status: "unknown",
playersOnline: 0,
maxPlayers: 16,
about: "Explore space and build your intergalactic empire.",
instructions: {
public: "",
local: "",
},
installInstructions:
"Download Empyrion from Steam and ensure mods match server settings.",
queryIP: "http://empyrion.example.com/status",
link: null,
},
Palworld: {
banner: "palworld-banner.jpg",
status: "unknown",
playersOnline: 0,
maxPlayers: 32,
about: "A multiplayer game where you befriend and fight alongside creatures.",
instructions: {
public: "",
local: "",
},
installInstructions: "Available on Steam. Join the server via multiplayer menu.",
queryIP: "http://palworld.example.com/status",
link: null,
},
"Survive The Nights": {
banner: "survive-the-nights-banner.jpg",
status: "unknown",
playersOnline: 0,
maxPlayers: 10,
about: "A survival horror game set in a post-apocalyptic world.",
instructions: {
public: "",
local: "",
},
installInstructions: "Purchase on Steam and ensure to update your client.",
queryIP: "http://survivethenights.example.com/status",
link: null,
},
Valheim: {
banner: "valheim-banner.jpg",
status: "unknown",
playersOnline: 0,
maxPlayers: 10,
about: "A Viking-themed survival game set in a procedurally generated world.",
instructions: {
public: "",
local: "",
},
installInstructions: "Install via Steam and ensure mods match server settings.",
queryIP: "http://valheim.example.com/status",
link: null,
},
"V Rising": {
banner: "v-rising-banner.jpg",
status: "unknown",
playersOnline: 0,
maxPlayers: 20,
about: "Rise as a vampire lord in this survival RPG.",
instructions: {
public: "",
local: "",
},
installInstructions:
"Available on Steam. Ensure your game and server mods are synced.",
queryIP: "http://vrising.example.com/status",
link: null,
},
} as Record<string, Server>, // Add type Record<string, Server> for toggledServers
};
},
computed: {
showPlayerCount(): boolean {
return (
this.modalData.playersOnline !== undefined &&
this.modalData.maxPlayers !== undefined
);
},
displayPlayerCount(): string {
if (this.modalData.maxPlayers === undefined) return "? / ?";
if (this.modalData.playersOnline === undefined) return "? / ?";
return `${this.modalData.playersOnline} / ${this.modalData.maxPlayers}`;
},
},
methods: {
openModal(serverName) {
console.log("Opening modal for:", serverName); // Debugging log
this.modalData = this.alwaysOnServers[serverName] || this.toggledServers[serverName] || {};
console.log("Modal data:", this.modalData); // Debugging log
openModal(serverName: string) {
this.modalData =
this.alwaysOnServers[serverName] || this.toggledServers[serverName] || {};
this.modalData.name = serverName;
this.showModal = true;
},
closeModal() {
this.showModal = false;
},
async queryServerStatus(serverName, queryIP) {
try {
console.log(`Querying status for ${serverName} at ${queryIP}...`);
const response = await fetch(queryIP);
const data = await response.json();
const server = this.alwaysOnServers[serverName] || this.toggledServers[serverName];
server.status = data.status || "unknown";
server.playersOnline = data.playersOnline || 0;
server.maxPlayers = data.maxPlayers || server.maxPlayers || 0;
} catch (error) {
console.error(`Failed to fetch status for ${serverName}:`, error);
const server = this.alwaysOnServers[serverName] || this.toggledServers[serverName];
server.status = "unknown";
}
},
queryAllServerStatuses() {
for (const [serverName, server] of Object.entries(this.alwaysOnServers)) {
if (server.queryIP) this.queryServerStatus(serverName, server.queryIP);
}
for (const [serverName, server] of Object.entries(this.toggledServers)) {
if (server.queryIP) this.queryServerStatus(serverName, server.queryIP);
}
},
},
mounted() {
this.queryAllServerStatuses();
},
};
});
</script>
<style scoped>