module.factory("Logger", function(sqoin, args) {
return Logger(args.id);
}, {
id = 1
});
local logger1 = Sqoin.get("Logger");
local logger2 = Sqoin.get("Logger", {
id = 2
});
class Logger {
function log(message) {
print("Log: " + message);
}
}
class UserRepository {
logger = null;
constructor(logger) {
this.logger = logger;
}
function getUser(id) {
this.logger.log("Getting user with id: " + id);
return {
id = id,
name = "User " + id
};
}
}
class UserService {
repo = null;
logger = null;
constructor(repo, logger) {
this.repo = repo;
this.logger = logger;
}
function getUserInfo(id) {
this.logger.log("Fetching user info");
return this.repo.getUser(id);
}
}
local userModule = Module(function(module) {
module.single("Logger", function(sqoin) {
return Logger();
});
module.single("UserRepository", function(sqoin) {
return UserRepository(sqoin.get("Logger"));
});
module.factory("UserService", function(sqoin) {
return UserService(sqoin.get("UserRepository"), sqoin.get("Logger"));
});
});
local modules = [userModule];
Sqoin.loadModules(modules);
local userService1 = Sqoin.get("UserService");
local userService2 = Sqoin.get("UserService");
userService1.getUserInfo(123);
userService2.getUserInfo(456);
Quote from: vitovc on Oct 26, 2025, 06:36 PMflooding PlaySound(id) some blank sound would help to stop current sound (in theory, not tested)




Quote from: (vG)DesTroYeR^ on Oct 23, 2025, 09:50 AMAnd you don't need any! All you gotta do is use your imagination. Just refer to the wiki for reference when coding: https://wiki.vc-mp.org/wiki/Scripting/Squirrel/Client_FunctionsQuote from: Xmair on Oct 22, 2025, 08:53 PMYou could use Script::ScriptProcess
this doesn't have the desired parameters
localPlayerPos <- null;
lastLocalPlayerPos <- null;
function Script::ScriptLoad()
{
::localPlayerPos = ::World.FindLocalPlayer().Position; // By reference (auto updated)
::lastLocalPlayerPos = ::Vector(::localPlayerPos); // We need a copy, not a reference
}
function Script::ScriptProcess()
{
// Because we made a copy these will effectively differ from each other
if ((::localPlayerPos.X != ::lastLocalPlayerPos.X) ||
(::localPlayerPos.Y != ::lastLocalPlayerPos.Y) ||
(::localPlayerPos.Z != ::lastLocalPlayerPos.Z))
{
::OnLocalPlayerMove();
::lastLocalPlayerPos = ::Vector(::localPlayerPos);
}
}
// -----------------------------------------------------------------------------
// No need for parameters at all! Just make use of the globals we already defined
function OnLocalPlayerMove()
{
Console.Print("lastPos: (" + lastLocalPlayerPos.X + ", " + lastLocalPlayerPos.Y + ", " + lastLocalPlayerPos.Z +
")\t|\tnewPos: (" + localPlayerPos.X + ", " + localPlayerPos.Y + ", " + localPlayerPos.Z + ")");
}