Menu

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.

Show posts Menu

Topics - LoveLess

#1
Suggestions / Travel Dialogue Destinations
April 22, 2024, 08:43:58 PM
Just a small quality of life, you can currently hear every other part of the dialogue when the speaker is talking to the NPC, except what destination the player chooses at the end.

It would be nice if the player spoke it around them like the other dialogue options just for a small convenience.
#2
Suggestions / Project Star Chart
March 20, 2024, 05:52:33 PM
It doesn't allow you to recast it while it's up, stating that you already have it in the combat log. This shouldn't be needed as the game won't let these stack since they are the same effect from the same script, much like you cant have two One With the Land giving you double skill bonuses. A bit annoying when you want to recast a spell that's about to run out of time anyway.

Would like it to just remove that check entirely and let it be cast, or remove the old cast if there's some other reason I am missing.
#3
Player Workshop / Expanded Item Tooltips
July 08, 2023, 09:58:04 PM


This is for the script to rename the object. I am unsure how taxing reading 2da's will be when someone's items get converted for the first time. Items will keep any customized name they currently have, this script doesn't ever touch what the object was originally named. It saves it as is.
void main()
{
    object oTarget = GetModuleItemAcquired();
    string sTooltip, sBaseItemType, sPrename, s2daLookup;

    //turn this to FALSE when not testing
    int nFeedback = TRUE;

    if(GetLocalInt(oTarget, "nTooltipName") == FALSE)
        sPrename = GetName(oTarget, FALSE);
    else
        sPrename = GetLocalString(oTarget, "sTooltipPrename");

    itemproperty iprpTarget = GetFirstItemProperty(oTarget);

    // whatever method you use for aspect string name goes here
    // string sAspect;
    // sTooltip += "\n" + sAspect;

    s2daLookup = Get2DAString("baseitems", "Name", GetBaseItemType(oTarget));
    sBaseItemType = GetStringByStrRef(StringToInt(s2daLookup));

    sTooltip += "\n" + "Item Type: " + sBaseItemType;

    float fWeight = IntToFloat(GetWeight(oTarget)) * 0.1f;
    sTooltip += "\n" + "Weight: " + FloatToString(fWeight, 4, 1);

    int nCharges = GetItemCharges(oTarget);
    if(nCharges > 0)
        sTooltip = "\n" + "Charges: " + IntToString(nCharges);

    while(GetIsItemPropertyValid(iprpTarget))
    {
        if(GetItemPropertyDurationRemaining(iprpTarget))
        {
            iprpTarget = GetNextItemProperty(oTarget);
            continue;
        }

        int nType = GetItemPropertyType(iprpTarget);

        switch(nType){
            // additional weight
            case 81 : iprpTarget = GetNextItemProperty(oTarget); continue;
            // secret properties
            case 87 : iprpTarget = GetNextItemProperty(oTarget); continue;
        }

        int nSubtype = GetItemPropertySubType(iprpTarget);
        int nCostTable = GetItemPropertyCostTable(iprpTarget);
        int nCostTableValue = GetItemPropertyCostTableValue(iprpTarget);
        int nParam1 = GetItemPropertyParam1(iprpTarget);
        int nParam1Value = GetItemPropertyParam1Value(iprpTarget);

        string sParam1, sParam1Value, sType, sCostTable, sCostTableValue, sSubtype;
        string sBadstrref = "Bad Strref";

        sType = Get2DAString("ItemProps", "StringRef", nType);

        sSubtype = Get2DAString("itempropdef", "SubTypeResRef", nType);

        sSubtype = Get2DAString(sSubtype, "Name", nSubtype);
        sParam1 = Get2DAString("iprp_paramtable", "TableResRef", nParam1);
        sParam1Value = Get2DAString(sParam1, "Name", nParam1Value);

        sCostTable = Get2DAString("iprp_costtable", "Name", nCostTable);
        sCostTableValue = Get2DAString(sCostTable, "Name", nCostTableValue);

        // formatting for the new string that will be saved
        sTooltip += "\n";
        sTooltip += GetStringByStrRef(StringToInt(sType));

        string sFeedback;
        sFeedback += "nType: " + IntToString(nType) + " = " + GetStringByStrRef(StringToInt(sType)) + "\n";

        if((nSubtype != 255 && nSubtype != 0) ||
           (nParam1Value != 255 && nParam1Value != 0) ||
           (nCostTableValue != 255 && nCostTableValue != 0))
        {
            sTooltip += ": ";

            if(nSubtype != 255)
            {
                string sSubtypestrref = GetStringByStrRef(StringToInt(sSubtype));
                if(FindSubString(sSubtypestrref, sBadstrref, 0) != 0)
                {
                    sTooltip += sSubtypestrref;
                    sTooltip += " ";
                }
            }

            if(nParam1Value != 255 && nParam1Value != 0)
            {
                sTooltip += GetStringByStrRef(StringToInt(sParam1Value));
                sTooltip += " ";
            }

            if(nCostTableValue != 255 && nCostTableValue != 0)
            {
                sTooltip += GetStringByStrRef(StringToInt(sCostTableValue));
            }


            sFeedback += "nSubtype: " + IntToString(nSubtype) + " = " + GetStringByStrRef(StringToInt(sSubtype)) + "\n";
            sFeedback += "nCostTable: " + IntToString(nCostTable) + " = " + GetStringByStrRef(StringToInt(sCostTable)) + "\n";
            sFeedback += "nCostTableValue: " + IntToString(nCostTableValue) + " = " + GetStringByStrRef(StringToInt(sCostTableValue)) + "\n";
            sFeedback += "nParam1: " + IntToString(nParam1) + " = " + GetStringByStrRef(StringToInt(sParam1)) + "\n";
            sFeedback += "nParam1Value: " + IntToString(nParam1Value) + " = " + GetStringByStrRef(StringToInt(sParam1Value));
        }
        //end, loop back with next property
        iprpTarget = GetNextItemProperty(oTarget);

        if(nFeedback == TRUE)
            SendMessageToPC(GetFirstPC(), sFeedback);
    }

    SetLocalInt(oTarget, "nTooltipName", TRUE);
    SetLocalString(oTarget, "sTooltipName", sTooltip);
    SetLocalString(oTarget, "sTooltipPrename", sPrename);

    SetName(oTarget, sPrename + "\n" + sTooltip);

}

You will need a guievent for when someone examines an item, so the name doesn't overflow into the examine window.

void main()
{

    int nEventType = GetLastGuiEventType();
    object oExaminer = GetLastGuiEventPlayer();
    object oTarget = GetLastGuiEventObject();

    string sPrename = GetLocalString(oTarget, "sTooltipPrename");
    string sTooltip = GetLocalString(oTarget, "sTooltipName");

    if(nEventType == GUIEVENT_EXAMINE_OBJECT &&
       GetLocalInt(oTarget, "nTooltipName") == TRUE)
    {
        SetName(oTarget, sPrename);


        DelayCommand(0.3f, AssignCommand(oExaminer, ActionExamine(oTarget)));

        DelayCommand(1.0f, SetName(oTarget, sPrename + "\n" + sTooltip));

    }
}

https://cdn.discordapp.com/attachments/486428345781714950/1117920600770498642/Tooltip_Tester.mod
#4
Suggestions / Crafted Healing Wands
May 27, 2023, 07:39:51 PM
With the addition of Waters, CRAFTED healing wands have become entirely obsolete due to the massive difference in price and effectiveness. They start with more charges, but weigh twice as much and are of a much lower caster level while costing nearly triple the price. Waters are also usable by anyone and far more accessible.

Cure Critical Wounds is likely fine, but could the others perhaps get their prices reduced? Or have their charges at creation be higher than 25, like say up towards 50?

#5
A note is attached to a small letter and left atop a Balestriere's bunk in the Banda Rossa Fortress.

Quote from: Toleigh CastalHey Bruno, this is from Toleigh -

If you were still interested in doing the official ones, I got my list of folk to invite mostly done and an idea of what I'm trying to say. Put whatever spin on it you like, humor me! These aren't just fighters, but the folk who I am inviting to compete. They can either fight themselves, or be the sponsor, or both.

Alchemist's Guild
Sabotage Church
Marriet Fineweather
Naelin's Torchbearers
Waradim Lynneth
Triangle

And uh, I'll get back to you on the last two. So few folk asking about it all... Who doesn't want to win 10,000 dinar??

A letter with a lot of ink smeared across it's page...

Quote from: Toleigh CastalYou are formally invited to participate in the Call of the Warrior Invitational Tournament. Please bring a fighter of your choice to the Stadium for Maribeh 27th and 28th. Should you find yourself unable to attend, you may of course, sell your invitation to an interested party at any time prior to the tournament.

This is the first tournament hosted by Toleigh Castal, with the assistance of his co-hosts, Zaniah Almirah, and Velan Volandis. Any questions about the rules may be brought to him, but know that the only firm one is that you may not aid or impede a fighter once they have entered the Arena. Following the old rites that have been uncovered in the sands and spoken of the Warrior, war has many aspects and each discipline is to be practiced.

Once both fighters have entered the arena, the battle shall commence upon the fighters haven shaken hands and then either has consumed three vials.

At the special request of the Agasian benefactor... The final bout shall reward the victor with a boon, a weapon forged by the hands of a Warrior-Priest, for the champion! On the condition that the prayer offered by the final two combatants is to be with risk, so  that they fighters can feel the truest thrill of the Warrior. To fight to the death, should their opponent not yield. The greatest risk a fighter will face, is weighing their life versus suffering the humiliation of defeat.

https://discord.com/events/422865590814769163/1108131661729763349
#6
Player Workshop / Darkness Bug "Fix"
January 21, 2023, 06:57:16 AM
The darkness bug is caused by losing Ultravision while you are under the effect of Darkness. As I understand the last fix was done by making darkness TEMPORARY instead of the default, which is permanent. This just means the bug has a maximum time limit.

For some reason, the effect of Darkness is not fully applied due to you having had Ultravision and this causes darkness to be in a state of half working when you left it.



Adding the effect of Ultravision for a split second on leaving will correct this issue. See the below examples, where I use an item that gives Ultravision for a second. Then when you leave, it applies it for 0.01s



Should fix the existing issues for now, though it's not perfect. The alternative is to apply the darkness effect to the existing creature again before it's removed.
#7
Screen Shots & Obituaries / Kobold Warrior A & B
December 21, 2022, 11:32:40 PM






#8
Bug Reports / Quality of Life with Temporary AC
October 25, 2022, 07:21:25 AM
There's no current way to stack temporary AC to stack in a malicious way, from anywhere else, and not if it is provided by anything else...

At the moment, some of them remove all other sources of temporary AC. There's no reason they should be removing each other, if someone casts Magic Vestment on 0/- cloth, it shouldn't remove Mage Armor. If someone with Mage Armor casts it on 3/4 leathers, it shouldn't remove Magic Vestment. The same applies for all of the Vagabond perks.

Mage Armor
Shield (with SF/GSF Abjuration)
Vagabond Passive
Magic Vestment

None of this stacks and it will always use the highest source so nothing is changing between these casts. There are times when it removes two versions of the same spell, for when someone lower level might cast it with a significantly shorter duration, but they still don't stack.
#9
Player Workshop / /c spells_status
October 25, 2022, 02:56:17 AM
Just a little addition to make it neater, is to remove all of the cessate VFX that clutter up the list. As in, the visual effect that plays at the END of the duration of most spells. Since these are only used to visually display that an effect has run out, we don't need them on the log.

// if these are both true, then the effect read is only the Cesate vfx
// since this is only used for expiration visuals, we dont need it's duration on the log

effect eEffect = GetFirstEffect(oTarget);

if(GetEffectInteger(eEffect, 0) != 206 && GetEffectType(eEffect) != 74)
{
    // do xyz
}


206 is the ID of the VFX for cessate in the 2da and 74 is that the type is visual effect.
#10
Suggestions / Divine Favor and summons/associates
October 24, 2022, 10:27:23 PM
You cannot feed a Divine Favor potion to a summon or associate currently because the buffs will always default to the summoner.

It's script defaults to itself, unlike Ghostly Visage, which uses the target of the spell (like most spells do). Limiting it to self-cast is something that's already done in the 2DA, so this solves that issue and wont allow people to target anything other than items in their inventory, or themselves. To prevent possible issues and add some redundancy, it could have a "if not associate, then OBJECT_SELF" to default to otherwise.
#11
This is about the spell "Remove Blindness/Deafness" that actually removes the effects. While the spell works fine, GSF Divination does not give any immunity to blindness or deafness with it as per the wiki. I don't think I've ever seen someone actually try the interaction before.

EDIT: To clear up what I am talking about, the GSF Divination portion of the below doesn't work

QuoteRemove Blindness/Deafness
  • Vanilla casting is unaffected
  • Spell Focus: Divination blindness/deafness immunity increased to 1 turn / level.
  • Greater Spell Focus: Divination blindness/deafness immunity increased to 1 hour / level.
#12
Bug Reports / Zealous Faith Flame Weapon
October 19, 2022, 08:11:01 AM
Recently played a Zealous Faith and just hit level 8 before he was murdered, but during that time, my flame weapon was giving out Divine damage regardless of the target. For example it worked on a bard's weapon.
#13
Suggestions / Mage Armor, Magic Vestment
July 13, 2022, 01:29:32 AM
This is bit of a mix between a Suggestion, Scripting Suggestion, and Bug Report. I didn't realize casting either Mage Armor or Magic Vestment dispels the other. It doesn't really make any sense that this would be the case, since the effects don't stack and have independent calculations that happen.

An example is if you are wearing Leathers and use Mage Armor, you'll get +2 Armor Bonus. If a CL 6 or lower Magic Vestment applies +1 Armor Bonus, you will lose the +2 Armor Bonus on the armor with the current script. Having both would not net them at +3 Armor Bonus, they would still only be getting the +2 Armor Bonus. The same applies if a +2 Armor Bonus from a CL7+ Magic Vestment is cast on someone wearing Studded Leathers and they get +2 Armor Bonus. If someone casts Mage Armor on them, the +2 is dispelled and they will only get +1. This also affects people using Vagabond fighter perk.

It doesn't make any sense that any of these cases need to happen, as Armor Bonuses do not stack, and it's just additional scripting that can cause a bit of unnecessary grief when people are trying to be helpful. Trying to tell people in-game generally works, but when they do make the mistake, there's no way to undo it.
#14
Bug Reports / Owl's Lullaby Bardsong
July 05, 2022, 05:09:32 AM
It seems that Owl's Lullaby gives no effects. Even it's non-Moonlight effects are not occurring. None of it's effects working at any hour of the night, in any zone, open or closed.

Another possible suggestion, can it have it's darkness removed at level 8 so it could be cast within safe areas? Unless a toggle for 'safe area casting' was allowed, for any other effects that currently exist or down the line, to allow for such.
#15
It appears that the Cleric Turn Undead which is supposed to have a CHA/Level Requirement to use, is being ignored. It will give the message that you do not meet the requirements, then still set it to your selection anyways, including the successfully set message.
#16
Bug Reports / Cleric Metal Domain: Darkfire
May 28, 2022, 10:32:10 PM
If a Cleric takes Metal Domain, and is pure. Darkfire currently does not seem to set the sonic element type. Even after hitting level 5 and using perk reset.
#17
Bug Reports / Vagabond Armor Perk
May 27, 2022, 10:44:37 PM
So the current iteration of the Vagabond perk probably uses something like GetItemACValue(); from what I have seen, but this calculates the existing bonus armor, or lack of, on an item. It would be better to use either the Appearance 2da or gold value of them to determine what AC it should be giving, along with the dexterity check, instead. As any time that someone uses Magic Vestment, Mage Armor, anything like that, it bugs the perk completely for the remainder of the reset for some reason. Something like the below...

    object oArmor = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTarget);

    int nAppr= GetItemAppearance(oArmor, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO);

    int nAC = StringToInt(Get2DAString("parts_chest", "ACBONUS", nAppr));


Would fix it. As AC Bonus for armor doesn't stack, there's no harm in letting them coexist either. This wouldn't buff them in any way, just a bug fix.
#18
Player Workshop / Arrow Homogenizer
April 28, 2022, 07:34:52 AM
Been a longstanding weirdness that there are several ammunition that exist in the game that have the exact same name, description and item properties... Yet they don't stack. So having something that made them able to do so based entirely off their item properties alone would be wonderful. This would also allow the players to pick and choose which stack they want to put the arrows into, if they are the exact same, and not require the creation of anything more complex than what is below. All NWN cares about when it comes to stacking is the tag, after all.

    object oTarget = GetSpellTargetObject();
    string sTargetTag = GetTag(oTarget);
    string sNewTag;
    itemproperty ipCurrent;

    if(GetBaseItemType(oTarget) == BASE_ITEM_ARROW ||
                GetBaseItemType(oTarget) == BASE_ITEM_BOLT ||
                GetBaseItemType(oTarget) == BASE_ITEM_BULLET)  //&& != eldritch archer modified
    {
        ipCurrent = GetFirstItemProperty(oTarget);

        while(GetIsItemPropertyValid(ipCurrent))
        {
            sNewTag += IntToString(GetItemPropertyType(ipCurrent))
                            + IntToString(GetItemPropertySubType(ipCurrent))
                            + IntToString(GetItemPropertyParam1(ipCurrent))
                            + IntToString(GetItemPropertyParam1Value(ipCurrent));
            ipCurrent = GetNextItemProperty(oTarget);
        }

        SetTag(oTarget, sNewTag);
    }



Might need something extra like ignoring temporary item properties, but I couldn't think of a reason that would really generate an issue currently given the ones that exist are very short durations.
#19
Suggestions / Red Star Defiant
April 15, 2022, 10:40:03 PM
Could it come back as a pure Druid perk? Like Rot druid? But instead, it's something like a walking ecosystem of symbiotic plants and parasites??

Lose all wildshapes charges and spells.

Please??!?
#20
Bug Reports / Internal Server Error (mostly Wiki)
March 26, 2022, 07:31:06 PM
Wanted to make a more viewable report/post. Doing this to create a more complete writeup on the issue, and perhaps a place for others to make the report when it comes up. Unfortunately this is about the extent of the details I am able to provide at the moment and I know that none of it is very informative, but rather vague.

Back on July 30th 2021, the wiki goblins came across an issue where we were unable to submit updates to https://wiki.efupw.com/index.php?title=Spell_changes and the last change to that page before then was April 20th 2021. Something around that time may have changed on the backend, I am unsure, but ever since that date we've slowly come across where we can no longer update certain pages as well. Before then we had not noticed this problem and it's only gotten worse with time, becoming more frequent/rampant. There seems to be no common issue, and we've attempted to use alternative browsers, change the formatting, use no formatting, etc.

Currently, all I have to do is attempt to edit the existing page of Spell Changes, change absolutely nothing and save the changes, which will immediately prompt the Internal Server Error. This is also a problem all over the wiki, as we can no longer edit most of the pages with a greater amount of content. The smaller pages appear to be mostly fine. This was for three different wiki goblins/editors and all occurred on the same pages for each of us.

Other cases of this happening when people attempt to submit data have been submitting tickets on the forums, making forum posts/replies on the forums, submitting applications, making any new wiki pages, and editing existing wiki pages. I understand that this can be many different possibilities, but it does appear that players have been trying different browsers as well. I've never encountered this issue with trying to load anything on EFUPW, but instead it always comes up when trying to submit information to be added. Thus far I have never noticed an issue with just reading anything that already exists.