Aufjedenfall KEIN ALTIS LIFE oder sowas, einfach mal was neues überlegen, mit anderen interessenten sich zusammensetzen und darüber reden mehr aber auch nicht.
Beiträge von Exodoos
-
-
Hallo Leute, ist schon etwas länger her seit ich mich hier gemeldet habe, mir liegt da etwas auf dem herzen, was ich noch los werden möchte.
Altis Life bzw. [lexicon]Tanoa[/lexicon] Life ist für mich als Projektleiter tot. Warum? Was will man da noch sagen? Ausser die selben Scripts, die schon hunderte andere Leute haben einzufügen bringt nichts mehr. Genau wie dieses GUI Self Editing. Alles schön und gut, ich wette, es gibt über 1500+ Server, mit der gleichen Scheisse wie sonst? (Sry für das wort aber es ist so). Ist dieses ständige, ich muss einen Life Server haben, wir werden es besser machen, nicht schon altmodisch und sinnlos? Nun ja, so habe ich auch vor nem Monat dieses getue gehabt, nur was es bringt es mir? NICHTS. 2014 und vielleicht noch 2015 ging das ja noch, aber jetzt ist es schon Mainstream und in Mode, die Serverliste mit dem gleichen Müll zu beschmutzen. Sealdrop, Black Lagoon und viele andere haben es geschafft, inkompetente Menschen zu einem Fertig geskripteten Serverpaket zu locken.
Jetzt glauben die meisten, die Copyright Zeilen von Tonic, Sealdrop und alle andere löschen zu müssen nur um das sagen zu können:"Ey YO Junge komm auf meinem Server ich habe das mit nem Kumpel selber geskriptet und das in 2 Wochen harter Arbeit."
Wenn man bedenkt, das die WIRKLICH guten und tauglichen Server MONATE gebraucht haben, um ihren Server auszuschmücken.
Das beste überhaupt, wenn die ganzen Script-Paket Kiddies in den Forum posten, wie man die Statusleiste und so entfernt (Sealdrop Fall), da kriege ich einen würgereiz. ill
Selbstverständlich darf man Skript Pakete nutzen, nur man sollte mit sowas nicht Public gehen. Man kann schauen, wie haben es Sealdrop usw. gemacht. Was könnte ich noch reinpacken?
Sowas ist sinnvoll und mehr nicht. Natürlich kann man nicht von heute auf morgen SQF Skripten. Jeder fängt klein aber gleich mit nem fertigen Paket durchstarten ist meiner Meinung nach dreist und unfair ggü. die Leute, die WIRKLICH Skripten bzw. Feler beheben müssen, die wirklich schon über 50+ Issues haben.Falls ich euren Traum zerschossen haben sollte. Sorry dafür aber das ist nunmal Fakt und die bittere Wahrheit.
So, jetzt gehe ich mal auf den nächsten Punkt über bevor ich hier während dem schreiben noch einen Herzinfarkt erleiden muss.
Warum schliesst ihr euch nicht zusammen? Ihr könntet sovieles erreichen und lernen. Es stehen alle Türen offen. Ihr müsst nur raus gehen und es erleben.
Schreibt hier in den Forum rein, das ihr evtl. noch andere Projekte sucht, die evtl. zusammenschliessen wollen.
Glaubt mir Leute, so könnt ihr euch eher hocharbeiten und erfolg haben.Dann kommen wir zum nächsten Punkt.
Da ich leider noch nicht sogut im Skripten bin, würde ich mich gerne mit viele anderen zusammensetzen und an einer neuen Idee bzw. Framework durchquatschen. Mal was anderes wie Life, oder Exile, oder Epoch und die ganzen anderen Framework Projekte. Es kann mit Mods sein oder auch rein auf Skriptbasis. Wer lust hat, der soll sich bei mir melden, oder um einen zusammenschluss von mehreren Multigaming Communitys.
So, ich hoffe, ich habe hier nicht jeden beleidigt oder irgendwie angegriffen, es ist nunmal Fakt, das es wie ein Geschwürr ist.
Dann bis zum nächsten Ragepost. Haut rein, PEACE vain
-
Jep, einzig Auffällige wären die [lexicon]extDB[/lexicon] Logs, die Anzeigen: "[22:47:16 +02:00] [Thread 27207] extDB2: No Config Option Found: "
Was laut Lexicon auf einen falschen Prefix hinweist, dieser wurde aber nicht verändert. Nehme ich die PBOs vor der Bearbeitung, (ohne die extDB2.ini anzurühren), startet der Server ohne solche Fehler.Und in der Konsole natürlich: "22:47:16 "extDB2: Error with Database Connection"" als Meldung
Da kann ich dir leider nicht helfen, kenne diesen Fehlern nicht.
Diese Datei müsste doch eine .sqf sein oder? Jedenfalls sagt mein Server:Script/core/pmenu/fn_smartphone.sql not found
Sowie die Datei "fn_showMsg.sqf":
Script/core/pmenu/fn_showMsg.sql not foundUps hab mich da vertippt. Aber ist ja logisch oder nicht Killarobo?
-
Hab die 4.4 r3, bin strikt nach Anleitung gegangen -> extDB2 zickt rum und kann nicht mehr connecten.
Logs zeigen keine wirkliche Fehlermeldung an. -.- Schade.[lexicon]extDB[/lexicon] Logs, RPT Logs alles bereits durchgeschaut?
-
Kannst du die vllt. Bilder hinzufügen?
-
[Release] New Spawn Menu - 4.4 - Altis Life RPG
Komisch dass das von Altis Life RPG ist oder?!
Wer lesen kann, ist klar im Vorteil.
-
Ups, da ist was dran stimmt
-
John, das ist ein Tutorial für die Rebellen xD Schsu dir restrainAction GENAU an
-
Ich schaue mal was sich in den Tagen machen lässt.
-
Hast du den Steam Repair funktion bereits ausprobiert?
-
ALARMSYSTEM FÜR HOUSING
Tutorial von CamaroZHallo, dieses Script fügt einen Alarm System zu eurem Housing System hinzu.
Dann fangen wir mal an.Öffnet eure "Functions.hpp" und fügt es unter der class "Housing" ein:
Geht in euren "Housing" Ordner, der befindet sich im "core" Ordner und erstellt eine neue Datei namens "fn_alarme.sqf":
SQL: fn_alarme.sqf
Alles anzeigen/* Author: CamaroZ File: fn_alarme.sqf */ private ["_alarme","_house"]; _house = param [0,objNull,[objNull]]; if (isNull _house) exitWith {}; if (!(_house isKindOf "House_F")) exitWith {}; if (_house getVariable "alarme") then { playSound3D ["A3\Sounds_F\sfx\alarm_independent.wss", player, false, getPosASL player, 1, 1, 150]; //Alarme da Casa // No lugar de player pode ser reposto por _house, que o som ficaria no objeto. Porém não foi testado... } else { hint "Essa casa não possui, nenhum alarme."; };
Jetzt müsst ihr die folgenden Variablen in den folgenden Dateien einfügen:SQL: fn_buyHouse.sqf_house setVariable ["uid",floor(random 99999),true]; _house setVariable ["alarme",true,true]; // Código adicionado
SQL: fn_sellHouse.sqf_house setVariable ["locked",false,true]; _house setVariable ["alarme",false,true]; // Código adicionado
SQL: fn_lockupHouse.sqf_house setVariable ["locked",true,true]; _house setVariable ["alarme",true,true]; // Código adicionado
Dann öffne die Datei "fn_houseMenu.sqf" und füge den gesamten Block ganz unten ein
SQL: fn_houseMenu.sqf
Alles anzeigen} else { _Btn1 ctrlSetText localize "STR_pInAct_SellHouse"; _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_sellHouse; closeDialog 0;"; _Btn1 ctrlShow true; if (((_curTarget getVariable "house_owner") select 0) != (getPlayerUID player)) then { _Btn1 ctrlEnable false; }; if (_curTarget getVariable ["locked",false]) then { _Btn2 ctrlSetText localize "STR_pInAct_UnlockStorage"; } else { _Btn2 ctrlSetText localize "STR_pInAct_LockStorage"; }; _Btn2 buttonSetAction "[life_pInact_curTarget] call life_fnc_lockHouse; closeDialog 0;"; _Btn2 ctrlShow true; if (isNull (_curTarget getVariable ["lightSource",objNull])) then { _Btn3 ctrlSetText localize "STR_pInAct_LightsOn"; } else { _Btn3 ctrlSetText localize "STR_pInAct_LightsOff"; }; _Btn3 buttonSetAction "[life_pInact_curTarget] call life_fnc_lightHouseAction; closeDialog 0;"; _Btn3 ctrlShow true; if (_curTarget getVariable ["alarme",true]) then { // Código adicionado _Btn4 ctrlSetText "Desligar Alarme"; _Btn4 buttonSetAction "life_pInact_curTarget setVariable ['alarme',false,true]; closeDialog 0;"; _Btn4 ctrlshow true; } else { _Btn4 ctrlSetText "Ligar Alarme"; _Btn4 buttonSetAction "life_pInact_curTarget setVariable ['alarme',true,true]; closeDialog 0;"; _Btn4 ctrlshow true; };
Öffnet die Datei "fn_copBreakDoor.sqf" und fügt das folgende ein:
SQL: fn_copBreakDoor.sqf
Alles anzeigen_door = [_house] call life_fnc_nearestDoor; if (_door isEqualTo 0) exitWith {hint localize "STR_Cop_NotaDoor"}; if ((_house getVariable [format["bis_disabled_Door_%1",_door],0]) isEqualTo 0) exitWith {hint localize "STR_House_Raid_DoorUnlocked"}; life_action_inUse = true; if(_house getVariable "alarme") then { // Código adicionado [_house]call life_fnc_alarme; [2,"STR_House_Raid_NOTF",true,[(_house getVariable "house_owner") select 1]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; // Essa mensagem aparecerá para todos os players online no servidor, caso deseje desativar é opcional. };
Geht jetzt in eure "life_server.pbo" und sucht im Ordner "house" nach "initHouses.sqf" und fügt diese Variablen ein:SQL: initHouses.sqf_house setVariable ["locked",true,true]; //Lock up all the stuff. _house setVariable ["alarme",true,true]; // Código adicionado
WICHTIG: Der Alarm ist anpassbar, wenn ihr den Alarm bei der lockpick haben wollt nachdem ihr in das Haus eingebrochen habt, fügt diesen Snippet ein:
Öffnet euren "fn_boltcutter.sqf" und fügt noch diesen Codeschnipsel ein:SQL: fn_boltcutter.sqf
Alles anzeigenif (_door isEqualTo 0) exitWith {hint localize "STR_Cop_NotaDoor"}; //Not near a door to be broken into. if ((_building getVariable [format["bis_disabled_Door_%1",_door],0]) isEqualTo 0) exitWith {hint localize "STR_House_Raid_DoorUnlocked"}; if ((nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) == _building || (nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) == _building) then { [[1,2],"STR_ISTR_Bolt_AlertFed",true,[]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; } else { [0,"STR_ISTR_Bolt_AlertHouse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; }; life_action_inUse = true; //Setup the progress bar if(_building getVariable "alarme") then { // Código adicionado [_building] call life_fnc_alarme; };
So, das müsste es gewesen sein, falls was nicht passen sollte oder ich habe es falsch übersetzt, BITTE teilt es mir mit und ich ändere es selbstverständlich.
Nicht vergessen ich gehe NUR auf kommentare ein, die dementsprechend sittengerecht verfasst worden sind, auf Flamerei gehe ich nicht ein!
VIEL SPASS!PS.:
Hallo zusammen,
ich habe mir das Script mal angeschaut und habe die Lösung für euer Problem mit der fn_houseMenu.sqf.
Ihr dürft nicht den ganzen Code einfügen nur diesen hier:
Codeif (_curTarget getVariable ["alarme",true]) then { // Código adicionado _Btn4 ctrlSetText "Haus-Alarm deaktivieren"; _Btn4 buttonSetAction "life_pInact_curTarget setVariable ['alarme',false,true]; closeDialog 0;"; _Btn4 ctrlshow true; } else { _Btn4 ctrlSetText "Haus-Alarm aktivieren"; _Btn4 buttonSetAction "life_pInact_curTarget setVariable ['alarme',true,true]; closeDialog 0;"; _Btn4 ctrlshow true; };
Ich werde meine fn_houseMenu.sqf unten anhängen. Dann könnt ihr euch das anschauen. Exodoos vielleicht änderst du das oben im TuT noch.
Hoffe es hilft dem einem oder anderem weiter.
Mit freundlichen Grüßen,
Dukes
-
PUBLIC COP SLOTS ENTFERNEN
Tutorial von Exodoos
Hallo, viele von euch kennen sicher dieses Problem.Dann fangen wir mal an.
Öffnet eure "fn_initCop.sqf" und ersetzt diesen Block:SQLif(!(str(player) in ["cop_1","cop_2","cop_3","cop_4"])) then { if((FETCH_CONST(life_coplevel) == 1) && (FETCH_CONST(life_adminlevel) == 1)) then { ["NotWhitelisted",false,true] call BIS_fnc_endMission; sleep 35; }; };
durch diesen hier:
SQLif(!(str(player) in ["cop_9001"])) then { // Over 9000? if((FETCH_CONST(life_coplevel) < 1) && (FETCH_CONST(life_adminlevel) == 0)) then { ["NotWhitelisted",false,true] call BIS_fnc_endMission; sleep 35; }; };
So, dann öffnet ihr eure "mission.sqm" mit Notepad++ und sucht nach diesen Einheiten:cop_1, cop_2, cop_3, cop_4
und ändert sie dementsprechend um.
Das müsste es gewesen sein, falls es nicht geklappt haben sollte, schreibt mir eine Nachricht oder postet unter diesem Thread ich schaue dann das ich es umschreibe.
VIEL SPASS!
-
Funktioniert aber auch für die 4.4 habe es getestet.
-
Ok habe das irgendwie noch nie gesehen xD
-
SQL BASIERTES SMARTPHONE FÜR 4.4 UND 4.4 R4
Upgedated von Alaskavet , Basis Code von SilexHallo, heute mache ich mal was ganz schmackhaftes, was viele von euch kennen und lieben gelernt haben.
Dann fangen wir mal an.
CLIENT PART:
Öffnet eure "configuration.sqf" und fügt dort, wo die life_variables sind, das hier ein:
In der "CfgRemoteExec.hpp", fügt das hier ein:
Dann geht in die "Functions.hpp" und fügt das hier unter der class "Player_Menu" ein:
Öffnet eure "Masterhandler.hpp", diese findet ihr im "dialog" Ordner und fügt das ein:
Dann geht in die "player_inv.hpp" im "dialog" Ordner, sucht nach "ButtonCell" und ersetzt diesen Event "onButtonClick" mit diesem hier:
Erstellt im "dialog" Ordner eine neue Datei namens "smartphone.hpp" und fügt das hier ein:SQL: smartphone.hpp
Alles anzeigenclass Life_my_smartphone { idd = 88888; name = "life_my_telephone_menu"; movingEnable = false; enableSimulation = true; onLoad = "[] spawn life_fnc_smartphone;"; class controlsBackground { class Life_RscTitleBackground:Life_RscText { colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; idc = -1; x = 0.1; y = 0.2; w = 0.95; h = (1 / 25); }; class MainBackground:Life_RscText { colorBackground[] = {0, 0, 0, 0.7}; idc = -1; x = 0.1; y = 0.2 + (11 / 250); w = 0.95; h = 0.7 - (22 / 250); }; class PlayerListTitleBackground:Life_RscText { colorBackground[] = {0.588, 0.424, 0.145, 1.0}; idc = -1; x = 0.11; y = 0.25; w = 0.2; h = (1 / 25); }; class MessageTitleBackground:Life_RscText { colorBackground[] = {0.588, 0.424, 0.145, 1.0}; idc = -1; x = 0.325; y = 0.25; w = 0.7; h = (1 / 25); }; class RandomTitleBackground:Life_RscText { colorBackground[] = {0.588, 0.424, 0.145, 1.0}; idc = -1; x = 0.325; y = 0.25 + 0.3 + (1 / 25); w = 0.7; h = (1 / 25); }; }; class controls { class MessageTitle : Life_RscTitle { colorBackground[] = {0, 0, 0, 0}; idc = 88886; text = ""; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.9)"; x = 0.325; y = 0.25; w = 0.7; h = (1 / 25); }; class RandomTitle : Life_RscTitle { colorBackground[] = {0, 0, 0, 0}; idc = 88890; text = "$STR_SMARTPHONE_RANDOMTITLE"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.9)"; x = 0.325; y = 0.25 + 0.3 + (1 / 25); w = 0.7; h = (1 / 25); }; class PlayerList : Life_RscListBox { idc = 88881; onLBSelChanged = "[2] spawn life_fnc_smartphone;"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; x = 0.11; y = 0.25 + (1 / 25); w = 0.2; h = 0.5; }; class MessageList : Life_RscListNBox { idc = 88882; onLBSelChanged = "[(lbCurSel 88882)] call life_fnc_showMsg;"; //sizeEx = 0.04; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; colorBackground[] = {0, 0, 0, 0.0}; columns[] = {0,0.3}; x = 0.325; y = 0.25 + (1 / 25); w = 0.7; h = 0.3; }; class TextShow : Life_RscControlsGroup { x = 0.325; y = 0.25 + 0.3 + (1 / 25) + (1 / 25); w = 0.7; h = 0.15; class HScrollbar : HScrollbar { height = 0; }; class controls { class showText : Life_RscStructuredText { idc = 88887; text = ""; colorBackground[] = {0.28,0.28,0.28,0.28}; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; shadow = 0; x = 0; y = 0; w = 0.69;//w = 0.7; h = 1;//h = 2.15; }; }; }; class Schreiben : Life_RscButtonMenu { idc = 887892; text = "$STR_SMARTPHONE_SCHREIBEN"; onButtonClick = "[4] call life_fnc_smartphone;"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 1.0}; x = 0.11; y = 0.25 + (1 / 25) + 0.51; w = 0.2; h = (1 / 25); }; class Title : Life_RscTitle { colorBackground[] = {0, 0, 0, 0}; idc = -1; text = "$STR_SMARTPHONE_TITLE"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; x = 0.1; y = 0.2; w = 0.95; h = (1 / 25); }; class PlayerListTitle : Life_RscTitle { colorBackground[] = {0, 0, 0, 0}; idc = -1; text = "$STR_SMARTPHONE_PLAYERLISTTITLE"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.9)"; x = 0.11; y = 0.25; w = 0.2; h = (1 / 25); }; class CloseLoadMenu : Life_RscButtonMenu { idc = -1; text = "$STR_Global_Close"; onButtonClick = "closeDialog 0;"; x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); y = 0.9 - (1 / 25); w = (6.25 / 40); h = (1 / 25); }; class Notruf : Life_RscButtonMenu { idc = -1; text = "$STR_SMARTPHONE_NOTRUF"; onButtonClick = "createDialog ""Life_smartphone_notruf"";"; colorBackground[] = {0.584, 0.086, 0.086,1.0}; x = 0.325 + 0.7 - (6.25 / 40); y = 0.25 + (1 / 25) + 0.51; w = (6.25 / 40); h = (1 / 25); }; }; }; class Life_smartphone_schreiben{ idd = 88883; name = "life_my_smartphone_schreiben"; movingEnable = false; enableSimulation = true; onLoad = ""; class controlsBackground { class Life_RscTitleBackground:Life_RscText { colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; idc = -1; x = 0.1; y = 0.2; w = 0.6; h = (1 / 25); }; class MainBackground:Life_RscText { colorBackground[] = {0, 0, 0, 0.7}; idc = -1; x = 0.1; y = 0.2 + (11 / 250); w = 0.6; h = 0.1; }; }; class controls { class Title : Life_RscTitle { colorBackground[] = {0, 0, 0, 0}; idc = 88886; text = "$STR_SMARTPHONE_NACHRICHTTITLE"; x = 0.1; y = 0.2; w = 0.95; h = (1 / 25); }; class Absenden : Life_RscButtonMenu { idc = 88885; text = "$STR_SMARTPHONE_ABSENDEN"; onButtonClick = "[1,-1,(ctrlText 88884)] call life_fnc_newMsg;"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 1.0}; x = 0.6 - (6.25 / 40) + 0.088; y = 0.3 + (1 / 25) - 0.048; w = (6.25 / 40); h = (1 / 25); }; class AdminMsg : life_RscButtonMenu { idc = 888897; text = "$STR_CELL_AdminMsg"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 1.0}; onButtonClick = "[5,-1,(ctrlText 88884)] call life_fnc_newMsg;"; x = 0.6 - (6.25 / 40) - 0.121; y = 0.3 + (1 / 25) - 0.048; w = 0.2; h = (1 / 25); }; class Close : Life_RscButtonMenu { idc = -1; text = "$STR_Global_Close"; onButtonClick = "closeDialog 0;"; colorBackground[] = {0.584, 0.086, 0.086,1.0}; x = 0.11; y = 0.3 + (1 / 25) - 0.048; w = (6.25 / 40); h = (1 / 25); }; class textEdit : Life_RscEdit { idc = 88884; text = ""; sizeEx = 0.030; x = 0.11; y = 0.3 - 0.048; w = 0.58; h = 0.03; }; }; }; class Life_smartphone_notruf { idd = 887890; name= "life_my_smartphone_notruf"; movingEnable = false; enableSimulation = true; onLoad = "[6] spawn life_fnc_newMsg;"; class controlsBackground { class Life_RscTitleBackground:Life_RscText { colorBackground[] = {0.584, 0.086, 0.086,1.0}; idc = -1; x = 0.1; y = 0.2; w = 0.64; h = (1 / 25); }; class MainBackground:Life_RscText { colorBackground[] = {0, 0, 0, 0.7}; idc = -1; x = 0.1; y = 0.2 + (11 / 250); w = 0.64; h = 0.15 - (5 / 250); }; }; class controls { class Title : Life_RscTitle { colorBackground[] = {0, 0, 0, 0}; idc = 888892; text = "$STR_SMARTPHONE_Notruftitle"; x = 0.1; y = 0.2; w = 0.6; h = (1 / 25); }; class textEdit : Life_RscEdit { idc = 888894; text = ""; sizeEx = 0.030; x = 0.11; y = 0.25; w = 0.62; h = 0.03; }; class TxtCopButton : life_RscButtonMenu { idc = 888895; text = "$STR_CELL_TextPolice"; colorBackground[] = {0.584, 0.086, 0.086,1.0}; onButtonClick = "[2,-1,(ctrlText 888894)] call life_fnc_newMsg;"; x = 0.32; y = 0.30; w = 0.2; h = (1 / 25); }; class TxtAdminButton : life_RscButtonMenu { idc = 888896; text = "$STR_CELL_TextAdmins"; colorBackground[] = {0.584, 0.086, 0.086,1.0}; onButtonClick = "[3,-1,(ctrlText 888894)] call life_fnc_newMsg;"; x = 0.53; y = 0.30; w = 0.2; h = (1 / 25); }; class AdminMsgAll : life_RscButtonMenu { idc = 888898; text = "$STR_CELL_AdminMSGAll"; colorBackground[] = {0.584, 0.086, 0.086,1.0}; onButtonClick = "[7,-1,(ctrlText 888894)] call life_fnc_newMsg;"; x = 0.53; y = 0.30; w = 0.2; h = (1 / 25); }; class EMSReq : life_RscButtonMenu { idc = 888899; text = "$STR_CELL_EMSRequest"; colorBackground[] = {0.584, 0.086, 0.086,1.0}; onButtonClick = "[4,-1,(ctrlText 888894)] call life_fnc_newMsg;"; x = 0.11; y = 0.30; w = 0.2; h = (1 / 25); }; class CloseButton : Life_RscButtonMenu { idc = -1; text = "$STR_Global_Close"; onButtonClick = "closeDialog 0;"; x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); y = 0.36 + (1 / 50); w = (6.25 / 40); h = (1 / 25); }; }; };
Öffnet dann eure "stringtable.xml" und fügt eine neue Package ein:XML: stringtable.xml
Alles anzeigen<Package name="Smartphone"> <Key ID="STR_PM_Smartphone"> <Original>Smartphone</Original> </Key> <Key ID="STR_SMARTPHONE_TITLE"> <Original>Smartphone Menu</Original> </Key> <Key ID="STR_SMARTPHONE_PLAYERLISTTITLE"> <Original>List of Players</Original> </Key> <Key ID="STR_SMARTPHONE_MESSAGETITLE"> <Original>New Message</Original> </Key> <Key ID="STR_SMARTPHONE_RANDOMTITLE"> <Original>Select a message to read</Original> </Key> <Key ID="STR_SMARTPHONE_SCHREIBEN"> <Original>Write</Original> </Key> <Key ID="STR_SMARTPHONE_NOTRUF"> <Original>Emergency call</Original> </Key> <Key ID="STR_SMARTPHONE_Absenden"> <Original>Send</Original> </Key> <Key ID="STR_SMARTPHONE_NACHRICHTTITLE"> <Original>Message:</Original> </Key> <Key ID="STR_SMARTPHONE_Notruftitle"> <Original>CALLS EMERGENCY | Abuse leads to BAN!</Original> </Key> </Package>
Geht dann in den Ordner "core\pmenu" und erstellt 3 neue Dateien:"fn_newMsg.sqf" , "fn_smartphone.sqf" , fn_showMsg.sqf
1. fn_newMsg.sqf
SQL: fn_newMessage.sqf
Alles anzeigen#include "..\..\script_macros.hpp" /* file: fn_newMsg.sqf Author: Silex */ private["_to","_type","_playerData","_msg"]; disableSerialization; _type = [_this,0,-1] call BIS_fnc_param; _playerData = [_this,1,-1] call BIS_fnc_param; _msg = [_this,2,"",[""]] call BIS_fnc_param; _display = findDisplay 88888; _cPlayerList = _display displayCtrl 88881; _cMessageEdit = _display displayCtrl 88884; switch(_type) do{ case 0: { life_smartphoneTarget = call compile format["%1",_playerData]; ctrlSetText[88886, format["message: %1",name life_smartphoneTarget]]; if((FETCH_CONST(life_adminlevel) < 1)) then { ctrlShow[888897,false]; }; }; //normal message case 1: { if(isNUll life_smartphoneTarget) exitWith {hint format["No person selected!"]; }; ctrlShow[88885, false]; if(_msg == "") exitWith {hint "You must enter a message to be sent!"; ctrlShow[88885, true]; }; [life_smartphoneTarget,_msg,player,0] remoteExec ["TON_fnc_handleMessages",2]; hint format["You sent %1 a message: %2",name life_smartphoneTarget,_msg]; ctrlShow[88885, true]; closeDialog 88883; }; //copmessage case 2: { if(({side _x == west} count playableUnits) == 0) exitWith {hint format["The police is currently inaccessible. Please try again later."]; }; ctrlShow[888895,false]; if(_msg == "") exitWith {hint "You must enter a message to be sent!"; ctrlShow[888895,true]; }; [ObjNull,_msg,player,1] remoteExec ["TON_fnc_handleMessages",2]; _to = "Police"; hint format["You sent %1 a message: %2",_to,_msg]; ctrlShow[888895,true]; closeDialog 887890; }; //msgadmin case 3: { ctrlShow[888896,false]; if(_msg == "") exitWith {hint "You must enter a message to be sent!"; ctrlShow[888896,true]; }; [ObjNull,_msg,player,2] remoteExec ["TON_fnc_handleMessages",2]; _to = "The Admins"; hint format["You sent %1 a message: %2",_to,_msg]; ctrlShow[888896,true]; closeDialog 887890; }; //emsrequest case 4: { if(({side _x == independent} count playableUnits) == 0) exitWith {hint format["Currently there is no EMS on duty . Please try again later."]; }; ctrlShow[888899,false]; if(_msg == "") exitWith {hint "You must enter a message to be sent!"; ctrlShow[888899,true]; }; [ObjNull,_msg,player,3] remoteExec ["TON_fnc_handleMessages",2]; hint format["You have sent a message to all EMS units.",_msg]; ctrlShow[888899,true]; closeDialog 887890; }; //adminToPerson case 5: { if((call life_adminlevel) < 1) exitWith {hint "You are not an admin!"; }; if(isNULL life_smartphoneTarget) exitWith {hint format["No person selected!"]; }; if(_msg == "") exitWith {hint "You must enter a message to be sent!"; }; [life_smartphoneTarget,_msg,player,4] remoteExec ["TON_fnc_handleMessages",2]; hint format["Administrator Message sent: %1 - Message: %2",name life_smartphoneTarget,_msg]; closeDialog 88883; }; //emergencyloading case 6: { if((FETCH_CONST(life_adminlevel) < 1)) then { ctrlShow[888898,false]; ctrlShow[888896,true]; } else { ctrlShow[888898,true]; ctrlShow[888896,false]; }; }; //adminMsgAll case 7: { if((FETCH_CONST(life_adminlevel) < 1)) exitWith {hint "You are not an admin!"; }; if(_msg == "") exitWith {hint "You must enter a message to be sent!"; }; [ObjNull,_msg,player,5] remoteExec ["TON_fnc_handleMessages",2]; hint format["A message sent to all admins: %1",_msg]; closeDialog 887890; }; };
2. fn_smartphone.sqfSQL: fn_smartphone.sqf
Alles anzeigen#include "..\..\script_macros.hpp" /* file: fn_smartphone.sqf Author: Silex */ private["_display","_units","_type","_data","_rowData","_msg"]; _type = [_this,0,0] call BIS_fnc_param; _data = [_this,1,0,["",[],0]] call BIS_fnc_param; disableSerialization; waitUntil {!isNull findDisplay 88888}; _display = findDisplay 88888; _cPlayerList = _display displayCtrl 88881; _cMessageList = _display displayCtrl 88882; _cMessageHeader = _display displayCtrl 88886; _cMessageHeader ctrlSetText format["Message's From:Players:"]; ctrlEnable[887892,false]; switch(_type) do{ case 0: { lbClear _cPlayerList; {if(alive _x && _x != player) then { switch(side _x) do { case west: {_type = "Cop"}; case civilian: {_type = "Civ"}; case independent: {_type = "Med"}; }; _cPlayerList lbAdd format["%1 (%2)",_x getVariable["realname", name _x],_type]; _cPlayerList lbSetData [(lbSize _cPlayerList)-1,str(_x)]; }; } forEach playableUnits; [getPlayerUID player, player] remoteExec ["TON_fnc_msgRequest",2]; ctrlEnable[887892,false]; }; case 1: { _msg = [_data select 2,40] call KRON_StrLeft; _rowData = [_data select 0, _data select 1, _data select 2, _data select 3]; _cMessageList lnbAddRow[_data select 3,format["%1 ...",_msg]]; _cMessageList lnbSetData[[((lnbSize _cMessageList) select 0)-1,0],str(_rowData)]; }; case 2: { ctrlEnable[887892,true]; _target = lbData[88881,(lbCurSel 88881)]; life_smartphoneTarget = call compile format["%1",_target]; }; case 4: { createDialog "Life_smartphone_schreiben"; ctrlSetText[88886, format["Message: %1",name life_smartphoneTarget]]; if((FETCH_CONST(life_adminlevel) < 1)) then { ctrlShow[888897,false]; }; }; };
3. fn_showMsg.sqfSQL: fn_showMsg.sqf
Alles anzeigen#include "..\..\script_macros.hpp" /* file: fn_showMsg.sqf Author: Silex */ private["_index", "_data", "_status"]; _index = [_this, 0, 0] call BIS_fnc_param; disableSerialization; waitUntil { !isNull findDisplay 88888 }; _display = findDisplay 88888; _cMessageList = _display displayCtrl 88882; _cMessageShow = _display displayCtrl 88887; _cMessageHeader = _display displayCtrl 88890; _data = call compile(_cMessageList lnbData[_index, 0]); _status = "[OFFLINE]"; { if (getPlayerUID _x == _data select 0) then { _status = "[ONLINE]"; life_smartphoneTarget = _x; ctrlEnable[887892, true]; }; } forEach playableUnits; _cMessageHeader ctrlSetText format["%1 %2 written:", _data select 3, _status]; _cMessageShow ctrlSetText format["%1", _data select 2];
LIFE_SERVER PART:Öffnet eure "config.cpp" und sucht nach der class "TON_system", unter diesem class fügt eine weitere class hinzu:
SQL: config.cppclass Smartphone { file = "\life_server\Functions\Smartphone"; class handleMessages {}; class msgRequest {}; };
Geh in den "Functions" Ordner und erstelle einen Ordner namens "Smartphone", in diesem Ordner erstellt 2 Dateien:"fn_handleMessages.sqf" , "fn_msgRequest.sqf"
1. fn_handleMessages.sqf
SQL: fn_handleMessages.sqf
Alles anzeigen/* file: fn_handleMessages.sqf Author: Silex*/ private["_msg","_to","_target","_player","_type"]; _target = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; _msg = [_this,1,"",[""]] call BIS_fnc_param; _player = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param; _type = [_this,3,-1] call BIS_fnc_param; switch(_type) do{ //normal message case 0: { if(isNULL _target) exitWith {}; _to = call compile format["%1", _target]; [_msg,name _player,0] remoteExec ["TON_fnc_clientMessage",_to]; private["_query","_pid","_toID"]; _pid = getPlayerUID _player; _toID = getPlayerUID _target; _msg = [_msg] call DB_fnc_mresString; _fromName = name _player; _toName = name _target; _query = format["INSERT INTO messages (fromID, toID, message, fromName, toName) VALUES('%1', '%2', '""%3""', '%4', '%5')",_pid,_toID,_msg,_fromName,_toName]; diag_log format["Query: %1",_query]; waitUntil{!DB_Async_Active}; [_query,1] call DB_fnc_asyncCall; }; //message to cops case 1: { [_msg,name _player,1] remoteExec ["TON_fnc_clientMessage",west]; }; //to admins case 2: { [_msg,name _player,2] remoteExec ["TON_fnc_clientMessage",0]; }; //ems request case 3: { [_msg,name _player,5] remoteExec ["TON_fnc_clientMessage",independent]; }; //adminToPerson case 4: { _to = call compile format["%1", _target]; if(isNull _to) exitWith {}; [_msg,name _player,3] remoteExec ["TON_fnc_clientMessage",_to]; }; //adminMsgAll case 5: {[_msg,name _player,4] remoteExec ["TON_fnc_clientMessage",0]; }; };
2. fn_msgRequest.sqfSQL: fn_msgRequest.sqf
Alles anzeigen/* file: fn_msgRequest.sqf Author: Silex Fills the Messagelist */ private["_query", "_queryResult", "_uid", "_player"]; _uid = [_this, 0, "", [""]] call BIS_fnc_param; _player = [_this, 1, ObjNull, [ObjNull]] call BIS_fnc_param; _query = format["SELECT fromID, toID, message, fromName, toName FROM messages WHERE toID='%1' ORDER BY time DESC", _uid]; waitUntil { !DB_Async_Active }; _queryResult = [_query, 2, true] call DB_fnc_asyncCall; if (count _queryResult == 0) exitWith {}; { [1, _x] remoteExec["life_fnc_smartphone", _player]; } forEach _queryResult; _queryResult = [_query,2,true] call DB_fnc_asyncCall; if(count _queryResult == 0) exitWith {}; {[1,_x] remoteExec ["life_fnc_smartphone",_player]; }forEach _queryResult;
Erstellt nun eine neue Datei auf dem Desktop namens "smartphone.sql" und fügt folgendes ein:SQL: smartphone.sqlCREATE TABLE IF NOT EXISTS `messages` ( `uid` int(12) NOT NULL AUTO_INCREMENT, `fromID` varchar(50) NOT NULL, `toID` varchar(50) NOT NULL, `message` text, `fromName` varchar(32) NOT NULL, `toName` varchar(32) NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Nun führt ihr diese Datei in eurer Datenbank aus und schon habt ihr die Tabelle "messages".
FERTIG!
Falls ihr irgendwelche Fragen habt, stellt Sie mir einfach
-
SPAWNMENÜ SCRIPT
Tutorial von Entity
Hallo, ich weiß, es ist zu einfach nur ich möchte gerne hier etwas beisteuern und Tutorials von altisliferpg.com übersetzen.So, dann fangen wir mal an.
Schritt 1
Öffnet eure "spawnSelection.hpp" , diese findet ihr im Ordner "dialog" und ersetzt KOMPLETT den Script durch dieses hier:
SQL: spawnSelection.hpp
Alles anzeigenclass life_spawn_selection { idd = 38500; movingEnabled = 0; enableSimulation = 1; class controlsBackground { class life_RscTitleBackground: Life_RscText { idc = 1000; x = 0.0101577 * safezoneW + safezoneX; y = 0.0291999 * safezoneH + safezoneY; w = 0.170156 * safezoneW; h = 0.9438 * safezoneH; colorBackground[] = {0.294,0.286,0.286,0.8}; }; class Title: Life_RscText { idc = 1001; text = "Spawnauswahl"; x = 0.0132501 * safezoneW + safezoneX; y = 0.0402 * safezoneH + safezoneY; w = 0.164999 * safezoneW; h = 0.0242 * safezoneH; }; class MapView: Life_RscMapControl { idc = 38502; x = 0.183407 * safezoneW + safezoneX; y = 0.0292 * safezoneH + safezoneY; w = 0.8085 * safezoneW; h = 0.9438 * safezoneH; maxSatelliteAlpha = 0.75; alphaFadeStartScale = 1.15; alphaFadeEndScale = 1.29; }; }; class controls { class spawnList: Life_RscListNbox { idc = 38510; x = 0.0153125 * safezoneW + safezoneX; y = 0.071 * safezoneH + safezoneY; w = 0.159844 * safezoneW; h = 0.847 * safezoneH; text = ""; sizeEx = 0.041; coloumns[] = {0,0,0.9}; drawSideArrows = 1; idcLeft = -1; idcRight = -1; rowHeight = 0.050; onLBSelChanged = "_this call life_fnc_spawnPointSelected;"; }; class spawnButton: Life_RscButtonMenu { idc = -1; text = "SPAWN"; x = 0.0153125 * safezoneW + safezoneX; y = 0.9246 * safezoneH + safezoneY; w = 0.159844 * safezoneW; h = 0.033 * safezoneH; style = "0x02"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; colorBackgroundActive[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; colorBackgroundDisabled[] = {0.95,0.95,0.95,0}; offsetX = 0.003; offsetY = 0.003; offsetPressedX = 0.002; offsetPressedY = 0.002; colorShadow[] = {0,0,0,1}; colorBorder[] = {0,0,0,0}; borderSize = 0.008; onButtonClick = "[] call life_fnc_spawnConfirm"; }; }; };
-
vll mal die RPT logs und die letzten dateien, die du bearbeitet hast hier evtl. hochladen?
-
schick mal die Config_Vehicles.hpp
Du weißt schon, das er die Version Sealdrop 3.1.4.8 benutzt und nicht 4.0+
-
Da würde ich aber noch auf die v4.5 warten die so ungefähr ende August rauskommen müsste, wenn man sich die Issues anschaut auf Github
-
das war
- SealDrop Altis Life v.3.1.4.8-extDB
Kurze nebenfrage, WARUM benutzt du Sealdrop?