zhuguoqing 62d8fb825e update
2022-05-28 11:15:04 +08:00

1606 lines
51 KiB
JavaScript

var gameConfig = require("gameConfig")
var dropItemConfig = gameConfig.dropItemConfig
var playerconfig = gameConfig.playerConfig["40001"]
var chacheobj = require("battleobjcache")
var buffobj = require("buffobj")
var Utils = require("Utils")
var AIConfig = require("aiconfig").cfg
var AIEnum = require("aiconfig").enum
var deadConfig = require("aiconfig").deadConfig
var dressConfig = require("aiconfig").dressConfig
var robotai = require("robotai")
// var equipUpgradeConfig = gameConfig.equipUpgradeConfig
var skillConfig = gameConfig.skillConfig
var dtoh = 0.0174528
var movespeed = playerconfig.move_speed * 20
var shotmovespeed = playerconfig.shot_speed * 20
var animovespeed = playerconfig.aiming_speed * 20
var downspeed = playerconfig.move_speed3 * 20
// var jumpcd = 1000
var playersize = 20
var movesize = 10
var movepy = -17
var TempV = cc.v2()
var volume111 = playerconfig.volume.split('|')
for (var i = 0; i < volume111.length; i++) {
volume111[i] = volume111[i].split(':')
}
var slowswitch = 1300
var longswitch = 2800
var maxkucun = 90
var playerobj = function(uuid) {
this.obj_uniid = uuid
this.dir = cc.v2(0, 0)
this.pos = cc.v2(0, 0)
this.x = this.y = 0
this.width = this.height = playersize
this.attack_dir = cc.v2(0, 0)
this.move_dir = cc.v2(0, 0)
this.downed = false
this.dead = false
this.max_health = this.health = playerconfig.health
this.energy_shield = 0
this.backpack = 0
this.chest = 0
this.helmet = 0
this.actiontime = 0
this.hurttime = 0
this.revive_countdown = 10
this.def = 0
this.skill_left_time = 0
this.life = 1
this.attr = {}
this.propertyarr = []
this.killcount = 0
this.dmg = 0
// this.bulletbag = 90
this.states = []
this.buff_list = []
this.emote = null
this.sex = 2
this.packadd = {}
this.shotadd = {
x: 0,
y: 0,
}
this.skin = [{
skin_id: 1
}, {
skin_id: 1
}, {
skin_id: 1
}, {
skin_id: 1
}]
this.shot_hold = false
this.shottime = 0
this.can_revive = null
this.battleitemmap = {}
//
this.weapons = [{
weapon_id: 30101,
ammo: 999999
}, {
weapon_id: 0,
weapon_lv: 1,
ammo: 0
}, {
weapon_id: 0,
weapon_lv: 1,
ammo: 0
}, {
weapon_id: 0
}, {
weapon_id: 0
}, ]
this.additem = function(v) {
if (!this.battleitemmap[v]) {
this.battleitemmap[v] = 1
} else {
this.battleitemmap[v] = this.battleitemmap[v] + 1
}
}
this.getv = function(k) {
if (!this.attr[k]) {
this.attr[k] = 0
}
return this.attr[k]
}
this.addv = function(k, v, tp) {
var rk = tp == 2 ? k + 1000 : k
if (!this.attr[rk]) {
this.attr[rk] = 0
}
this.attr[rk] += v
}
this.removev = function(k, v, tp) {
var rk = tp == 2 ? k + 1000 : k
if (!this.attr[rk]) {
this.attr[rk] = 0
}
this.attr[rk] -= v
}
this.addbuff = function(bid) {
var buf = new buffobj(bid)
buf.add(this)
this.buff_list.push(buf)
cc.clientbattle.pushcgbuff({
buff_id: bid,
left_time: buf.left_time,
lasting_time: buf.lasting_time
}, this, 0)
}
this.setposition = function(x, y) {
this.x = x
this.y = y
this.pos.x = x
this.pos.y = y
}
this.init = function(cfg, member, gunid) {
this.aicfg = null
this.deadcfg = null
this.pausetime = 0
chacheobj.objmapplayer[this.obj_uniid] = this
this.nowspeed = movespeed
this.inventory = []
for (var i = 0; i < 16; i++) {
this.inventory.push(0)
}
this.skill_list = []
if (cfg) {
this.sex = cfg.sex
this.setcfg(cfg)
} else {
this.sex = Math.random() > 0.5 ? 1 : 2
var headid = this.sex == 1 ? 18101 : 18201
this.robot(gunid)
this.user_data = JSON.stringify({
avatar_id: headid
})
this.avatar_url = headid
if (member) {
this.ismember = true
}
}
}
this.closebufbytype = function(tp) {
for (var i = this.buff_list.length - 1; i >= 0; i--) {
if (this.buff_list[i].buff_effect == tp) {
this.buff_list[i].duration_time = 0
}
}
}
this.closefake = function() {
this.closebufbytype(5)
}
this.closehorse = function() {
for (var i = this.buff_list.length - 1; i >= 0; i--) {
if (this.buff_list[i].buff_effect == 3) {
this.buff_list[i].duration_time = 0
cc.clientbattle.createdropitem(this.buff_list[i].cfg.buff_param4, this.pos, 0, true)
}
}
this.shotadd.x = this.shotadd.y = 0
}
this.changeweapon = function(idx, isfirst) {
this.daduanaction()
this.gguncfg = gameConfig.dropItemConfig[this.weapons[idx].weapon_id]
if (!this.gguncfg) {
return
}
this.nowcaowei = gameConfig.dropItemConfig[this.gguncfg.use_bullet].inventory_slot
this.cur_weapon_idx = idx
this.gunid = this.weapons[idx].weapon_id
this.shotcd = this.gguncfg.fire_rate / 1000
this.shotmax = this.gguncfg.clip_volume
this.reloadtype = this.gguncfg.reloadtype
var gunlv = this.weapons[idx].weapon_lv
var equipattr = null
// if (gameConfig.equipUpgradeConfig[this.gunid]) {
// equipattr = gameConfig.equipUpgradeConfig[this.gunid].spera_attr
// }
this.shotmax += Utils.findvarbylv(10, gunlv, equipattr)
// if(this.gunid ==this.spweapon){
// this.shotmax = this.spammo
// gunlv = this.splv
// }
var barr = this.gguncfg.bullet_born_offset.split('|')
this.bulletborn = []
for (var i = 0; i < barr.length; i++) {
this.bulletborn.push(barr[i].split(':'))
}
this.shotnowtime = this.shotcd
this.reloadtime = this.gguncfg.reload_time / 1000
this.needreport = true
this.weapon = {
weapon_id: this.gunid,
weapon_lv: gunlv
}
// this.weapons[idx].weapon_lv = gunlv
if (isfirst && !this.isrole) { //jjtest
this.weapons[idx].ammo = this.shotmax
}
if (this.weapons[idx].ammo == 0) {
this.doreload()
}
}
this.setskin = function(v) {
for (var i = 0; i < 4; i++) {
this.skin[i].skin_id = v[i]
}
}
this.sethat = function(v) {
var old = this.skin[2].skin_id
this.skin[2].skin_id = v
cc.clientbattle.createdropitem(old, this.pos)
}
this.setcloth = function(v) {
var old = this.skin[1].skin_id
this.skin[1].skin_id = v
cc.clientbattle.createdropitem(old, this.pos)
}
this.refreshbag = function() {
this.packadd = {}
var volume = gameConfig.dropItemConfig[this.backpack].volume.split('|')
for (var i = 0; i < volume.length; i++) {
volume[i] = volume[i].split(':')
}
for (var i = 0; i < volume.length; i++) {
this.packadd[volume[i][0]] = Number(volume[i][1])
}
}
this.setitems = function(v) {
// this.inventory = []
// for(var i=0;i<16;i++){
// this.inventory.push(0)
// }
this.items = []
this.packstart = {}
for (var i = 0; i < volume111.length; i++) {
this.packstart[volume111[i][0]] = Number(volume111[i][1])
}
for (var i = 0; i < v.length; i++) {
this.items.push(v[i])
}
}
this.addfake = function(id) {
for (var i = this.items.length - 1; i >= 0; i--) {
if (this.items[i].key == id) {
this.items[i].value++
this.propertyarr.push({
property_type: 9,
property_subtype: id,
value: this.items[i].value,
obj_id: this.obj_uniid,
})
break
}
}
}
this.getitem = function(idx) {
var sv = this.packstart[idx]
var av = this.packadd[idx]
if (!av) {
av = 0
}
if (this.inventory[idx] < sv + av) {
this.inventory[idx]++
return true
}
return false
}
this.onreport = function(data) {
if (this.pausetime > 0) {
return
}
var needclosefake = false
if (data.move_dir) {
this.move_dir = data.move_dir.normalize()
this.dir.x = this.move_dir.x
this.dir.y = this.move_dir.y
if (!(this.dir.x == 0 && this.dir.y == 0)) {
needclosefake = true
}
}
if (data.attack_dir) {
this.attack_dir = data.attack_dir.normalize()
this.dir.x = this.attack_dir.x
this.dir.y = this.attack_dir.y
}
if (data.attack_dir.x == 0 && data.attack_dir.y == 0) {
data.shot_hold = false
}
if (data.shot_hold && !this.tiaosan) {
if (!(this.weapons[this.cur_weapon_idx].ammo == 0 && this.action_type == 1)) {
this.daduanaction()
}
needclosefake = true
this.shot_hold = true
// console.log(this.pos)
} else {
this.shot_hold = false
}
if (data.emote) {
this.emote = {
player_id: this.obj_uniid,
emote_id: data.emote
}
}
if (data.reload && !this.tiaosan && this.inventory[this.nowcaowei] > 0) {
if (this.weapons[this.cur_weapon_idx].ammo < this.shotmax) {
this.doreload()
needclosefake = true
}
}
if (data.drop_weapon != undefined && !this.tiaosan) {
this.dodrop(data.drop_weapon)
}
if (data.interaction_objids.length > 0 && !this.tiaosan) {
for (var i = data.interaction_objids.length - 1; i >= 0; i--) {
var drop = chacheobj.objdrop[data.interaction_objids[i]]
if (drop) {
var newid = drop.doeff(this)
if (newid > 0) {
cc.clientbattle.createdropitem(newid, this.pos)
}
if (newid >= 0) {
drop.dead = true
this.needreport = true
}
} else {
var loot = chacheobj.objmaploot[data.interaction_objids[i]]
if (loot) {
loot.dodakai()
}
}
}
}
if (data.select_weapon != undefined && !this.tiaosan) {
this.changeweapon(data.select_weapon)
needclosefake = true
}
if (data.aiming && !this.tiaosan) { //
this.aiming = true
needclosefake = true
}
if (data.shot_start && !this.tiaosan) {
this.aiming = false
if (!data.fly_distance) {
this.shot(9999)
} else {
var canshot = false
var needcg = false
if (this.cur_weapon_idx == 3 && this.inventory[5] > 0) {
this.inventory[5]--
if (this.inventory[5] == 0) {
this.weapons[3].weapon_id = 0
needcg = true
}
this.weapons[3].ammo = this.packstart[5]
canshot = true
} else if (this.cur_weapon_idx == 4 && this.inventory[6] > 0) {
this.inventory[6]--
if (this.inventory[6] == 0) {
this.weapons[4].weapon_id = 0
needcg = true
}
this.weapons[4].ammo = this.packstart[6]
canshot = true
}
if (canshot) {
this.doshot(data.fly_distance)
}
if (needcg) {
this.overlose()
}
}
needclosefake = true
}
if (data.use_item_idx) {
//console.log(data.use_item_idx)
if (this.inventory[data.use_item_idx] > 0) {
if (data.use_item_idx == 7) {
this.yaoidx = 7
this.doheal(30301)
} else if (data.use_item_idx == 8) {
this.yaoidx = 8
this.doheal(30302)
}
}
needclosefake = true
}
if (needclosefake) {
this.closefake()
}
if (data.use_item_id && !this.tiaosan) {
this.daduanaction()
for (var i = 0; i < this.items.length; i++) {
if (this.items[i].key == data.use_item_id) {
if (this.items[i].value > 0) {
this.items[i].value--
this.propertyarr.push({
property_type: 9,
property_subtype: this.items[i].key,
obj_id: this.obj_uniid,
value: this.items[i].value
})
this.closefake()
this.addbuff(data.use_item_id)
this.needreport = true
}
break
}
}
}
if (data.get_down && !this.tiaosan) {
this.daduanaction()
this.closehorse()
this.needreport = true
}
if (data.use_skill && !this.tiaosan) {
this.daduanaction()
for (var i = 0; i < this.skill_list.length; i++) {
if (this.skill_list[i].skill_id == data.skill_id) {
this.closefake()
this.skill_list[i].left_time = this.skill_list[i].cd_time
if (i == 0) {
this.addbuff(1002)
if (this.dashdir) {
this.dir.x = this.dashdir.x
this.dir.y = this.dashdir.y
this.dashdir = null
}
this.movev(this.dir, 100)
} else {
cc.clientbattle.nowskill = data.skill_id
TempV.x = data.skill_dir.x
TempV.y = data.skill_dir.y
TempV = TempV.normalize()
var bt = {
dir: {
x: TempV.x,
y: TempV.y
},
// fly_distance: fly,
gun_id: 30901,
gun_lv: 1,
player_id: this.obj_uniid,
pos: {
x: this.pos.x,
y: this.pos.y
}
}
chacheobj.bulletarr.push(bt)
this.dopause(1.5)
// this.addhp(200)
// var loot = cc.clientbattle.createlootbyid(80006, this.pos.x, this.pos.y)
// this.pausetime = 2.4
// setTimeout(() => {
// loot.dead = true
// }, 4900);
}
}
}
this.needreport = true
}
if (data.spectate) {
this.life = 0
this.dodead(this.obj_uniid)
}
}
this.overlose = function() {
if (this.weapons[1].weapon_id != 0) {
this.changeweapon(1)
} else if (this.weapons[2].weapon_id != 0) {
this.changeweapon(2)
} else {
this.changeweapon(0)
}
}
this.buchongzidan = function(idx) {
if (this.inventory[idx] < maxkucun) {
this.inventory[idx] += 30
this.inventory[idx] = Math.min(this.inventory[idx], maxkucun)
return true
}
return false
}
this.dodrop = function(idx) {
if (idx == 1 || idx == 2) {
if (this.weapons[idx].weapon_id > 0) {
cc.clientbattle.createdropitem(this.weapons[idx].weapon_id, this.pos, 70, null, this.weapons[idx].weapon_lv)
this.weapons[idx].weapon_id = 0
this.weapons[idx].ammo = 0
this.needreport = true
if (idx == 1) {
if (this.weapons[2].weapon_id != 0) {
this.changeweapon(2)
} else {
this.changeweapon(0)
}
} else if (idx == 2) {
if (this.weapons[1].weapon_id != 0) {
this.changeweapon(1)
} else {
this.changeweapon(0)
}
}
}
} else if (idx == 0) {
if (this.weapons[idx].weapon_id != 30101) {
cc.clientbattle.createdropitem(this.weapons[idx].weapon_id, this.pos, 70)
this.weapons[idx].weapon_id = 30101
this.weapons[idx].ammo = 999999
if (this.cur_weapon_idx == 0) {
this.changeweapon(0)
}
this.needreport = true
}
} else if (idx == 3) {
if (this.inventory[5] > 0) {
for (var i = 0; i < this.inventory[5]; i++) {
cc.clientbattle.createdropitem(this.weapons[3].weapon_id, this.pos, 70)
}
this.inventory[5] = 0
this.weapons[3].ammo = 0
this.weapons[3].weapon_id = 0
}
if (this.cur_weapon_idx == 3) {
this.overlose()
}
} else if (idx == 4) {
if (this.inventory[6] > 0) {
for (var i = 0; i < this.inventory[6]; i++) {
cc.clientbattle.createdropitem(this.weapons[4].weapon_id, this.pos, 70)
}
this.inventory[6] = 0
this.weapons[4].ammo = 0
this.weapons[4].weapon_id = 0
}
if (this.cur_weapon_idx == 4) {
this.overlose()
}
}
}
this.hurt = function(atk, atkerid, gun) {
if (this.dead) {
return
}
if (this.wudi) {
return
}
if (cc.clientbattle.memberarr[atkerid] && (this.ismember || this.isrole)) {
return
}
if (cc.clientbattle.isnewbie) {
if (cc.clientbattle.player.obj_uniid != atkerid && cc.clientbattle.player.obj_uniid != this.obj_uniid) {
return
}
}
if (this.energy_shield > 0) {
this.energy_shield -= atk
this.needreport = true
return
}
if (gun.id == 30901) { //jjtest
this.addbuff(201013)
this.dopause(5)
this.move_dir.x = this.move_dir.y = 0
this.shot_hold = false
}
if (this.isrole || this.ismember) {
atk = 5
}
this.health -= atk
if (this.isrole || this.ismember) {
if (this.health / this.max_health < 0.2) {
this.health = Math.floor(this.max_health * 0.2)
}
}
if (cc.clientbattle.player.obj_uniid == atkerid) {
cc.clientbattle.player.dmg += atk
}
if (this.health <= 0) {
this.dodead(atkerid, gun)
}
this.needreport = true
}
this.dodead = function(atkerid, gun) {
if (atkerid) {
this.atkerid = atkerid
}
this.health = 0
this.dead = true
this.killer_id = this.atkerid
if (this.atkerid == -1) {
this.killer_name = cc.language.stringformat("duquan")
} else if (this.atkerid == this.obj_uniid) {
this.killer_name = cc.language.stringformat("ziji")
} else {
this.killer_name = cc.language.stringformat("morenmingzi")
}
this.closefake()
this.closehorse()
if (this.isrole && this.life > 0) {
this.life--
this.can_revive = true
} else {
this.can_revive = false
}
var atkname = null
if (this.can_revive == false) {
var iself = false
if (cc.clientbattle.player.obj_uniid == this.atkerid && this.obj_uniid != this.atkerid) {
cc.clientbattle.player.killcount++
iself = true
}
if (!this.isrole) {
cc.clientbattle.aliverobot--
}
if (atkerid == cc.clientbattle.player.obj_uniid) {
atkname = cc.clientbattle.player.name
} else if (cc.clientbattle.memberarr[atkerid]) {
atkname = cc.clientbattle.memberarr[atkerid].name
}
cc.clientbattle.dokillmsg(atkname, gun)
this.dodeaddrop()
}
}
this.dodeaddrop = function() {
if (this.deadcfg) {
var x = this.deadcfg[1]
var y = this.deadcfg[2]
if (this.deadcfg[3] == 1) {
x += cc.clientbattle.player.x
y += cc.clientbattle.player.y
}
cc.clientbattle.createlootbyid(this.deadcfg[0], x, y)
}
if (!cc.clientbattle.isnewbie) {
// cc.clientbattle.createdropitem(this.skin[1].skin_id, this.pos)
// cc.clientbattle.createdropitem(this.skin[2].skin_id, this.pos)
if (this.weapons[0].weapon_id != 30101) {
cc.clientbattle.createdropitem(this.weapons[0].weapon_id, this.pos)
}
if (this.weapons[1].weapon_id != 0) {
cc.clientbattle.createdropitem(this.weapons[1].weapon_id, this.pos)
}
if (this.weapons[2].weapon_id != 0) {
cc.clientbattle.createdropitem(this.weapons[2].weapon_id, this.pos)
}
}
if (this.isrole) {
cc.clientbattle.dogameover(this.killer_name)
}
}
this.revive = function() {
this.health = this.max_health
this.dead = false
if (Math.random() > 0.5) {
this.addbuff(1007)
this.addbuff(1011)
this.addbuff(1012)
} else {
this.addbuff(1008)
this.addbuff(1021)
this.addbuff(1022)
}
}
this.doshot = function(fly) {
let dir = cc.v2()
for (var i = 0; i < this.bulletborn.length; i++) {
dir.x = this.attack_dir.x
dir.y = this.attack_dir.y
let onedata = this.bulletborn[i]
if (onedata[2]) {
dir = Utils.dirRotate(dir, Number(onedata[2]) * dtoh)
}
if (this.gguncfg && this.gguncfg.bullet_angle > 0) {
dir = Utils.dirRotate(dir, (Utils.randintSeed(this.gguncfg.bullet_angle * 2) - this.gguncfg.bullet_angle) * dtoh)
}
var bt = {
dir: {
x: dir.x,
y: dir.y
},
fly_distance: fly,
gun_id: this.gunid,
gun_lv: 1,
player_id: this.obj_uniid,
pos: {
x: this.pos.x + this.shotadd.x,
y: this.pos.y + this.shotadd.y
}
}
chacheobj.bulletarr.push(bt)
}
this.needreport = true
}
this.doreload = function() {
if (this.action_type == 1) {
return
}
if (this.inventory[this.nowcaowei] <= 0) {
return
}
this.action_type = 1
this.actiontime = this.reloadtime
this.action_duration = this.reloadtime * 1000
this.needreport = true
if (!this.isrole) {
if (this.action_duration <= slowswitch) {
this.showEmoteNetAnimation(1003)
} else if (this.action_duration >= longswitch) {
this.showEmoteNetAnimation(11005)
} else {
this.showEmoteNetAnimation(11004)
}
}
}
this.showEmoteNetAnimation = function(id) {
this.emote = {
player_id: this.obj_uniid,
emote_id: id
}
}
this.shot = function(dt) {
if (this.action_type == 1) {
return
}
this.shotnowtime += dt
if (this.shotnowtime > this.shotcd) {
this.shotnowtime = 0
if (this.weapons[this.cur_weapon_idx].ammo > 0) {
this.weapons[this.cur_weapon_idx].ammo = this.weapons[this.cur_weapon_idx].ammo - 1
this.doshot()
}
if (this.weapons[this.cur_weapon_idx].ammo <= 0 && this.inventory[this.nowcaowei] > 0) {
this.doreload()
}
}
}
this.luodi = function() {
var start = 1
var arr = [
[50, 0],
[-50, 0],
[0, 50],
[0, -50]
]
var res = this.pengzhuangcheck()
if (res) {
while (true) {
for (var i = 0; i < 4; i++) {
var oldx = this.pos.x
var oldy = this.pos.y
this.pos.x += arr[i][0] * start
this.pos.y += arr[i][1] * start
this.pos.x = Math.min(Math.max(0, this.pos.x), cc.clientbattle.mapsize)
this.pos.y = Math.min(Math.max(0, this.pos.y), cc.clientbattle.mapsize)
this.x = this.pos.x
this.y = this.pos.y
if (!this.pengzhuangcheck()) {
return
} else {
this.pos.x = oldx
this.pos.y = oldy
}
}
start++
}
}
}
this.pengzhuangcheck = function() {
var objs = cc.clientbattle.getpzobjs({
x: this.pos.x,
y: this.pos.y,
width: this.width * 4,
height: this.height * 4
})
var pz = false
for (var i = objs.length - 1; i >= 0; i--) {
var obj = objs[i]
if (obj.loot) {
if (obj.loot.dead || obj.loot.event || obj.width == 0 || obj.height == 0) {
continue
}
}
var pobj = {
x: obj.xx,
y: obj.yy,
width: obj.width,
height: obj.height,
}
var size = movesize
// if (!obj.loot) {
// size = movesize * 1.5
// }
var autobox = false
if (Utils.hitTestRectangle(pobj, {
x: this.pos.x,
y: this.pos.y + movepy,
width: size,
height: size
})) {
pz = true
break
}
}
return pz
}
this.movev = function(dir, v) {
if (cc.jietumode) {
v *= 10
this.pos.x += dir.x * v
this.pos.y += dir.y * v
this.pos.x = Math.min(Math.max(0, this.pos.x), cc.clientbattle.mapsize)
this.pos.y = Math.min(Math.max(0, this.pos.y), cc.clientbattle.mapsize)
this.x = this.pos.x
this.y = this.pos.y
return true
}
if (this.notpz || this.tiaosan) {
this.pos.x += dir.x * v
this.pos.y += dir.y * v
this.pos.x = Math.min(Math.max(0, this.pos.x), cc.clientbattle.mapsize)
this.pos.y = Math.min(Math.max(0, this.pos.y), cc.clientbattle.mapsize)
this.x = this.pos.x
this.y = this.pos.y
return true
}
var diedai = Math.ceil(v / 5)
var vv = v / diedai
var canx = 1
var cany = 1
this.oldx = this.pos.x
this.oldy = this.pos.y
for (var ii = 0; ii < diedai; ii++) {
var addx = dir.x * vv * canx
var addy = dir.y * vv * cany
var objs = cc.clientbattle.getpzobjs({
x: this.pos.x,
y: this.pos.y,
width: this.width * 4,
height: this.height * 4
})
for (var i = objs.length - 1; i >= 0; i--) {
var obj = objs[i]
if (obj.loot) {
if (obj.loot.dead || obj.width == 0 || obj.height == 0) {
continue
}
}
var pobj = {
x: obj.xx,
y: obj.yy,
width: obj.width,
height: obj.height,
}
var size = movesize
// if (!obj.loot) {
// size = playersize * 1.5
// }
var autobox = false
var canevent = true
if (Utils.hitTestRectangle(pobj, {
x: this.pos.x + addx,
y: this.pos.y + movepy,
width: size,
height: size
})) {
if (cc.clientbattle.gamestart && obj.loot && obj.loot.dropid) {
autobox = true
}
if (this.isrole && obj.loot && obj.loot.event) {
obj.loot.doevent()
canevent = false
} else {
addx = 0
canx = 0
}
}
if (Utils.hitTestRectangle(pobj, {
x: this.pos.x,
y: this.pos.y + addy + movepy,
width: size,
height: size
})) {
if (cc.clientbattle.gamestart && obj.loot && obj.loot.dropid) {
autobox = true
}
if (this.isrole && obj.loot && obj.loot.event) {
if (canevent) {
obj.loot.doevent()
}
} else {
addy = 0
cany = 0
}
}
if (!this.isrole && cc.clientbattle.fixdrop.length > 0) {
autobox = false
}
if (autobox) {
//cc.clientbattle.createdrop(obj.loot.hurt(9999, this.obj_uniid), this.pos)
}
}
this.pos.x += addx
this.pos.y += addy
}
if (dir.x != 0 || dir.y != 0) {
var objs = cc.clientbattle.getpzobjs({
x: this.pos.x,
y: this.pos.y,
width: this.width * 4,
height: this.height * 4
})
for (var i = objs.length - 1; i >= 0; i--) {
var obj = objs[i]
if (obj.loot) {
if (obj.loot.dead || obj.loot.event || obj.width == 0 || obj.heigth == 0) {
continue
}
}
var pobj = {
x: obj.xx,
y: obj.yy,
width: obj.width,
height: obj.height,
}
var size = movesize
if (!obj.loot) {
size = playersize * 1.5
}
if (Utils.hitTestRectangle(pobj, {
x: this.pos.x,
y: this.pos.y + movepy,
width: size,
height: size
})) {
this.pos.x = this.oldx
this.pos.y = this.oldy
}
}
}
this.pos.x = Math.min(Math.max(0, this.pos.x), cc.clientbattle.mapsize)
this.pos.y = Math.min(Math.max(0, this.pos.y), cc.clientbattle.mapsize)
this.x = this.pos.x
this.y = this.pos.y
}
this.domove = function(dt) {
var speed = (this.getv(5) + this.nowspeed) * (1 + this.getv(1005))
this.movev(this.move_dir, speed * dt)
}
this.doheal = function(bid) {
if (this.action_type == 2) {
return
}
var cfg = dropItemConfig[bid]
this.action_type = 2
this.actiontime = cfg.use_time / 1000
this.action_duration = cfg.use_time
this.needreport = true
this.yaov = cfg.heal
}
this.addhp = function(v) {
this.health += v
if (this.health > this.max_health) {
this.health = this.max_health
}
}
this.daduanaction = function() {
this.action_type = 0
}
this.update = function(dt, gas) {
if (this.dead) {
return
}
if (this.nextreload) {
this.nextreload = false
this.doreload()
}
this.pausetime -= dt
if (this.pausetime <= 0) {
this.ai(dt)
}
this.domove(dt)
if (this.skill_left_time > 0) {
this.skill_left_time -= dt * 1000
if (this.skill_left_time <= 0) {
this.needreport = true
}
}
for (var i = 0; i < this.skill_list.length; i++) {
if (this.skill_list[i].left_time > 0) {
this.skill_list[i].left_time -= dt * 1000
if (this.skill_list[i].left_time <= 0) {
this.needreport = true
}
}
this.skill_list[i].curr_times = this.skill_list[i].left_time > 0 ? 0 : 1
}
this.nowspeed = movespeed
if (this.action_type == 1 && this.actiontime > 0) {
this.nowspeed = shotmovespeed
this.actiontime -= dt
if (this.actiontime <= 0) {
this.action_type = 0
this.shotnowtime = this.shotcd
var upv = this.weapons[this.cur_weapon_idx].ammo + 1
if (!this.reloadtype || upv == this.shotmax) {
var addbullet = this.shotmax
if (this.inventory[this.nowcaowei] <= this.shotmax) {
addbullet = this.inventory[this.nowcaowei]
}
var plusb = 0
if(this.weapons[this.cur_weapon_idx].ammo>0){
plusb = this.weapons[this.cur_weapon_idx].ammo
}
this.inventory[this.nowcaowei] -= addbullet
this.inventory[this.nowcaowei]+=plusb
this.weapons[this.cur_weapon_idx].ammo = addbullet
} else {
this.weapons[this.cur_weapon_idx].ammo = this.weapons[this.cur_weapon_idx].ammo + 1
this.nextreload = true
}
this.needreport = true
}
this.action_duration = this.actiontime * 1000
} else if (this.action_type == 2 && this.actiontime > 0) {
this.nowspeed = shotmovespeed
this.actiontime -= dt
if (this.actiontime <= 0) {
this.action_type = 0
this.inventory[this.yaoidx]--;
this.addhp(this.yaov)
this.needreport = true
}
this.action_duration = this.actiontime * 1000
} else if (this.shot_hold && !this.tiaosan) {
this.nowspeed = shotmovespeed
this.shot(dt)
chacheobj.shotarr.push({
player_id: this.obj_uniid,
weapon: {
weapon_id: this.weapons[this.cur_weapon_idx].weapon_id
}
})
} else if (this.aiming) {
this.nowspeed = shotmovespeed
}
for (var i = this.buff_list.length - 1; i >= 0; i--) {
if (this.buff_list[i].update(dt)) {
cc.clientbattle.pushcgbuff({
buff_id: this.buff_list[i].buff_id,
left_time: this.buff_list[i].left_time,
lasting_time: this.buff_list[i].lasting_time,
}, this, 1)
this.buff_list.splice(i, 1);
}
}
this.hurttime += dt
if (this.hurttime > 1) {
var dx = gas.pos_old.x - this.pos.x
var dy = gas.pos_old.y - this.pos.y
if (dx * dx + dy * dy > gas.rad_old * gas.rad_old) {
this.hurt(gas.hurt, -1)
}
this.hurttime = 0
}
}
this.setcfg = function(cfg) {
this.isrole = true
this.max_health = this.health = playerconfig.health
this.energy_shield = cfg.energy_shield
this.setskin([1, 0, 0, 0])
this.setitems([{
key: 30703,
value: 5
}])
this.doprepar(cfg.prepare_items)
var s1 = cfg.skill_list[0].key
var s2 = cfg.skill_list[1].key
this.skill_list = [{
skill_id: s1,
left_time: 0, //skillConfig[s1].skill_cd * 1000,
cd_time: skillConfig[s1].skill_cd * 1000,
max_times: 1,
curr_times: 0,
}, {
skill_id: s2,
left_time: 0, //skillConfig[s2].skill_cd * 1000,
cd_time: skillConfig[s2].skill_cd * 1000,
max_times: 1,
curr_times: 0,
}]
this.vip_lv = cfg.vip_lv
this.head = cfg.head
this.user_data = cfg.user_data
if (cfg.weapons && cfg.weapons.length > 0) {
if (!cfg.weapons[0].weapon_id) {
return
}
if (!gameConfig.dropItemConfig[cfg.weapons[0].weapon_id]) {
return
}
this.weapons[1].weapon_id = cfg.weapons[0].weapon_id
this.weapons[1].weapon_lv = cfg.weapons[0].weapon_lv
if (cfg.weapons[1] && cfg.weapons[1].weapon_id && gameConfig.dropItemConfig[cfg.weapons[1].weapon_id]) {
this.weapons[2].weapon_id = cfg.weapons[1].weapon_id
this.weapons[2].weapon_lv = cfg.weapons[1].weapon_lv
this.changeweapon(2, true)
}
// this.spweapon = cfg.weapons[0].weapon_id
// this.spammo = cfg.weapons[0].ammo
// this.splv = cfg.weapons[0].weapon_lv
this.changeweapon(1, true)
}
}
this.doprepar = function(v) {
var widx = 0
for (var i = v.length - 1; i >= 0; i--) {
var eid = v[i]
var data = dropItemConfig[eid]
if (!data) {
continue
}
if (data.equip_type == 1 && data.equip_subtype == 1) {
this.weapons[0].weapon_id = eid
} else if (data.equip_type == 1) {
this.weapons[1].weapon_id = eid
widx = 1
} else if (data.equip_type == 9) {
this.addbuff(data.buffid)
} else if (data.equip_type == 3) {
if (data.equip_subtype == 2) {
if (this.getitem(5)) {
this.weapons[3].weapon_id = data.id
this.weapons[3].ammo = 1
}
} else {
if (this.getitem(6)) {
this.weapons[4].weapon_id = data.id
this.weapons[4].ammo = 1
}
}
}
}
this.changeweapon(widx)
}
this.robot = function(gunid) {
this.inventory[1] = this.inventory[2] = this.inventory[3] = 9999
this.thinktime = 0
this.sleeptime = 0
this.isrole = false
var gid = Utils.randintSeed(6) + 12108
if (gunid) {
gid = gunid
}
this.weapons[1].weapon_id = gid
this.setskin([Utils.randintSeed(4), 13001 + Utils.randintSeed(6), 15001 + Utils.randintSeed(6), 0])
this.changeweapon(1, true)
// this.rx = Utils.randintSeed(100)-50
// this.ry = Utils.randintSeed(100)-50
this.inventory[7] = 1
}
this.setaicfg = function(data) {
if (data && AIConfig[data]) {
this.aicfg = new robotai()
this.aicfg.setaicfg(data, this)
if (deadConfig[data]) {
this.deadcfg = deadConfig[data]
}
if (dressConfig[data]) {
this.setskin(dressConfig[data])
}
} else {
this.aicfg = null
}
}
this.dopause = function(time) {
this.shot_hold = false
this.move_dir.x = this.move_dir.y = 0
this.dir.x = this.move_dir.x
this.dir.y = this.move_dir.y
this.pausetime = time
}
this.ai = function(dt) {
if (this.isrole || this.dead) {
return
}
if (this.aicfg) {
var isover = this.aicfg.update(dt)
if (isover) {
this.aicfg = null
}
return
}
if (this.ismember) {
this.thinktime -= dt
if (this.thinktime <= 0) {
this.thinktime = 3
if (Utils.randintSeed(100) > 50) {
TempV.x = cc.clientbattle.player.x - this.pos.x + Utils.randintSeed(200) - 100
TempV.y = cc.clientbattle.player.y - this.pos.y + Utils.randintSeed(200) - 100
this.move_dir = TempV.normalize();
this.dir.x = this.move_dir.x
this.dir.y = this.move_dir.y
this.shot_hold = false
} else {
var temp = []
for (var i = cc.clientbattle.playerarr.length - 1; i >= 0; i--) {
var onep = cc.clientbattle.playerarr[i]
if (!onep.dead && !onep.ismember && !onep.isrole) {
temp.push(onep)
}
}
if (temp.length > 0) {
TempV.x = temp[0].x - this.pos.x + Utils.randintSeed(100) - 50
TempV.y = temp[0].y - this.pos.y + Utils.randintSeed(100) - 50
this.attack_dir = TempV.normalize();
this.dir.x = this.attack_dir.x
this.dir.y = this.attack_dir.y
this.move_dir.x = this.move_dir.y = 0
this.shot_hold = true
this.thinktime = 1
}
}
}
return
}
if (this.sleeptime > 0) {
this.sleeptime -= dt
if (this.sleeptime <= 0) {
this.showEmoteNetAnimation(1)
}
return
}
var dx = Math.abs(this.pos.x - cc.clientbattle.player.x)
var dy = Math.abs(this.pos.y - cc.clientbattle.player.y)
var shiyewai = false
if (dx > 512 || dy > 512) {
shiyewai = true
this.notpz = true
} else {
this.notpz = false
}
this.thinktime -= dt
if (this.thinktime <= 0) {
this.thinktime = 3
if (shiyewai) {
TempV.x = cc.clientbattle.player.x - this.pos.x
TempV.y = cc.clientbattle.player.y - this.pos.y
this.move_dir = TempV.normalize();
this.dir.x = this.move_dir.x
this.dir.y = this.move_dir.y
this.shot_hold = false
this.thinktime = 1
return
}
if (Utils.randintSeed(100) > 40) {
TempV.x = cc.clientbattle.player.x - this.pos.x + Utils.randintSeed(100) - 50
TempV.y = cc.clientbattle.player.y - this.pos.y + Utils.randintSeed(100) - 50
if (dx > 100 || dy > 100) {
this.move_dir = TempV.normalize();
this.dir.x = this.move_dir.x
this.dir.y = this.move_dir.y
this.shot_hold = false
var objs = cc.clientbattle.getpzobjs({
x: this.pos.x,
y: this.pos.y,
width: this.width * 4,
height: this.height * 4
})
for (var i = objs.length - 1; i >= 0; i--) {
var obj = objs[i]
if (obj.loot) {
if (obj.loot.dead || obj.loot.event) {
continue
}
}
var pobj = {
x: obj.xx,
y: obj.yy,
width: obj.width,
height: obj.height,
}
var size = movesize
// if (!obj.loot) {
// size = playersize * 1.5
// }
if (Utils.hitTestRectangle(pobj, {
x: this.pos.x,
y: this.pos.y + movepy,
width: size,
height: size
})) {
this.pos.x += (-this.dir.x * (50 + Utils.randintSeed(100)))
this.pos.y += (-this.dir.y * (50 + Utils.randintSeed(100)))
this.x = this.pos.x
this.y = this.pos.y
break
}
}
this.thinktime = 2
if (Utils.randintSeed(100) > 70) {
this.attack_dir.x = this.move_dir.x
this.attack_dir.y = this.move_dir.y
this.shot_hold = true
this.thinktime = 1
}
} else {
this.attack_dir = TempV.normalize();
this.dir.x = this.attack_dir.x
this.dir.y = this.attack_dir.y
this.move_dir.x = this.move_dir.y = 0
this.shot_hold = true
this.thinktime = 2
}
} else {
this.shot_hold = false
var rd = Utils.randintSeed(100)
if (rd > 90) {
this.move_dir.x = this.move_dir.y = 0
this.sleeptime = 0.5
this.thinktime = 1
} else if (false && this.skill_left_time <= 0) {
this.addbuff(1002)
this.movev(this.dir, 100)
this.thinktime = 2
} else if (rd > 70 && this.health / this.max_health < 0.5 && this.inventory[7] > 0) {
this.inventory[7]--;
TempV.x = cc.clientbattle.player.x - this.pos.x
TempV.y = cc.clientbattle.player.y - this.pos.y
this.move_dir = TempV.normalize();
this.move_dir.x = -this.move_dir.x
this.move_dir.y = -this.move_dir.y
this.dir.x = this.move_dir.x
this.dir.y = this.move_dir.y
this.yaoidx = 7
this.doheal(30301)
} else if (rd > 60) {
this.move_dir.x = this.move_dir.y = 0
this.thinktime = 1
} else if (rd > 30) {
TempV.x = cc.clientbattle.player.x - this.pos.x
TempV.y = cc.clientbattle.player.y - this.pos.y
this.move_dir = TempV.normalize();
this.dir.x = this.move_dir.x
this.dir.y = this.move_dir.y
this.attack_dir.x = this.dir.x
this.attack_dir.y = this.dir.y
this.move_dir.x = -this.move_dir.x
this.move_dir.y = -this.move_dir.y
this.shot_hold = true
if (Utils.randintSeed(100) > 70) {
this.showEmoteNetAnimation(1)
}
this.thinktime = 2
} else {
var dir = cc.v2(0, 1)
dir = Utils.dirRotate(dir, Utils.randintSeed(360) * dtoh)
this.move_dir.x = dir.x
this.move_dir.y = dir.y
this.dir.x = dir.x
this.dir.y = dir.y
this.thinktime = 1
}
}
}
}
}
module.exports = playerobj;