• 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!

Tower Defense Event

Gubailovo

Well-Known Member
Joined
Dec 19, 2013
Messages
407
Solutions
2
Reaction score
62
please help me with this event

data/actions/scripts/twdHammer.lua
Lua:
dofile('data/libs/TWD/towerDefenseLib.lua')

function onUse(cid, item, fromPosition, target, toPosition, isHotkey)
    local player = Player(cid)
    if player:getStorageValue(playingGameStorage) ~= 1 then
        return false
    end

    local tile = toPosition:getTile()
    if tile then
        if not tile:hasFlag(TILESTATE_PROTECTIONZONE) or tile:hasProperty(CONST_PROP_IMMOVABLEBLOCKSOLID) then
            player:sendCancelMessage("You cannot place the turret here.")
            return true
        end
    end

    if target:isItem() then
        local modalWindow = ModalWindow(100, "Build Turret", "Here you can select variations of turrets to build.")
        local turret, cfgTable = turrets.allTurretsId
        for i = 1, #turret do
            turret = turrets.allTurretsId[i]
            cfgTable = turrets[turret].cfg
            modalWindow:addChoice(turret, string.format("%s [%s coins]", cfgTable.turretName, cfgTable[1].buildPrice))
        end

        modalWindow:addButton(0, "Build")
        modalWindow:setDefaultEnterButton(0)
        modalWindow:addButton(1, "Cancel")
        modalWindow:setDefaultEscapeButton(1)
        modalWindow:sendToPlayer(player)
        turretPosition = toPosition
    elseif target:isNpc() and target:getName() == "Turret" then
        local table = turrets[target:getOutfit().lookType]
        local lvl = target:getTurretLevel()
        local cfg, cfgCombat = table.cfg[lvl], table.combat[lvl]

        local turrentInfo = string.format("Turret Information\n----------------------------\nTurret Level: %s\nAttack Type: %s\nRange SQM: %sx%s\nTurret Damage: [%s - %s]\nAttack Speed: %s\nSell/Upgrade Price: [%s / %s]", lvl, string.upper(cfgCombat.attackType), cfg.rangeX, cfg.rangeY, cfgCombat.dmgValues[1], cfgCombat.dmgValues[2], cfg.attackSpeed, cfg.sellPrice, cfg.upgradePrice)
        local playerInfo = string.format("Player Information\n----------------------------\nWave Level: %s\nYour Coins: %s", getWaveLevel(), player:getCoins())
        local modalWindow = ModalWindow(101, "Information", string.format("%s\n\n%s", turrentInfo, playerInfo))

        if lvl < 3 then
            modalWindow:addChoice(0, "Upgrade")
        end
        modalWindow:addChoice(1, "Sell")

        modalWindow:addButton(0, "Yes")
        modalWindow:setDefaultEnterButton(0)
        modalWindow:addButton(0x01, "Cancel")
        modalWindow:setDefaultEscapeButton(1)
        modalWindow:sendToPlayer(player)
        targetTurret = target
    end
    return true
end
data/movements/scripts/twdTile.lua
Lua:
dofile('data/libs/TWD/towerDefenseLib.lua')

function onStepIn(creature, item, position, fromPosition)
        if item.uid == 3333 then
                if not creature:isMonster() then
                        return false
                end
 
                local maxHealthDmg = creature:getMaxHealth()
                doTargetCombatHealth(0, creature, COMBAT_PHYSICALDAMAGE, -maxHealthDmg, -maxHealthDmg, CONST_ME_FIREAREA)
 
                local player = getPlayerInEvent(40, 40)
                if not player then -- Make sure that the players exsist in the arena, to prevent errors
                        return true
                end

        if player:getCondition(CONDITION_MANASHIELD, CONDITIONID_COMBAT) then
            player:removeCondition(CONDITION_MANASHIELD, CONDITIONID_COMBAT)
        end
 
                local calcHealthDmg = (player:getMaxHealth() * twdConfig.loseHealth) / 100
                doTargetCombatHealth(0, player:getId(), COMBAT_PHYSICALDAMAGE, -calcHealthDmg, -calcHealthDmg, CONST_ME_DRAWBLOOD)
        else
                if not creature:isPlayer() then
                        return false
                end
 
                -- Let's make sure none is playing, before entrance
                if getWaveLevel() > 0 then
                        creature:teleportTo(fromPosition, true)
                        fromPosition:sendMagicEffect(CONST_ME_TELEPORT)
                        creature:sendTextMessage(MESSAGE_INFO_DESCR, "There is someone already in the event.")
                        return true
                end
 
                -- Prepare Player
                creature:teleportTo(eventRoomPosition)
                creature:addHealth(creature:getMaxHealth())
                creature:setStorageValue(playingGameStorage, 1)
                creature:addCoins(twdConfig.startingCoins)
                creature:addItem(2557, 1)
 
                -- Setup Game
                setWaveLevel(1)
                startNextWave(1, twdConfig.eventStartTime)
                Game.setStorageValue(totalMonsterKillCountGlobalStorage, 0)
 
                -- Send Effects
                eventRoomPosition:sendMagicEffect(CONST_ME_TELEPORT)
                local pointingSummonPosition = summonMonsterPosition
                Position(pointingSummonPosition.x + 1, pointingSummonPosition.y, pointingSummonPosition.z):sendMagicEffect(CONST_ME_TUTORIALARROW)
 
                -- Send Messages
                creature:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have total ".. creature:getCoins() .." coins.")
                creature:sendTextMessage(MESSAGE_INFO_DESCR, "Welcome to the Tower Defense Event. The first wave will start in ".. twdConfig.eventStartTime .." seconds. Please build your first turret.")
                creature:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "The blue arrow, points where the monsters are comming from. Use the hammer, to build your first turret.")
 
                -- Register Events
                creature:registerEvent("TWDOnLose")
                creature:registerEvent("TWDHealthChange")
                creature:registerEvent("TWDBuildWindow")
                creature:registerEvent("TWDOtherWindow")
        end
        return true
end
data/lib/compat/compat.lua
 

Attachments

Back
Top