Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Tera Shock Emu!!

Junior Spellweaver
Joined
Jun 25, 2016
Messages
129
Reaction score
45
Hi, the sub system you need implemented, isn't a simple one, it has to do with almost all other systems in the server.
Implementing the "visibillity system" its not a simple task, it requires in depth knowledge about all the other systems in the server.
Implementing only the part where you see each other is just the begining, then you need to implement the broadcasting feature so the server "can (neets implementation)" broadcast all the actions of each player, eg. moving, using skills, social, etc.
 
Junior Spellweaver
Joined
Nov 11, 2013
Messages
161
Reaction score
36
Hi, the sub system you need implemented, isn't a simple one, it has to do with almost all other systems in the server.
Implementing the "visibillity system" its not a simple task, it requires in depth knowledge about all the other systems in the server.
Implementing only the part where you see each other is just the begining, then you need to implement the broadcasting feature so the server "can (neets implementation)" broadcast all the actions of each player, eg. moving, using skills, social, etc.

Hey do you have this parser tools? to create new XML files for server? im currently need it to add new files with new classes!
 
Junior Spellweaver
Joined
Dec 5, 2015
Messages
181
Reaction score
145
Waiting for news, excited about this
Unfortunately, the TERA SHOCK project is quite dead... A lot of things are needed to continue the project and it will not worth to do it cause the version is very old.

But some projects are ongoing at this moment. I'm working on a 27.07 version. P5yl0 talked about making a new one too and i don't know on what is doing Narcis96. As far as i know, no new releases are coming soon :/
 
Junior Spellweaver
Joined
Jun 25, 2016
Messages
129
Reaction score
45
Hi guys,

I'll write here what I think the state of the TERA private server (emulator) dev community is.

So,
@Luciole working on a c# version, right?
@P5yl0 is working on a newer version of his emulator, if i it understand correctly
@wankers14 worked on a project, idk the state of hi's project atm.
@clofriwen tried to write a server in C, idk where he's at these days.
@narcis96 i'm working on my Skylake project , (as i have time)
@OtherTeraDevs sorry if a left anyone out.
@Anonymous <- there is an other guy i know who is working very hard for quite some time now on a private TERA server. I think he has the most potential, but idk about what hes gonna do with it when done (in terms of open source or eaven publishing a compiled verision.), we'll see.

In my endeavor with this project i've learned a lot about TERA and the requirements of making a private server (emulator) for it.
A LOT of data necessary for a successful server dev is missing from the TERA Client Data Center(DC).
This data is server side only and very hard to come by.
But luckily i've managed to gather most of the missing data , this data needs to be restored manually and that alone is a lot of work.
I have my own theories and ideas on the right architecture or language to write it with/in , but thats my opinion.

Atm i'm thinkg to make my src public, but idk...

Please let me know what's your thought on this subject.
@P5yl0 @Luciole @wankers14 @clofriwen @OtherTeraDevs

Thanks.

PS. Feel free to DM me for questions.
 
Last edited:
Newbie Spellweaver
Joined
Jan 20, 2015
Messages
19
Reaction score
1
I think that the best thing is to make a discord and unite us all to make a stable and updated server. without stamina with the latest costumes, pet frames and most importantly, classes. What is the most important. a server where you can play both offline and online with friends in hamachi for example. to make dungeons
It is very boring to create a server without brawlers without ninjas without everything current. I promise to participate in some way in a project of tera because I love this game, what I hate are the original servers of enmasse or gameforge that already their economy is broken and it is difficult to get the things you want. that's why I would rather have my own server and enjoy it alone or with friends on a hamachi-type lan network.
 
Junior Spellweaver
Joined
Nov 11, 2013
Messages
161
Reaction score
36

Enter Game work now with client 9203 but we still need find someone who have this parsers to get last Data files!
We have parser but this will keep much time to update!
 
Newbie Spellweaver
Joined
Jan 20, 2015
Messages
19
Reaction score
1
We can divide the work, people who program the skills. others who compile what is missing. others to draw and make new artistic designs. and 3d modeling to create new clothes. A single person programming this is going to last a long time.
 
Junior Spellweaver
Joined
Dec 5, 2015
Messages
181
Reaction score
145
@narcis96 I'm working on a 27.07 (Classic server EU version) based on the Java version. A lot of changes have been made, i'll make a changelog soon when i'll have time.

I'm agree with things there:
- Make a TERA dev discord (or whatever) with only dev people inside, for help, share.
- A lot of data is missing from the client (NPC spawns, loots, ...)
 
Junior Spellweaver
Joined
Jun 25, 2016
Messages
129
Reaction score
45
When i'm talking about missing data, i'm talking about missing files and missing fields.
For eg. this is the actual skill data structure, (server side form)



 
Last edited:
Junior Spellweaver
Joined
Jun 25, 2016
Messages
129
Reaction score
45
My version is still under heavy dev. Its not playable.
If there are any c++ devs who want to collab dm me.
 
Newbie Spellweaver
Joined
Oct 28, 2012
Messages
83
Reaction score
28
@narcis96 hi i'm still working on my project, updated regularly (dungeon, quest, guild, party, mail, broker, drops, and many other features i'm currently on skills)

some features :

Robyson - Tera Shock Emu!! - RaGEZONE Forums

Robyson - Tera Shock Emu!! - RaGEZONE Forums

Robyson - Tera Shock Emu!! - RaGEZONE Forums

Robyson - Tera Shock Emu!! - RaGEZONE Forums

Robyson - Tera Shock Emu!! - RaGEZONE Forums
 
Last edited:
Junior Spellweaver
Joined
Jun 25, 2016
Messages
129
Reaction score
45
Good Job!
I have 2 questions:
-What would the benchmarks say about your code, in terms of speed?
-How many concurrent players will your server be able to support before hitting server created lag?
 
Newbie Spellweaver
Joined
Oct 28, 2012
Messages
83
Reaction score
28
@narcis96
So I develop on aion for 10 years I am inspired, the code is in Java, mysql database, the data in XML I optimize the code for speed. Starting on a machine with 4 cores 4 threads and 16gb of ram a hundred people can all play in perfect stability. I coded the channel system in play to help a lot with the stability I had no choice but to add the channel system (a channel contains these own mobs, players, gathers, game object, drops, servant. ..) moreover the channel system is used for the dungeons on tera hence the importance of having it in place. Just for dungeons I have an instance engine to script them.

some exemple :

for mysql DAO

Code:
@Override
    public void createPlayer(Player player) {
        WorldPosition pos = player.getWorldPosition();
        PlayerAppearance app = player.getPlayerAppearance();
        PreparedStatement st = DB
                .prepareStatement("INSERT INTO players(`id`, `name`, race, gender, class, level, exp, rested_exp, max_rested_exp, hp, mp, creation_time, last_online, description, settings, map_id, x, y, z, h, channel," +
                        " account_id, awaken_level, laurel, achievment_points, fatigue, world_map, world_guard, arena_id, delete_time, appearance, appearance2, details, shape, ban, ban_time, new_player, change_name) " +
                        "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

        try {
            st.setInt(1, player.getId());
            st.setString(2, player.getName());
            st.setString(3, player.getRace().toString());
            st.setString(4, player.getGender().toString());
            st.setString(5, player.getPlayerClass().toString());
            st.setInt(6, player.getLevel());
            st.setLong(7, player.getExperience());
            st.setLong(8, player.getCurrentRestedExperience());
            st.setLong(9, player.getMaxRestedExperience());
            st.setLong(10, player.getCurrentStats().getHp());
            st.setLong(11, player.getCurrentStats().getMp());
            st.setTimestamp(12, player.getCreationTime());
            st.setTimestamp(13, player.getLastOnlineTime());
            st.setString(14, player.getDescription());
            st.setBytes(15, player.getUserSettings());
            st.setInt(16, pos.getMapId());
            st.setFloat(17, pos.getX());
            st.setFloat(18, pos.getY());
            st.setFloat(19, pos.getZ());
            st.setInt(20, pos.getHeading());
            st.setInt(21, pos.getChannelId());
            st.setInt(22, player.getAccount().getId());
            st.setInt(23, player.getAwakenLevel());
            st.setString(24, player.getLaurel().toString());
            st.setInt(25, player.getAchievmentPoints());
            st.setInt(26, player.getGatherCraftPoints());
            st.setInt(27, pos.getWorldMapWorldId());
            st.setInt(28, pos.getWorldMapGuardId());
            st.setInt(29, pos.getAreaNameId());
            st.setTimestamp(30, player.getDeletionTime());
            st.setBytes(31, app.getAppearance());
            st.setBytes(32, app.getAppearance2());
            st.setBytes(33, app.getDetails());
            st.setBytes(34, app.getShape());
            st.setBoolean(35, player.isBan());
            st.setTimestamp(36, player.getBanTime());
            st.setBoolean(37, player.isNewPlayer());
            st.setBoolean(38, player.isNamechange());
            st.executeUpdate();
        } catch (SQLException e) {
            log.error("Can't inser player", e);
        } finally {
            DB.close(st);
        }
    }

for xml data :

Code:
<item_template id="17" name="Boucle d'oreille de roue citadine personnelle" coolTime="0" category="EARRING" level="10" requiredLevel="10" rank="0" maxStack="1" rareGrade="3" requiredEquipmentType="NO_COMBAT" combatItemType="EQUIP_ACCESSORY" boundType="NONE" coolTimeGroup="0" linkCrestId="0" linkCustomizingId="0" linkEquipmentId="40113300" linkLookInfoId="0" linkPetAdultId="0" linkPetOrbId="0" linkSkillId="0" linkSocialId="0" linkEnchantId="0" mix_id="0" masterpieceRate="0.0" requiredClass="All" sellPrice="850" buyPrice="8500" slotLimit="0" sortingNumber="9" unidentifiedItemGrade="0" linkPassivityId="190612" linkMasterpiecePassivityId="0" action_value="0" expire_day="0">
    <item_stats balance="3" def="7" impact="0" maxAtk="0" minAtk="0" passivity="0" />
  </item_template>

for my channel :

Code:
package com.ryzen.game.model.channel;

import com.ryzen.game.instance.handlers.InstanceHandler;
import com.ryzen.game.model.AbstractTeraModel;
import com.ryzen.game.model.visible.creature.Creature;
import com.ryzen.game.model.visible.creature.Monster;
import com.ryzen.game.model.visible.door.Door;
import com.ryzen.game.model.visible.drop.DropItem;
import com.ryzen.game.model.visible.workobject.WorkObject;
import com.ryzen.game.model.visible.gather.Gather;
import com.ryzen.game.model.visible.player.Player;
import javolution.util.FastList;
import javolution.util.FastMap;

import java.util.List;
import java.util.Map;

public class Channel extends AbstractTeraModel {

    private List<Player> players = new FastList<>();
    private List<Monster> monsters = new FastList<Monster>();
    private  List<Creature> npcs = new FastList<Creature>();
    private List<Gather> gathers = new FastList<Gather>();
    private List<DropItem> drops = new FastList<DropItem>();
    private List<WorkObject> workObject = new FastList<WorkObject>();
    private List<Door> doors = new FastList<Door>();

    private int mapId;
    private boolean isDungeon;

    public Channel(final Integer id) {
        super(id);
    }

    public void removePlayer(final Player player) {
        this.players.remove(player);
    }

    public void addPlayer(final Player player) {
        this.players.add(player);
    }

    public void setPlayer(List<Player> pls) {
        this.players = pls;
    }

    public List<Player> getPlayers() {
        return players;
    }

    public void addMonster(final Monster monster) {
        this.monsters.add(monster);
    }

    public List<Monster> getMonsters() {
        return monsters;
    }

    public void setNpcs(List<Creature> npc) {
        this.npcs = npc;
    }

    public void addNpc(Creature npc) {
        this.npcs.add(npc);
    }

    public List<WorkObject> getWorkObects() {
        return workObject;
    }

    public void setWorkObjects(List<WorkObject> workObjects) {
        this.workObject = workObjects;
    }

    public void addWorkObject(WorkObject wo) {
        this.workObject.add(wo);
    }

    public List<Creature> getNpcs() {
        return npcs;
    }

    public void addGather(final Gather gather) {
        this.gathers.add(gather);
    }

    public List<Gather> getGathers() {
        return gathers;
    }

    public void setGathers(List<Gather> gather) {
        this.gathers = gather;
    }


    public List<DropItem> getDrops() {
        return drops;
    }

    public void setDrops(List<DropItem> drops) {
        this.drops = drops;
    }


    public void setMapId(int mapId) {
        this.mapId = mapId;
    }

    public int getMapId() {
        return mapId;
    }

    private InstanceHandler instanceHandler;

    public final InstanceHandler getInstanceHandler() {
        return instanceHandler;
    }

    public final void setInstanceHandler(InstanceHandler instanceHandler) {
        this.instanceHandler = instanceHandler;
    }

    public List<Door> getDoors() {
        return doors;
    }

    public void setDoors(List<Door> doors) {
        this.doors = doors;
    }

    public void addDoor(Door door) {
        this.doors.add(door);
    }

    public boolean isDungeon() {
        return isDungeon;
    }

    public void setDungeon(boolean dungeon) {
        isDungeon = dungeon;
    }
}

Best regards
 
Last edited:
Junior Spellweaver
Joined
Jun 25, 2016
Messages
129
Reaction score
45
I see. Great job!
Have you started on the skill system for TERA?
If so, how far have you gone?
 
Back
Top