最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

賽爾號互通版對戰(zhàn)面板能顯示屬性技能詳情嗎?

2021-11-28 12:27 作者:摸魚的橙汁  | 我要投稿



賽爾號互通版對戰(zhàn)面板能顯示屬性技能詳情嗎?


各位平時在進行精靈對戰(zhàn)的時候,不知是否感覺互通版少了些東西呢?

【圖1】網頁版(Flash)

總感覺互通版的對戰(zhàn)信息(戰(zhàn)報)面板空蕩蕩的,好像少了一段文字。

【圖2】互通版(H5)

對了,是不是互通版少了一段關于屬性技能的描述呢?就像下面這張圖一樣。

【圖3】修改版本(H5)

在互通版打BOSS的時候,BOSS突然釋放一個屬性技能,戰(zhàn)報面板卻無法顯示技能詳細信息,此時很容易翻車,畢竟玩家不可能每時每刻把每一條技能的效果背的滾瓜爛熟,當場查詢也不一定來得及。

兩個人進行巔峰自由戰(zhàn)對決,一個人使用網頁版,另一個人使用互通版,假如兩個人的設備性能、網絡狀態(tài)、能力素質相當,那么一定是使用網頁版的人占優(yōu)勢。

拋開互通版蹩腳的操作手感不談,互通版缺少技能信息詳情的顯示功能就是一個很大的劣勢。

假如互通版也能在對戰(zhàn)信息面板顯示屬性技能的詳細信息,對于對戰(zhàn)雙方來說,也會比較公平一些。(比如像下面這張圖一樣。)

與此同時,大家玩互通版也會輕松很多。

作為一個比較懶的人,不想記這么多技能的效果,為了方便以后在互通版對戰(zhàn)時查看屬性技能詳情信息,于是開始了探索。

首先,要知道,賽爾號的技能信息是如何保存的。

賽爾號的技能信息一般是存儲在一個xml文件之中,精靈的技能叫做Move,技能的效果叫做SideEffect。

Move的SideEffect屬性用于存放技能的效果ID,SideEffectArg屬性用于傳遞技能的效果的參數值。

以技能“光榮之夢”為例,其中有一個子效果為“下2回合自身所有技能先制+2”:對應的SideEffect序號為843,效果“下m回合自身所有技能先制+n”;對應的參數為“2 2”,整合以后就是“下2回合自身所有技能先制+2”。

作為屬性技能,“光榮之夢”還有一個獨特的屬性,叫做info,這個屬性用于在對戰(zhàn)信息中顯示技能的詳細效果。“光榮之夢”的info為“全屬性都提升了,對手不為混沌系時強化效果翻倍,每回合吸取對手能力提升狀態(tài);恢復自身體力并造成等量固定傷害;出手變得更快了”。

這個info屬性,就是本文探索的重點。

提示:本文所有的代碼塊都是可以左右滑動的,滑動后可以查看完整的代碼。)

<MovesTbl> ? ?
	<Moves>
		<Move ID="25679" Name="光榮之夢" Category="4" Type="8" MaxPP="5" Accuracy="100" MustHit="1"
 ? ? ? ? ? ? ?SideEffect="1238 677 1239 843"
 ? ? ? ? ? ? ?SideEffectArg="1 3 2 2 2 2" Url="pro_3" AtkType="3"
 ? ? ? ? ? ? ?info="全屬性都提升了,對手不為混沌系時強化效果翻倍,每回合吸取對手能力提升狀態(tài);恢復自身體力并造成等量固定傷害;出手變得更快了"/>
	</Moves>
	<SideEffects>	
		<SideEffect ID="1000677" des="n回合內每回合吸收對手的能力強化狀態(tài)"/>
		<SideEffect ID="1001238" des="全屬性+n,對手不為混沌系時強化效果翻倍"/>
		<SideEffect ID="1001239" des="恢復自身最大體力的1/n,自身體力低于1/m時造成等量固定傷害"/>
		<SideEffect ID="1000843" des="下m回合自身所有技能先制+n"/>
	</SideEffects>
</MovesTbl>

然后,要搞懂,網頁版的對戰(zhàn)信息面板為什么會顯示屬性技能的詳細信息。

通過探索精靈對戰(zhàn)的相關文件,終于找到了相關的代碼。

控制屬性技能詳細信息輸出的代碼就在下面這個片段中。

在這其中,函數SkillXMLInfo.getInfo(skillID)就是用來獲得屬性技能提示信息的。

_loc15_ = SkillXMLInfo.getInfo(param1.skillID);
if (_loc15_ != "") {
	if (SkillXMLInfo.getGpFtSkillType(param1.skillID) == 2) {
		if (_loc3_) {
			_loc6_ = "FF00FF";
			_loc7_ += "<font color=\'#" + _loc6_ + "\'>【" + _loc5_ + "】";
		} else {
			_loc6_ = "ffffff";
			_loc7_ += "<font color=\'#" + _loc6_ + "\'>【" + _loc4_ + "】";
		}
	} else if (_loc3_) {
		_loc6_ = "ffffff";
		_loc7_ += "<font color=\'#" + _loc6_ + "\'>【" + _loc4_ + "】";
	} else {
		_loc6_ = "FF00FF";
		_loc7_ += "<font color=\'#" + _loc6_ + "\'>【" + _loc5_ + "】";
	}
	_loc7_ += _loc15_;
}

最后,要弄清,互通版對戰(zhàn)中為什么不會顯示屬性技能相關的詳細信息。

在相關的戰(zhàn)斗文件之中,也可以找到相應的代碼函數。

控制屬性技能詳細信息輸出的代碼就在下面這個片段中。

在這其中,函數SkillXMLInfo.getInfo(skillID)就是用來獲得屬性技能提示信息的。

if (0 != t.skillID) {
	var r = SkillXMLInfo.getName(t.skillID),
	s = SkillXMLInfo.getInfo(t.skillID);
	o = e ? this.getMyPetColorStr(i) : this.getEnemyPetColorStr(n);
	var a = PetFightController.attackInfoList;
	t.skillID == a[0].skillID && 22050 == t.skillID && 0 != a[1].skillID ? (r = SkillXMLInfo.getName(a[1].skillID), o += this.getSkillStr(r, !0)) : t.skillID == a[1].skillID && 22050 == t.skillID && 0 != a[0].skillID ? (r = SkillXMLInfo.getName(a[0].skillID), o += this.getSkillStr(r, !0)) : o += this.getSkillStr(r, !1),
	t.isCrit && (o += this.getCritCritColorStr()),
	"" != s && (o += 2 == SkillXMLInfo.getGpFtSkillType(t.skillID) ? e ? this.getEnemyPetColorStr(n) : this.getMyPetColorStr(i) : e ? this.getMyPetColorStr(i) : this.getEnemyPetColorStr(n), o += s)
}

明明已經有了相應的函數,為什么互通版在對戰(zhàn)中依然無法顯示屬性技能的詳細信息呢?

于是,通過調試面板,單獨測試了函數SkillXMLInfo.getInfo(skillID)。

可以看到,SkillXMLInfo.getInfo(skillID)無法正常輸出屬性技能的詳細信息,實際輸出的內容為空字符。

然而,使用SkillXMLInfo.getSkillObj(skillID).info則可以正常輸出信息,這說明技能數據文件加載是正常的。

原來是getInfo這個函數本身出現了問題,導致互通版對戰(zhàn)信息面板無法顯示屬性技能的詳細信息。(getInfo返回的是空字符,這個現象有可能是BUG,也有可能是游戲官方為了避免互通版面板文字過多而故意設計成這樣的。)

那么,現在有沒有方法使互通版像網頁版一樣在對戰(zhàn)面板顯示屬性技能的詳細信息呢?當然是有的啦!~?

只需要將battle.js里面的部分代碼進行改動就可以達到想要的效果。

使用VsCode的插件Eslint將JavaScript代碼進行格式化。

找到子函數showSkillText()。

t.showSkillText = function(t) {
		var e = MainManager.actorInfo.userID == t.userID,
		i = FighterModelFactory.playerMode.info.petName,
		n = FighterModelFactory.enemyMode.info.petName,
		o = "";
		if (0 != t.skillID) {
			var r = SkillXMLInfo.getName(t.skillID),
			s = SkillXMLInfo.getInfo(t.skillID);
			o = e ? this.getMyPetColorStr(i) : this.getEnemyPetColorStr(n);
			var a = PetFightController.attackInfoList;
			t.skillID == a[0].skillID && 22050 == t.skillID && 0 != a[1].skillID ? (r = SkillXMLInfo.getName(a[1].skillID), o += this.getSkillStr(r, !0)) : t.skillID == a[1].skillID && 22050 == t.skillID && 0 != a[0].skillID ? (r = SkillXMLInfo.getName(a[0].skillID), o += this.getSkillStr(r, !0)) : o += this.getSkillStr(r, !1),
			t.isCrit && (o += this.getCritCritColorStr()),
			"" != s && (o += 2 == SkillXMLInfo.getGpFtSkillType(t.skillID) ? e ? this.getEnemyPetColorStr(n) : this.getMyPetColorStr(i) : e ? this.getMyPetColorStr(i) : this.getEnemyPetColorStr(n), o += s)
		}
		var h = FighterModelFactory.getFighterMode(t.userID);
		h.propView.removeAllEffect();
		var l = 0,
		c = !1,
		_ = "";
		PetStatusEffectController.removeAllEffect(t.userID);
		for (var u = 0,
		p = t.status; u < p.length; u++) {
			var f = p[u];
			if (0 != f) {
				_ += PetStatusEffectConfig.getName(0, l),
				c = !0;
				var d = new egret.ByteArray;
				d.writeUnsignedInt(0),
				d.writeUnsignedInt(l),
				d.writeUnsignedInt(f),
				d.position = 0;
				var g = new PetStatusEffectInfo(d);
				PetStatusEffectController.addEffect(t.userID, g),
				PlayerPetEffectView.showBuffMovie(t, g)
			}
			l++
		}
		for (var y = 0,
		m = t.sideEffects; y < m.length; y++) {
			var v = m[y];
			PetStatusEffectController.addEffect(t.userID, v)
		}
		t.sideEffects.length > 0 && PlayerPetEffectView.showBuffMovie(t, t.sideEffects[0]),
		this.battleMsg.addText(o)
	},

在這個函數之中,找到if (0 != t.skillID) 對應的代碼塊,在里面進行修改就可以了。

原版代碼是這樣的:

//原本版本
if (0 != t.skillID) {
	var r = SkillXMLInfo.getName(t.skillID),
	s = SkillXMLInfo.getInfo(t.skillID);
	o = e ? this.getMyPetColorStr(i) : this.getEnemyPetColorStr(n);
	var a = PetFightController.attackInfoList;
	t.skillID == a[0].skillID && 22050 == t.skillID && 0 != a[1].skillID ? (r = SkillXMLInfo.getName(a[1].skillID), o += this.getSkillStr(r, !0)) : t.skillID == a[1].skillID && 22050 == t.skillID && 0 != a[0].skillID ? (r = SkillXMLInfo.getName(a[0].skillID), o += this.getSkillStr(r, !0)) : o += this.getSkillStr(r, !1),
	t.isCrit && (o += this.getCritCritColorStr()),
	"" != s && (o += 2 == SkillXMLInfo.getGpFtSkillType(t.skillID) ? e ? this.getEnemyPetColorStr(n) : this.getMyPetColorStr(i) : e ? this.getMyPetColorStr(i) : this.getEnemyPetColorStr(n), o += s)
}

想辦法將SkillXMLInfo.getInfo(skillID)替換成SkillXMLInfo.getSkillObj(skillID).info,當然,不能直接替換,因為JavaScript具有異步性,直接替換是行不通的,無法正常返回文本。

//改后版本
if (0 != t.skillID) {
 ?var r = SkillXMLInfo.getName(t.skillID),
 ? ? ?s = SkillXMLInfo.getInfo(t.skillID);
 ?var mySkillInfo = "";
 ?mySkillInfo = SkillXMLInfo.getSkillObj(t.skillID).info;
 ?o = e ? this.getMyPetColorStr(i) : this.getEnemyPetColorStr(n);
 ?var a = PetFightController.attackInfoList;
 ?t.skillID == a[0].skillID && 22050 == t.skillID && 0 != a[1].skillID ? (r = SkillXMLInfo.getName(a[1].skillID), mySkillInfo = SkillXMLInfo.getSkillObj(t.skillID).info, o += this.getSkillStr(r, !0, mySkillInfo)) : t.skillID == a[1].skillID && 22050 == t.skillID && 0 != a[0].skillID ? (r = SkillXMLInfo.getName(a[0].skillID), o += this.getSkillStr(r, !0, mySkillInfo)) : o += this.getSkillStr(r, !1, mySkillInfo),
 ? ?t.isCrit && (o += this.getCritCritColorStr()),
 ? ?"" != s && (o += 2 == SkillXMLInfo.getGpFtSkillType(t.skillID) ? e ? this.getEnemyPetColorStr(n) : this.getMyPetColorStr(i) : e ? this.getMyPetColorStr(i) : this.getEnemyPetColorStr(n), o += s)
		}

重新定義一個叫做mySkillInfo的變量,將SkillXMLInfo.getSkillObj(skillID).info賦給這個變量,然后利用getSkillStr()作為回調函數實現功能。

圖中畫紅框的就是改動的部分。

再找到getSkillStr函數,原版代碼是這樣的:

//原本版本
t.getSkillStr = function(t, e) {
 ?return void 0 === e && (e = !1),
 ? ?e ? '<font color="#ffffff">使用了</font><font color="#fff256">[無限復制]</font><font color="#ffffff">釋放了對手的技能</font><font color="#fff256">[' + t + "]</font>": '<font color="#ffffff">釋放了</font><font color="#fff256">[' + t + "]</font>"
},

給這個函數添加一個參數,用于回調,避免異步性帶來的尷尬。

改后的版本是這樣的:

//改后版本
t.getSkillStr = function(t, e, s) {
 ?if (s==undefined)
 ? ?s='';
 ?return void 0 === e && (e = !1),
 ? ?e ? '<font color="#ffffff">使用了</font><font color="#fff256">[無限復制]</font><font color="#ffffff">釋放了對手的技能</font><font color="#fff256">[' + t + "]</font>": '<font color="#ffffff">釋放了</font><font color="#fff256">[' + t + ']</font><font color="#ffffff">'+s+'</font>'
	},

由于只有屬性技能有info屬性,因此,要判斷一下這個Skill.info是不是未定義,如果未定義就返回空文本,否則才返回Skill.info對應的文本。

圖中畫紅框的就是改動的部分。

下圖展示的是代碼改動前后的對比效果。

加工完成之后,將battle.js重新載入互通版游戲,就可以實現與網頁版一樣的效果了。

靜態(tài)圖展示

這樣的對戰(zhàn)信息框才是熟悉的感覺嘛~

動態(tài)圖展示

當然,互通版目前正在不斷完善之中,目前沒有屬性技能的詳情信息顯示功能,游戲官方或許會有更深層次的考慮與打算。

從2020年7月17日進行內部首測,到2020年10月23日進行玩家公測,再到如今預約人數即將突破百萬,互通版也在從稚嫩一點點地走向成熟。

每一次的更新,互通版都會有一定程度的優(yōu)化。雖然未來還有很長的一段路要走,但是正是因為有大家的陪伴,所以從來不會感覺到孤單。

但愿有一天,游戲官方能夠為賽爾號互通版的對戰(zhàn)信息面板添加屬性技能獨特的詳情信息功能,這樣大家玩互通版也不會這么累了,畢竟要熟記技能效果真的是很累的。

那么,不知道各位小伙伴認為賽爾號互通版是否應該像網頁版一樣,為對戰(zhàn)信息面板添加屬性技能獨特的詳情信息功能呢? 不如在評論區(qū)留下你們的看法吧~



賽爾號互通版對戰(zhàn)面板能顯示屬性技能詳情嗎?的評論 (共 條)

分享到微博請遵守國家法律
青海省| 通海县| 古交市| 宁城县| 通山县| 葵青区| 个旧市| 望城县| 射洪县| 洪江市| 隆安县| 海原县| 瑞金市| 崇阳县| 小金县| 建湖县| 凤台县| 光山县| 舟山市| 林芝县| 顺义区| 广昌县| 雷波县| 六枝特区| 宜良县| 濮阳县| 濮阳市| 营口市| 汕尾市| 保德县| 定边县| 东乡族自治县| 山东省| 甘肃省| 绥宁县| 蓬溪县| 邯郸市| 响水县| 雅安市| 临清市| 琼海市|