消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

262 lines
9.8 KiB

import { GEvent } from '../../mx/module/event/GEvent';
import { Singleton } from '../../mx/tools/Singleton';
import { TableNames } from '../game/ConfigTableData';
import { StatusType } from '../game/GameData';
//角色id管理
export class RoleSingle extends Singleton {
/**当前角色id */
get roleId() {
return gg.data.doc.roleId;
}
set roleId(id: number) {
this.switchRoleData(id)
gg.data.doc.roleId = id;
GEvent.Ins.emit(GEvent.UpdateRole)
}
/**切换角色统一数据 如果是女转男,女数据同步男的; 男转女,男数据同步女的*/
/**需要转的数据是碎片和皮肤等级,皮肤解锁的状态*/
switchRoleData(id){
let nanSkins = gg.data.table.getTableList<ITableSkin>(TableNames.RoleSkin).filter(skin => skin.roleId == 1);
let nvSkins = gg.data.table.getTableList<ITableSkin>(TableNames.RoleSkin).filter(skin => skin.roleId == 0);
if(id == 0){
// 男转女:按同 type 把男号皮肤道具/碎片/等级写到女号(之前错写成仍用 config 的男 itemid)
for(let i = 0; i < nanSkins.length; i++){
let config = nanSkins[i];
let itemid = config.itemid;
let pieceid = config.piece;
let itemNum = gg.data.getItemNum(itemid);
let pieceNum = gg.data.getItemNum(pieceid);
let levelNan = gg.skin.getSkinLevel(itemid);
let findNvConfig = null;
for(let j = 0; j < nvSkins.length; j++){
let nvConfig = nvSkins[j];
if(nvConfig.type == config.type){
findNvConfig = nvConfig;
break
}
}
if(!findNvConfig){
continue
}
let nvItemId = findNvConfig.itemid;
let nvPieceId = findNvConfig.piece;
if(itemNum > 0){
gg.data.setItemNum(nvItemId, itemNum);
}
if(pieceNum > 0){
gg.data.setItemNum(nvPieceId, pieceNum);
}
if(levelNan > 0){
gg.skin.setSkinLevel(nvItemId, levelNan);
}
}
}else if(id == 1){
//女转男,女数据同步男的
for(let i=0;i<nvSkins.length;i++){
let config = nvSkins[i];
let itemid = config.itemid;
let pieceid = config.piece;
let itemNum = gg.data.getItemNum(itemid);
let pieceNum = gg.data.getItemNum(pieceid);
let levelNan = gg.skin.getSkinLevel(itemid);
let findNanConfig = null;
for(let j=0;j<nanSkins.length;j++){
let nanConfig = nanSkins[j];
if(nanConfig.type == config.type){
findNanConfig = nanConfig;
break
}
}
if(findNanConfig){
let itemNvid = findNanConfig.itemid;
let pieceNvid = findNanConfig.piece;
if(itemNum > 0){
gg.data.setItemNum(itemNvid, itemNum);
}
if(pieceNum > 0){
gg.data.setItemNum(pieceNvid, pieceNum);
}
if(levelNan > 0){
gg.skin.setSkinLevel(itemNvid, levelNan);
}
}
}
}
}
/**根据当前皮肤切换到对应角色的皮肤id */
changeSkinToRoleSkin(oldskinId:number){
//oldskinId 是旧的皮肤id,需要切换到对应角色的皮肤id
let skinId = this.getSkinItemIdFromReward(oldskinId);
if(skinId){
gg.skin.CurrentSkin = skinId;
console.log("切换到对应角色的皮肤id", oldskinId, "->", skinId);
}
}
//设置默认的皮肤
setDefaultSkin(){
if(this.allSkinItemid){
let defaultSkin = this.allSkinItemid[0];
console.log("设置默认的皮肤", defaultSkin);
gg.data.setStatus(StatusType.CurrentSkin, defaultSkin.id);
}
}
//获取当前皮肤的desc
getCurSkinDesc(skinId:number){
let skinArr = this.allSkinConfig;
let skin = skinArr.find(skin => skin.itemid == skinId);
if(skin){
return skin.desc;
}
return "";
}
/**获取当前角色匹配的所有的皮肤配置 */
get allSkinConfig() {
let skinArr = gg.data.table.getTableList<ITableSkin>(TableNames.RoleSkin).filter(skin => skin.roleId == this.roleId);
return skinArr;
}
/**获取当前角色对应的皮肤id item */
get allSkinItemid() {
let arr = gg.data.table.getTableList<ITableItem>(TableNames.Item).filter(item => item.type == 5);
//获取到所有的角色的皮肤
let skinArr = this.allSkinConfig;
//筛选出所有的任务
let arr2 = arr.filter(item => skinArr.some(skin => skin.itemid == item.id));
//console.log("获取当前角色对应的皮肤id array", arr2);
//按照id排序
arr2.sort((a, b) => a.id - b.id);
return arr2;
}
/**获取当前角色对应的皮肤碎片id item */
get allSkinPieceid() {
let arr = gg.data.table.getTableList<ITableItem>(TableNames.Item).filter(item => item.type == 11);
//获取到所有的角色的皮肤
let skinArr = this.allSkinConfig;
//筛选出所有的任务
let arr2 = arr.filter(item => skinArr.some(skin => skin.piece == item.id));
//console.log("获取当前角色对应的皮肤碎片id array", arr2);
return arr2;
}
/****皮肤转化 为对应的id 返回皮肤id */
getSkinIdFromReward(id: number) {
let allSkinConfig = this.allSkinConfig;
let skin = allSkinConfig.find(skin => skin.id == id);
if(skin){
console.log("是默认的角色", skin);
return skin.id;
}else{
//不是默认的角色,需要找到对应的皮肤id 获取所有的皮肤配置
let skinArr = gg.data.table.getTableList<ITableSkin>(TableNames.RoleSkin)
let skinConfig = skinArr.find(skin => skin.id == id);
if(skinConfig){
//获取到默认的皮肤对应的配置
let type = skinConfig.type;
let skin = allSkinConfig.find(skin => skin.type == type);
console.log("获取到默认的皮肤对应的配置", skin);
return skin.id;
}
}
return 0;
}
/**皮肤转化 为对应的itemid */
getSkinItemIdFromReward(itemID: number) {
let allSkinConfig = this.allSkinConfig;
let skin = allSkinConfig.find(skin => skin.itemid == itemID);
if(skin){
console.log("是默认的角色", skin);
return skin.itemid;
}else{
//不是默认的角色,需要找到对应的皮肤id 获取所有的皮肤配置
let skinArr = gg.data.table.getTableList<ITableSkin>(TableNames.RoleSkin)
let skinConfig = skinArr.find(skin => skin.itemid == itemID);
if(skinConfig){
//获取到默认的皮肤对应的配置
let type = skinConfig.type;
let skin = allSkinConfig.find(skin => skin.type == type);
console.log("获取到默认的皮肤对应的配置", skin);
return skin.itemid;
}
}
return 0;
}
//奖励转换,获取当前角色对应的皮肤碎片id
getPieceIdFromReward(itemID: number) {
let allSkinConfig = this.allSkinConfig;
let skin = allSkinConfig.find(skin => skin.itemid == itemID);
if(skin){
console.log("是默认的角色", skin);
return skin.piece;
}else{
//不是默认的角色,需要找到对应的皮肤碎片id 获取所有的皮肤配置
let skinArr = gg.data.table.getTableList<ITableSkin>(TableNames.RoleSkin)
let skinConfig = skinArr.find(skin => skin.itemid == itemID);
//获取到默认的皮肤对应的配置
let type = skinConfig.type;
let skin = allSkinConfig.find(skin => skin.type == type);
console.log("获取到默认的皮肤对应的配置", skin);
return skin.piece;
}
}
//皮肤转碎片
skinToPiece(itemID: number) {
let allSkinConfig = this.allSkinConfig;
let skin = allSkinConfig.find(skin => skin.itemid == itemID);
if(skin){
console.log("是默认的角色", skin);
return {
pieceId: skin.piece,
num: skin.getnumber,
};
}else{
//不是默认的角色,需要找到对应的皮肤id 获取所有的皮肤配置
let skinArr = gg.data.table.getTableList<ITableSkin>(TableNames.RoleSkin)
let skinConfig = skinArr.find(skin => skin.itemid == itemID);
//获取到默认的皮肤对应的配置
let type = skinConfig.type;
let skin = allSkinConfig.find(skin => skin.type == type);
console.log("获取到默认的皮肤对应的配置", skin);
return {
pieceId: skin.piece,
num: skin.getnumber,
};
}
}
//如果拥有这个皮肤,皮肤会转为碎片
checkHasSkin(itemid: number) {
let hasSkin = gg.data.getItemNum(itemid) > 0;
if(hasSkin){
//如果拥有这个皮肤,皮肤会转为碎片
let {pieceId, num} = this.skinToPiece(itemid);
//给玩家添加碎片
gg.data.addItemNum(pieceId, num);
}
}
}