Register for your free account! | Forgot your password?

You last visited: Today at 09:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



P4Ns Dev Log

Discussion on P4Ns Dev Log within the CO2 Private Server forum part of the Conquer Online 2 category.

Reply
 
Old   #1
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
P4Ns Dev Log

Rather than spam my advert thread with unrelated dev work I figured I'd go ahead and make a thread documenting what I'm working on and discussing some of it with others.

FAQ/Stuff I don't wanna repeat answers to

Q: What about Apex/Triumph?!?
A: They are continuing to be updated and developed. They will remain classic, none of the content in this thread is directly related to them (unless stated otherwise)

Q: Why do you work on so many different projects?
A: Short answer: I get bored. Longer answer: This is currently my job. I know that sounds weird and stupid and maybe it is but it's the case currently. I'm not delusional enough to think classic conquer alone will be enough in the long term so I'm working on expanding my interests and developing new stuff for future use. Some will be useful and some wont be.

Q: Where download link!?!
A: Fuck you



Week of Sept 20th


--Clientless Chat Bot--
I've been constantly working on trying to re-structure player support and find ways to limit the time I spend daily answering the same questions over and over. Anywhere between 2-6 hours of my day is spent answering really basic player support questions and it can be frustrating and delays more pressing work.

This resulted in three main things:
#1: Revamping much of the mod structure of my server (work in progress lol)
#2: Hiring a community manager to act as a filter between me and mods/players so I'm dealing with the real issues not the "how get cp" style questions
#3: Writing my own clientless bot to function as a easier to use chat service.

1-2 are super boring so yah. The clientless bot lets me get audio notifications when someone whispers me as well as notification if the bots ping goes beyond a certain point (which could indicate anything from an attack to a server issue to my home net fucking up)

To me it was mostly about getting notified when a new chat window was opened with me as well as alerting me when they had responded. I tend to only tab into the game every hour or two which leaves most players not getting a reply from me (they've either found the answer or are offline)



So that project is done! Might be ugly as hell but it works for what I need. Was a fun distraction and really increased my own productivity a lot so I consider that a success

--Client Protection--

Not my own work but Freszone was able to finish up a new update for our client protection so since then I've been working on new background implementations for item/character tracking and future security features to let players lock accounts to specific machines.

Next big thing really boils down to how to keep adding new cosmetics and fun items. Current paths we are investigating are....

-Custom ItemInfo field which overrides the look of the item in game. This would let us basically code our own version of the dragon soul/artifact system tq added and allow us to dynamically assign custom looks to player weapons. This is really needed vs duplicating every item in the game a million times for each look and so is the ideal way for us to add weapon skins.

-DxOverlays to embed web clients into the game. This would be for things like new interface windows, mini games and even more utility oriented stuff like embedding our live support system into the client itself.

That's all in research stage though so nothing cool to show on that front (yet)

--Bosses!--

I converted these a while back but as we had not released a new event in a couple weeks we decided to go ahead and add our first world boss.



Pretty basic logic but was fun to tweak and test locally.

Those traps explode after 2 seconds dealing percentage max life and as the boss gets lower health it drops more and more traps.
It also has a true damage and aoe magic skill which it uses randomly to keep players at least somewhat on their toes.

Ideally the 2nd boss will be a bit more mechanically intense (more interesting from a coding/gameplay standpoint) but was still nice to see a world boss working properly in older clients that didn't result in just 'tank n' spank' style gameplay.

--House?--

Unrelated but dev was somewhat limited this week as me and my partner bought a house. Very, very busy between arranging showings, counter offers, financing, property inspection, etc. We move on October 30th yay no more renting!

Week of Sept 28th

The morph suit concept is waiting on art (done as of today) and the IPad giveaway is wrapping up in a few days so I didn't want to launch a bunch of updates right in the middle of that so I filled my time with working more on new source (yay!)


Got a lot of work done on it in the past few days (week still going of course) but don't wanna get too deep into it as I know next week I have a metric ton of stuff I wanna work on for apex/triumph.

Been a lot of fun learning how newer conquer works (not something I ever played) and seeing the gem in what TQ designed. When I see how the systems SHOULD be coded vs how they were done in a lot of *ahem* less than ideal sources I can see how things could be rebalanced and tweaked to make for some really interesting gameplay. I still prefer classic but it's super exciting having all these new tools at my fingertips to create new content with.

-Finished BattlePower (calculations, hitrates, damage mods)
-Finished Refineries (applying, replacing, expiring, activation, combat clacs)
-Finished Monks
-Finished warriors
-Finished trojans
-Finished fires
-Finished ninjas
-Finished archers
-Finished waters
-Finished weapon accessories (activation, display, expiration, combat stats/effects)
-Finished artifacts (activation, display, expiration, combat stats/effects)

UPDATED: Finished all skills except transforms and summons (those are not needed to test pvp calculations) and finished up dragon souls/artifacts fully. Next step will be adding a few more npcs and scripts and putting this online for pvp play testing to ensure that we work out any kinks in the combat logic.

Images


More Dev Discussion To Follow!
pro4never is offline  
Thanks
6 Users
Old 10/01/2015, 04:33   #2
 
Spirited's Avatar
 
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
I actually don't mind your posts spamming your advertisement thread. They're fun to read, and you deserve for that thread to be kept up in that section for as long as your server and development are relevant to this community. Also, we really need servers like yours almost pinned to the section. I'm really not into seeing these other half-assed servers being posted to begin with, but seeing yours reappear at the top helps.
Spirited is offline  
Old 10/01/2015, 05:20   #3
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
Quote:
Originally Posted by Spirited View Post
I actually don't mind your posts spamming your advertisement thread. They're fun to read, and you deserve for that thread to be kept up in that section for as long as your server and development are relevant to this community. Also, we really need servers like yours almost pinned to the section. I'm really not into seeing these other half-assed servers being posted to begin with, but seeing yours reappear at the top helps.
Thanks for that

I feel there's prob enough for me to do a bit of both but doing things like posting in it about some unrelated admin tool or progress on a unrelated source is a bit counter productive so I figure why not both

PS: Archer damage and skills all finished now. Just need to do star arrow and confirm that Fly is ignoring the skills it should and archers will be finished leaving only waters. YAY!
pro4never is offline  
Thanks
1 User
Old 10/03/2015, 22:56   #4
 
mohammedqq1's Avatar
 
elite*gold: 0
Join Date: Jun 2010
Posts: 64
Received Thanks: 2
goodluck
mohammedqq1 is offline  
Old 10/03/2015, 23:36   #5
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
Ok! That stage of development is over. Time to get a handful of ppl on to test all the combat systems so that can be finetuned while I work on the rest of the actual content (there's nothing to do on the server besides fight yet lol)


All class skills finished, refineries, artifacts, etc all done.

Finished up the item scripting system and created some example usages (potions and stuff)

Next up I'm going to be writing in all the situation equipment checks to avoid any weirdness with that and a npc to let players generate souls/refineries to test various combinations so they can stress test the combat system properly.

After that my next job will be finishing necessary side systems. EG: trading, player shops and guilds (that way the ppl who are testing the pvp content can organize better) and then after that I'll swing back around to finishing monsters (balancing droprates, coding dura mobs, skill uses, etc. Right now they are pretty basic)

If anyone wants to do some testing lemme know and we'll get you on the test server

<Edit>

I'm sure it's not new to anyone but me but was fun testing out all the different interface windows and damage types added in newer clients. Little things like showing how much DMG of an attack was blocked, letting ppl try on garments before they buy them, etc.


pro4never is offline  
Old 10/07/2015, 19:18   #6
 
elite*gold: 0
Join Date: Jul 2014
Posts: 402
Received Thanks: 540
Quote:
Originally Posted by Xio. View Post
1: I couldnt figure out how to hook Dx8.1 (9-11 was easy, 8.1 has literally no info available anywhere)
Best Coder 2014 is offline  
Thanks
4 Users
Old 10/07/2015, 19:24   #7
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
Quote:
Originally Posted by Xio. View Post


I called it Conquer AR (Augmented Reality)... its reading the memory of the client and displays a bunch of things. It also connects to the Gameserver and can, for example plot a path on the minimap, send Windows 10 notifications and display chat in a seperate area on the right.

I chose that for two reasons:

1: I couldnt figure out how to hook Dx8.1 (9-11 was easy, 8.1 has literally no info available anywhere)
2: The window is limited to 1024x768 on the version I target, so overlay's wouldn't be that great anyway.


Maybe that gives you some ideas :P
Nice job

Right now though the main focus is overriding how the client displays things.

A core example would be to add a new field to the item information packet to control 'item look' separate from 'item stats'. The idea behind it is that you would use that extra field to override how the client draws the item while still having it list the original item in terms of all stat calculations and skill availability.

EG: Show you as using a lightsaber but when you mouse over the item it says BuriedBlade and still has the proper stats/lets you select fb skill and use it.

That's all up to Freszone though as he handles the client integration and protection side of things.



<Edit>


Gearing up for Halloween event.



Really happy with the work HallOfPains did for me creating our Outbreak/Zombie suit. Going to be using it for a number of things: halloween infection tournament, standard looking garment (no glow) and a donator garment where you have the glow + infect players you hit for 30 seconds so they look like a zombie as well.

Next up working on some trick or treat style events and getting them ready to add (planning to launch a week before halloween... I move on the 30th so everything needs to be in place well in advance).



In terms of new source got a TON of stuff done yesterday+today. I'm finding myself not so much burned out but not too motivated as the systems I have left to write are ones I'm not familiar with or are relatively large.

EG: Clans/guilds/subclasses/arena qualifier.

Should be pretty interesting getting them all in place just need to pick one and dive right in so I'm hooked. They can be a bit intimidating to start from 0 on. Trying to avoid copying any code from other servers as I write this except as reference to packet structures. I don't want it to end up just being "Redux V3" but rather something actually structured properly that wont be a pain to edit and update in the future.
pro4never is offline  
Old 10/09/2015, 00:55   #8
 
elite*gold: 0
Join Date: Sep 2014
Posts: 189
Received Thanks: 48
Quote:
Originally Posted by pro4never View Post
Trying to avoid copying any code from other servers as I write this except as reference to packet structures. I don't want it to end up just being "Redux V3" but rather something actually structured properly that wont be a pain to edit and update in the future.
So i'm wondering, are your current servers Redux based?
iBotx is offline  
Old 10/09/2015, 03:21   #9
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
Quote:
Originally Posted by iBotx View Post
So i'm wondering, are your current servers Redux based?
Yes apex and triumph are based on the public version of Redux I have re writen a lot of it but in the long term i don't want to stick with that source I want to work on something fresh

<edit>

having a few issues with custom pumpkin holiday weapon. Works fine for offhand but main hand shows wrong position...

Still looks pretty cool though!

pro4never is offline  
Old 10/23/2015, 03:45   #10
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
Lots and lots of stuff been getting done but none of it all that flashy or interesting (from a dev standpoint it's all pretty much grunt work)

Halloween event launched!

Gotta keep things fresh so our halloween items are live over on apex/triumph thanks to HallOfPains for his graphics work.






Finished up version 1.0 of the guild system for the new source. Not doing any of the guild level/arsenal system just yet. Main point is confirming that all the core features work properly. Joining, leaving, promoting, demoting, allying, enemying, etcetc.



Finished up version 1.0 of the Qualifier system. I still need to do the spectating portion of it, the daily limits, the honor rewards but there are BOUND to be issues in the core system so we want that tested fully first.



Nobility system version 1.0 is finished. I want to test with a full list so I can make sure pages are working properly but same as other stuff... work out any kinks first through testing.



Added TG
Added Horse Breeding
Added Horse Armors (Subclass packet documented, not the full system though)
Added met upgrade (tc)
Added db upgrade (tc)
Added all Bird Island spawns
Fixed Bird Island portals
Added Boss HP bar support
Added Boss Skill packet
Supporting Boss Skills


Sooo... my next goal is finishing up the monster exterminator quests (all the packets, db and stuff is in place, just lots of npc scripts to write and test) and then focus on starting npcs and quests so we can keep testers online for longer (they tend to log in, pk eachother a few times then log out)
pro4never is offline  
Old 11/05/2015, 17:57   #11
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
OK! Finally got into my new house so its time to dive back into work.

Now that the Halloween event is over and I've finished up most of the core systems for the new source, my next job will be re-structuring the old source. I'll be starting with ripping out the old guild system that has been nothing but trouble and replacing it with my significantly more 'elegant' code from the new source. Basically I'm sick of dealing with little patchwork fixes every time the guild system starts acting up so it's time to rip it out and start over.

The other major job right now is working on finally updating our city war system to something a bit more interesting. The existing wars are pretty damn boring and dont have much we can change to make them more interesting.

Our solution is to switch city wars so they all operate on one large single map (stealing TQs CTF map) and we can then adjust match balance through things like buffs which spawn around the map.

Each castle represents one city and you can claim control of that city by attacking the pole inside its castle. The guild which deals the most damage to the pole claims the pole just like guild war. Unlike guild war though the winner is determined by the guild which holds each city the longest during the event.

The score in the top right shows your guild's score for the city which you are currently closest to. This avoids clutter by only showing relevant info that you actually care about. It will also flash on the mini map any time a city you currently have control over is under attack to make things less text based and allows for faster and easier teamwork.

The biggest thing from our standpoint is the ability to balance cities. If it's too easy to defend Bird Island (high demand city) then we add buffs which spawn outside the castle which give attack or defense boosts. This makes sieging the castle easier AND forces defenders to think about if they want to turtle or go out and deny those buffs by taking them themselves.

To start we're placing 4 shrines on the map (one on each bridge) which grant 30 seconds of cyclone when you walk over them. They are single use so only 1 person can claim each shrine. They repsawn every 30 seconds meaning each shrine is either in use or on the map at any given time.

We plan to follow this up with other buffs such as temporary defense boosts, temporary attack boosts, divine hare style transformations for fast movement around the map.




Another one of the main concerns was that it's a large map so organizing things can get frustrating. The way we've written it is that when you revive on the map or initially teleport to it, it will first try to respawn you at a castle your guild controls currently (you wont spawn next to pole but you will be within 2-3 screens of it so you can easily group up with your guildies!) and if you dont have a castle controlled then you will spawn at a random location around the map.

Basically we want controlling a single castle to feel powerful but controlling multiple castles to be quite hard to do (your respawns are then split between the castles you control) and we wanted to avoid having too much downtime. Guild war is fun and all but if you're on the losing side being stuck in GW jail for 10-20 minutes is not exactly thrilling. We want this event to be about fast paced constant action (the shrines and castles pushing people into small contained areas to fight so the map feels less giant)





As a rapid topic shift we're also finishing up the new website (this is intended for the new server coming in the next few months but may also end up being used for apex/triumph.

Big thanks to Psycho for his work on it.
pro4never is offline  
Thanks
2 Users
Old 11/09/2015, 20:20   #12
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
So I know this wont interest most people but wanted to post a bit about some of the things I really like about this new source as well as some minor rants about 'classic' styles of coding we tend to see in public sources (my own are just as bad so don't feel like I'm shading anyone in particular)

#1: If you're going to use code more than once it should probably be a function. If you find yourself re-writing the same string of logic over and over then you're doing something wrong...

For example health potions contain the amount of health they should heal right in their itemtype data. Here's how I have health potions working on the new source.

Code:
using System;
using Redux.Objects;
using Redux.Network;
using Redux.Core;

namespace Redux.Scripts.Items.HealthPotions
{
    public class HealthPotion : Item
    {
        public override void OnClick()
        {
            //Can Potion, Not on potion cooldown, have life to heal
            if (Player.Life < Player.MaxLife&& !Player.Statuses.IsAttached(StatusType.NoPotion) && !Player.Statuses.IsAttached(StatusType.PoisonStar))
            {
                Player.Statuses.Attach(StatusType.NoPotion, 0, DateTime.UtcNow.AddMilliseconds(500));
                Player.Life = Math.Min(Player.Life + ItemType.Health, Player.MaxLife);
                Player.Update(UpdateType.Life);
                Player.Inventory.Delete(this);
            }
        }
    }
}

There's 3 conditions (as the server exists currently) where a potion could fail... you already have full health, you have a 'NoPotion' status activated (poison star) or else you're spamming potions too quickly.

I could have copy pasted that code in each single item script and it would have worked but that's messy. What if I change something in the future? Lets say maps where potions are not allowed to be used. What about changing potion cooldowns? Change it all in one file. Easily updated, easily searchable.

#2: Folders, naming and searching.

This is a minor complaint but it gets annoying REALLY quickly when you're looking for a specific script. If you can structure your code so that it will always return what you're looking for with a single search that's a huge benefit. The same is true by breaking things into their own folders and .cs files to improve readability.

You could be writing the source and think you'll know where everything is but what happens a few years down the road when you need to find something or someone else goes to use your source?



No, it's not perfect but what do you do when you're trying to find a specific script?

You search based on name
You search based on id
You search based on map
You search based on functionality (if it has generic functionality such as monster hunter npcs, warehouses, etc)

All of these are located both in the naming convention/folder structure as well as inside the CS file itself (I'm very guilty of not making enough comments but that'd be another way to improve searchability in the future)

If I want to edit for example how the Bird Island Captain functions I'm going to go to scripts>npcs>birdisland and look for him based on name or id OR I'm going to search the npc ID OR I'm going to search the npc's name. No matter which route I go I should find the npc on my first search.

Assuming proper inheritance and abstraction the content of that script should also be very small and readable (rather than duplicating the same damn code and checks over and over) to make sure I can find what I need to edit and make my changes super easily.




Anyways... I KNOW it's basic stuff and I know the new source isn't anything that impressive but it's still one of those things that I feel is worth repeating for those just learning programming or looking for ways to improve what they are already doing.



<edit>

Here's a quick example of how the monster hunter system works currently.

Note: The code is a bit mangled due to variable NPC responses based on level. Once generated and sent to the client the possible responses are stored to handle any returned input (no spoofing linkbacks to access options the server hasn't already offered you, no limitations on maximum # of linkbacks). In this specific application the code gets a bit messy as a result but it's still better than the monstrosity of code that makes up my MonsterHunter quest on apex/triumph lol!


Code:
using System;
using System.Collections.Generic;
using System.Linq;
using Redux.Objects;
using Redux.Core;
using Redux.Managers;

namespace Redux.Scripts.Npcs.ApeCity
{
    [Npc(8709)]
    public class AcCaptain : CityCaptain
    {
        public override void OnClick()
        {
            TaskManager task;
            NpcAvatar = 10;
            if (Player.Tasks.TryGetValue(TaskType.MonsterHunter, out task))
            {
                if (task.Count < task.CountReq)
                    Dialog("You haven't yet completed your task... Are you positive you'd like to abandon it entirely?",
                        Option("Yes, Cancel it.", DeleteTask),
                        Option("No, I'll continue.", None));
                else
                    Dialog("You seem to have finished your task! Would you like to claim your rewards now?",
                        Option("Yes please!", () => ClaimRewards(300)),
                        Option("Not yet...", None));
            }
            else if (Player.Level >= 70)
                Dialog("You're a bit too powerful for the monsters near here to be any real challenge. Why don't you look for jobs in other cities?",
                    Option("I shall.", None));
            else
            {

                var options = new List<NpcOption>();
                if (Player.Level < 55)
                    options.Add(Option("Macaques", () => AcceptMonsterHunter(10, 200)));
                if (Player.Level < 60)
                    options.Add(Option("GiantApes", () => AcceptMonsterHunter(11, 250)));
                if (Player.Level < 65)
                    options.Add(Option("ThunderApes", () => AcceptMonsterHunter(12, 300)));
                if (Player.Level < 70)
                    options.Add(Option("Snakemen", () => AcceptMonsterHunter(13, 300)));
                options.Add((Option("Nevermind...", None)));
                Dialog("What monster will you help us exterminate?", options.ToArray());
            }
        }

        protected override void ClaimRewards(int time)
        {
            //award items specific to this city
            base.ClaimRewards(time);
        }
    }
}
pro4never is offline  
Thanks
2 Users
Old 11/19/2015, 21:40   #13
 
elite*gold: 0
Join Date: May 2006
Posts: 39
Received Thanks: 2
As a junior developer , I am enjoying this, keep up the good work and have fun with the classic , I myself and trying for a classic/newer co. Thanks again for sharing
lucksan is offline  
Old 11/24/2015, 20:49   #14
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
Finished up a BUNCH of stuff on the new source. For those looking to test it out, we do have a public beta open (site is temporary, will replace with the new one in the coming weeks)





In addition to working on the new source more... I got talking with someone about unity so started messing around in it. For the lulz I added C3 support to it and am able to load conquer models in. Next step would be animating but #DoNotWantMath



The process was actually pretty simple. Just loaded the file using System.IO and then generated a new Mesh same as I did in XNA. Only real issue was for some reason the textures were mirrored vertically so I struggled with that for a while. I'm guessing it's a render setting but w/e, adding a custom texture offset resolved it.

<edit>

While yesterday was spent wasting time in unity, today is diving back into the new source and getting it whipped into shape. Now that the majority of major features are implemented and roughly tested I want to start working on the player experience. This includes things like.... telling people where the fuck to go


The majority of logic in this case is handled through actions which can be added or removed as needed. For example I want to remind players to go get promoted when they reach level 15 but I don't want to keep running that check when it's no longer relevant.

Code:
 Game.Heroes.OnConnect += (c) =>
            {
                c.OnLevelChange += (level) => LevelChange(c, level);
                if (c.ProfessionLevel == 0)
                {
                    promotionReminder = (level) => PromotionPrompt(c, level);
                    c.OnLevelChange += promotionReminder;
                }
            };
I start by registering a new event to be triggered when a player connects. In that action I not only want to trigger LevelChange but if they are currently NOT promoted (fresh character, non reborn) then I want to attach a promotion reminder event.

The advantage to this is that the event is only attached when they first login and only if they are profession level 0. Any time you level up while this is attached it will trigger the reminder check. If the condition is passed then it detaches the action and you continue normally without having to worry about it being re-triggered or any overhead because well... the code no longer is attached in any way.



I'm then using the popups ingame to send these reminders and the player replies are linked back to a "static script". While this is a touch messy it's just a way of saying "the player said yes to this popup box. Trigger the relevant pathfinding logic".

As a result I then simply check that they are on the twin city map and tell the client to pathfind to the promotion map.



I do the same thing with the monster hunter quest matching their current map/quest with the location of the npc they need to return it to.


While it's a bit of extra work (it's really no more complicated than any other approach, just more complete) it does help shield the player from confusion. We've found with the last project that people who get lost or unsure of what to do next tend to quit pretty quickly or spend all their time trying to contact gm/mods for help.

By sending these reminders, handling client pathfinding and other simple changes the goal is to be un-intrusive to knowledgeable players while giving players who might be new to conquer the ability to find their way around.



pro4never is offline  
Old 12/21/2015, 00:48   #15
 
elite*gold: 21
Join Date: Jul 2005
Posts: 9,193
Received Thanks: 5,376
Been a busy week. Trying to nail down lots and lots of gameplay elements to get ready for our open beta... that's been counter balanced by the need to maintain what I already have going... as a result less gets done than I would like.


Lots and lots of christmas event stuff I already posted about in my server's advertisement thead so I wont go into that.


Buff Icons
Figured out these stupidass icons... It's infuriating how TQ handles most of this stuff

EG: "lets do an update type that ONLY works for azure shield and shield block... no the update type shouldn't reflect what the effect is... ooh and one of them should auto expire and one shouldn't... ok cool now lets do a new packet structure to fill the exact same purpose for a different skill... ooh and while we're at it fuck common sense and lets do ANOTHER subtype that you have to use for soul shackle!"

I'm bitter... so very very bitter.





Lottery/Economy

Being it's not a classic server everyone expects lottery to exist.. there's nothing wrong with the concept of lotto but what it means for the games is that by definition it's pay to win (buy cps from website, use to gamble and have great gear and dominate everyone else)


It could be very tempting for me to see $$'s make lotto similar to TQs (maybe upping to costs based on server rates) but I find that pretty compelling from a gameplay standpoint but more importantly terrifying for game balance. If CPs can be used to just 'make gear' you're just doing what TQ does and saying "yes you can pay us not to play the game".

Instead I'm trying a different route. Lottery CANNOT be played with CPs. Instead there are Small and Large lottery tickets which can be earned through events, quests, donations or other methods. The prizes for each are completely separate. This means that I can hammer out a 'value' per small ticket and then use that to calculate how easy each should be to obtain and then do the same thing for large tickets.

There's nothing inherently wrong with having a 'mystery box' style reward system but when you can just spam open boxes with no limitations using ingame currency it makes it the primary thing you have to balance your economy around...



Obviously rates/rewards aren't all in place but the system is in place including things like play limits per day (including bonus plays for vips) and runtime editing of prize lists so I can quickly debug rates on the fly (although in any actual final testing I'd be automating it to print out a report of like a million plays to get a good overview of rewards)


Traps

Next up was traps... traps are boring but can create some cool gameplay elements. My trap system is designed with the ability to fire actions based on timeouts and player contact with dynamic trap radius and all that jazz. Nothing that interesting but still will be important when I dive into the rest of the server events, bosses and quests.

Right now they are just used for same as they were on TQ... squamas and for multi level mine caves.


Here's an example trap.

Code:
            var trap = new Trap(100000, player.Map, player.Position, 11, 1, DateTime.UtcNow.AddSeconds(10));

            trap.OnContact = (Hero hero) =>
            {
                hero.SendMessage("You touched it!");
            };

            trap.OnExpire = () =>
                {
                    foreach (var hero in trap.Map.Heroes)
                        hero.SendMessage("TRAP EXPIRED");
                };

I'll probably end up streamlining it a bit but it fits my needs quite well. I do a lot of stuff on apex right now where you spawn like a buff on the map and pick it up by walking over it so being able to do that here easier is a huge blessing.

Note: Removal is all handled by the Trap class itself. No adding it to special threads or collections for removal. The server is written with the ability to execute code after a delay with various thread priority (or assigning it to a specific thread). In this case that is only triggered if the expiresAt is > DateTime.MinValue that way if you don't need the object to be removed until contact or ever it's not wasting resources constantly checking it.

Qualifier/Spectating
I wanted to be able to say I was "DONE" with the qualifier... sadly the only packet structure examples I have are the trashy egy copypaste sources so it's been a real hassle...

Match group lists working properly as they should (super easy)


Spectate functionality all working as it should (super easy)


Spectate gui... not so much. Still fighting with the packet structure to reliably display how many people are watching and to correctly identify who is on what team... I'm leaving it for now while I work on more important stuff. Either way spectate IS working it's just lacking cheer functionality and a few bells and whistles.



Reborn/2nd Reborn

I'm using a different method than I've seen in other sources and it's making me SUPER happy right now. We'll see how well it performs with reincarnation but it's so much simpler than most. Instead of calculating my full reborn path and seeing what skills I should gain/lose I have a dictionary<ProfessionType, List<short>>

The dictionary contains a list of skills each class CANNOT have. When you're reborning you simply loop through all skill IDs in that collection for the class you are reborning TO and remove any you have.

EG: No trojan can ever have invisibility, scatter, intensify, superman, etcetcetc.


Once that's done all you have to do is add any pure skills and you're golden! I'm having ppl go through and test diff paths but it makes it really nice and easy to track what skills should be kept/lost and to correct any issues. Saves re-writing all the same code over and over for each reborn/reincarnation.
pro4never is offline  
Thanks
1 User
Reply




All times are GMT +2. The time now is 09:40.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.