Jump to content

Zacapa

Members
  • Posts

    130
  • Credits

  • Joined

  • Last visited

  • Feedback

    100%

Everything posted by Zacapa

  1. Just put the backup you dont need db installer
  2. Any solution for this?
  3. They don't reply because they don't understand what you say....... Wtf does this mean " I've tried Frozen All Variants, but all the variables of the passion show eclipse or does the eclipse itself not use the eclipse-java-oxygen"? What do you want to say and you use the word "passion" The Passion of the Christ? About this "The last observation of what eclipse to use? aCis and Frozen?" you can use eclipse oxygen and for acis or frozen there are 40kkkk topics here. Frozen: 1332 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Help!!!! I think you miss "slf4j-simple-1.6.1.jar" from the lib folder add this Lib and try again.
  4. https://github.com/kkafkas/L2J_aCis_custom
  5. Try to use a decompiler like this one http://jd.benow.ca/ you can import the jar to this one save the files and then import them to eclipse.
  6. Ekana mia metafrash "pedia trexo interkude jau oerai error jane lei enable to agp exw frozewb cinouke oac sasa parakalo mou lete pos to kano actuve kai siiet jaku xronia na exiumw" pedia trexo interlude kai exo ena error kai leh enable acp exo frozen (to cinouke den 3ero ti shmenh) sas parakalo mou lete pos na kano active to site kali xronia na exoume "kseris kanenan odiko na to kano ebalvle file thanks gia tin apantisi alla pliz kapuis oiy nakseri as me pi pliz i ena link na diabaso na to fix" 3eris kanenas kodiko na to kano enable file thanks gia thn apadhsh alla plz kapios pou na 3erei as mou ph h as mou stilh mhnhma
  7. Its the same
  8. Ολόκληρη φασαρία για να αλλαχτεί 1 αριθμός σου απάντησα πριν τι να αλλάξεις μετά κάνεις ποστ ολόκληρο το petdata και δεν έχεις αλλάξει τίποτα όλα είναι ίδια με τα retail speedOnRide="170;170;70;70;0;0" άλλαξε το τόσο απλό speedOnRide="200;200;80;80;0;0" και σου είπα αλλάζει αναλόγως το λβλ του πετ πρέπει να τα αλλάξεις όλα
  9. Νομίζω είναι speedOnRide="165;165;70;70;0;0" αναλόγως με τα λβλ του πετ αλλάζει
  10. Try to change Character to Creature and i think its L2PetInstance and L2Summon
  11. import net.sf.l2j.commons.concurrent.ThreadPool; ThreadPool.scheduleAtFixedRate(new RefreshAllLists(), 10000, delayForCheck * 60000);
  12. ThreadPool.scheduleAtFixedRate
  13. try to change String timeon = getPlayerRunTime(result.getInt("ch.onlinetime")); String adenas = getAdenas(result.getInt("SUM(it.count)")); to String timeon = getPlayerRunTime(result.getLong("ch.onlinetime")); String adenas = getAdenas(result.getLong("SUM(it.count)")); you also need to change static String getPlayerRunTime and static String getAdenas to long
  14. Πάρε αυτό δεν το λες και καλό αλλά την δουλεία σου την κάνεις.
  15. Adrenaline premium
  16. Ctrl + Shift + T pops up a window where you can type the name of your java class and open it.
  17. You haven't add the configs. Index: java/net/sf/l2j/Config.java =================================================================== --- java/net/sf/l2j/Config.java (revision 5) +++ java/net/sf/l2j/Config.java (working copy) @@ -223,6 +223,34 @@ public static int ALT_FISH_CHAMPIONSHIP_REWARD_5; // -------------------------------------------------- + // Events settings + // -------------------------------------------------- + public static boolean TVT_EVENT_ENABLED; + public static int TVT_EVENT_INTERVAL; + public static int TVT_EVENT_PARTICIPATION_TIME; + public static int TVT_EVENT_RUNNING_TIME; + public static int TVT_EVENT_PARTICIPATION_NPC_ID; + public static int TVT_EVENT_MIN_PLAYERS_IN_TEAMS; + public static int TVT_EVENT_MAX_PLAYERS_IN_TEAMS; + public static int TVT_EVENT_RESPAWN_TELEPORT_DELAY; + public static int TVT_EVENT_START_LEAVE_TELEPORT_DELAY; + public static String TVT_EVENT_TEAM_1_NAME; + public static int[] TVT_EVENT_BACK_COORDINATES = new int[3]; + public static int[] TVT_EVENT_TEAM_1_COORDINATES = new int[3]; + public static String TVT_EVENT_TEAM_2_NAME; + public static int[] TVT_EVENT_TEAM_2_COORDINATES = new int[3]; + public static List<int[]> TVT_EVENT_REWARDS = new ArrayList<>(); + public static boolean TVT_EVENT_TARGET_TEAM_MEMBERS_ALLOWED; + public static boolean TVT_EVENT_POTIONS_ALLOWED; + public static boolean TVT_EVENT_SUMMON_BY_ITEM_ALLOWED; + public static List<Integer> TVT_EVENT_DOOR_IDS = new ArrayList<>(); + public static byte TVT_EVENT_MIN_LVL; + public static byte TVT_EVENT_MAX_LVL; + public static boolean TVT_EVENT_REMOVE_BUFFS; + public static boolean TVT_EVENT_HEAL_PLAYERS; + public static boolean TVT_KILLS_REWARD_ENABLED; + public static List<int[]> TVT_KILLS_REWARD = new ArrayList<>(); + + // -------------------------------------------------- // GeoEngine // -------------------------------------------------- @@ -843,6 +871,142 @@ ALT_FISH_CHAMPIONSHIP_REWARD_4 = events.getProperty("AltFishChampionshipReward4", 200000); ALT_FISH_CHAMPIONSHIP_REWARD_5 = events.getProperty("AltFishChampionshipReward5", 100000); + TVT_EVENT_ENABLED = events.getProperty("TvTEventEnabled", false); + TVT_EVENT_INTERVAL = events.getProperty("TvTEventInterval", 18000); + TVT_EVENT_PARTICIPATION_TIME = events.getProperty("TvTEventParticipationTime", 3600); + TVT_EVENT_RUNNING_TIME = events.getProperty("TvTEventRunningTime", 1800); + TVT_EVENT_PARTICIPATION_NPC_ID = events.getProperty("TvTEventParticipationNpcId", 0); + TVT_EVENT_REMOVE_BUFFS = events.getProperty("TvTEventRemoveBuffs", false); + TVT_KILLS_REWARD_ENABLED = events.getProperty("TvTKillsRewardEnable", false); + TVT_EVENT_HEAL_PLAYERS = events.getProperty("TvTHealPlayersEnable", false); + + if (TVT_EVENT_PARTICIPATION_NPC_ID == 0) + { + TVT_EVENT_ENABLED = false; + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventParticipationNpcId"); + } + else + { + String[] propertySplit = events.getProperty("TvTEventParticipationNpcCoordinates", "0,0,0").split(","); + + if (propertySplit.length < 3) + { + TVT_EVENT_ENABLED = false; + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventParticipationNpcCoordinates"); + } + else + { + TVT_EVENT_BACK_COORDINATES[0] = Integer.parseInt(propertySplit[0]); + TVT_EVENT_BACK_COORDINATES[1] = Integer.parseInt(propertySplit[1]); + TVT_EVENT_BACK_COORDINATES[2] = Integer.parseInt(propertySplit[2]); + + TVT_EVENT_MIN_PLAYERS_IN_TEAMS = Integer.parseInt(events.getProperty("TvTEventMinPlayersInTeams", "1")); + TVT_EVENT_MAX_PLAYERS_IN_TEAMS = Integer.parseInt(events.getProperty("TvTEventMaxPlayersInTeams", "20")); + TVT_EVENT_MIN_LVL = (byte) Integer.parseInt(events.getProperty("TvTEventMinPlayerLevel", "1")); + TVT_EVENT_MAX_LVL = (byte) Integer.parseInt(events.getProperty("TvTEventMaxPlayerLevel", "80")); + TVT_EVENT_RESPAWN_TELEPORT_DELAY = Integer.parseInt(events.getProperty("TvTEventRespawnTeleportDelay", "20")); + TVT_EVENT_START_LEAVE_TELEPORT_DELAY = Integer.parseInt(events.getProperty("TvTEventStartLeaveTeleportDelay", "20")); + + TVT_EVENT_TEAM_1_NAME = events.getProperty("TvTEventTeam1Name", "Team1"); + propertySplit = events.getProperty("TvTEventTeam1Coordinates", "0,0,0").split(","); + + if (propertySplit.length < 3) + { + TVT_EVENT_ENABLED = false; + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventTeam1Coordinates"); + } + else + { + TVT_EVENT_TEAM_1_COORDINATES[0] = Integer.parseInt(propertySplit[0]); + TVT_EVENT_TEAM_1_COORDINATES[1] = Integer.parseInt(propertySplit[1]); + TVT_EVENT_TEAM_1_COORDINATES[2] = Integer.parseInt(propertySplit[2]); + + TVT_EVENT_TEAM_2_NAME = events.getProperty("TvTEventTeam2Name", "Team2"); + propertySplit = events.getProperty("TvTEventTeam2Coordinates", "0,0,0").split(","); + + if (propertySplit.length < 3) + { + TVT_EVENT_ENABLED = false; + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventTeam2Coordinates"); + } + else + { + TVT_EVENT_TEAM_2_COORDINATES[0] = Integer.parseInt(propertySplit[0]); + TVT_EVENT_TEAM_2_COORDINATES[1] = Integer.parseInt(propertySplit[1]); + TVT_EVENT_TEAM_2_COORDINATES[2] = Integer.parseInt(propertySplit[2]); + propertySplit = events.getProperty("TvTEventReward", "57,100000").split(";"); + + for (String reward : propertySplit) + { + String[] rewardSplit = reward.split(","); + + if (rewardSplit.length != 2) + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventReward \"" + reward + "\""); + else + { + try + { + TVT_EVENT_REWARDS.add(new int[] + { + Integer.valueOf(rewardSplit[0]), + Integer.valueOf(rewardSplit[1]) + }); + } + catch (NumberFormatException nfe) + { + if (!reward.equals("")) + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventReward \"" + reward + "\""); + } + } + } + + propertySplit = events.getProperty("TvTKillsReward", "57,100000").split(";"); + + for (String rewardKills : propertySplit) + { + String[] rewardSplit = rewardKills.split(","); + + if (rewardSplit.length != 2) + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventReward \"" + rewardKills + "\""); + else + { + try + { + TVT_KILLS_REWARD.add(new int[] + { + Integer.valueOf(rewardSplit[0]), + Integer.valueOf(rewardSplit[1]) + }); + } + catch (NumberFormatException nfe) + { + if (!rewardKills.equals("")) + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventReward \"" + rewardKills + "\""); + } + } + } + + TVT_EVENT_TARGET_TEAM_MEMBERS_ALLOWED = Boolean.parseBoolean(events.getProperty("TvTEventTargetTeamMembersAllowed", "true")); + TVT_EVENT_POTIONS_ALLOWED = Boolean.parseBoolean(events.getProperty("TvTEventPotionsAllowed", "false")); + TVT_EVENT_SUMMON_BY_ITEM_ALLOWED = Boolean.parseBoolean(events.getProperty("TvTEventSummonByItemAllowed", "false")); + propertySplit = events.getProperty("TvTEventDoorsCloseOpenOnStartEnd", "").split(";"); + + for (String door : propertySplit) + { + try + { + TVT_EVENT_DOOR_IDS.add(Integer.valueOf(door)); + } + catch (NumberFormatException nfe) + { + if (!door.equals("")) + System.out.println("TvTEventEngine[Config.load()]: invalid config property -> TvTEventDoorsCloseOpenOnStartEnd \"" + door + "\""); + } + } + } + } + } + } + // Geoengine ExProperties geoengine = load(GEOENGINE_FILE); GEODATA = geoengine.getProperty("GeoData", 0);
  18. I found it on an other forum and just post it.
  19. You can try something like this and change it into whataver you want (this one is with item). Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java =================================================================== --- java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (revision 10) +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (working copy) @@ -20,8 +20,10 @@ import net.sf.l2j.Config; import net.sf.l2j.gameserver.communitybbs.CommunityBoard; import net.sf.l2j.gameserver.datatables.AdminCommandAccessRights; +import net.sf.l2j.gameserver.datatables.SkillTable; import net.sf.l2j.gameserver.handler.AdminCommandHandler; import net.sf.l2j.gameserver.handler.IAdminCommandHandler; +import net.sf.l2j.gameserver.handler.itemhandlers.BuffsCustom; import net.sf.l2j.gameserver.model.L2Object; import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.actor.L2Npc; @@ -90,6 +92,14 @@ ach.useAdminCommand(_command, activeChar); } + else if (_command.startsWith("buffCommand") && BuffsCustom.check(activeChar)) + { + String idBuff = _command.substring(12); + int parseIdBuff = Integer.parseInt(idBuff); + SkillTable.getInstance().getInfo(parseIdBuff, SkillTable.getInstance().getMaxLevel(parseIdBuff)).getEffects(activeChar, activeChar); + BuffsCustom.sendHtml(activeChar); + } + else if (_command.startsWith("player_help ")) { playerHelp(activeChar, _command.substring(12)); Index: java/net/sf/l2j/gameserver/handler/ItemHandler.java =================================================================== --- java/net/sf/l2j/gameserver/handler/ItemHandler.java (revision 10) +++ java/net/sf/l2j/gameserver/handler/ItemHandler.java (working copy) @@ -22,6 +22,7 @@ import net.sf.l2j.gameserver.handler.itemhandlers.BeastSpiritShot; import net.sf.l2j.gameserver.handler.itemhandlers.BlessedSpiritShot; import net.sf.l2j.gameserver.handler.itemhandlers.Book; +import net.sf.l2j.gameserver.handler.itemhandlers.BuffsCustom; import net.sf.l2j.gameserver.handler.itemhandlers.Calculator; import net.sf.l2j.gameserver.handler.itemhandlers.Elixir; import net.sf.l2j.gameserver.handler.itemhandlers.EnchantScrolls; @@ -60,6 +61,7 @@ registerItemHandler(new BeastSpice()); registerItemHandler(new BeastSpiritShot()); registerItemHandler(new BlessedSpiritShot()); + registerItemHandler(new BuffsCustom()); registerItemHandler(new Book()); registerItemHandler(new Calculator()); registerItemHandler(new Elixir()); Index: java/net/sf/l2j/gameserver/handler/itemhandlers/BuffsCustom.java =================================================================== --- java/net/sf/l2j/gameserver/handler/itemhandlers/BuffsCustom.java (revision 0) +++ java/net/sf/l2j/gameserver/handler/itemhandlers/BuffsCustom.java (working copy) @@ -0,0 +1,31 @@ +package net.sf.l2j.gameserver.handler.itemhandlers; + +import net.sf.l2j.gameserver.handler.IItemHandler; +import net.sf.l2j.gameserver.model.actor.L2Playable; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.model.item.instance.ItemInstance; +import net.sf.l2j.gameserver.model.zone.ZoneId; +import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; + +public class BuffsCustom implements IItemHandler +{ + @Override + public void useItem(L2Playable playable, ItemInstance item, boolean forceUse) + { + if (!(playable instanceof L2PcInstance)) + return; + + final L2PcInstance player = (L2PcInstance) playable; + + sendHtml(player); + } + public static boolean check(L2PcInstance p) + { + return p.isInsideZone(ZoneId.PEACE) && !p.isInCombat() && !p.isInOlympiadMode() && !p.isDead(); + } + public static void sendHtml(L2PcInstance player){ + NpcHtmlMessage html = new NpcHtmlMessage(0); + html.setFile("data/html/mods/buffs/buff.htm"); + player.sendPacket(html); + } +} Index: data/html/mods/buffs/buff.htm =================================================================== --- data/html/mods/buffs/buff.htm (revision 0) +++ data/html/mods/buffs/buff.htm (working copy) @@ -0,0 +1,79 @@ +<html> + <body> + <center> + <img src=L2UI.SquareGray width=300 height=1><br> + <img src=L2UI_CH3.herotower_deco width=256 height=32> + <font color=LEVEL>Buff Menu</font> + <table width=170> + <tr> + <td valign=top><img src=icon.skill1204 width=32 height=32 align=left></td> + <td><button value="Wind Walk" action="bypass -h buffCommand 1204" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1068 width=32 height=32 align=left></td> + <td><button value="Might" action="bypass -h buffCommand 1068" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1040 width=32 height=32 align=left></td> + <td><button value="Shield" action="bypass -h buffCommand 1040" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1035 width=32 height=32 align=left></td> + <td><button value="Mental Shield" action="bypass -h buffCommand 1035" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1045 width=32 height=32 align=left></td> + <td><button value="Blessed Body" action="bypass -h buffCommand 1045" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1048 width=32 height=32 align=left></td> + <td><button value="Blessed Soul" action="bypass -h buffCommand 1048" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1036 width=32 height=32 align=left></td> + <td><button value="Magic Barrier" action="bypass -h buffCommand 1036" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1078 width=32 height=32 align=left></td> + <td><button value="Concentration" action="bypass -h buffCommand 1078" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1062 width=32 height=32 align=left></td> + <td><button value="Berserker Spirit" action="bypass -h buffCommand 1062" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1268 width=32 height=32 align=left></td> + <td><button value="Vampiric Rage" action="bypass -h buffCommand 1268" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1085 width=32 height=32 align=left></td> + <td><button value="Acumen" action="bypass -h buffCommand 1085" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1059 width=32 height=32 align=left></td> + <td><button value="Empower" action="bypass -h buffCommand 1059" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1077 width=32 height=32 align=left></td> + <td><button value="Focus" action="bypass -h buffCommand 1077" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1242 width=32 height=32 align=left></td> + <td><button value="Death Whisper" action="bypass -h buffCommand 1242" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1086 width=32 height=32 align=left></td> + <td><button value="Haste" action="bypass -h buffCommand 1086" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1240 width=32 height=32 align=left></td> + <td><button value="Guidance" action="bypass -h buffCommand 1240" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1388 width=32 height=32 align=left></td> + <td><button value="Greater Might" action="bypass -h buffCommand 1388" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br> + <td valign=top><img src=icon.skill1389 width=32 height=32 align=left></td> + <td><button value="Greater Shield" action="bypass -h buffCommand 1389" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><br> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1087 width=32 height=32 align=left></td> + <td><button value="Agility" action="bypass -h buffCommand 1087" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1303 width=32 height=32 align=left></td> + <td><button value="Wild Magic" action="bypass -h buffCommand 1303" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr><tr><td></td></tr> + <tr> + <td valign=top><img src=icon.skill1259 width=32 height=32 align=left></td> + <td><button value="Resist Shock" action="bypass -h buffCommand 1259" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + <td valign=top><img src=icon.skill1397 width=32 height=32 align=left></td> + <td><button value="Clarity" action="bypass -h buffCommand 1397" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> + </tr> + </table> + <br><br> + <img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32 align=left align=left> + </center> + </body> +</html> Index: data/xml/items/5500-5599.xml =================================================================== --- data/xml/items/5500-5599.xml (revision 10) +++ data/xml/items/5500-5599.xml (working copy) @@ -633,7 +633,7 @@ <set name="weight" val="10" /> <set name="price" val="1" /> <set name="is_dropable" val="false" /> - <set name="handler" val="Book" /> + <set name="handler" val="BuffsCustom" /> </item> <item id="5589" type="EtcItem" name="Energy Stone"> <set name="default_action" val="skill_reduce" />
  20. https://www.youtube.com/results?search_query=l2+make+server .............
  21. I recommend him his is good dev fast and cheap.
  22. To help you how? to setup it for you? really? we send you videos + guides how to setup it what else do you want?
×
×
  • Create New...