This commit is contained in:
libccy 2016-07-25 23:33:50 +08:00
parent e6830402cb
commit 16dbd46c49
6 changed files with 955 additions and 302 deletions

View File

@ -274,7 +274,18 @@ card.swd={
value:7 value:7
}, },
result:{ result:{
target:2, target:function(player,target){
var players=[];
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&!game.players[i].isTurnedOver()&&
ai.get.attitude(player,game.players[i])>=3&&ai.get.attitude(game.players[i],player)>=3){
players.push(game.players[i]);
}
}
players.sort(lib.sort.seat);
if(target==players[0]) return 2;
return 0.5;
},
player:1, player:1,
}, },
} }

View File

@ -12,7 +12,7 @@ character.ow={
ow_chanyata:['male','qun',3,['xie','luan','sheng']], ow_chanyata:['male','qun',3,['xie','luan','sheng']],
ow_dva:['female','shu',2,['jijia','tuijin','zihui','chongzhuang']], ow_dva:['female','shu',2,['jijia','tuijin','zihui','chongzhuang']],
ow_mei:['female','wei',3,['bingqiang','jidong','baoxue']], ow_mei:['female','wei',3,['bingqiang','jidong','baoxue']],
ow_ana:['female','wei',3,['juji','zhiyuan','mianzhen']], ow_ana:['female','wei',3,['zhiyuan','mianzhen','aqianghua']],
ow_heibaihe:['female','qun',3,['juji','duwen','dulei']], ow_heibaihe:['female','qun',3,['juji','duwen','dulei']],
ow_maikelei:['male','shu',4,['shanguang','tiandan','shenqiang']], ow_maikelei:['male','shu',4,['shanguang','tiandan','shenqiang']],
ow_kuangshu:['male','shu',3,['liudan','shoujia','shihuo']], ow_kuangshu:['male','shu',3,['liudan','shoujia','shihuo']],
@ -26,6 +26,52 @@ character.ow={
// ow_zhaliya:['female','shu',4,[]], // ow_zhaliya:['female','shu',4,[]],
}, },
skill:{ skill:{
aqianghua:{
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.num('h')>=2;
},
filterTarget:function(card,player,target){
return target!=player;
},
filterCard:true,
selectCard:-1,
discard:false,
prepare:function(cards,player,targets){
player.$give(cards,targets[0]);
},
content:function(){
target.gain(cards);
target.changeHujia();
target.addSkill('aqianghua2');
},
ai:{
threaten:1.5,
order:2.1,
result:{
target:function(player,target){
if(ai.get.attitude(player,target)<3) return 0;
if(target.num('j','lebu')) return 0;
if(target.hasSkill('aqianghua2')) return 0.1;
return 1;
}
}
}
},
aqianghua2:{
trigger:{source:'damageBegin'},
forced:true,
content:function(){
trigger.num++;
player.unmarkSkill('aqianghua2');
player.removeSkill('aqianghua2');
},
mark:true,
intro:{
content:'下一次造成的伤害+1'
}
},
shihuo:{ shihuo:{
trigger:{global:'damageEnd'}, trigger:{global:'damageEnd'},
forced:true, forced:true,
@ -333,21 +379,24 @@ character.ow={
enable:'phaseUse', enable:'phaseUse',
usable:1, usable:1,
filter:function(event,player){ filter:function(event,player){
return player.num('he',{color:'black'})>0; return player.num('he')>0;
}, },
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
return target!=player&&!target.hasSkill('mianzhen2'); return target!=player&&!target.hasSkill('mianzhen2');
}, },
filterCard:{color:'black'}, filterCard:true,
position:'he', position:'he',
check:function(card){ check:function(card){
return 8-ai.get.value(card); return 8-ai.get.value(card);
}, },
content:function(){ content:function(){
target.addSkill('mianzhen2'); 'step 0'
target.chooseToRespond({name:'shan'});
'step 1'
if(!result.bool) target.addSkill('mianzhen2');
}, },
ai:{ ai:{
order:2, order:2.2,
result:{ result:{
target:function(player,target){ target:function(player,target){
return Math.min(-0.1,-1-target.num('h')+Math.sqrt(target.hp)/2); return Math.min(-0.1,-1-target.num('h')+Math.sqrt(target.hp)/2);
@ -419,14 +468,11 @@ character.ow={
}, },
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
return event.card&&event.card.name=='sha'&&(player.hp==event.player.hp||player.num('h')==event.player.num('h'))&& return event.card&&event.card.name=='sha'&&((player.hp==event.player.hp&&player.isDamaged())||player.num('h')==event.player.num('h'))&&event.notLink();
event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2';
}, },
content:function(){ content:function(){
if(player.hp==trigger.player.hp) trigger.num++;
if(player.num('h')==trigger.player.num('h')) trigger.num++; if(player.num('h')==trigger.player.num('h')) trigger.num++;
trigger._duwen=true; if(player.hp==trigger.player.hp) player.recover();
player.addTempSkill('duwen2','phaseAfter');
}, },
ai:{ ai:{
threaten:1.5 threaten:1.5
@ -443,6 +489,107 @@ character.ow={
player.loseHp(2); player.loseHp(2);
} }
}, },
juji:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
var suit=get.suit(card);
for(var i=0;i<ui.selected.cards.length;i++){
if(get.suit(ui.selected.cards[i])==suit) return false;
}
return true;
},
filterTarget:function(card,player,target){
return target!=player&&target.num('h')>0;
},
check:function(card){
if(ui.selected.cards.length>1) return 0;
return 5-ai.get.value(card);
},
selectCard:[1,4],
content:function(){
var suits=[];
for(var i=0;i<cards.length;i++){
suits.push(get.suit(cards[i]));
}
var success=false;
for(var i=0;i<suits.length;i++){
if(target.num('h',{suit:suits[i]})){
success=true;break;
}
}
if(!success){
player.popup('失败');
}
else{
player.popup('成功');
player.addSkill('juji2');
player.storage.juji2=target;
player.markSkillCharacter('juji2',target,'狙击','与'+get.translation(target)+'的距离视为1且'+get.translation(target)+'不能闪避你的杀,直到回合结束');
}
},
ai:{
order:4,
result:{
target:function(player,target){
if(!player.num('h','sha')) return 0;
if(target.num('h')<=1&&get.distance(player,target,'attack')<=1) return 0;
var min=[];
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&
player.canUse('sha',game.players[i],false)){
var eff=ai.get.effect(target,{name:'sha'},player,player);
if(eff>num){
min.length=0;
min.push(game.players[i]);
num=eff;
}
}
}
for(var i=0;i<min.length;i++){
if(ai.get.attitude(player,min[i])>0) return 0;
if(min[i].num('h')<=1&&get.distance(player,min[i],'attack')<=1) return 0;
}
if(min.contains(target)) return -1;
return 0;
}
}
},
},
juji2:{
ai:{
effect:{
player:function(card,player,target){
if(card.name=='sha'&&target==player.storage.juji2) return [1,0,1,-1];
}
}
},
trigger:{player:'phaseAfter'},
forced:true,
popup:false,
content:function(){
player.unmarkSkill('juji2');
player.removeSkill('juji2');
delete player.storage.juji2;
},
group:'juji3'
},
juji3:{
trigger:{player:'shaBegin'},
forced:true,
filter:function(event,player){
return event.target==player.storage.juji2;
},
content:function(){
trigger.directHit=true;
},
mod:{
globalFrom:function(from,to){
if(to==from.storage.juji2) return -Infinity;
}
}
},
dulei:{ dulei:{
enable:'phaseUse', enable:'phaseUse',
filter:function(event,player){ filter:function(event,player){
@ -518,7 +665,7 @@ character.ow={
}, },
group:'juji2' group:'juji2'
}, },
juji2:{ juji2_old:{
enable:'phaseUse', enable:'phaseUse',
usable:1, usable:1,
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
@ -539,7 +686,7 @@ character.ow={
} }
} }
}, },
juji3:{ juji3_old:{
mark:true, mark:true,
intro:{ intro:{
nocount:true, nocount:true,
@ -2210,7 +2357,10 @@ character.ow={
shenqiang_info:'若你使用杀指定了惟一目标且造成伤害,则此杀不计入回合内的出杀次数限制', shenqiang_info:'若你使用杀指定了惟一目标且造成伤害,则此杀不计入回合内的出杀次数限制',
mianzhen:'眠针', mianzhen:'眠针',
mianzhen2:'眠针', mianzhen2:'眠针',
mianzhen_info:'出牌阶段限一次,你可以弃置一张黑色牌,并令一名其他角色不能使用或打出卡牌直到其受到伤害或下一回合结束', mianzhen_info:'出牌阶段限一次,你可以弃置一张牌并令一名其他角色打出一张闪,否则该角色不能使用或打出卡牌直到其受到伤害或下一回合结束',
aqianghua:'强化',
aqianghua2:'强化',
aqianghua_info:'出牌阶段限一次,你可以将你的全部手牌(至少两张)交给一名其他角色,该角色获得一点护甲且下一次造成的伤害+1',
zhiyuan:'支援', zhiyuan:'支援',
zhiyuan_info:'每当你即将造成伤害,你可以防止此伤害,改为令目标回复等量的体力', zhiyuan_info:'每当你即将造成伤害,你可以防止此伤害,改为令目标回复等量的体力',
juji:'狙击', juji:'狙击',
@ -2218,7 +2368,7 @@ character.ow={
juji3:'狙击', juji3:'狙击',
juji_info:'出牌阶段限一次你可以弃置任意张花色不同的牌并指定一名有手牌的其他角色若该角色的手牌中含有与你弃置的牌花色相同的牌则本回合内你与其距离为1且该角色不能闪避你的杀', juji_info:'出牌阶段限一次你可以弃置任意张花色不同的牌并指定一名有手牌的其他角色若该角色的手牌中含有与你弃置的牌花色相同的牌则本回合内你与其距离为1且该角色不能闪避你的杀',
duwen:'毒吻', duwen:'毒吻',
duwen_info:'锁定技,当你使用杀造成伤害时,若你的手牌数与受伤害角色相等,此杀的伤害+1若你的体力值与受伤害角色相等此杀的伤害+1在伤害结算后若伤害值不小于3你流失两点体力', duwen_info:'锁定技,当你使用杀造成伤害时,若你的手牌数与受伤害角色相等,此杀的伤害+1若你的体力值与受伤害角色相等你回复一点体力',
zhuagou:'抓钩', zhuagou:'抓钩',
zhuagou_info:'出牌阶段限一次,你可以弃置一张手牌并将你的座位移到任意位置', zhuagou_info:'出牌阶段限一次,你可以弃置一张手牌并将你的座位移到任意位置',
dulei:'诡雷', dulei:'诡雷',

View File

@ -10750,12 +10750,14 @@ exports.commands = [{
}, },
readOnly: true readOnly: true
}, { }, {
// name: "find", name: "save",
// bindKey: bindKey("Ctrl-F", "Command-F"), bindKey: bindKey("Ctrl-S", "Command-S"),
// exec: function(editor) { exec: function(editor) {
// config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)}); if(typeof window.saveNonameInput=='function'){
// }, window.saveNonameInput();
// readOnly: true }
},
readOnly: true
}, { }, {
name: "overwrite", name: "overwrite",
bindKey: "Insert", bindKey: "Insert",

View File

@ -75,8 +75,9 @@
onover:[], onover:[],
chatHistory:[], chatHistory:[],
arenaReady:[], arenaReady:[],
extensions:[],
inpile:[], inpile:[],
extensions:[],
extensionPack:{},
cardType:{}, cardType:{},
characterDialogGroup:{ characterDialogGroup:{
'收藏':function(name,capt){ '收藏':function(name,capt){
@ -3499,54 +3500,23 @@
db.createObjectStore('skill'); db.createObjectStore('skill');
} }
}; };
// request.onsuccess=function(e){ request.onsuccess=function(e){
// var db=e.target.result; var db=e.target.result;
// lib.db=db; lib.db=db;
// for(var i=0;i<lib._onDB.length;i++){ for(var i=0;i<lib._onDB.length;i++){
// lib._onDB[i](); lib._onDB[i]();
// } }
// game.getDB('skill',null,function(skills){ if(_status.waitingForDB){
// if(skills){ ui.create.arena();
// for(var i in skills){ game.createEvent('game',false).content=lib.init.start;
// try{ delete lib.init.start;
// eval('lib.skill["'+i+'"]={'+skills[i].content+'}'); delete _status.waitingForDB;
// } game.loop();
// catch(e){ }
// console.log(e); else{
// lib.skill[i]={}; _status.dbLoaded=true;
// } }
// lib.skill[i].createInfo=skills[i]; }
// lib.setTranslate(i);
// lib.translate[i+'_info']=skills[i].description;
// if(lib.skill[i].marktext){
// lib.translate[i+'_bg']=lib.skill[i].marktext;
// }
// }
// if(_status.cardsFinished){
// game.finishCards();
// }
// }
// game.getDB('character',null,function(list){
// for(var i in list){
// if(!list[i][4]) list[i][4]=[];
// lib.character[i]=list[i];
// lib.customCharacters.push(i);
// lib.setTranslate(i);
// }
// _status.characterLoaded=true;
// if(_status.waitingForCharacters){
// game.createEvent('game',false).content=lib.init.start;
// delete lib.init.start;
// game.loop();
// delete _status.waitingForCharacters;
// }
// if(lib.onCharacterLoad){
// lib.onCharacterLoad();
// delete lib.onCharacterLoad;
// }
// });
// });
// }
} }
if(typeof window.require=='function'&&!lib.device){ if(typeof window.require=='function'&&!lib.device){
lib.node={ lib.node={
@ -4105,7 +4075,15 @@
try{ try{
_status.extension=lib.extensions[i][0]; _status.extension=lib.extensions[i][0];
_status.evaluatingExtension=lib.extensions[i][3]; _status.evaluatingExtension=lib.extensions[i][3];
lib.extensions[i][1](lib.extensions[i][2]); lib.extensions[i][1](lib.extensions[i][2],lib.extensions[i][4]);
if(lib.extensions[i][4]){
if(lib.extensions[i][4].character){
for(var j in lib.extensions[i][4].character.character){
game.addCharacterPack(get.copy(lib.extensions[i][4].character));
break;
}
}
}
delete _status.extension; delete _status.extension;
delete _status.evaluatingExtension; delete _status.evaluatingExtension;
} }
@ -4115,14 +4093,15 @@
} }
} }
delete lib.extensions; delete lib.extensions;
ui.create.arena();
if(window.indexedDB&&!_status.characterLoaded&&false){ if(window.indexedDB&&!_status.dbLoaded){
_status.waitingForCharacters=true; _status.waitingForDB=true;
} }
else{ else{
ui.create.arena();
game.createEvent('game',false).content=lib.init.start; game.createEvent('game',false).content=lib.init.start;
delete lib.init.start; delete lib.init.start;
delete _status.dbLoaded;
game.loop(); game.loop();
} }
} }
@ -11338,6 +11317,9 @@
for(var i=0;i<name.length;i++){ for(var i=0;i<name.length;i++){
this.node.name.innerHTML+=name[i]+'<br/>'; this.node.name.innerHTML+=name[i]+'<br/>';
} }
if(name.length>=5){
this.node.name.classList.add('long');
}
this.node.name2.innerHTML=get.translation(card[0])+card[1]+' '+name; this.node.name2.innerHTML=get.translation(card[0])+card[1]+' '+name;
this.suit=card[0]; this.suit=card[0];
this.number=card[1]; this.number=card[1];
@ -14077,6 +14059,13 @@
for(var i in obj.help){ for(var i in obj.help){
lib.help[i]=obj.help[i]; lib.help[i]=obj.help[i];
} }
lib.extensionMenu['extension_'+obj.name].edit={
name:'编辑此扩展',
clear:true,
onclick:function(){
game.editExtension(obj.name);
}
}
lib.extensionMenu['extension_'+obj.name].delete={ lib.extensionMenu['extension_'+obj.name].delete={
name:'删除此扩展', name:'删除此扩展',
clear:true, clear:true,
@ -14128,13 +14117,35 @@
} }
} }
try{ try{
if(obj.package){
lib.extensionPack[obj.name]=obj.package;
lib.extensionPack[obj.name].files=obj.files||{};
if(!lib.extensionPack[obj.name].files.character){
lib.extensionPack[obj.name].files.character=[];
}
if(!lib.extensionPack[obj.name].files.card){
lib.extensionPack[obj.name].files.card=[];
}
if(!lib.extensionPack[obj.name].files.skill){
lib.extensionPack[obj.name].files.skill=[];
}
}
else{
lib.extensionPack[obj.name]={};
}
lib.extensionPack[obj.name].code={
content:obj.content,
precontent:obj.precontent,
help:obj.help,
config:obj.config
}
if(obj.precontent){ if(obj.precontent){
_status.extension=obj.name; _status.extension=obj.name;
obj.precontent(cfg); obj.precontent(cfg);
delete _status.extension; delete _status.extension;
} }
if(obj.content){ if(obj.content){
lib.extensions.push([obj.name,obj.content,cfg,_status.evaluatingExtension]); lib.extensions.push([obj.name,obj.content,cfg,_status.evaluatingExtension,obj.package||{}]);
} }
} }
catch(e){ catch(e){
@ -14146,7 +14157,59 @@
game.importedPack=obj; game.importedPack=obj;
} }
}, },
importExtension:function(data,finishLoad){ importExtension:function(data,finishLoad,exportext){
if(!window.JSZip){
lib.init.js(lib.assetURL+'game','jszip',function(){
game.importExtension(data,finishLoad,exportext);
});
}
else if(get.objtype(data)=='object'){
var zip=new JSZip();
for(var i in data){
zip.file(i,data[i]);
}
if(exportext){
var blob = zip.generate({type:"blob"});
var fileNameToSaveAs = exportext;
fileNameToSaveAs=fileNameToSaveAs.replace(/\\|\/|\:|\?|\"|\*|<|>|\|/g,'.');
fileNameToSaveAs+='.zip';
if(lib.device){
var directory;
if(lib.device=='android'){
directory=cordova.file.externalDataDirectory;
}
else{
directory=cordova.file.documentsDirectory;
}
window.resolveLocalFileSystemURL(directory,function(entry){
entry.getFile(fileNameToSaveAs,{create:true},function(fileEntry){
fileEntry.createWriter(function(fileWriter){
fileWriter.onwriteend=function(){
alert('文件已导出至'+directory+fileNameToSaveAs);
}
fileWriter.write(blob)
});
});
});
}
else{
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
downloadLink.href = window.URL.createObjectURL(blob);
downloadLink.click();
}
if(typeof finishLoad=='function'){
finishLoad();
}
}
else{
game.importExtension.apply(this,[zip.generate({type:'arraybuffer'}),finishLoad]);
}
}
else{
var zip=new JSZip(); var zip=new JSZip();
zip.load(data); zip.load(data);
var str=zip.file('extension.js').asText(); var str=zip.file('extension.js').asText();
@ -14284,6 +14347,7 @@
alert('导入失败'); alert('导入失败');
return false; return false;
} }
}
}, },
export:function(textToWrite,name){ export:function(textToWrite,name){
var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'}); var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
@ -19154,21 +19218,7 @@
} }
var menuxpages=menux.pages.slice(0); var menuxpages=menux.pages.slice(0);
var copyObj=function(obj){ var copyObj=get.copy;
var copy={};
for(var i in obj){
if(get.objtype(obj[i])=='object'){
copy[i]=copyObj(obj[i]);
}
else if(Array.isArray(obj[i])){
copy[i]=obj[i].slice(0);
}
else{
copy[i]=obj[i];
}
}
return copy;
};
(function(){ (function(){
var start=menuxpages.shift(); var start=menuxpages.shift();
@ -21451,7 +21501,7 @@
createModeConfig(i,start.firstChild); createModeConfig(i,start.firstChild);
} }
(function(){ (function(){
if(!game.download) return; if(!game.download&&!lib.db) return;
var page=ui.create.div('#create-extension'); var page=ui.create.div('#create-extension');
var node=ui.create.div('.menubutton.large','制作扩展',start.firstChild,clickMode); var node=ui.create.div('.menubutton.large','制作扩展',start.firstChild,clickMode);
node.link=page; node.link=page;
@ -21463,18 +21513,127 @@
var inputExtName=document.createElement('input'); var inputExtName=document.createElement('input');
inputExtName.type='text'; inputExtName.type='text';
inputExtName.value='无名扩展'; inputExtName.value='无名扩展';
inputExtName.style.width='120px'; inputExtName.style.width='80px';
inputExtName.style.textAlign='center';
inputExtLine.appendChild(inputExtName); inputExtLine.appendChild(inputExtName);
game.editExtension=function(name){
page.currentExtension=name||'无名扩展';
inputExtName.value=page.currentExtension;
if(name){
inputExtName.disabled=true;
}
else{
inputExtName.disabled=false;
}
exportExtLine.style.display='none';
dash1.reset(name);
dash2.reset(name);
dash3.reset(name);
dash4.reset(name);
dash1.link.classList.remove('active');
dash2.link.classList.remove('active');
dash3.link.classList.remove('active');
dash4.link.classList.remove('active');
var active=node.parentNode.querySelector('.active');
if(active===node){
return;
}
active.classList.remove('active');
active.link.remove();
node.classList.add('active');
rightPane.appendChild(node.link);
}
var processExtension=function(exportext){
if(page.currentExtension){
if(page.currentExtension!=inputExtName.value) return;
}
inputExtName.disabled=true;
setTimeout(function(){
var ext={};
for(var i in dash4.content){
try{
eval('ext[i]='+dash4.content[i]);
if(i=='content'||i=='precontent'){
if(typeof ext[i]!='function'){
throw('err');
}
else{
ext[i]=ext[i].toString();
}
}
else{
if(typeof ext[i]!='object'){
throw('err');
}
else{
ext[i]=JSON.stringify(ext[i]);
}
}
}
catch(e){
delete ext[i];
}
}
page.currentExtension=inputExtName.value||'无名扩展';
var str='{name:"'+page.currentExtension+'"';
for(var i in ext){
str+=','+i+':'+ext[i];
}
str+=',package:'+JSON.stringify({
character:dash1.content.pack,
card:dash2.content.pack,
skill:dash3.content.pack
});
var files={character:[],card:[],skill:[]};
for(var i in dash1.content.image){
files.character.push(i);
}
for(var i in dash2.content.image){
files.character.push(i);
}
for(var i in dash3.content.audio){
files.character.push(i);
}
str+=',files:'+JSON.stringify(files);
str+='}';
var extension={'extension.js':'game.import("extension",'+str+')'};
for(var i in dash1.content.image){
extension[i]=dash1.content.image[i];
}
if(exportext){
game.importExtension(extension,null,page.currentExtension);
}
else{
game.importExtension(extension,function(){
exportExtLine.style.display='';
});
}
},500);
};
var buttonSave=document.createElement('button'); var buttonSave=document.createElement('button');
buttonSave.innerHTML='保存'; buttonSave.innerHTML='保存';
buttonSave.style.marginLeft='3px'; buttonSave.style.marginLeft='3px';
buttonSave.onclick=function(){ buttonSave.onclick=function(){
exportExtLine.style.display=''; dash1.link.classList.remove('active');
} dash2.link.classList.remove('active');
dash3.link.classList.remove('active');
dash4.link.classList.remove('active');
processExtension();
};
inputExtLine.appendChild(buttonSave); inputExtLine.appendChild(buttonSave);
var buttonReset=document.createElement('button');
buttonReset.innerHTML='重置';
buttonReset.style.marginLeft='3px';
buttonReset.onclick=function(){
game.editExtension();
};
inputExtLine.appendChild(buttonReset);
var buttonExport=document.createElement('button'); var buttonExport=document.createElement('button');
buttonExport.innerHTML='导出'; buttonExport.innerHTML='导出';
buttonExport.style.marginLeft='3px'; buttonExport.style.marginLeft='3px';
buttonExport.onclick=function(){
processExtension(true);
};
inputExtLine.appendChild(buttonExport); inputExtLine.appendChild(buttonExport);
var exportExtLine=ui.create.div(pageboard); var exportExtLine=ui.create.div(pageboard);
exportExtLine.style.display='none'; exportExtLine.style.display='none';
@ -21496,16 +21655,160 @@
dashboard.appendChild(dash); dashboard.appendChild(dash);
page.appendChild(node); page.appendChild(node);
dash.link=node; dash.link=node;
node.link=dash;
dash.listen(clickDash); dash.listen(clickDash);
ui.create.div('',str1,dash); ui.create.div('',str1,dash);
ui.create.div('',str2,dash); ui.create.div('',str2,dash);
}; };
var dash1=(function(){ var dash1=(function(){
var page=ui.create.div('.hidden.menu-buttons'); var page=ui.create.div('.hidden.menu-buttons');
ui.create.div('.config.more','<div style="transform:none;margin-right:3px">←</div>返回',page,function(){ var currentButton=null;
var clickButton=function(){
if(currentButton==this){
resetEditor();
return;
}
resetEditor();
currentButton=this;
toggle.classList.add('on');
newCharacter.style.display='';
fakeme.classList.add('inited');
delete fakeme.image;
delete fakeme.image64;
fakeme.style.backgroundImage=this.style.backgroundImage;
if(page.content.pack.translate[this.link]!=this.link){
newCharacter.querySelector('.new_name').value=this.link+'|'+page.content.pack.translate[this.link];
}
else{
newCharacter.querySelector('.new_name').value=this.link;
}
var info=page.content.pack.character[this.link];
newCharacter.querySelector('.new_hp').value=info[2];
sexes.value=info[0];
groups.value=info[1];
if(info[4]){
for(var i=0;i<options.childNodes.length-1;i++){
if(info[4].contains(options.childNodes[i].lastChild.name)){
options.childNodes[i].lastChild.checked=true;
}
else{
options.childNodes[i].lastChild.checked=false;
}
}
}
var skills=info[3];
for(var i=0;i<skills.length;i++){
var node=document.createElement('button');
node.skill=skills[i];
node.onclick=deletenode;
node.innerHTML=lib.translate[skills[i]];
skillList.firstChild.appendChild(node);
}
toggle.innerHTML='编辑武将 <div>&gt;</div>';
var confirm=newCharacter.querySelector('.menubutton.large');
confirm.innerHTML='编辑武将';
confirm._origin=this;
var button=this;
var delnodefunc=function(){
button.remove();
var name=button.link;
delete dash1.content.pack.character[name];
delete dash1.content.pack.translate[name];
delete dash1.content.image[name];
resetEditor();
dash1.link.classList.add('active');
};
var delnode=ui.create.div('.menubutton.large','删除',confirm.parentNode,delnodefunc);
delnode.style.marginLeft='13px';
}
var createButton=function(name,image){
var button=ui.create.div('.button.character');
button.link=name;
button.image=image;
button.style.backgroundImage='url('+image+')';
button.style.backgroundSize='cover';
button.listen(clickButton);
button.classList.add('noclick');
button.nodename=ui.create.div(button,'.name',get.verticalStr(page.content.pack.translate[name]));
button.nodename.style.top='8px';
page.insertBefore(button,page.childNodes[1]);
}
page.reset=function(name){
resetEditor();
var buttons=page.querySelectorAll('.button.character');
var list=[];
for(var i=0;i<buttons.length;i++){
list.push(buttons[i]);
}
for(var i=0;i<list.length;i++){
list[i].remove();
}
if(lib.extensionPack[name]){
page.content.pack=lib.extensionPack[name].character||{
character:{},
translate:{}
};
page.content.image={};
for(var i in page.content.pack.character){
var file=i+'.jpg';
var loadImage=function(file,data){
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function() {
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
canvas.toBlob(function(blob){
var fileReader = new FileReader();
fileReader.onload = function(e)
{
page.content.image[file]=e.target.result;
};
fileReader.readAsArrayBuffer(blob, "UTF-8");
});
};
img.src = data;
}
if(game.download){
createButton(i,'extension/'+name+'/'+file);
loadImage(file,'extension/'+name+'/'+file);
}
else{
game.getDB('image','extension-'+name+':'+file,(function(file,name){
return function(data){
createButton(name,data);
loadImage(file,data);
};
}(file,i)))
}
}
}
else{
page.content={
pack:{
character:{},
translate:{}
},
image:{}
};
}
};
ui.create.div('.config.more.on','<div style="transform:none;margin-right:3px">←</div>返回',page,function(){
page.hide(); page.hide();
pageboard.show(); pageboard.show();
}); });
page.content={
pack:{
character:{},
translate:{}
},
image:{}
};
var newCharacter; var newCharacter;
var toggle=ui.create.div('.config.more','创建武将 <div>&gt;</div>',page,function(){ var toggle=ui.create.div('.config.more','创建武将 <div>&gt;</div>',page,function(){
this.classList.toggle('on'); this.classList.toggle('on');
@ -21517,6 +21820,7 @@
} }
}); });
var resetEditor=function(){ var resetEditor=function(){
currentButton=null;
toggle.classList.remove('on'); toggle.classList.remove('on');
newCharacter.style.display='none'; newCharacter.style.display='none';
fakeme.classList.remove('inited'); fakeme.classList.remove('inited');
@ -21541,8 +21845,6 @@
} }
newCharacter=ui.create.div('.new_character',page); newCharacter=ui.create.div('.new_character',page);
newCharacter.style.display='none';
var fakeme=ui.create.div('.avatar',newCharacter); var fakeme=ui.create.div('.avatar',newCharacter);
var input=document.createElement('input'); var input=document.createElement('input');
@ -21555,9 +21857,15 @@
fileReader.onload = function(fileLoadedEvent) fileReader.onload = function(fileLoadedEvent)
{ {
var data = fileLoadedEvent.target.result; var data = fileLoadedEvent.target.result;
fakeme.image=data;
fakeme.style.backgroundImage='url('+data+')'; fakeme.style.backgroundImage='url('+data+')';
fakeme.image64=data;
fakeme.classList.add('inited'); fakeme.classList.add('inited');
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent)
{
fakeme.image=fileLoadedEvent.target.result;
};
fileReader.readAsArrayBuffer(fileToLoad, "UTF-8");
}; };
fileReader.readAsDataURL(fileToLoad, "UTF-8"); fileReader.readAsDataURL(fileToLoad, "UTF-8");
} }
@ -21637,21 +21945,125 @@
var skillList=ui.create.div('.skill_list',newCharacter); var skillList=ui.create.div('.skill_list',newCharacter);
ui.create.div(skillList); ui.create.div(skillList);
ui.create.div('.menubutton.large','创建武将',ui.create.div(skillList),function(){ ui.create.div('.menubutton.large','创建武将',ui.create.div(skillList),function(){
var name=page.querySelector('input.new_name').value;
if(!name) return;
name=name.split('|');
var translate=name[1]||name[0];
name=name[0];
if(currentButton){
if(currentButton.link!=name){
page.content.image[name+'.jpg']=page.content.image[currentButton.link+'.jpg'];
delete page.content.image[currentButton.link+'.jpg'];
delete page.content.pack.character[currentButton.link];
currentButton.link=name;
}
}
if(fakeme.image){
page.content.image[name+'.jpg']=fakeme.image;
}
else{
if(!page.content.image[name+'.jpg']) return;
}
var hp=page.querySelector('input.new_hp').value;
hp=parseInt(hp)||1;
var skills=[];
for(var i=0;i<skillList.firstChild.childNodes.length;i++){
skills.add(skillList.firstChild.childNodes[i].skill);
}
var tags=[];
for(var i=0;i<options.childNodes.length-1;i++){
if(options.childNodes[i].lastChild.checked){
tags.push(options.childNodes[i].lastChild.name);
}
}
if(tags.contains('boss')){
tags.add('bossallowed');
}
page.content.pack.translate[name]=translate;
page.content.pack.character[name]=[sexes.value,groups.value,hp,skills,tags];
if(this.innerHTML=='创建武将'){
createButton(name,fakeme.image64);
}
else if(currentButton){
if(fakeme.image64){
currentButton.image=fakeme.image64;
currentButton.style.backgroundImage='url('+fakeme.image64+')';
}
currentButton.nodename.innerHTML=get.verticalStr(translate);
}
resetEditor();
dash1.link.classList.add('active');
}); });
return page; return page;
}()); }());
var dash2=ui.create.div('.hidden',page); var dash2=(function(){
var dash3=ui.create.div('.hidden',page); var page=ui.create.div('.hidden.menu-buttons');
page.reset=function(name){
};
ui.create.div('.config.more.margin-bottom','<div style="transform:none;margin-right:3px">←</div>返回',page,function(){
page.hide();
pageboard.show();
});
ui.create.div('.config.more','还没做好',page);
page.content={
pack:{
card:{},
translate:{},
list:[]
},
image:{}
};
return page;
}());
var dash3=(function(){
var page=ui.create.div('.hidden.menu-buttons');
page.reset=function(name){
};
ui.create.div('.config.more.margin-bottom','<div style="transform:none;margin-right:3px">←</div>返回',page,function(){
page.hide();
pageboard.show();
});
ui.create.div('.config.more','还没做好',page);
page.content={
pack:{
skill:{},
translate:{}
},
audio:{}
};
return page;
}());
var dash4=(function(){ var dash4=(function(){
var page=ui.create.div('.hidden.menu-buttons'); var page=ui.create.div('.hidden.menu-buttons');
ui.create.div('.config.more.margin-bottom','<div style="transform:none;margin-right:3px">←</div>返回',page,function(){ ui.create.div('.config.more.margin-bottom','<div style="transform:none;margin-right:3px">←</div>返回',page,function(){
page.hide(); page.hide();
pageboard.show(); pageboard.show();
}); });
page.reset=function(name){
page.content={};
for(var i in dashes){
dashes[i].node.code='';
}
if(lib.extensionPack[name]){
for(var i in lib.extensionPack[name].code){
switch(typeof lib.extensionPack[name].code[i]){
case 'function':page.content[i]=lib.extensionPack[name].code[i].toString();break;
case 'object':page.content[i]=JSON.stringify(lib.extensionPack[name].code[i]);break;
}
}
for(var i in page.content){
dashes[i].node.code=page.content[i]||'';
}
}
};
var dashes={};
var createCode=function(str1,str2,sub,func,link,str){ var createCode=function(str1,str2,sub,func,link,str){
var dash=ui.create.div('.menubutton.large.dashboard'); var dash=ui.create.div('.menubutton.large.dashboard');
dashes[link]=dash;
sub.appendChild(dash); sub.appendChild(dash);
dash.listen(func); dash.listen(func);
dash.link=link; dash.link=link;
@ -21662,34 +22074,52 @@
var discardConfig=ui.create.div('.editbutton','取消',editorpage,function(){ var discardConfig=ui.create.div('.editbutton','取消',editorpage,function(){
ui.window.classList.remove('shortcutpaused'); ui.window.classList.remove('shortcutpaused');
ui.window.classList.remove('systempaused'); ui.window.classList.remove('systempaused');
container.delete(); container.delete(null);
if(container.code&&container.editor){
container.editor.setValue(container.code,1);
}
delete window.saveNonameInput;
}); });
var saveConfig=ui.create.div('.editbutton','保存',editorpage,function(){ var saveInput=function(){
dash4.link.classList.add('active');
ui.window.classList.remove('shortcutpaused'); ui.window.classList.remove('shortcutpaused');
ui.window.classList.remove('systempaused'); ui.window.classList.remove('systempaused');
container.delete(); container.delete();
}); if(container.editor){
container.code=container.editor.getValue();
page.content[link]=container.code;
}
delete window.saveNonameInput;
};
var saveConfig=ui.create.div('.editbutton','保存',editorpage,saveInput);
var editor=ui.create.div('#editor-'+link,editorpage); var editor=ui.create.div('#editor-'+link,editorpage);
editor.innerHTML=str; container.code=str;
dash.editor=editor; dash.editor=editor;
dash.node=container; dash.node=container;
dash.saveInput=saveInput;
page.content[link]=str;
}; };
var clickCode=function(){ var clickCode=function(){
var node=this.node; var node=this.node;
ui.window.classList.add('shortcutpaused'); ui.window.classList.add('shortcutpaused');
ui.window.classList.add('systempaused'); ui.window.classList.add('systempaused');
window.saveNonameInput=this.saveInput;
if(node.aced){ if(node.aced){
ui.window.appendChild(node); ui.window.appendChild(node);
node.editor.setValue(node.code,1);
} }
else{ else{
var id=this.editor.id; var id=this.editor.id;
var aceReady=function(){ var aceReady=function(){
ui.window.appendChild(node); ui.window.appendChild(node);
var editor=window.ace.edit(id); var editor=window.ace.edit(id);
editor.$blockScrolling=Infinity;
editor.setTheme("ace/theme/chrome"); editor.setTheme("ace/theme/chrome");
editor.getSession().setUseWorker(false); editor.getSession().setUseWorker(false);
editor.getSession().setMode("ace/mode/javascript"); editor.getSession().setMode("ace/mode/javascript");
node.aced=true; node.aced=true;
node.editor=editor;
editor.setValue(node.code,1);
} }
if(!window.ace){ if(!window.ace){
lib.init.js('game','ace',aceReady); lib.init.js('game','ace',aceReady);
@ -21699,10 +22129,12 @@
} }
} }
}; };
createCode('主','主代码',page,clickCode,'content','function(config,pack){\n\t\/\/执行时机为界面加载之后,其它扩展内容加载之前\n\t\/\/参数1为选项值参数2为扩展定义的武将、卡牌和技能可修改\n}'); page.content={}
createCode('主','主代码',page,clickCode,'content','function(config,pack){\n\t\/\/执行时机为界面加载之后,其它扩展内容加载之前\n\t\/\/参数1扩展选项见选项代码参数2为扩展定义的武将、卡牌和技能等可修改\n}');
createCode('启','启动代码',page,clickCode,'precontent','function(){\n\t\/\/执行时机为游戏启动时,游戏包加载之前,且不受禁用扩展的限制\n\t\/\/除添加模式外请慎用\n}'); createCode('启','启动代码',page,clickCode,'precontent','function(){\n\t\/\/执行时机为游戏启动时,游戏包加载之前,且不受禁用扩展的限制\n\t\/\/除添加模式外请慎用\n}');
createCode('选','选项代码',page,clickCode,'config','{\n\tswitcher_example:{\n\t\tname:"示例列表选项",\n\t\tinit:"3",\n\t\titem:{"1":"一","2":"二","3":"三"}\n\t},\n\ttoggle_example:{\n\t\tname:"示例开关选项",\n\t\tinit:true\n\t}\n}\n\n\/\/传入主代码函数的参数为{switcher_example:"3",toggle_example:true}'); createCode('选','选项代码',page,clickCode,'config','{\n\tswitcher_example:{\n\t\tname:"示例列表选项",\n\t\tinit:"3",\n\t\titem:{"1":"一","2":"二","3":"三"}\n\t},\n\ttoggle_example:{\n\t\tname:"示例开关选项",\n\t\tinit:true\n\t}\n}\n\n\/\/此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n\/\/导出时本段代码中的换行、缩进以及注释将被清除');
createCode('帮','帮助代码',page,clickCode,'help','{\n\t"帮助条目":"&lt;ul&gt;&lt;li&gt;列表1-条目1&lt;li&gt;列表1-条目2&lt;\/ul&gt;&lt;ol&gt;&lt;li&gt;列表2-条目1&lt;li&gt;列表2-条目2&lt;\/ul&gt;"\n}'); createCode('帮','帮助代码',page,clickCode,'help','{\n\t"帮助条目":"<ul><li>列表1-条目1<li>列表1-条目2</ul><ol><li>列表2-条目1<li>列表2-条目2</ul>"\n}\n\n\/\/帮助内容将显示在菜单-选项-帮助中\n\/\/导出时本段代码中的换行、缩进以及注释将被清除');
return page; return page;
}()); }());
createDash('将','编辑武将',dash1); createDash('将','编辑武将',dash1);
@ -21747,7 +22179,6 @@
importExtension.firstChild.lastChild.onclick=function(){ importExtension.firstChild.lastChild.onclick=function(){
var fileToLoad=this.previousSibling.files[0]; var fileToLoad=this.previousSibling.files[0];
if(fileToLoad){ if(fileToLoad){
var zipReady=function(){
var fileReader = new FileReader(); var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent) fileReader.onload = function(fileLoadedEvent)
{ {
@ -21768,13 +22199,6 @@
}; };
fileReader.readAsArrayBuffer(fileToLoad, "UTF-8"); fileReader.readAsArrayBuffer(fileToLoad, "UTF-8");
} }
if(!window.JSZip){
lib.init.js(lib.assetURL+'game','jszip',zipReady);
}
else{
zipReady();
}
}
} }
var clickExtension=function(){ var clickExtension=function(){
@ -23393,8 +23817,17 @@
newlined2.style.display='none'; newlined2.style.display='none';
} }
}); });
var packlist=[];
for(var i=0;i<lib.config.all.characters.length;i++){ for(var i=0;i<lib.config.all.characters.length;i++){
if(!lib.config.characters.contains(lib.config.all.characters[i])) continue; if(!lib.config.characters.contains(lib.config.all.characters[i])) continue;
packlist.push(lib.config.all.characters[i]);
}
for(var i in lib.characterPack){
if(!lib.config.all.characters.contains(i)){
packlist.push(i);
}
}
for(var i=0;i<packlist.length;i++){
var span=document.createElement('div'); var span=document.createElement('div');
span.style.display='inline-block'; span.style.display='inline-block';
span.style.width='auto'; span.style.width='auto';
@ -23405,8 +23838,8 @@
else{ else{
span.style.fontSize='22px'; span.style.fontSize='22px';
} }
span.innerHTML=lib.translate[lib.config.all.characters[i]+'_character_config']; span.innerHTML=lib.translate[packlist[i]+'_character_config'];
span.link=lib.config.all.characters[i]; span.link=packlist[i];
span.addEventListener(lib.config.touchscreen?'touchend':'click',clickCapt); span.addEventListener(lib.config.touchscreen?'touchend':'click',clickCapt);
newlined2.appendChild(span); newlined2.appendChild(span);
} }
@ -27219,6 +27652,25 @@
}, },
}; };
var get={ var get={
copy:function(obj){
if(get.objtype(obj)=='object'){
var copy={};
for(var i in obj){
copy[i]=get.copy(obj[i]);
}
return copy;
}
else if(Array.isArray(obj)){
var copy=[];
for(var i=0;i<obj.length;i++){
copy.push(get.copy(obj[i]));
}
return copy;
}
else{
return obj;
}
},
inpile:function(type,filter){ inpile:function(type,filter){
var list=[]; var list=[];
for(var i=0;i<lib.inpile.length;i++){ for(var i=0;i<lib.inpile.length;i++){
@ -29427,7 +29879,7 @@
this.classList.remove('hidden'); this.classList.remove('hidden');
return this; return this;
}; };
HTMLDivElement.prototype.delete=function(time){ HTMLDivElement.prototype.delete=function(time,callback){
if(this.timeout){ if(this.timeout){
clearTimeout(this.timeout); clearTimeout(this.timeout);
delete this.timeout; delete this.timeout;
@ -29439,6 +29891,9 @@
this.timeout=setTimeout(function(){ this.timeout=setTimeout(function(){
that.remove(); that.remove();
that.classList.remove('removing'); that.classList.remove('removing');
if(typeof callback=='function'){
callback();
}
},time); },time);
} }
else{ else{
@ -29773,7 +30228,31 @@
return aa+bb+cc+dd; return aa+bb+cc+dd;
} }
window.onkeydown=function(e){ window.onkeydown=function(e){
if(!ui.menuContainer||!ui.menuContainer.classList.contains('hidden')) return; if(!ui.menuContainer||!ui.menuContainer.classList.contains('hidden')){
if(e.keyCode==116||((e.ctrlKey||e.metaKey)&&e.keyCode==82)){
if(e.shiftKey){
if(confirm('是否重置游戏?')){
var noname_inited=localStorage.getItem('noname_inited');
localStorage.clear();
if(noname_inited){
localStorage.setItem('noname_inited',noname_inited);
}
if(indexedDB) indexedDB.deleteDatabase(lib.configprefix+'data');
game.reload();
return;
}
}
else{
game.reload();
}
}
else if(e.keyCode==83&&(e.ctrlKey||e.metaKey)){
e.preventDefault();
e.stopPropagation();
return false;
}
}
else{
game.closePopped(); game.closePopped();
var dialogs=document.querySelectorAll('#window>.dialog.popped:not(.static)'); var dialogs=document.querySelectorAll('#window>.dialog.popped:not(.static)');
for(var i=0;i<dialogs.length;i++){ for(var i=0;i<dialogs.length;i++){
@ -29829,6 +30308,12 @@
else{ else{
game.reload(); game.reload();
} }
}
else if(e.keyCode==83&&(e.ctrlKey||e.metaKey)){
e.preventDefault();
e.stopPropagation();
return false;
}
} }
}; };
window.onload=function(){ window.onload=function(){

View File

@ -11,9 +11,11 @@ window.noname_update={
'game/source.js', 'game/source.js',
'game/package.js', 'game/package.js',
'game/asset.js', 'game/asset.js',
'game/ace.js',
'character/yijiang.js', 'character/yijiang.js',
'character/ow.js', 'character/ow.js',
'character/sp.js', 'character/sp.js',
'card/swd.js',
'layout/default/layout.css', 'layout/default/layout.css',
'layout/default/menu.css', 'layout/default/menu.css',
], ],

View File

@ -1552,6 +1552,9 @@ span[data-color="unknownm"]{
text-align:center; text-align:center;
line-height: 18px; line-height: 18px;
} }
.card.fullskin>.name.long{
top:5px;
}
.card.fullskin.thunder>.name{ .card.fullskin.thunder>.name{
color:#152E63; color:#152E63;
border:1px solid #152E63; border:1px solid #152E63;