From d9789b7525b3ddb84a3586564c8cca58292732dc Mon Sep 17 00:00:00 2001 From: Lennart Kampshoff Date: Sun, 23 Sep 2018 22:30:42 +0200 Subject: [PATCH] Add faction rank management CEF --- Client/Dependences/jquery.tablednd.0.8.min.js | 1 + Client/FactionManagement/Ranks/index.html | 34 +++++++++++++++++++ Client/FactionManagement/Ranks/script.js | 1 + Client/FactionManagement/Ranks/style.css | 3 ++ Client/FactionManagement/main.js | 25 ++++++++++++++ Client/index.js | 3 +- Server/Commands/Admin.cs | 1 - Server/Commands/Faction.cs | 20 +++++++++++ 8 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 Client/Dependences/jquery.tablednd.0.8.min.js create mode 100644 Client/FactionManagement/Ranks/index.html create mode 100644 Client/FactionManagement/Ranks/script.js create mode 100644 Client/FactionManagement/Ranks/style.css create mode 100644 Client/FactionManagement/main.js diff --git a/Client/Dependences/jquery.tablednd.0.8.min.js b/Client/Dependences/jquery.tablednd.0.8.min.js new file mode 100644 index 00000000..681ae711 --- /dev/null +++ b/Client/Dependences/jquery.tablednd.0.8.min.js @@ -0,0 +1 @@ +(function($){var hasTouch="ontouchstart" in document.documentElement,startEvent=hasTouch?"touchstart":"mousedown",moveEvent=hasTouch?"touchmove":"mousemove",endEvent=hasTouch?"touchend":"mouseup";if(hasTouch){$.each("touchstart touchmove touchend".split(" "),function(i,name){jQuery.event.fixHooks[name]=jQuery.event.mouseHooks})}jQuery.tableDnD={currentTable:null,dragObject:null,mouseOffset:null,oldY:0,build:function(options){this.each(function(){this.tableDnDConfig=jQuery.extend({onDragStyle:null,onDropStyle:null,onDragClass:"tDnD_whileDrag",onDrop:null,onDragStart:null,scrollAmount:5,serializeRegexp:/[^\-]*$/,serializeParamName:null,dragHandle:null},options||{});jQuery.tableDnD.makeDraggable(this)});return this},makeDraggable:function(table){var config=table.tableDnDConfig;if(config.dragHandle){var cells=jQuery(table.tableDnDConfig.dragHandle,table);cells.each(function(){jQuery(this).bind(startEvent,function(ev){jQuery.tableDnD.initialiseDrag(jQuery(this).parents("tr")[0],table,this,ev,config);return false})})}else{var rows=jQuery("tr",table);rows.each(function(){var row=jQuery(this);if(!row.hasClass("nodrag")){row.bind(startEvent,function(ev){if(ev.target.tagName=="TD"){jQuery.tableDnD.initialiseDrag(this,table,this,ev,config);return false}}).css("cursor","move")}})}},initialiseDrag:function(dragObject,table,target,evnt,config){jQuery.tableDnD.dragObject=dragObject;jQuery.tableDnD.currentTable=table;jQuery.tableDnD.mouseOffset=jQuery.tableDnD.getMouseOffset(target,evnt);jQuery.tableDnD.originalOrder=jQuery.tableDnD.serialize();jQuery(document).bind(moveEvent,jQuery.tableDnD.mousemove).bind(endEvent,jQuery.tableDnD.mouseup);if(config.onDragStart){config.onDragStart(table,target)}},updateTables:function(){this.each(function(){if(this.tableDnDConfig){jQuery.tableDnD.makeDraggable(this)}})},mouseCoords:function(ev){if(ev.pageX||ev.pageY){return{x:ev.pageX,y:ev.pageY}}return{x:ev.clientX+document.body.scrollLeft-document.body.clientLeft,y:ev.clientY+document.body.scrollTop-document.body.clientTop}},getMouseOffset:function(target,ev){ev=ev||window.event;var docPos=this.getPosition(target);var mousePos=this.mouseCoords(ev);return{x:mousePos.x-docPos.x,y:mousePos.y-docPos.y}},getPosition:function(e){var left=0;var top=0;if(e.offsetHeight==0){e=e.firstChild}while(e.offsetParent){left+=e.offsetLeft;top+=e.offsetTop;e=e.offsetParent}left+=e.offsetLeft;top+=e.offsetTop;return{x:left,y:top}},mousemove:function(ev){if(jQuery.tableDnD.dragObject==null){return}if(ev.type=="touchmove"){event.preventDefault()}var dragObj=jQuery(jQuery.tableDnD.dragObject);var config=jQuery.tableDnD.currentTable.tableDnDConfig;var mousePos=jQuery.tableDnD.mouseCoords(ev);var y=mousePos.y-jQuery.tableDnD.mouseOffset.y;var yOffset=window.pageYOffset;if(document.all){if(typeof document.compatMode!="undefined"&&document.compatMode!="BackCompat"){yOffset=document.documentElement.scrollTop}else{if(typeof document.body!="undefined"){yOffset=document.body.scrollTop}}}if(mousePos.y-yOffsetjQuery.tableDnD.oldY;jQuery.tableDnD.oldY=y;if(config.onDragClass){dragObj.addClass(config.onDragClass)}else{dragObj.css(config.onDragStyle)}var currentRow=jQuery.tableDnD.findDropTargetRow(dragObj,y);if(currentRow){if(movingDown&&jQuery.tableDnD.dragObject!=currentRow){jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject,currentRow.nextSibling)}else{if(!movingDown&&jQuery.tableDnD.dragObject!=currentRow){jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject,currentRow)}}}}return false},findDropTargetRow:function(draggedRow,y){var rows=jQuery.tableDnD.currentTable.rows;for(var i=0;irowY-rowHeight)&&(y<(rowY+rowHeight))){if(row==draggedRow){return null}var config=jQuery.tableDnD.currentTable.tableDnDConfig;if(config.onAllowDrop){if(config.onAllowDrop(draggedRow,row)){return row}else{return null}}else{var nodrop=jQuery(row).hasClass("nodrop");if(!nodrop){return row}else{return null}}return row}}return null},mouseup:function(e){if(jQuery.tableDnD.currentTable&&jQuery.tableDnD.dragObject){jQuery(document).unbind(moveEvent,jQuery.tableDnD.mousemove).unbind(endEvent,jQuery.tableDnD.mouseup);var droppedRow=jQuery.tableDnD.dragObject;var config=jQuery.tableDnD.currentTable.tableDnDConfig;if(config.onDragClass){jQuery(droppedRow).removeClass(config.onDragClass)}else{jQuery(droppedRow).css(config.onDropStyle)}jQuery.tableDnD.dragObject=null;var newOrder=jQuery.tableDnD.serialize();if(config.onDrop&&(jQuery.tableDnD.originalOrder!=newOrder)){config.onDrop(jQuery.tableDnD.currentTable,droppedRow)}jQuery.tableDnD.currentTable=null}},jsonize:function(){if(jQuery.tableDnD.currentTable){return jQuery.tableDnD.jsonizeTable(jQuery.tableDnD.currentTable)}else{return"Error: No Table id set, you need to set an id on your table and every row"}},jsonizeTable:function(table){var result="{";var tableId=table.id;var rows=table.rows;result+='"'+tableId+'" : [';for(var i=0;i0){result+="&"}var rowId=rows[i].id;if(rowId&&table.tableDnDConfig&&table.tableDnDConfig.serializeRegexp){rowId=rowId.match(table.tableDnDConfig.serializeRegexp)[0]}result+=paramName+"[]="+rowId}return result},serializeTables:function(){var result="";this.each(function(){result+=jQuery.tableDnD.serializeTable(this)});return result}};jQuery.fn.extend({tableDnD:jQuery.tableDnD.build,tableDnDUpdate:jQuery.tableDnD.updateTables,tableDnDSerialize:jQuery.tableDnD.serializeTables})})(jQuery); \ No newline at end of file diff --git a/Client/FactionManagement/Ranks/index.html b/Client/FactionManagement/Ranks/index.html new file mode 100644 index 00000000..9c89cc00 --- /dev/null +++ b/Client/FactionManagement/Ranks/index.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + +
someentry
+ + + + + + \ No newline at end of file diff --git a/Client/FactionManagement/Ranks/script.js b/Client/FactionManagement/Ranks/script.js new file mode 100644 index 00000000..e02abfc9 --- /dev/null +++ b/Client/FactionManagement/Ranks/script.js @@ -0,0 +1 @@ + diff --git a/Client/FactionManagement/Ranks/style.css b/Client/FactionManagement/Ranks/style.css new file mode 100644 index 00000000..0e36810a --- /dev/null +++ b/Client/FactionManagement/Ranks/style.css @@ -0,0 +1,3 @@ +body +{ +} \ No newline at end of file diff --git a/Client/FactionManagement/main.js b/Client/FactionManagement/main.js new file mode 100644 index 00000000..cea64481 --- /dev/null +++ b/Client/FactionManagement/main.js @@ -0,0 +1,25 @@ +/** + * @overview Life of German Reallife - Faction Manager Main (main.js) + * @author hydrant + * @copyright (c) 2008 - 2018 Life of German + */ + +var manageBrowser = null; +var rankData = null; + +mp.events.add('manageFactionRanks', (ranks) => { + if (manageBrowser !== null) return; + manageBrowser = mp.browsers.new('package://FactionManagement/Ranks/index.html'); + mp.gui.cursor.show(true, true); + //mp.gui.chat.activate(false); + mp.gui.chat.push(ranks); + rankData = ranks; +}); + +mp.events.add('onManageFactionRanksLoaded', () => { + mp.gui.chat.push("loaded page"); + if (manageBrowser !== null) { + manageBrowser.execute(`loadData(` + rankData + `)`); + mp.gui.chat.push(rankData); + } +}); \ No newline at end of file diff --git a/Client/index.js b/Client/index.js index 6545bd99..c3f70391 100644 --- a/Client/index.js +++ b/Client/index.js @@ -6,4 +6,5 @@ require('./Login/main.js'); require('./Save/main.js'); -require('./Save/save.js'); \ No newline at end of file +require('./Save/save.js'); +require('./FactionManagement/main.js'); \ No newline at end of file diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index d8fc5780..7d74337b 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -290,7 +290,6 @@ namespace reallife_gamemode.Server.Commands } else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); break; - } } } diff --git a/Server/Commands/Faction.cs b/Server/Commands/Faction.cs index 5142c8e1..9e287495 100644 --- a/Server/Commands/Faction.cs +++ b/Server/Commands/Faction.cs @@ -1,4 +1,5 @@ using GTANetworkAPI; +using Newtonsoft.Json; using reallife_gamemode.Model; using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Extensions; @@ -62,5 +63,24 @@ namespace reallife_gamemode.Server.Commands ChatService.BroadcastFaction(broadcastMessage, context.Factions.ToList().FindAll(c => c.StateOwned)); } } + + [Command("managefactionranks")] + public void CmdFactionManageFactionRanks(Client player) + { + Entities.Faction f = player.GetFaction(); + if (f == null) + { + ChatService.NotAuthorized(player); + return; + } + + using(var context = new DatabaseContext()) + { + List factionRanks = context.FactionRanks.ToList().FindAll(r => r.FactionId == f.Id); + string json = JsonConvert.SerializeObject(factionRanks, Formatting.Indented); + player.TriggerEvent("manageFactionRanks", json); + } + } + } }