SamsaraGame/assets/Script/game/PubFunction.js

1256 lines
42 KiB
JavaScript
Raw Normal View History

2025-04-24 17:03:28 +08:00
import GameModel from "../ts/core/GameModel";
import GameUtil from "../ts/core/GameUtil";
import ItemUtil from "../ts/core/ItemUtil";
import SKDataUtil from "../ts/gear_2.3.4/util/SKDataUtil";
import SKUIUtil from "../ts/gear_2.3.4/util/SKUIUtil";
let GameRes = require('./GameRes');
let pScreenNoticeMgr = require('./ScreenNotice');
class CPubFunction {
constructor() {
this.vecScreenCutDown = [];
this.noticeNum = 0;
this.vecRoleBroadCast = [];
this.nTimeIndex = 0;
this.btntimer = {
timer: null,
times: 0,
};
this.vecExpLevel = [0, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000, 1000000, 5000000, 10000000, 50000000, 100000000]; //zzzErr
this.mapAttribute = {};
this.mapAttribute['AdSpdEhan'] = {
Name: '加強加速',
Kind: '物理屬性'
};
this.mapAttribute['CharmEhan'] = {
Name: '加強魅惑',
Kind: '法術增強'
};
this.mapAttribute['AdAtkEhan'] = {
Name: '加強加功',
Kind: '物理屬性'
};
this.mapAttribute['AdDefEhan'] = {
Name: '加強防禦',
Kind: '物理屬性'
};
this.mapAttribute['RecoverEhan'] = {
Name: '加強遺忘',
Kind: '法術增強'
};
this.mapAttribute['DisorderDef'] = {
Name: '抗混亂',
Kind: '法術抗性'
};
this.mapAttribute['DisorderDefNeg'] = {
Name: '忽視抗混',
Kind: '法術增強'
};
this.mapAttribute['DisorderEhan'] = {
Name: '加強混亂',
Kind: '法術增強'
};
this.mapAttribute['Atk'] = {
Name: '攻擊',
Kind: '物理屬性'
};
this.mapAttribute['Speed'] = {
Name: '速度',
Kind: '物理屬性'
};
this.mapAttribute['HitCombo'] = {
Name: '連擊次數',
Kind: '物理屬性'
};
this.mapAttribute['HitComboRate'] = {
Name: '連擊率',
Kind: '物理屬性'
};
this.mapAttribute['HitRate'] = {
Name: '命中率',
Kind: '物理屬性'
};
this.mapAttribute['FatalRate'] = {
Name: '狂暴率',
Kind: '物理屬性'
};
this.mapAttribute['PhyDef'] = {
Name: '物理吸收',
Kind: '物理屬性'
};
this.mapAttribute['PhyDefNef'] = {
Name: '破防程度',
Kind: '物理屬性'
};
this.mapAttribute['PhyDefNefRate'] = {
Name: '破防概率',
Kind: '物理屬性'
};
this.mapAttribute['VoidRate'] = {
Name: '閃避率',
Kind: '物理屬性'
};
this.mapAttribute['HpMax'] = {
Name: '氣血',
Kind: '物理屬性'
};
this.mapAttribute['FireDef'] = {
Name: '抗火',
Kind: '法術抗性'
};
this.mapAttribute['ForgetDef'] = {
Name: '抗遺忘',
Kind: '法術抗性'
};
this.mapAttribute['GfireDef'] = {
Name: '抗鬼火',
Kind: '法術抗性'
};
this.mapAttribute['GfireDefNeg'] = {
Name: '忽視抗鬼火',
Kind: '法術增強'
};
this.mapAttribute['GfireRageOdds'] = {
Name: '鬼火狂暴率',
Kind: '法術增強'
};
this.mapAttribute['PoisonDef'] = {
Name: '抗毒',
Kind: '法術抗性'
};
this.mapAttribute['RainDef'] = {
Name: '抗水',
Kind: '法術抗性'
};
this.mapAttribute['RainDefNeg'] = {
Name: '忽視抗水',
Kind: '法術增強'
};
this.mapAttribute['RainEhan'] = {
Name: '加強水系',
Kind: '法術增強'
};
this.mapAttribute['RainRageOdds'] = {
Name: '水系狂暴率',
Kind: '法術增強'
};
this.mapAttribute['SanshiDef'] = {
Name: '抗三尸',
Kind: '法術抗性'
};
this.mapAttribute['SanshiDefNeg'] = {
Name: '忽視抗三尸',
Kind: '法術增強'
};
this.mapAttribute['ShanshiRageOdds'] = {
Name: '三尸狂暴率',
Kind: '法術增強'
};
this.mapAttribute['SealDef'] = {
Name: '抗封印',
Kind: '法術抗性'
};
this.mapAttribute['ShockDef'] = {
Name: '抗震',
Kind: '法術抗性'
};
this.mapAttribute['ShockDefNeg'] = {
Name: '忽視抗震懾',
Kind: '法術增強'
};
this.mapAttribute['ShockEhan'] = {
Name: '加強震懾',
Kind: '法術增強'
};
this.mapAttribute['SleepDef'] = {
Name: '抗昏睡',
Kind: '法術抗性'
};
this.mapAttribute['ThunderDef'] = {
Name: '抗雷',
Kind: '法術抗性'
};
this.mapAttribute['ThunderRageOdds'] = {
Name: '雷系狂暴率',
Kind: '法術增強'
};
this.mapAttribute['WindDef'] = {
Name: '抗風',
Kind: '法術抗性'
};
this.mapAttribute['WindDefNeg'] = {
Name: '忽視抗風',
Kind: '法術增強'
};
this.mapAttribute['WindEhan'] = {
Name: '加強風系',
Kind: '法術增強'
};
this.mapAttribute['WindRageOdds'] = {
Name: '風系狂暴率',
Kind: '法術增強'
};
this.mapAttribute['AtkPercent'] = {
Name: '攻擊改變',
Kind: '物理屬性'
};
//----------------------------------
}
// ResetTimer(nValue) {
// let pSelf = this;
// clearInterval(this.m_timer);
// this.m_timer = setInterval(function () {
// pSelf.OnTimer();
// }, nValue);
// }
// OnTimer() { //50 毫秒一次
// this.nTimeIndex += 1;
// if (this.nTimeIndex % 20 == 0) // 降頻為 1 秒一次
// {
// // this.CheckAndDeleteNotice();
// //this.CheckAndDeleteRoleBroadCast();
// }
// // if (pScreenNoticeMgr) {
// // pScreenNoticeMgr.OnUpdate(this.nTimeIndex);
// // }
// }
runAnimation(runNode) {
runNode.active = false;
let url = 'ccbtex/panel/2251'
cc.loader.loadRes(url, cc.SpriteAtlas, function (error, atlas) {
if (error) {
cc.warn(`$警告:加載動畫資源錯誤:${url}`);
return;
}
if (!SKUIUtil.isValid(runNode)) {
return;
}
if (!atlas) {
return;
}
let curFrames = atlas.getSpriteFrames();
let curClip = cc.AnimationClip.createWithSpriteFrames(curFrames, 8);
curClip.name = 'run';
curClip.wrapMode = cc.WrapMode.Loop;
let nodeAni = runNode.getComponent(cc.Animation);
nodeAni.addClip(curClip);
nodeAni.play(curClip.name);
runNode.active = true;
});
}
BtnAnimation(btnNode1,btnNode2) {
btnNode1.active = false;
btnNode2.active = false;
let url = 'ccbtex/panel/2249'
cc.loader.loadRes(url, cc.SpriteAtlas, function (error, atlas) {
if (error) {
cc.warn(`$警告:加載動畫資源錯誤:${url}`);
return;
}
if (!SKUIUtil.isValid(btnNode1)) {
return;
}
if (!atlas) {
return;
}
let curFrames = atlas.getSpriteFrames();
let curClip = cc.AnimationClip.createWithSpriteFrames(curFrames, 12);
curClip.name = 'run';
curClip.wrapMode = cc.WrapMode.Normal;
let nodeAni = btnNode1.getComponent(cc.Animation);
nodeAni.addClip(curClip);
nodeAni.play(curClip.name);
btnNode1.active = true;
});
let url1 = 'ccbtex/panel/2250'
cc.loader.loadRes(url1, cc.SpriteAtlas, function (error, atlas) {
if (error) {
cc.warn(`$警告:加載動畫資源錯誤:${url1}`);
return;
}
if (!SKUIUtil.isValid(btnNode2)) {
return;
}
if (!atlas) {
return;
}
let curFrames = atlas.getSpriteFrames();
let curClip = cc.AnimationClip.createWithSpriteFrames(curFrames, 12);
curClip.name = 'run';
curClip.wrapMode = cc.WrapMode.Normal;
let nodeAni = btnNode2.getComponent(cc.Animation);
nodeAni.addClip(curClip);
nodeAni.play(curClip.name);
btnNode2.active = true;
});
}
CreateScreenNotice(strRichText, bInstertFront) {
pScreenNoticeMgr.AddNotice(strRichText, bInstertFront);
}
// CheckAndDeleteRoleBroadCast() {
// let nCurTime = this.GetTime();
// for (let nIndex in this.vecRoleBroadCast) {
// if (nCurTime >= this.vecRoleBroadCast[nIndex].nCreateTime + this.vecRoleBroadCast[nIndex].nLiveTime) {
// let goTmp = this.vecRoleBroadCast[nIndex];
// goTmp.goRoleBroadCast.destroy();
// this.vecRoleBroadCast.splice(nIndex, 1);
// }
// }
// }
CreateNpcNotice(nNpcConfigID, strText) {
let pNpcMgr = require('../game/NpcMgr');
let CSpeak = require('../game/Speak');
let pConfigInfo = pNpcMgr.GetNpcConfigInfo(nNpcConfigID);
if (null == pConfigInfo)
return;
let stSpeak = new CSpeak(pConfigInfo.nResID, strText, pConfigInfo.strName, 2);
this.CreateNpcTalk([stSpeak], null);
}
GetLevel(nExp) {
let nLen = this.vecExpLevel.length;
for (let nIndex = nLen - 1; nIndex >= 0; nIndex--) {
if (nExp >= this.vecExpLevel[nIndex]) {
let nCur = 0;
let nMax = 0;
if (nIndex == nLen - 1) {
nCur = this.vecExpLevel[nIndex];
nMax = this.vecExpLevel[nIndex];
} else {
nCur = nExp - this.vecExpLevel[nIndex];
nMax = this.vecExpLevel[nIndex + 1];
}
return {
nLevel: nIndex + 1,
nMax: nMax,
nCur: nCur
};
}
}
return {};
}
CreateSubNode(vParent, stPos, strPrefab, strName) {
let goItem = cc.instantiate(strPrefab);
goItem.parent = vParent;
goItem.name = strName;
goItem.setPosition(cc.v2(stPos.nX, stPos.nY));
return goItem;
}
CreateSubNodeByType(vParent, stPos, strPrefab, strName, type) {
let goItem = cc.instantiate(strPrefab);
goItem.parent = vParent;
goItem.name = strName;
goItem.opType = type;
goItem.setPosition(cc.v2(stPos.nX, stPos.nY));
return goItem;
}
isNumString(str) {
var regPos = /^\d+$/; //非負浮點數
if (regPos.test(str)) {
return true;
} else {
return false;
}
}
getWeaponName(equip) {
// console.log(equip)
let weaponname = '';
if (equip.type == 0) {
weaponname = '0000';
} //新手裝備
if (equip.type == 1) { //高級裝備
weaponname = '0100';
if (equip.level == 100 && equip.gemcnt >= 10) { //100級打滿寶石
weaponname = '0101';
} else if (equip.level == 120) { //120級
weaponname = '0200';
if (equip.gemcnt >= 12) { //打滿寶石
weaponname = '0202';
}
}
} else if (equip.type == 2) {
weaponname = '0300';
if (equip.gemcnt >= 13) {
weaponname = '0302';
} else if (equip.gemcnt >= 10) {
weaponname = '0301';
}
} else if (equip.type == 3) {
weaponname = '0400';
if (equip.level == 5)
weaponname = "0601"
else
if (equip.gemcnt >= 16) {
weaponname = '0501';
} else if (equip.gemcnt >= 13) {
weaponname = '0403';
} else if (equip.gemcnt >= 10) {
weaponname = '0401';
}
}
return weaponname;
}
addWeaponAnimation(weaponInfo, weaponNode, animationNode, logic, resid, act, dir, show = false) {
if (animationNode.name.length < 1) {
cc.log("?");
}
if (!animationNode || !weaponNode || GameUtil.roleName[resid] == null || animationNode.active == false) {
return;
}
let clips = weaponNode.getComponent(cc.Animation).getClips();
for (const clip of clips) {
if (clip.name == act) {
weaponNode.getComponent(cc.Animation).stop(act);
weaponNode.getComponent(cc.Animation).removeClip(clip, true);
}
}
weaponNode.active = false;
let weaponname = '0000';
if (weaponInfo.length > 0) {
weaponname = this.getWeaponName(JSON.parse(weaponInfo));
}
let url = `weapon/${resid}/${weaponname}_${act}_${dir}_wp`;
if (resid == 1111 && weaponname != '0601') {
url = `weapon/${resid}/${weaponname}_${act}_${dir}_wp_l`;
}
cc.loader.loadRes(url, cc.SpriteAtlas, function (error, atlas) {
if(error){
cc.error(error);
return;
}
if (!animationNode || !animationNode.parent || animationNode.parent.parent == null) return;
if (Array.isArray(atlas)) {
return;
}
if (GameModel.player.tResid != 0 && !show) return;
let curFrames = [];
for (let i = 1; ; i++) {
let frame = atlas.getSpriteFrame(i);
if (frame) curFrames.push(frame);
else break;
}
if (curFrames.length == 0)
curFrames = atlas.getSpriteFrames()
let curClip = cc.AnimationClip.createWithSpriteFrames(curFrames, 15);
curClip.name = act;
if (act == 'stand' || act == 'run') {
curClip.wrapMode = cc.WrapMode.Loop;
} else {
curClip.wrapMode = cc.WrapMode.Normal;
}
let nodeAni = weaponNode.getComponent(cc.Animation);
nodeAni.addClip(curClip);
nodeAni.play(act);
logic.scheduleOnce(() => {
if (SKUIUtil.isValid(animationNode)) {
weaponNode.scaleX = animationNode.width / weaponNode.width;
weaponNode.scaleY = animationNode.height / weaponNode.height;
}
}, 0);
weaponNode.active = true;
if (GameModel.conf_res_anchor[resid]) {
weaponNode.anchorY = GameModel.conf_res_anchor[resid].anchorY;
}
});
if (!animationNode.getChildByName('addon')) {
let addon = new cc.Node();
addon.parent = animationNode;
addon.addComponent(cc.Animation);
let addonsp = addon.addComponent(cc.Sprite);
addonsp.trim = false;
addonsp.sizeMode = cc.Sprite.SizeMode.RAW;
addon.name = 'addon';
}
let addonNode = animationNode.getChildByName('addon');
let addonclips = addonNode.getComponent(cc.Animation).getClips();
for (const clip of addonclips) {
if (clip.name == act) {
addonNode.getComponent(cc.Animation).stop(act);
addonNode.getComponent(cc.Animation).removeClip(clip, true);
}
}
addonNode.active = false;
//let addonname = weaponname.substr(0, 3) + '0';
let urls = `weapon/${resid}/${weaponname}_${act}_${dir}_wp_addon`;
if (resid == 1111 && weaponname != '0601') {
urls = `weapon/${resid}/${weaponname}_${act}_${dir}_wp_r`;
}
if (resid == 3006 && weaponname != '0601') {
urls = `weapon/${resid}/${weaponname}_${act}_${dir}_addon`;
}
cc.loader.loadRes(urls, cc.SpriteAtlas, function (err, atlas) {
if (!animationNode || !animationNode.parent || !animationNode.parent.parent == null) return;
if (Array.isArray(atlas)) {
return;
}
let addonani = addonNode.getComponent(cc.Animation);
let addonsp = addonNode.getComponent(cc.Sprite);
addonsp.spriteFrame = atlas.getSpriteFrame(0);
let addonFrames = [];
for (let i = 1; ; i++) {
let frame = atlas.getSpriteFrame(i);
if (frame) addonFrames.push(frame);
else break;
}
if (addonFrames.length == 0)
addonFrames = atlas.getSpriteFrames()
let curClip = cc.AnimationClip.createWithSpriteFrames(addonFrames, 15);
curClip.name = act;
if (act == 'stand' || act == 'run') {
curClip.wrapMode = cc.WrapMode.Loop;
} else {
curClip.wrapMode = cc.WrapMode.Normal;
}
addonani.addClip(curClip);
addonani.play(act);
logic.scheduleOnce(() => {
if (SKUIUtil.isValid(addonNode) && SKUIUtil.isValid(animationNode)) {
addonNode.scaleX = animationNode.width / addonNode.width;
addonNode.scaleY = animationNode.height / addonNode.height;
}
}, 0);
if (GameModel.conf_res_anchor[resid]) {
addonNode.anchorY = GameModel.conf_res_anchor[resid].anchorY;
} else
addonNode.anchorY = 0.4
addonNode.active = true;
});
}
CreateRole(nOnlyID, nResID, strName, nHP, nMP, stPos, vParent) {
let preRole = GameModel.role;
let goRole = this.CreateSubNode(vParent, stPos, preRole, 'BattleSoldier');
cc.find('name', goRole).getComponent(cc.Label).string = strName;
let comRole = goRole.getComponent('role');
comRole.onlyid = nOnlyID;
comRole.resid = nResID;
comRole.hp = nHP;
comRole.animationNode.anchorY = 0;
if (SKDataUtil.hasProperty(GameModel.conf_res_anchor, nResID)) {
comRole.animationNode.anchorY = GameModel.conf_res_anchor[nResID].anchorY;
}
comRole.resAtlas = GameRes.getRoleRes(nResID);
comRole.initAnimation();
return goRole;
}
CreateNpc(nOnlyID, nResID, strName, nHP, nMP, stPos, vParent) {
let preRole = GameModel.npc;
let goRole = this.CreateSubNode(vParent, stPos, preRole, 'BattleSoldier');
cc.find('name', goRole).getComponent(cc.Label).string = strName;
let comRole = goRole.getComponent('Npc');
if (SKDataUtil.hasProperty(GameModel.conf_res_anchor, nResID)) {
comRole.animationNode.anchorY = GameModel.conf_res_anchor[nResID].anchorY;
}
return goRole;
}
GetMapSum(mapTmp) {
let nNum = 0;
for (const it in mapTmp) {
nNum += mapTmp[it];
}
return nNum;
}
GetMapLen(mapTmp) {
let nCnt = 0;
for (let key in mapTmp) {
key;
nCnt++;
}
return nCnt;
}
CreateEventHandler(goNode, comName, strFunction, varParam) {
let varHandler = new cc.Component.EventHandler();
varHandler.target = goNode;
varHandler.component = comName;
varHandler.handler = strFunction;
varHandler.customEventData = varParam;
return varHandler;
}
FindAndDeleteNode(nodParent, strName) {
let nodTmp = nodParent.getChildByName(strName);
if (nodTmp != null)
nodTmp.destroy();
}
FindAndHidenNode(nodParent, stPos) {
let nodTmp = nodParent.getChildByName("TalkUI");
if (nodTmp == null) {
nodTmp = this.CreateSubNode(nodParent, {
nX: 0,
nY: 0
}, GameModel.talkUI, "TalkUI");
}
nodTmp.setPosition(cc.v2(stPos.nX, stPos.nY));
nodTmp.zIndex = 1;
return nodTmp;
}
NumToString(nNum, nLen) {
return (Array(nLen).join(0) + nNum).slice(-nLen);
}
CreateSubFrame(vParent, stPos, strPrefab, strClipName, callback) {
let goEffectFrame = this.CreateSubNode(vParent, {
nX: stPos.nX,
nY: stPos.nY
}, strPrefab, '');
SKUIUtil.loadAtlasAni("effect", strClipName, (clip) => {
if (!SKUIUtil.isValid(goEffectFrame)) {
cc.warn(`$警告:創建幀動畫節點無效${strClipName}`);
} else {
clip.name = strClipName;
clip.wrapMode = cc.WrapMode.Normal; //循環播放
let effect = goEffectFrame.getComponent('Effect');
effect.CreateAndPlayAnimation(clip, callback);
}
});
}
CreateSubFrame1(vParent, stPos, strPrefab, strClipName, callback) {
let goEffectFrame = this.CreateSubNode(vParent, {
nX: stPos.nX,
nY: stPos.nY
}, strPrefab, '');
SKUIUtil.loadAtlasAni("buff", strClipName, (clip) => {
if (!SKUIUtil.isValid(goEffectFrame)) {
cc.warn(`$警告:創建幀動畫節點無效${strClipName}`);
} else {
clip.name = strClipName;
clip.wrapMode = cc.WrapMode.Normal; //循環播放
let effect = goEffectFrame.getComponent('Effect');
effect.CreateAndPlayAnimation(clip, callback);
}
});
}
CreateSubFrameBoom(vParent, stPos, strPrefab, strClipName, callback) {
let goEffectFrame = this.CreateSubNode(vParent, {
nX: stPos.nX,
nY: stPos.nY
}, strPrefab, '');
SKUIUtil.loadAtlasAni("buff", strClipName, (clip) => {
if (!SKUIUtil.isValid(goEffectFrame)) {
cc.warn(`$警告:創建幀動畫節點無效${strClipName}`);
} else {
clip.name = strClipName;
clip.wrapMode = cc.WrapMode.Normal; //循環播放
let effect = goEffectFrame.getComponent('Effect');
effect.CreateAndPlayAnimation(clip, callback);
}
});
}
CreateSubFrameLoop(vParent, stPos, strPrefab, strClipName) {
let goEffectFrame = this.CreateSubNode(vParent, {
nX: stPos.nX,
nY: stPos.nY
}, strPrefab, '');
SKUIUtil.loadAtlasAni("effect", strClipName, (clip) => {
if (!SKUIUtil.isValid(goEffectFrame)) {
cc.warn(`$警告:創建幀循環節點無效${strClipName}`);
} else {
clip.name = strClipName;
clip.wrapMode = cc.WrapMode.Loop; //循環播放
let effect = goEffectFrame.getComponent('Effect');
effect.CreateAndPlayAnimation(clip);
}
});
return goEffectFrame;
}
CreateNpcTalk(vecSpeak, pCallBack) {
if (vecSpeak.length <= 0) {
if (pCallBack)
pCallBack();
return;
}
let goTalkUI = this.FindAndHidenNode(cc.find('Canvas/MainUI'), {
nX: 0,
nY: -188
});
goTalkUI.getComponent('Talk').Init(vecSpeak, pCallBack);
}
//spine骨骼動畫
SetSpineAvatar(nodSpine, nodAvatar, nResID, nodDragonBone) {
nodSpine.active = false;
nodDragonBone.active = false;
if (nodAvatar) nodAvatar.active = false;
cc.loader.loadResDir(`spineres/${nResID}`, function (err, assets){
if (err != null || nodSpine.isValid == false)
return;
if (assets.length > 0) {
nodSpine.active = true;
let spineRes = {};
for (let i = 0; i < assets.length; i++) {
if (assets[i] instanceof sp.SkeletonData) {
spineRes.spineAsset = assets[i];
}
}
//展現
let t = nodSpine.getComponent(sp.Skeleton);
let oldAnimationName = null;
if(t){
oldAnimationName = t.animation;
}
if(nResID == 6140 || nResID == 6141 || nResID == 6142 ){
oldAnimationName = "idle";
}
nodSpine.removeComponent(sp.Skeleton);
let comArmatureDisplay = nodSpine.addComponent(sp.Skeleton);
comArmatureDisplay.skeletonData = null;
comArmatureDisplay.skeletonData = spineRes.spineAsset;
//comArmatureDisplay.setSkin = 'default';
if(oldAnimationName){
comArmatureDisplay.setAnimation(0, oldAnimationName, true);
}
} else {
if (nodAvatar == null)
return;
cc.loader.loadResDir(`ui/photo/${nResID}`, cc.SpriteFrame, (e, frame) => {
nodAvatar.active = true;
nodAvatar.getComponent(cc.Sprite).spriteFrame = frame[0];
})
}
});
}
//龍骨動畫
SetDragonBoneAvatar(nodDragonBone, nodAvatar, nResID, nodSpine) {
nodDragonBone.active = false;
nodSpine.active = false;
if (nodAvatar) nodAvatar.active = false;
cc.loader.loadResDir(`dragonbone/${nResID}`, function (err, assets){
if (err != null || nodDragonBone.isValid == false)
return;
if (assets.length > 0) {
nodDragonBone.active = true;
let dragonRes = {};
for (let i = 0; i < assets.length; i++) {
if (assets[i] instanceof dragonBones.DragonBonesAsset) {
dragonRes.dragonAsset = assets[i];
}
if (assets[i] instanceof dragonBones.DragonBonesAtlasAsset) {
dragonRes.dragonAtlasAsset = assets[i];
}
}
//展現
let t = nodDragonBone.getComponent(dragonBones.ArmatureDisplay);
let oldAnimationName = null;
if(t){
oldAnimationName = t.animationName;
}
nodDragonBone.removeComponent(dragonBones.ArmatureDisplay);
let comArmatureDisplay = nodDragonBone.addComponent(dragonBones.ArmatureDisplay);
// cc.sys.isNative && comArmatureDisplay._factory.clear(false); //在手機上加載相同的資源會出現閃退
comArmatureDisplay.dragonAsset = null;
comArmatureDisplay.dragonAtlasAsset = null;
comArmatureDisplay.dragonAsset = dragonRes.dragonAsset;
comArmatureDisplay.dragonAtlasAsset = dragonRes.dragonAtlasAsset;
comArmatureDisplay.armatureName = 'armatureName';
if(oldAnimationName){
comArmatureDisplay.playAnimation(oldAnimationName, 0);
}
} else {
if (nodAvatar == null)
return;
cc.loader.loadResDir(`ui/photo/${nResID}`, cc.SpriteFrame, (e, frame) => {
nodAvatar.active = true;
nodAvatar.getComponent(cc.Sprite).spriteFrame = frame[0];
})
}
});
}
//spine骨骼動畫(扩展一个)
SetSpineAvatars(nodSpine, nodAvatar, nResID) {
nodSpine.active = false;
if (nodAvatar) nodAvatar.active = false;
cc.loader.loadResDir(`spineres/${nResID}`, function (err, assets){
if (err != null || nodSpine.isValid == false)
return;
if (assets.length > 0) {
nodSpine.active = true;
let spineRes = {};
for (let i = 0; i < assets.length; i++) {
if (assets[i] instanceof sp.SkeletonData) {
spineRes.spineAsset = assets[i];
}
}
//console.log('dragonRes.dragonAsset9999999', dragonRes.dragonAsset);
//展現
let t = nodSpine.getComponent(sp.Skeleton);
let oldAnimationName = null;
if(t){
oldAnimationName = t.animation;
}
nodSpine.removeComponent(sp.Skeleton);
let comArmatureDisplay = nodSpine.addComponent(sp.Skeleton);
// cc.sys.isNative && comArmatureDisplay._factory.clear(false); //在手機上加載相同的資源會出現閃退
comArmatureDisplay.skeletonData = null;
comArmatureDisplay.skeletonData = spineRes.spineAsset;
//comArmatureDisplay.setSkin = 'default';
if(oldAnimationName){
comArmatureDisplay.setAnimation(0, oldAnimationName, true);
}
} else {
if (nodAvatar == null)
return;
cc.loader.loadResDir(`ui/photo/${nResID}`, cc.SpriteFrame, (e, frame) => {
nodAvatar.active = true;
nodAvatar.getComponent(cc.Sprite).spriteFrame = frame[0];
})
}
});
}
//龍骨動畫(扩展一个)
SetDragonBoneAvatars(nodDragonBone, nodAvatar, nResID) {
nodDragonBone.active = false;
if (nodAvatar) nodAvatar.active = false;
cc.loader.loadResDir(`dragonbone/${nResID}`, function (err, assets){
if (err != null || nodDragonBone.isValid == false)
return;
if (assets.length > 0) {
nodDragonBone.active = true;
let dragonRes = {};
for (let i = 0; i < assets.length; i++) {
if (assets[i] instanceof dragonBones.DragonBonesAsset) {
dragonRes.dragonAsset = assets[i];
}
if (assets[i] instanceof dragonBones.DragonBonesAtlasAsset) {
dragonRes.dragonAtlasAsset = assets[i];
}
}
//展現
let t = nodDragonBone.getComponent(dragonBones.ArmatureDisplay);
let oldAnimationName = null;
if(t){
oldAnimationName = t.animationName;
}
nodDragonBone.removeComponent(dragonBones.ArmatureDisplay);
let comArmatureDisplay = nodDragonBone.addComponent(dragonBones.ArmatureDisplay);
// cc.sys.isNative && comArmatureDisplay._factory.clear(false); //在手機上加載相同的資源會出現閃退
comArmatureDisplay.dragonAsset = null;
comArmatureDisplay.dragonAtlasAsset = null;
comArmatureDisplay.dragonAsset = dragonRes.dragonAsset;
comArmatureDisplay.dragonAtlasAsset = dragonRes.dragonAtlasAsset;
comArmatureDisplay.armatureName = 'armatureName';
if(oldAnimationName){
comArmatureDisplay.playAnimation(oldAnimationName, 0);
}
} else {
if (nodAvatar == null)
return;
cc.loader.loadResDir(`ui/photo/${nResID}`, cc.SpriteFrame, (e, frame) => {
nodAvatar.active = true;
nodAvatar.getComponent(cc.Sprite).spriteFrame = frame[0];
})
}
});
}
GetRaceFileName(nRace) {
if (nRace == 1)
return 'ui_common_icon_race1';
if (nRace == 2)
return 'ui_common_icon_race3';
if (nRace == 3)
return 'ui_common_icon_race2';
if (nRace == 4)
return 'ui_common_icon_race4';
if (nRace == 5)
return 'ui_common_icon_race5';
}
DestroyVecNode(vecNod) {
for (let item of vecNod) {
if (item) {
item.destroy();
}
}
vecNod.length = 0;
}
FindAndDoUIFunction(strUI, strFun, stData) {
let strPath = `Canvas/MainUI/${strUI}`;
let goUI = cc.find(strPath);
if (null == goUI)
return;
let comUI = goUI.getComponent(strUI);
if (null == comUI)
return;
comUI[strFun](stData);
}
CreateRoleBroadCast(goRole, strMsg) {
if (null == strMsg || '' == strMsg)
return;
let goRoleBroadCast = this.CreateSubNode(goRole, {
nX: -120,
nY: 200
}, GameModel.preRoleBrodcast, 'preRoleBrodcast');
cc.find('Label', goRoleBroadCast).getComponent(cc.Label).string = strMsg;
// this.vecRoleBroadCast.push({ goRoleBroadCast: goRoleBroadCast, nCreateTime: this.GetTime(), nLiveTime: 3 });
goRoleBroadCast.runAction(cc.sequence(cc.delayTime(3), cc.removeSelf()));
}
CreateRoleEmojBroadCast(goRole, strMsg, emojiAtlas) {
if (null == strMsg || '' == strMsg)
return;
let goRoleBroadCast = this.CreateSubNode(goRole, {
nX: -120,
nY: 200
}, GameModel.preRoleBrodcast, 'preRoleBrodcast');
//cc.find('Label', goRoleBroadCast).getComponent(cc.Label).string = strMsg;
let chatItem = new cc.Node();
chatItem.parent = goRoleBroadCast;
let richText = chatItem.addComponent('CustomRichText');
richText.maxWidth = 259;
richText.fontSize = 20;
richText.lineHeight = 22;
richText.type = 1;
richText.scale = -1;
richText.emojiAtlas = emojiAtlas;
richText.string = strMsg;
richText.strColor = cc.Color.WHITE;
chatItem.x = 0;
chatItem.color = cc.color(200, 0, 0, 255);
chatItem.parent = goRoleBroadCast;
chatItem.name = 'emojBroadCast';
//chatItem.setPosition(cc.v2(stPos.nX, stPos.nY));
chatItem.y = 0;
// this.vecRoleBroadCast.push({ goRoleBroadCast: goRoleBroadCast, nCreateTime: this.GetTime(), nLiveTime: 3 });
goRoleBroadCast.runAction(cc.sequence(cc.delayTime(3), cc.removeSelf()));
}
GetRole() {
return cc.find('Canvas/MapUI').getComponent('GameMapLogic').myRole;
}
ChangeTeamButtonState(vecButton, strAtlas, strDarkFrame, strLightFrame, nCurBtn) {
for (var it in vecButton) {
if (it != nCurBtn) {
SKUIUtil.setSpriteFrame(vecButton[it], strAtlas, strDarkFrame);
} else {
SKUIUtil.setSpriteFrame(vecButton[it], strAtlas, strLightFrame);
}
}
}
ChangeTeamNodeState(vecNode, nCurNode) {
for (var it in vecNode) {
vecNode[it].active = it == nCurNode ? true : false;
}
}
GetTime() {
let nTime = Math.floor(Date.parse(new Date()) / 1000);
let nLocalTime = nTime + 28800;
return nLocalTime;
}
GetAttributeName(strKey) {
let result = "";
if (SKDataUtil.hasProperty(this.mapAttribute, strKey)) {
result = this.mapAttribute[strKey].Name;
}
return result;
}
GetAttributeType(strKey) {
let result = "";
if (SKDataUtil.hasProperty(this.mapAttribute, strKey)) {
result = this.mapAttribute[strKey].Kind;
}
return result;
}
ChangeNumToRange(fData, fMin, fMax) {
fData = Math.max(fData, fMin);
fData = Math.min(fData, fMax);
return fData;
}
GetDistance(stPosA, stPosB) {
let nXDis = Math.abs(stPosA.x - stPosB.x);
let nYDis = Math.abs(stPosA.y - stPosB.y);
let nDis = Math.pow(nXDis * nXDis + nYDis * nYDis, 0.5);
return nDis;
}
GetMapDataByIndex(mapData, nIndex) {
if (nIndex < 0 || nIndex >= this.GetMapLen(mapData))
return null;
let nCnt = -1;
for (let it in mapData) {
nCnt++;
if (nCnt == nIndex)
return mapData[it];
}
return null;
}
IsDataInVecter(stData, vecData) {
for (let it in vecData) {
if (stData == vecData[it])
return true;
}
return false;
}
GetDefault(stData, stDefault) {
if (typeof stData == "undefined")
return stDefault;
return stData;
}
GetTaskTalkList(nTaskID, nStep) {
let vecTmp = [];
let CSpeak = require('./Speak');
let pNpcMgr = require('./NpcMgr');
let pTaskConfigMgr = require('./task_config').g_pTaskConfigMgr;
let stStep = pTaskConfigMgr.GetTaskStepInfo(nTaskID, nStep);
if (!stStep) {
return vecTmp;
}
for (let stData of stStep.vecSpeak) {
if (!stData.nValue) {
cc.warn("$警告:對話內容不能為空");
stData.nValue = "...";
}
let nSpeakerResID = 0;
let strSpeaderName = '';
let nPosType = 1;
if (stData.nKey > 0) { //Npc說話
let stConfigInfo = pNpcMgr.GetNpcConfigInfo(stData.nKey);
console.log(stData)
console.log(stConfigInfo)
nSpeakerResID = stConfigInfo.nResID;
strSpeaderName = stConfigInfo.strName;
nPosType = 2;
} else { //主角說話
nSpeakerResID = GameModel.player.resid;
strSpeaderName = GameModel.player.name;
nPosType = 1;
}
let stSpead = new CSpeak(nSpeakerResID, stData.nValue, strSpeaderName, nPosType);
// console.log(nSpeakerResID, stData.nValue, strSpeaderName, nPosType)
vecTmp.push(stSpead);
}
return vecTmp;
}
SetPrizeIcon(goPrizeIcon, strItem) {
if (strItem == 'exp') {
SKUIUtil.setSpriteFrame(goPrizeIcon, 'Common/ui_common', 'ui_common_icon_exp');
} else if (strItem == 'petexp') {
SKUIUtil.setSpriteFrame(goPrizeIcon, 'Common/ui_common', 'ui_common_icon_exppet');
} else if (strItem == 'money') {
if (goPrizeIcon) {
let sprite = goPrizeIcon.getComponent(cc.Sprite);
if (sprite) {
sprite.spriteFrame = ItemUtil.getItemIcon(9001);
} else {
cc.warn(`$警告:價值圖標異常${strItem}`);
}
} else {
cc.warn(`$警告:價值圖標異常${strItem}`);
}
} else {
let stConfigInfo = ItemUtil.getItemData(strItem);
if (goPrizeIcon) {
let sprite = goPrizeIcon.getComponent(cc.Sprite);
if (sprite) {
sprite.spriteFrame = ItemUtil.getItemIconBy(stConfigInfo);
} else {
cc.warn(`$警告:價值圖標異常${strItem}`);
}
} else {
cc.warn(`$警告:價值圖標異常${strItem}`);
}
}
}
SetMaskAnimation(goAnim, nResID, strClipName) {
goAnim.active = false;
let url = `shape_mask/${nResID}/${strClipName}`;
cc.loader.loadRes(url, cc.SpriteAtlas, function (error, atlas) {
if (error) {
cc.warn(`$警告:加載資源${url}失敗!`);
return;
}
if (!SKUIUtil.isValid(goAnim)) {
return;
}
goAnim.active = true;
let curFrames = atlas.getSpriteFrames();
let fn = 10;
if(nResID <= 4038){
fn = 15;
}
let curClip = cc.AnimationClip.createWithSpriteFrames(curFrames, fn);
curClip.name = strClipName;
curClip.wrapMode = cc.WrapMode.Loop;
let nodeAni = goAnim.getComponent(cc.Animation);
if (nodeAni) {
nodeAni.addClip(curClip);
nodeAni.play(curClip.name);
}
let anchorY = 0.4;
let anchorX = 0.5;
if (SKDataUtil.hasProperty(GameModel.conf_res_anchor, nResID)) {
anchorY = GameModel.conf_res_anchor[nResID].anchorY;
anchorX = GameModel.conf_res_anchor[nResID].anchorX;
}
goAnim.anchorY = anchorY;
goAnim.anchorX = anchorX;
});
}
SetAnimation(goAnim, nResID, strClipName) {
goAnim.active = false;
let url = `shap/${nResID}/${strClipName}`;
cc.loader.loadRes(url, cc.SpriteAtlas, function (error, atlas) {
if (error) {
cc.warn(`$警告:加載資源${url}失敗!`);
return;
}
if (!SKUIUtil.isValid(goAnim)) {
return;
}
goAnim.active = true;
let curFrames = atlas.getSpriteFrames();
let fn = 10;
if(nResID <= 4038){
fn = 15;
}
let curClip = cc.AnimationClip.createWithSpriteFrames(curFrames, fn);
curClip.name = strClipName;
curClip.wrapMode = cc.WrapMode.Loop;
let nodeAni = goAnim.getComponent(cc.Animation);
if (nodeAni) {
nodeAni.addClip(curClip);
nodeAni.play(curClip.name);
}
let anchorY = 0.4;
let anchorX = 0.5;
if (SKDataUtil.hasProperty(GameModel.conf_res_anchor, nResID)) {
anchorY = GameModel.conf_res_anchor[nResID].anchorY;
anchorX = GameModel.conf_res_anchor[nResID].anchorX;
}
goAnim.anchorY = anchorY;
goAnim.anchorX = anchorX;
});
}
initLongTouchBtn(btn, callback, param) {
btn.on(cc.Node.EventType.TOUCH_START, () => {
if (this.btntimer.timer != null) {
return;
}
this.btntimer.timer = setInterval(() => {
this.btntimer.times++;
if (this.btntimer.times >= this.btntimer.step) {
this.btntimer.times = 0;
this.btntimer.step = this.btntimer.step / 2;
if (this.btntimer.step < 1) {
this.btntimer.step = 1;
}
callback(param);
}
}, 50);
callback(param);
});
let cancelfunc = () => {
clearInterval(this.btntimer.timer);
this.btntimer.timer = null;
this.btntimer.times = 0;
this.btntimer.step = 20;
};
btn.on(cc.Node.EventType.TOUCH_CANCEL, cancelfunc);
btn.on(cc.Node.EventType.TOUCH_END, cancelfunc);
}
}
let g_ctFunctionInstance = null;
module.exports = (() => {
if (g_ctFunctionInstance == null) {
g_ctFunctionInstance = new CPubFunction();
}
return g_ctFunctionInstance;
})();