May 22, 2024, 03:18:39 am
Username:

Password:

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Slowhand

Pages: 1 ... 25 26 [27] 28 29
391
dude, why you want to change everything in this game? IMO almost all features work properly and game is really balanced and you want to make everything upside down don't get me wrong - that is good that you are thinking about new ideas but you must understand that those are really major changes
The answer is simple. If you check any MMO, who has classes in it, you will see that that there is variety in them, even if one or two seem OP from time to time, patch to patch. Here, in Fallout, we don't have classes, we can combine all the attributes, perks we want, yet, in theory there is room for a lot of variety. In practice that never happens, there are 3-4 meta's and that's it. You can't change the people, but you can change the system for more variety, having more builds where none of them is too strong, because circulary they beat each other.

if finesse would have even less damage then is giving now it would be no damage
I think you got me wrong here, bc my suggestion only included that the bonus of 10% crit percentage is changed for more cripling bonus, like +X bonus at roll for effects. The 30% DR remains the same.

Quote
im wondering if they even played the game , kek . finesse is just doing what it should i dont understand your suggestion anyway ... u already get better effects with it right now
And like Frankenstone said - have you ever played both sniper types? Or is this suggestion based just on wiki?

And like Frankenstein said, you already get better effects with finesse right now. Look at his mentality. You get better effects with it, that's what matters to him, not that you get diversive effects, fill crippling or some other role (in other cases) better. You get more OP from a skill or not. That is what I don't like and want to change.

P.S.: I haven't played finesse sniper. I had teamates who did. Nothing was different, you don't even see that 10% bonus, random dimished it. The hidden bonus, dunno, but that wasn't needed for arm cripling, (as every sniper having low ST) which was best target vs enemy snipers. At least that was my experience. But please, tell me about both sniper types, don't hold back, I could use the info for better suggestions ;)

392
Toxic Caves / Re: Basic Development Tutorial for FOnline: Reloaded
« on: August 08, 2015, 08:45:32 am »
Well, if you haven't tried to dev yet at all, and would take the time, please follow these steps one by one and tell me when somewhere you had difficulty, or got stuck, so I can correct them.

393
10. Making a location spawn (for a daily/weekly quest) repeatable with timer.

There will be no Step by Step for this one, as all the elements have been shown previously, I will just explain and link the script. You need to add the source to the same script file as the one we used previously, because it uses some of it's functions. Remove the lines starting with player.Say.. when you put this to production code, they were just used for debug, and for you to see what is happening.

  • r_GetQuest(..)
    • This function should be called from the dialog, when the NPC gives the quest.
    • If the timed even is available, then it will summon the location, but this is a precation only, the dialog branching should decide this.
    • Try and test this, if the timer is not up, it should say in system window that the quest is not available yet.
  • e_ResetSpawnLocTimer(..)
    • This is an even function which will be called from r_getQuest(..) and is responsible for reseting the timer.
    • All this function does, is to call the setTimedEventAvailable(..) function to allow the retaking of the quest.
  • setTimedEventAvailable(..)
    • Is used to set the Unique variable for this quest timer.
  • isTimedEventAvailable(..)
    • Check the value of the timer variable.

There are many ways to do this, this is only one presentation that works, for experimentations.

Code: [Select]
// Demo for Timed Event used for repeatable quests.
void r_GetQuest(Critter& player, Critter@ npc)
{
player.Say(SAY_NETMSG, "r_GetQuest() called");
if (isTimedEventAvailable(player, npc))
{
uint[] values = {player.Id, npc.Id};
setTimedEventAvailable(player, npc, false);
CreateTimeEvent(AFTER(REAL_SECOND(10)), "e_ResetSpawnLocTimer", values, false);
r_SpawnLoc(player, npc);
}
else
{
player.Say(SAY_NETMSG, "r_GetQuest() - Quest not available yet.");
}
}

// S
uint e_ResetSpawnLocTimer(array<uint>@ values)
{
Critter@ player = GetCritter(values[0]);
player.Say(SAY_NETMSG, "e_ResetSpawnLocTimer()");
Critter@ npc = GetCritter(values[1]);
setTimedEventAvailable(player, npc, true);
return 0;
}

bool setTimedEventAvailable(Critter& player, Critter@ npc, bool isReady)
{
player.Say(SAY_NETMSG, "setTimedEventAvailable()");
if(!valid(player) || !valid(npc))
return false;
GameVar@ var = GetUnicumVar(UVAR_q_timedEventAvailable, npc.Id, player.Id);
if (!valid(var))
{
return false;
}
if (isReady)
{
var = 1;
player.Say(SAY_NETMSG, "setTimedEventAvailable() - 1");
}
else
{
player.Say(SAY_NETMSG, "setTimedEventAvailable() - 0");
var = 0;
}
return true;
}


bool isTimedEventAvailable(Critter& player, Critter@ npc)
{
player.Say(SAY_NETMSG, "isTimedEventAvailable()");
        if(!valid(player) || !valid(npc))
                return false;
GameVar@ var = GetUnicumVar(UVAR_q_timedEventAvailable, npc.Id, player.Id);
if (!valid(var))
{
return false;
}
if (var == 0)
{
player.Say(SAY_NETMSG, "isTimedEventAvailable() == 0");
return false;
}
else
{
player.Say(SAY_NETMSG, "isTimedEventAvailable() == 1");
return true;
}
}

394
I did not mean the crit roll, but the Cripling roll bonus. But anyways, doesn't matter, you got the idea right, the details can/need to be polished out anyways.

395
Sorry, the title was confusing. I did not mean to make sniper work at all, I ment that snipers could specialize in disabling or in higher damage, meaning more sniper builds roles.

396
Toxic Caves / 9. Creating new quest location from dialog.
« on: August 07, 2015, 02:24:18 pm »
9. Creating new quest location from dialog.

After receiving a quest from an NPC, the NPC might in some cases mark a location on the player's map. This location will be known only to the player, and a red dot on the world map will appear. Once the player finished the quest (talks with the questgiver and succedes), the location will disappear.

Step by step:

  • Create map data and location:
    • Open World Editor
    • Press Ctrl+M (Tools->Mapdata Editor) and Add New Map:
      • Set a name for the map data (I used: q_generated)
      • Set a unique ID (130).
      • Set the filename of the map you want to use. You probably need to make a new map with Mapper for this purpose, but for demonstration existing ones can be used.(q_tut1_out)
      • Save.
    • Press Ctrl+L (Tools->Location Editor) and Add New Location:
      • Set a name for the location. (q_tut1_loc)
      • Set a unique Id. (91)
      • Add the previously made mapdata to it. (q_generated)
      • Save.
    • Save the World and exit.
  • Create the script:
    • Create a file with the contents given below in the source tags and save it.(Server\scripts\quest_generateMap.fos)
    • Open "Server\scripts\scripts.cfg" with notepad, find the "quest-specific" area, and add an extra line to include the new script in the build/bind process. ("@ server module quest_generateMap")
    • Try out if the script compiles: Server\scripts\compile.bat quest_generateMap.fos
  • Create the dialog:
    • First you need to create a local variable (local if you set it on player, unique if u set it on NPC) to store the location ID which will be generated, so you can delete after it's not needed.(Recycling is important if you want to keep your server up for more than a few hours.)
      • Edit "Server\scripts\_vars.fos".
      • Add the header line to it's repsective place (use unique number, I used 4):
        • #define LVAR_q_gen_loc                     (4)
      • Add the body lines to their respective places:
        •    $   4   1   q_gen_loc   0   0   1000   0
        • **********
        •    Generated location progress.
        • **********
    • Create the dialog to look like on the below picture. (this is for demonstration purposes only)
    • On one of the answer you will have to add a Result, which will call the script function to create the map location.
    • When completing the quest, don't forget to call the script function which will delete the map location.
  • Do a clean on scripts as well, delete world save and launch server, client to try it out.

Here is the basic dialog, it's crude but only for demonstration of usage:



Here is the script that will spawn a location on the map and will delete it afterwards when triggered.

Code: [Select]
#include "utils_h.fos"
#include "worldmap_h.fos"
#include "npc_planes_h.fos"
#include "entire.fos"
#include "_colors.fos"
 
 
// function called as request from dialog to spawn quest location
void r_SpawnLoc(Critter& player, Critter@ npc)
{
// roll X,Y value of WM (World Map) zone index, in this case from 3x2 zones area near Hub
uint zoneX = Random(28, 31);   
uint zoneY = Random(39, 40);   

// get X,Y value of quest location position on WM in zone we picked above
uint   wx = zoneX * __GlobalMapZoneLength;          //get zone X,Y start value
uint   wy = zoneY * __GlobalMapZoneLength;
wx += Random(0, __GlobalMapZoneLength);             //add random value from 0 to zone size
wy += Random(0, __GlobalMapZoneLength);

// you can add more map locations here, and select one randomly
array<uint16> locationIds = { 91 };
uint num = locationIds.length;

// pick random encounter map, if only one map, then only one will be selected
uint16        locPid = locationIds[Random(0, num - 1)];

// create quest location
Critter@[] crits = { player };
int           loc = CreateLocation(locPid, wx, wy, crits);
if(loc == 0)
return;
// makes the location visible to the player
player.SetKnownLoc(true, loc);

// change location color on World Map
Location@ location = GetLocation(loc);
location.Color = COLOR_RED;
location.Update();

// set TB combat mode if needed
if(player.Mode[MODE_DEFAULT_COMBAT] == COMBAT_MODE_TURN_BASED)
{
SetTurnBasedAvailability(location);
}

// set location id to quest lvar (used when you need to delete location)
GameVar@  locidv = GetLocalVar(LVAR_q_gen_locid, player.Id);
locidv = loc;

// player can die and come back, but we will have to delete the location later
location.AutoGarbage = false;
}
 
// dialog function used in request to delete quest location (after player report finishing the quest)
void r_DeleteLoc(Critter& player, Critter@ npc)
{
GameVar@ var = GetLocalVar(LVAR_q_gen_locid, player.Id);
DeleteLocation(var.GetValue());
}

397
Suggestions / Rework finesse to allow specialization between snipers.
« on: August 07, 2015, 01:14:20 pm »
Instead of critical chance, finesse should give -X on effect rolls.

Sniper:
Dont take finesse: Better damage, bc no +30% DR for target.
Take finesse: Less damage, but more disabling, bc -X on effect roll when crit.

X to be fine tuned Or other formula: from Roll vs STAT+bonus to Roll vs STAT/2+bonus.

Edit: Title was misleading.

398
Toxic Caves / 8. Creating and using some basic scripts: Scenery scripts.
« on: August 07, 2015, 11:10:36 am »
8. Creating and using some basic scripts: Scenery scripts.

A quest complexity will usually require us to use scripts. At this point we will dive into one of the most simple scripts, the Scenery scripts, or scripts associated with scenery objects on the map. For this we will need a Scenery object on our map and a new script we want to call when the user interract with it.

Step by step:

  • Create a new scriptfile:
    • Create a new textfile named "quest_tut1.fos" in "Server\scripts\"
    • Copy paste the content from the code part below.
  • Bind the script file to the Scenery in Mapper:
    • Launch Mapper and the load the map.
    • If you haven't add a Scenery object to the map. (I used some defected robot.)
    • Set the ScriptName value of the Scenery object to your script files name. (quest_tut1.fos)
    • Set the FuncName value of the Scenery object to the function to be called when player interaction. (s_RefillRobot)
    • Save the map and exit.
  • Run the server to compile your script:
    • To test if your script compiles error free, you can use: Server\scripts\compile.bat quest_tut1.fos
    • Delete previous script file binaries of your modified script file if they exist. (quest_tut1.fosb, quest_tut1.fosp)
    • Run the server.
  • Understand the script:
    • Study the script file, pretty straightforward, comments are useless but I left them there anyways.
    • If the player tries to use the Repair Skill on the robot, it will say that he can't do that without Small Energy Cells.
    • If the players tries to use the Science Skill on the robot, the system will say that the robot is out of energy.
    • Finally, if the player tries to use Small Energy Cells on the robot, the system will notify about the success and set the quest variable to the desired value. This is how the quest is progressed in this case.
    • Also one Small Energy Cell is removed from the backpack of the player.
    • If the player tries to use the Repair or Science skills on the robot, the notification will tell, that it is already done. This is ensured by the quest variable chesk at the start.
Code: [Select]
//  Includes some definitions
#include "_macros.fos"

//  Function signature for player interactions with Scenery objects
bool s_RefillRobot(Critter& player, Scenery& robot, int skill, Item@ item)
{
// Retrieve the variable used by the quest to mark it's progress, plus error handling
GameVar@ questVar = GetLocalVar(LVAR_q_turo_prog, player.Id);
if(valid(questVar))
{
// is quest still in progress and before repairing the robot
if (questVar < 30)
{
//  Check if repair skill is used on the robot
if(skill == SK_REPAIR)
{
player.Say(SAY_NETMSG, "You don't think it can be done without some small energy cells.");
return true;
}
// Check if science skill is used on the robot
if(skill == SK_SCIENCE)
{
player.Say(SAY_NETMSG, "The robot is running very low on energy.");
return true;
}
// Check if the player used a Small Energy Cell on the robot.
if(valid(item))
{
if(item.GetProtoId() == PID_SMALL_ENERGY_CELL)
{
player.Say(SAY_NETMSG, "You replace one of the energy cells of the robot.");
// Set the quest progress
questVar = 30;
// Remove the Small Energy Cells used.
item.SetCount(item.GetCount() - 1);
item.Update();
return true;
}
}
}
else
{
if(skill == SK_REPAIR || skill == SK_SCIENCE)
{
player.Say(SAY_NETMSG, "You already replaced the energy source of this robot, there is nothing more you can do here.");
return true;
}
}
}
return false;
}

399
The Workshop / Re: Help us with animations
« on: August 06, 2015, 03:30:20 pm »
I checked Fallout 2 models, it seems that there a lot less animations, the ones u asked for are all missing.

All of these are female, blue jumpsuit without a number, but all are without the requested animations:
NFVALT??.FRM - these were the files I found, the standard female bluesuite without 13 on back.
NFVRED??.FRM - same, but red hair.
NFLYNN??.FRM - thiner taler model, black.

Files starting with HF (human female) have the animations, (but only the ones that a player can have, either naked bluesuite or by using armor) but the blue suite is marked with 13 as well.

400
Toxic Caves / 7. More on dialogs - Tracking quest progress
« on: August 06, 2015, 03:29:51 pm »
7. More on dialogs - Tracking quest progress

The next important thing with dialogs is, to track a given quests progress. For this, we will need to create a game variable, track it through the dialog and through other actions of the player as well.

Step by step:
  • Make a quest variable:
    • Launch DialogEditor, use the Vars editor tabpage on the top.
    • Enter a fitting name, (like "q_tut1" - q for quest, tut1 for tutorial1)
    • Enter a unique number for Num, one that is not used, for easy access I used 3, but a number in higher range should be used.
    • Set the radio box to Local, leave the checkboxes unchecked.
    • Click Add.
  • If it fails, this is how you can make it the harder way:
    • Open for edit the variable text-file list in your server's script forlder: Server\scripts\_vars.fos
    • Add the following lines at their respective places (use your unique Num, not mine which was 3):
    • Add the header lines somewhere at the start of the text file, keeping the ordering by Num.
      • #define LVAR_q_turo                        (3)
    • Add the body lines somewhere where similar lines are, exact place depending on your Num:
      •    $   3   1   q_turo   0   0   1000   0
      • **********
      •    TuRo progress.
      • **********
  • Create or modify your dialog to support the new quest variable:
    • Add a new Dialog with an Aswer, which will end the dialog.
    • To the Answer add a Result, which will set the new quest varialbe to 10.
    • Add a new Answer to Predialogue Installations, which will lead to a dialog, that will be the progress of the quest.
    • Add a Demand to this answer, that requires the quest variable to be 10.

This is how it looks at my end:



On the above picture, the tutorial robot will check if the quest varialble (q_turo_prog) is 10, which means that the player has reached a point in the conversation with the robot, where the robot will ask him, to gather some flint and use his fixboy to make a primitive tool.




On the above picture, the tutorial robot will ask the player to make a primitive tool and to mark the progress so far, will set the quest variable to 10, and exit the dialog. Next time when the player talks to the robot, it will jump to dialog 9 where the robot asks if the task is done. Here the robot checks if the player has a primitive tool on him, and will progress further if so.

This was only a part of the Tutor Robot quest, but enough to point out the example, how to progress using a quest variable. Ofc, other dialogues would lead to incrementing or setting back to quest variable to other values, and because of the Predialogue installation Answer Demands, the right dialog will be selected for the current progress of the quest.

401
6. Adding monsters, loots and some basic (pre-written) scripts.

So, next in line is, adding some monsters to the map, with some basic script. We will not make scripts, only use some default ones.
The first thing you might notice, is that if you place a critter on the map, for example a Mole Rat, it will stay idle and do nothing, unless attacked. In order to make a Critter be agressive or semi-agressive, it will need some scripts. There are some good basic scripts in the Klamath map (Rats/Geckos), we will use those. (The are in the scripts files not in the map ofc, but you can access them by checking Klamath map with Mapper)

So, step by step:
  • First things first, if you haven't, create a new bat file to lauch your server. It should delete all fosmapb from the maps, and launch server after. This way you will never run in circles trying to figure out, why things don't works, when the only problem was, that you forgot to clean, rebuild the maps and reload the world.
    (In case you don't know how to make batch files, just make a new text file with the name CleanWorld.bat in the Server folder and add the following 3 lines to it:
    • "del maps\q*.fomapb"
    • "del save\world*.fo"
    • "FOnlineServer.exe"
    This will delete ur current world save as well, so every progress your char had, except it's creation and location is lost.)
  • Launch Mapper.
  • Create a cave (or copy one, but remove useless "tech" objects so u don't accidentally get random monsters generated) and place some rats in it.
  • Use the property editor (press F9 to toggle on/off) to set the mobs (I will refer to monsters/critters as mobs from now on) script to the following:
    • set ScriptName to "mob" (This will tell which script file to check for the function below. Server\Scripts\mob.fos )
    • set FuncName to "critter_init" (This is the function (script) to be called when creating this mob)

  • Save the map and try it. Use your new batch file.

Adding some loot for the mobs.
  • Select the mob (click on it, have details window turned on - F9)
  • On the bottom panel select Norm, double click it and filter for ammo.(You target on the map still should be the rat.)
  • Now Alt+Click on some shotgun shells.
  • On the bottom panel select Inve, you should see the shotgun shells added. You can Alt+Click to remove them.
  • To set the amount of the shells, just click on the shells and edit the Count to a differnt value than 0.
  • Launch server and client, to try it out.
  • Kill the mob for your reward: 1 shotgun shell ;)

The result should look like this in Mapper:



Adding agressive mobs usually does not fullfill all of the quest writers desires. So our next step is, to add some mobs, that do not move/attack, until they are triggered to do so. For this, we will also make a new dialog. The molerat will talk to the player, and the player will have some options how to engage it. The choise "I will exterminate you and all your vermints." will trigger all mobs who see the player to attack him, otherwise the player can leave peacefully or take on the molerat in a man versus rat duel.

Step by step:
  • Launch Dialog Editor and create a new dialog.
  • Make the dialog tree as the picture below shows.
  • After saving it, make sure you edit the dialog list (Server\dialogs\dialog.lst)file and add to it the dialog you made, I used 2102 for dialog ID.
  • Add the dialog ID to the Molerat Dialog property.
  • Add some small rats around the Molerat and set their ScriptName to "mob" and FuncName to "_DontMove".
  • Add some weapons to the entrance of the cave, so your character can survive the rat attack.
  • Save map and try. Gl.
Note: Use Demand or Result to add scripts to dialogs. The one we added, was in the script file named dialog and the scripts function name was r_Alert. We will do more complicated scripts later on, but if you want, feel free to study some of the script files.



402
Suggestions / Re: CH and IN changes to have some value.
« on: August 06, 2015, 01:24:44 pm »
Imo: Players shall not take into consideration what is hard to implement and what is not. It's not their role. They should make their wishlist, put it in a readable form here and hope for the best :)

So, let's take smaller steps then: Do you like Daze as a debuff?

403
Suggestions / Re: CH and IN changes to have some value.
« on: August 06, 2015, 10:29:31 am »
did i missed some worst suggestion possible competition announcement ?

Nah, I'm just theory crafting :)

But... why so offensive mate? Had a bad sleep?

404
Suggestions / Re: CH and IN changes to have some value.
« on: August 06, 2015, 10:25:51 am »
the idea for charisma is pretty cool (maybe complex to code properly though), could be an interesting usage, but I guess it would have no effect on players, which makes it a bit of a bummer, and as you said may just be exploited for farming purposes.

Well, players are always affected by the environment, except in friendly duels. If you have high CH (or at least not 1) you may try to farm mobs that have strong ranged attack. In this case people who have a 1CH PK build, would suffer the wrath of the mobs immediately, leaving you opportunity to flee or fight back with better odds. If your only fun in game is TC and wagger duels, then you probably will set CH to 1, yeah, it does not help there but it shouldn't also. Well, depends how CH as an attribute is looked upon. If Charisma in game describes only the way others perceive you, then it should be a non-PVP factor attribute, and it's good that way. If you say that Charisma determines also, how your character looks upon himself, how confident he is, etc, then it could be reasonable to use it in PvP to resist charm effects. Unfortunately there are no such effects in Fallout, so it should remain a stat for PVE-ers.

405
Suggestions / Re: CH and IN changes to have some value.
« on: August 06, 2015, 08:53:54 am »
Baically the Daze was a cover story for why IN would reduce CC effects. (as normally being highly intelligent, doesn't reduce the time you are knocked out for)

So, a "not so OP cc, but still giving meaning to IN for PvP" example for you Barnley:

1   - 20: Roll EN for KD, Roll IN for Daze
21 - 45: Roll EN for KD, Roll CH + 2 for Panic
46 - 70: KD, Roll EN for Knockout, Roll IN - 2 for Daze effect after recovering from Knockout.
70 - 85: KD, Daze, Roll IN + 3 for Berzerk.
86-100: KD, Daze, Roll IN for Berzerk.
100+:    KD, Daze, Roll EN death, (if did not die), Panic

Rolls for headshot effects vs IN: Roll(1-10+1 if Right between the eye perk taken by attacker).

Daze: Loose 2 max AP for a MAX(2, ROLL(1-10)-IN) rounds. (time in RT) (Other effects could be, loose sight range or chance to hit penalty.)
Panic: Loose control over char for MAX(1, ROLL(1-5)-CH/2) rounds (time in RT) and the char would try to run away from the char or run in random direction.
Berzerk: Loose control over char for MAX(1, ROLL(1-5)-IN/2) round and the char will attack the nearest target, regardless of it being friend, foe, NPC, Player. If melee (no) weap equiped and out of range, then move toward the target.

Edit: Note: ROLL for CH Panic - Here the attribute Charisma of a player, is not only defined like how the world perceives the players PC, but also, inner strengths, will, and how the PC looks upon himself. CH would be used to resist charm spells in other games, here would be used to resist cowardice.

Pages: 1 ... 25 26 [27] 28 29