• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Show name of who casted on field TFS 1.3

Steve Albert

Banned User
Joined
Dec 9, 2018
Messages
267
Solutions
13
Reaction score
104
35030
Lua:
function Player:onLook(thing, position, distance)
    local description = "You see " .. thing:getDescription(distance)
    -- this is the code you will add to Player:onLook --------------------------------------------------
    description = ( Tile(thing:getPosition()):hasFlag(TILESTATE_MAGICFIELD) and thing:hasAttribute(ITEM_ATTRIBUTE_OWNER) ) and (description.."\nCasted by "..Creature(thing:getAttribute(ITEM_ATTRIBUTE_OWNER)):getName() .. ".")  or description
    ----------------------------------------------------------------------------------------------------------------
    if self:getGroup():getAccess() then
        if thing:isItem() then
            description = string.format("%s\nItem ID: %d", description, thing:getId())

            local actionId = thing:getActionId()
            if actionId ~= 0 then
                description = string.format("%s, Action ID: %d", description, actionId)
            end

            local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
            if uniqueId > 0 and uniqueId < 65536 then
                description = string.format("%s, Unique ID: %d", description, uniqueId)
            end

            local itemType = thing:getType()

            local transformEquipId = itemType:getTransformEquipId()
            local transformDeEquipId = itemType:getTransformDeEquipId()
            if transformEquipId ~= 0 then
                description = string.format("%s\nTransforms to: %d (onEquip)", description, transformEquipId)
            elseif transformDeEquipId ~= 0 then
                description = string.format("%s\nTransforms to: %d (onDeEquip)", description, transformDeEquipId)
            end

            local decayId = itemType:getDecayId()
            if decayId ~= -1 then
                description = string.format("%s\nDecays to: %d", description, decayId)
            end
        elseif thing:isCreature() then
            local str = "%s\nHealth: %d / %d"
            if thing:isPlayer() and thing:getMaxMana() > 0 then
                str = string.format("%s, Mana: %d / %d", str, thing:getMana(), thing:getMaxMana())
            end
            description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. "."
        end

        local position = thing:getPosition()
        description = string.format(
            "%s\nPosition: %d, %d, %d",
            description, position.x, position.y, position.z
        )

        if thing:isCreature() then
            if thing:isPlayer() then
                description = string.format("%s\nIP: %s.", description, Game.convertIpToString(thing:getIp()))
            end
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end
 
if the creature who casted the field is removed/logout or die , you get an error on the console when you click to look the field ,i'm using tfs 1.2
35079
 
Ok so the initial script will not work like we want it to because it does not store this information. It doesn't mean we can't store this information about the creature; we can but only if we interact with the magic field on screen 1st. To get around this we look at the sources specifically combat.cpp
This section of code in Combat::combatTileEffects
C++:
        Item* item = Item::CreateItem(itemId);
        if (caster) {
            item->setOwner(caster->getID());
        }
And just change it to this
C++:
        Item* item = Item::CreateItem(itemId);
        if (caster) {
            item->setOwner(caster->getID());
            item->setSpecialDescription("Casted by " + caster->getName());
        }
The reason we do it this way is because when the magic field is created we can then set a special description to that item and even if the monster/player dies the name will remain on the field even if we never looked at it when they were alive.
Code:
08:18 You see a fire field.
Casted by Fire Elemental
Item ID: 1487
Decays to: 1488
Position: 90, 128, 7

08:21 You see a fire field.
Casted by Fire Elemental
Item ID: 1487
Decays to: 1488
Position: 90, 128, 7

@pudim Still did it in 1 line ;)
 
All features is for Everyone players* members from otland
 
 
I would only like on mwall and growth rune :(
 
Back
Top