269 lines
No EOL
8.1 KiB
JavaScript
269 lines
No EOL
8.1 KiB
JavaScript
const path = require('path')
|
|
const { Command } = require(path.join(__dirname, `../Lib/Classes.js`))
|
|
const Localization = require(path.join(__dirname, `../Configuration/Localization-${process.env.LOCALE}.json`)).lookup
|
|
const Utils = new (require(path.join(__dirname, '../Utils/Utils.js')))()
|
|
|
|
class Entity {
|
|
constructor(Server, entnum) {
|
|
this.entnum = entnum
|
|
this.Server = Server
|
|
}
|
|
async call(name, ..._args) {
|
|
const args = [..._args]
|
|
|
|
var buffer = `level.getentbynum(${this.entnum}).${name}(`
|
|
|
|
for (var i = 0; i < args.length; i++) {
|
|
switch (typeof args[i]) {
|
|
case 'string':
|
|
buffer += `\\"${args[i]}\\"`
|
|
break
|
|
case 'object':
|
|
buffer += args[i].code
|
|
break
|
|
default:
|
|
buffer += args[i]
|
|
break
|
|
}
|
|
|
|
if (i < args.length - 1) {
|
|
buffer += ', '
|
|
}
|
|
}
|
|
|
|
buffer += ')'
|
|
|
|
await this.Server.Rcon.executeCommandAsync(`chai_eval ${buffer}`)
|
|
}
|
|
format(name, ..._args) {
|
|
const args = [..._args]
|
|
|
|
var buffer = `level.getentbynum(${this.entnum}).${name}(`
|
|
|
|
for (var i = 0; i < args.length; i++) {
|
|
switch (typeof args[i]) {
|
|
case 'string':
|
|
buffer += `\\"${args[i]}\\"`
|
|
break
|
|
case 'object':
|
|
buffer += args[i].code
|
|
break
|
|
default:
|
|
buffer += args[i]
|
|
break
|
|
}
|
|
|
|
if (i < args.length - 1) {
|
|
buffer += ', '
|
|
}
|
|
}
|
|
|
|
buffer += ')'
|
|
|
|
return {code: buffer}
|
|
}
|
|
}
|
|
|
|
const scripting = {
|
|
entity: (Server, entnum) => {
|
|
return new Entity(Server, entnum)
|
|
},
|
|
vector: (arr) => {
|
|
return {
|
|
code: `[${parseFloat(arr[0])},${parseFloat(arr[1])},${parseFloat(arr[2])}]`
|
|
}
|
|
},
|
|
call: async (Server, name, ..._args) => {
|
|
const args = [..._args]
|
|
|
|
var buffer = `gsc.${name}(`
|
|
|
|
for (var i = 0; i < args.length; i++) {
|
|
switch (typeof args[i]) {
|
|
case 'string':
|
|
buffer += `\\"${args[i]}\\"`
|
|
break
|
|
case 'object':
|
|
buffer += args[i].code
|
|
break
|
|
default:
|
|
buffer += args[i]
|
|
break
|
|
}
|
|
|
|
if (i < args.length - 1) {
|
|
buffer += ', '
|
|
}
|
|
}
|
|
|
|
buffer += ')'
|
|
|
|
await Server.Rcon.executeCommandAsync(`chai_eval ${buffer}`)
|
|
}
|
|
}
|
|
|
|
class Plugin {
|
|
constructor(Server, Manager, Managers) {
|
|
this.Server = Server
|
|
this.Manager = Manager
|
|
this.Managers = Managers
|
|
this.Server.on('dvars_loaded', this.init.bind(this))
|
|
}
|
|
init() {
|
|
if (this.Server.Gamename != 'IW5') {
|
|
return
|
|
}
|
|
|
|
this.Manager.Commands.add(
|
|
new Command({
|
|
permission: 'ROLE_ADMIN'
|
|
})
|
|
.setName('kill')
|
|
.addParam({
|
|
index: 0,
|
|
name: 'target',
|
|
join: true
|
|
})
|
|
.addCallback(async (Player, params) => {
|
|
const Target = this.Server.findLocalClient(params.target)
|
|
|
|
if (!Target || !Target.Server || Target.Server.Id != Player.Server.Id) {
|
|
Player.Tell(Localization['COMMAND_CLIENT_NOT_FOUND'])
|
|
return
|
|
}
|
|
|
|
scripting.entity(this.Server, Target.Clientslot).call('suicide')
|
|
})
|
|
)
|
|
|
|
this.Manager.Commands.add(
|
|
new Command({
|
|
permission: 'ROLE_ADMIN'
|
|
})
|
|
.setName('give')
|
|
.addParam({
|
|
index: 0,
|
|
name: 'target',
|
|
join: false
|
|
})
|
|
.addParam({
|
|
index: 1,
|
|
name: 'weapon',
|
|
join: false
|
|
})
|
|
.addCallback(async (Player, params) => {
|
|
const Target = this.Server.findLocalClient(params.target)
|
|
|
|
if (!Target || !Target.Server || Target.Server.Id != Player.Server.Id) {
|
|
Player.Tell(Localization['COMMAND_CLIENT_NOT_FOUND'])
|
|
return
|
|
}
|
|
|
|
const weaponName = params.weapon.replace(new RegExp(/(\\|\")/g), '')
|
|
const entity = scripting.entity(this.Server, Target.Clientslot)
|
|
|
|
await entity.call('giveweapon', weaponName)
|
|
await entity.call('switchtoweapon', weaponName)
|
|
})
|
|
)
|
|
|
|
this.Manager.Commands.add(
|
|
new Command({
|
|
permission: 'ROLE_ADMIN'
|
|
})
|
|
.setName('tp')
|
|
.addParam({
|
|
index: 0,
|
|
name: 'target',
|
|
join: true
|
|
})
|
|
.addCallback(async (Player, params) => {
|
|
const Target = this.Server.findLocalClient(params.target)
|
|
|
|
if (!Target || !Target.Server || Target.Server.Id != Player.Server.Id) {
|
|
Player.Tell(Localization['COMMAND_CLIENT_NOT_FOUND'])
|
|
return
|
|
}
|
|
|
|
Player.Tell(Utils.formatString(Localization['COMMAND_TP_FORMAT'], {
|
|
target: Target.Name,
|
|
origin: 'you',
|
|
coords: ''
|
|
}))
|
|
|
|
const entity = scripting.entity(this.Server, Player.Clientslot)
|
|
const target = scripting.entity(this.Server, Target.Clientslot)
|
|
|
|
entity.call('setorigin', target.format('getorigin'))
|
|
})
|
|
)
|
|
|
|
this.Manager.Commands.add(
|
|
new Command({
|
|
permission: 'ROLE_ADMIN'
|
|
})
|
|
.setName('tphere')
|
|
.addParam({
|
|
index: 0,
|
|
name: 'target',
|
|
join: true
|
|
})
|
|
.addCallback(async (Player, params) => {
|
|
const Target = this.Server.findLocalClient(params.target)
|
|
|
|
if (!Target || !Target.Server || Target.Server.Id != Player.Server.Id) {
|
|
Player.Tell(Localization['COMMAND_CLIENT_NOT_FOUND'])
|
|
return
|
|
}
|
|
|
|
Player.Tell(Utils.formatString(Localization['COMMAND_TP_FORMAT'], {
|
|
target: 'you',
|
|
origin: Target.Name,
|
|
coords: ''
|
|
}))
|
|
|
|
const entity = scripting.entity(this.Server, Player.Clientslot)
|
|
const target = scripting.entity(this.Server, Target.Clientslot)
|
|
|
|
target.call('setorigin', entity.format('getorigin'))
|
|
})
|
|
)
|
|
|
|
this.Manager.Commands.add(
|
|
new Command({
|
|
permission: 'ROLE_ADMIN'
|
|
})
|
|
.setName('setvelocity')
|
|
.addParam({
|
|
index: 0,
|
|
name: 'target',
|
|
join: false
|
|
})
|
|
.addParam({
|
|
index: 1,
|
|
name: 'velocity',
|
|
join: false
|
|
})
|
|
.addCallback(async (Player, params) => {
|
|
const Target = this.Server.findLocalClient(params.target)
|
|
|
|
if (!Target || !Target.Server || Target.Server.Id != Player.Server.Id) {
|
|
Player.Tell(Localization['COMMAND_CLIENT_NOT_FOUND'])
|
|
return
|
|
}
|
|
|
|
const entity = scripting.entity(this.Server, Player.Clientslot)
|
|
const velocity = params.velocity.split(',').map(f => parseFloat(f))
|
|
const vector = [0.0, 0.0, 0.0]
|
|
|
|
for (var i = 0; i < Math.min(velocity.length, 3); i++) {
|
|
vector[i] = velocity[i]
|
|
}
|
|
|
|
entity.call('setvelocity', scripting.vector(vector))
|
|
})
|
|
)
|
|
}
|
|
}
|
|
|
|
module.exports = Plugin |