645 lines
28 KiB
Lua
645 lines
28 KiB
Lua
--[[
|
||
Illarion Server
|
||
|
||
This program is free software: you can redistribute it and/or modify it under
|
||
the terms of the GNU Affero General Public License as published by the Free
|
||
Software Foundation, either version 3 of the License, or (at your option) any
|
||
later version.
|
||
|
||
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||
PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||
details.
|
||
|
||
You should have received a copy of the GNU Affero General Public License along
|
||
with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
]]
|
||
|
||
local factions = require("base.factions")
|
||
local character = require("base.character")
|
||
local common = require("base.common")
|
||
local licence = require("base.licence")
|
||
local collectionchest = require("content.collectionchest")
|
||
local money = require("base.money")
|
||
local utility = require("housing.utility")
|
||
|
||
local M = {}
|
||
|
||
-- Cadomyr, Runewick, Galmair
|
||
M.townManagmentItemPos = factions.townManagmentItemPos
|
||
|
||
local TownAnnouncement
|
||
local TownAnnouncementShow
|
||
local TownAnnouncementInput
|
||
local TownGuard
|
||
local TownLicence
|
||
local TownKey
|
||
local TownMaterial
|
||
local townProperties
|
||
|
||
function M.townManagmentUseItem(User, SourceItem)
|
||
|
||
local toolTown
|
||
for j = 1, #M.townManagmentItemPos do
|
||
if (SourceItem.pos == M.townManagmentItemPos[j]) then
|
||
toolTown = j
|
||
end
|
||
end
|
||
|
||
local requiredRank = {8, 8, 8}
|
||
local allowed = User:getQuestProgress(199) == toolTown and User:getQuestProgress(200) >= requiredRank[toolTown] or User:isAdmin() == true
|
||
if not allowed then
|
||
-- common.InformNLS(User, "Du hast keine Befugnis hierzu.", "You are not supposed to use this.")
|
||
TownAnnouncementShow(User,toolTown)
|
||
return
|
||
end
|
||
|
||
local callback = function(dialog)
|
||
if not dialog:getSuccess() then
|
||
return
|
||
end
|
||
local selected = dialog:getSelectedIndex() + 1
|
||
if selected == 1 then
|
||
TownAnnouncement(User,toolTown)
|
||
elseif selected == 2 then
|
||
TownGuard(User,toolTown)
|
||
elseif selected == 3 then
|
||
TownLicence(User,toolTown, SourceItem)
|
||
elseif selected == 4 then
|
||
TownKey(User,toolTown)
|
||
elseif selected == 5 then
|
||
townProperties(User, toolTown, SourceItem)
|
||
elseif selected == 6 then
|
||
TownMaterial(User,toolTown)
|
||
end
|
||
end
|
||
|
||
local dialogTitle = common.GetNLS(User, "Stadtmanagement", "Town Management")
|
||
local dialogText = common.GetNLS(User, "Instrument zur Verwaltung der Stadt und Ank<6E>ndigungen.", "Instrument for town management and announcements.")
|
||
local dialog = SelectionDialog(dialogTitle, dialogText, callback)
|
||
|
||
local toolUse
|
||
if collectionchest.isCollectionChestExists(toolTown) then
|
||
toolUse = common.GetNLS(User, {"Ank<EFBFBD>ndigung", "Verbannung", "Lizenz", "Schl<EFBFBD>ssel","Grundst<EFBFBD>cksverwaltung", "Materialsammlung"}, {"Announcement", "Ban a character", "Licence", "Key","Property Management", "Material collection"})
|
||
else
|
||
toolUse = common.GetNLS(User, {"Ank<EFBFBD>ndigung", "Verbannung", "Lizenz", "Schl<EFBFBD>ssel", "Grundst<EFBFBD>cksverwaltung"}, {"Announcement", "Ban a character", "Licence", "Key", "Property Management"})
|
||
end
|
||
|
||
for i = 1, #toolUse do
|
||
dialog:addOption(0, toolUse[i])
|
||
end
|
||
|
||
dialog:setCloseOnMove()
|
||
User:requestSelectionDialog(dialog)
|
||
end
|
||
|
||
local function getTown(toolTown)
|
||
if toolTown == 1 then
|
||
return "Cadomyr"
|
||
elseif toolTown == 2 then
|
||
return "Runewick"
|
||
elseif toolTown == 3 then
|
||
return "Galmair"
|
||
end
|
||
end
|
||
|
||
local function getRentAmount(toolTown, SourceItem)
|
||
local rent = SourceItem:getData("rent")
|
||
if rent ~= "" then
|
||
return tonumber(rent)
|
||
else
|
||
return 0
|
||
end
|
||
end
|
||
local function collectedRentIntoMoney(toolTown, SourceItem)
|
||
local coins = getRentAmount(toolTown, SourceItem)
|
||
local gCoins, sCoins, cCoins = money.MoneyToCoins(coins)
|
||
if gCoins > 0 and sCoins == 0 and cCoins == 0 then
|
||
return(gCoins.." gold coins.")
|
||
elseif gCoins > 0 and sCoins > 0 and cCoins == 0 then
|
||
return(gCoins.." gold and "..sCoins.." silver coins")
|
||
elseif gCoins > 0 and sCoins == 0 and cCoins > 0 then
|
||
return(gCoins.." gold and "..cCoins.." copper coins")
|
||
elseif gCoins == 0 and sCoins > 0 and cCoins == 0 then
|
||
return(sCoins.." silver coins ")
|
||
elseif gCoins == 0 and sCoins > 0 and cCoins > 0 then
|
||
return(sCoins.." silver and "..cCoins.." copper coins")
|
||
elseif gCoins == 0 and sCoins == 0 and cCoins > 0 then
|
||
return(cCoins.." copper coins ")
|
||
elseif gCoins > 0 and sCoins > 0 and cCoins > 0 then
|
||
return(gCoins.." gold, "..sCoins.." silver and "..cCoins.." copper coins")
|
||
else
|
||
return("no money")
|
||
end
|
||
end
|
||
local function collectedRentIntoMoneyDE(toolTown, SourceItem)
|
||
local coins = getRentAmount(toolTown, SourceItem)
|
||
local gCoins, sCoins, cCoins = money.MoneyToCoins(coins)
|
||
if gCoins > 0 and sCoins == 0 and cCoins == 0 then
|
||
return(gCoins.." Goldst<73>cke")
|
||
elseif gCoins > 0 and sCoins > 0 and cCoins == 0 then
|
||
return(gCoins.." Gold- and "..sCoins.." Silberst<73>cke")
|
||
elseif gCoins > 0 and sCoins == 0 and cCoins > 0 then
|
||
return(gCoins.." Gold- and "..cCoins.." Kupferst<73>cke")
|
||
elseif gCoins == 0 and sCoins > 0 and cCoins == 0 then
|
||
return(sCoins.." Silberst<73>cke ")
|
||
elseif gCoins == 0 and sCoins > 0 and cCoins > 0 then
|
||
return(sCoins.." Silber- and "..cCoins.." Kupferst<73>cke")
|
||
elseif gCoins == 0 and sCoins == 0 and cCoins > 0 then
|
||
return(cCoins.." Kupferst<73>cke ")
|
||
elseif gCoins > 0 and sCoins > 0 and cCoins > 0 then
|
||
return(gCoins.." Gold-, "..sCoins.." Silber- and "..cCoins.." Kupferst<73>cke")
|
||
else
|
||
return("kein Geld")
|
||
end
|
||
end
|
||
|
||
local function withdrawRent(User, toolTown, SourceItem)
|
||
local rent = getRentAmount(toolTown, SourceItem)
|
||
local town = getTown(toolTown)
|
||
local _
|
||
local callback = function (dialog)
|
||
if (not dialog:getSuccess()) then
|
||
return
|
||
end
|
||
local input = dialog:getInput()
|
||
if string.find(input,"(%d+)") ~= nil then
|
||
_, _, input = string.find(input,"(%d+)")
|
||
input = tonumber(input)
|
||
if input <= 0 then
|
||
User:inform(common.GetNLS(User,"Die Zahl muss gr<67><72>er als 0 sein.","You must set a number higher than 0."))
|
||
elseif input > rent then
|
||
User:inform(common.GetNLS(User,"Die Zahl kann nicht gr<67><72>er sein als die Anzahl der M<>nzen in der Schatzkiste.","The amount can not be larger than the amount in the treasury."))
|
||
else
|
||
local coins = input
|
||
local gCoins, sCoins, cCoins = money.MoneyToCoins(coins)
|
||
money.GiveCoinsToChar(User, gCoins, sCoins, cCoins)
|
||
SourceItem:setData("rent", (rent - input))
|
||
world:changeItem(SourceItem)
|
||
local inputIntoMoneyDe, inputIntoMoneyEn = money.MoneyToString(input)
|
||
User:inform(common.GetNLS(User,"Du entnimmst "..inputIntoMoneyDe.." aus der Schatzkiste der Stadt.","You withdraw "..inputIntoMoneyEn.." from the town's treasury."))
|
||
log(User.name.." withdrew "..inputIntoMoneyEn.." from the "..town.." rent treasury.")
|
||
end
|
||
else
|
||
User:inform(common.GetNLS(User,"Hier muss eine Zahl eingetragen werden.","Input must be a number."))
|
||
end
|
||
end
|
||
User:requestInputDialog(InputDialog(common.GetNLS(User,"Mietenentnahme","Rent Withdrawal"),common.GetNLS(User,"Gib an, wie viele Kupferm<72>nzen du entnehmen m<>chtest.","Type in how much money you want to withdraw in copper coins."), false, 255, callback))
|
||
end
|
||
local function rentCollection(User,toolTown, SourceItem)
|
||
local rent = collectedRentIntoMoney(toolTown, SourceItem)
|
||
local rentDE = collectedRentIntoMoneyDE(toolTown, SourceItem)
|
||
local callback = function(dialog)
|
||
if getRentAmount(toolTown, SourceItem) ~= 0 then --the below code only matters for selectionDialog and not messageDialog
|
||
if not dialog:getSuccess() then
|
||
return
|
||
end
|
||
local selected = dialog:getSelectedIndex() + 1
|
||
if selected == 1 then
|
||
withdrawRent(User, toolTown, SourceItem)
|
||
else
|
||
User:inform(common.GetNLS(User,"Du entscheidest dich gegen das Entnehmen der Miete f<>r den Augenblick.","You decide against withdrawing any rent for now."))
|
||
end
|
||
end
|
||
end
|
||
if getRentAmount(toolTown, SourceItem) == 0 then
|
||
local dialog = MessageDialog(common.GetNLS(User,"Grundst<EFBFBD>cksmiete","Property Rent"), common.GetNLS(User,"Es sind keine Mieteinnahmen in der Schatzkiste.","There is currently no rental payment available for collection."), callback)
|
||
User:requestMessageDialog(dialog)
|
||
else
|
||
local dialog = SelectionDialog(common.GetNLS(User,"Grundst<EFBFBD>cksmiete","Property Rent") , common.GetNLS(User,"Derzeit sind Mieteinnahmen von "..rentDE.." in der Schatzkiste. M<>chtest du sie entnehmen?","There's currently "..rent.." in the treasury for rental payments.\nDo you want to withdraw any?") , callback)
|
||
dialog:addOption(0,common.GetNLS(User,"Geld entnehmen","Withdraw money"))
|
||
dialog:addOption(0,common.GetNLS(User,"Nichts entnehmen","Do not withdraw any"))
|
||
User:requestSelectionDialog(dialog)
|
||
end
|
||
end
|
||
|
||
function townProperties(user, toolTown, SourceItem)
|
||
|
||
local town = getTown(toolTown)
|
||
|
||
local callback = function(dialog)
|
||
if not dialog:getSuccess() then
|
||
return
|
||
end
|
||
|
||
local selected = dialog:getSelectedIndex() + 1
|
||
|
||
if selected == 1 then
|
||
rentCollection(user, toolTown, SourceItem)
|
||
else
|
||
utility.allowAllAutomaticRentExtension(user, town)
|
||
end
|
||
end
|
||
|
||
local title = {
|
||
english = "Property Management",
|
||
german = "Grundst<EFBFBD>cksverwaltung"
|
||
}
|
||
|
||
local text = {
|
||
english = "Select what you want to do",
|
||
german = "Was m<>chtest du tun?"
|
||
}
|
||
|
||
local dialog = SelectionDialog(common.GetNLS(user, title.german, title.english), common.GetNLS(user, text.german, text.english), callback)
|
||
|
||
dialog:addOption(0, common.GetNLS(user, "Miete abkassieren", "Collect Rent"))
|
||
dialog:addOption(0, common.GetNLS(user, "Unbeaufsichtigte Mietverl<72>ngerung f<>r alle Grundst<73>cke zulassen", "Allow Unsupervised Rent Extension for All properties"))
|
||
user:requestSelectionDialog(dialog)
|
||
end
|
||
|
||
local function messageSeen(user, toolTown)
|
||
|
||
local townNames = {"Cadomyr", "Runewick", "Galmair"}
|
||
local townBoardQuestIds = {Runewick = 256, Cadomyr = 257, Galmair = 258}
|
||
local townQuestId = townBoardQuestIds[townNames[toolTown]]
|
||
|
||
local lastSeen = user:getQuestProgress(townQuestId)
|
||
|
||
local foundLatest, latest = ScriptVars:find("latestMessage"..townNames[toolTown])
|
||
|
||
if foundLatest and tonumber(latest) ~= lastSeen then
|
||
user:setQuestProgress(townQuestId, tonumber(latest))
|
||
end
|
||
end
|
||
|
||
function TownAnnouncement(user, toolTown)
|
||
|
||
messageSeen(user, toolTown)
|
||
|
||
-- selection dialog
|
||
local callback = function(dialog)
|
||
if not dialog:getSuccess() then
|
||
return
|
||
end
|
||
local selected = dialog:getSelectedIndex() + 1
|
||
if selected == 1 then
|
||
TownAnnouncementShow(user,toolTown)
|
||
elseif selected == 2 then
|
||
TownAnnouncementInput(user,toolTown)
|
||
end
|
||
end
|
||
|
||
local dialogTitle = common.GetNLS(user, "Ank<EFBFBD>ndigung", "Announcement")
|
||
local dialogText = common.GetNLS(user, "W<EFBFBD>hle eine Option.", "Chose an option.")
|
||
local dialog = SelectionDialog(dialogTitle, dialogText, callback)
|
||
|
||
local options = common.GetNLS(user, {"Ank<EFBFBD>ndigung lesen", "Ank<EFBFBD>ndigung schreiben"}, {"Read announcement", "Write new announcement"})
|
||
|
||
for i = 1, #options do
|
||
dialog:addOption(0, options[i])
|
||
end
|
||
|
||
dialog:setCloseOnMove()
|
||
user:requestSelectionDialog(dialog)
|
||
|
||
end
|
||
|
||
function TownAnnouncementShow(User,toolTown)
|
||
|
||
messageSeen(User, toolTown)
|
||
|
||
-- message dialog
|
||
local callback = function() end --empty callback
|
||
local title = common.GetNLS(User, "Derzeitige Ank<6E>ndigung", "Current announcement")
|
||
|
||
--read
|
||
local options = {"announcementCadomyr", "announcementRunewick", "announcementGalmair"}
|
||
local text
|
||
|
||
if options[toolTown] then
|
||
local found, value = ScriptVars:find(options[toolTown])
|
||
if found then
|
||
text = value
|
||
else
|
||
text = common.GetNLS(User, "Keine Ank<6E>ndigungen.", "No current announcement.")
|
||
end
|
||
else
|
||
text = common.GetNLS(User,"Fehler. Bitte informiere einen Entwickler.","Error. Please inform a developer.")
|
||
end
|
||
|
||
local dialog = MessageDialog(title, text, callback)
|
||
User:requestMessageDialog(dialog)
|
||
|
||
end
|
||
|
||
function TownAnnouncementInput(user,toolTown)
|
||
|
||
-- input dialog
|
||
local title = common.GetNLS(user, "Ank<EFBFBD>ndigung schreiben", "Write new announcement")
|
||
local text = common.GetNLS(user, "Schreibe deine neue Ank<6E>ndigung. Abbruch f<>hrt dazu, dass die derzeitige Ank<6E>ndigung beibehalten wird.", "Write your new announcement. Cancel to keep current announcement.")
|
||
|
||
local callback = function(dialog)
|
||
if not dialog:getSuccess() then
|
||
return
|
||
else
|
||
local writtenText = dialog:getInput()
|
||
if string.len (writtenText) > 986 then
|
||
user:inform("Deine Ank<6E>ndigung ist zu lang.","The announcement is too long.",Character.highPriority)
|
||
else
|
||
--write
|
||
local options = {"announcementCadomyr", "announcementRunewick", "announcementGalmair"}
|
||
local townNames = {"Cadomyr", "Runewick", "Galmair"}
|
||
local townBoardQuestIds = {Runewick = 256, Cadomyr = 257, Galmair = 258}
|
||
local townQuestId = townBoardQuestIds[townNames[toolTown]]
|
||
|
||
if options[toolTown] then
|
||
ScriptVars:set(options[toolTown], writtenText)
|
||
|
||
local foundLatest, latest = ScriptVars:find("latestMessage"..townNames[toolTown])
|
||
|
||
if not foundLatest then
|
||
latest = 0
|
||
end
|
||
|
||
latest = tonumber(latest) + 1
|
||
|
||
ScriptVars:set("latestMessage"..townNames[toolTown], tostring(latest))
|
||
|
||
ScriptVars:save()
|
||
|
||
user:setQuestProgress(townQuestId, latest)
|
||
|
||
world:broadcast("In "..townNames[toolTown].." wurde eine neue Ank<6E>ndigung ver<65>ffentlicht.", "A new announcement has been published in "..townNames[toolTown]..".")
|
||
else
|
||
common.InformNLS(user,"Ung<EFBFBD>ltige Stadt. Bitte informiere einen Entwickler.","Invalid town. Please report to a developer.")
|
||
end
|
||
end
|
||
end
|
||
end
|
||
local dialog = InputDialog(title, text, false, 986, callback)
|
||
user:requestInputDialog(dialog)
|
||
|
||
end
|
||
|
||
function TownGuard(User,toolTown)
|
||
|
||
local callback = function(dialog)
|
||
if not dialog:getSuccess() then
|
||
common.InformNLS(User,"Abbruch. Niemand wurde gebannt.","Aborted. No one was banned.")
|
||
return
|
||
end
|
||
|
||
local myString = dialog:getInput()
|
||
local myCharId
|
||
local myCharName
|
||
local allFound = false
|
||
local a, b, _
|
||
if string.find(myString,"(%d+)") then
|
||
_, _, myCharId = string.find(myString,"(%d+)")
|
||
myCharId = tonumber(myCharId)
|
||
allFound = true
|
||
elseif string.find(myString,".*") then
|
||
a,b = string.find(myString,".*")
|
||
myCharName=string.sub (myString, a,b)
|
||
allFound = true
|
||
end
|
||
if allFound then
|
||
local onlineChars = world:getPlayersOnline()
|
||
local theChar
|
||
for i = 1, #onlineChars do
|
||
local checkChar = onlineChars[i]
|
||
if myCharId then
|
||
if checkChar.id == myCharId then
|
||
theChar = checkChar
|
||
break
|
||
end
|
||
else
|
||
if checkChar.name == myCharName then
|
||
theChar = checkChar
|
||
break
|
||
end
|
||
end
|
||
end
|
||
if not theChar then
|
||
common.InformNLS(User,"Charakter wurde nicht gefunden.","Character was not found.")
|
||
else
|
||
local townId = toolTown
|
||
factions.setIndividualPlayerRelation(theChar, townId, factions.RELATION_HOSTILE, 3);
|
||
common.InformNLS(User,theChar.name.." ist f<>r einen Zwergentag gebannt.",theChar.name.." is banned for one dwarven day.")
|
||
User:logAdmin("bans " .. theChar.name .. " for one day from " .. factions.getTownNameByID(townId));
|
||
log(string.format("[Town Management] %s bans %s for one day from " .. factions.getTownNameByID(townId),
|
||
character.LogText(User), theChar.name));
|
||
end
|
||
else
|
||
common.InformNLS(User,"Du hast nicht alle notwendige Information angegeben.","You haven't put in all necessary information.")
|
||
end
|
||
end
|
||
|
||
local dialogTitle = common.GetNLS(User, "Charakter bannen", "Ban a character")
|
||
local dialogText = common.GetNLS(User, "Um einen Charakter einen Zwergentag zu bannen, gib folgendes an: [Name|ID] Beispiel: Max Mustermann", "To ban a character for one dwarven day, please insert: [Name|ID] Example: John Doe")
|
||
local dialog = InputDialog(dialogTitle, dialogText, false, 255, callback)
|
||
|
||
User:requestInputDialog(dialog)
|
||
end
|
||
|
||
local function statusCheckAndConfirmation(user, targetId, toolTown, townTool, name)
|
||
|
||
local statuses = {
|
||
granted = {english = "granted", german = "Erteilt"},
|
||
restricted = {english = "restricted", german = "Eingeschr<EFBFBD>nkt"},
|
||
default = {english = "the town default", german = "Standard der Stadt"}
|
||
}
|
||
|
||
local oldStatus = townTool:getData("licence"..targetId)
|
||
|
||
local callback = function (dialog)
|
||
|
||
if not dialog:getSuccess() then
|
||
return
|
||
end
|
||
|
||
local selected = dialog:getSelectedIndex() + 1
|
||
|
||
local chosenText
|
||
|
||
local noChange = false
|
||
|
||
local newStatus
|
||
|
||
if selected == 1 then
|
||
|
||
chosenText = common.GetNLS(user, statuses.granted.german, statuses.granted.english)
|
||
|
||
if oldStatus == "granted" then
|
||
noChange = true
|
||
end
|
||
|
||
newStatus = statuses.granted.english
|
||
|
||
elseif selected == 2 then
|
||
|
||
chosenText = common.GetNLS(user, statuses.restricted.german, statuses.restricted.english)
|
||
|
||
if oldStatus == "restricted" then
|
||
noChange = true
|
||
end
|
||
|
||
newStatus = statuses.restricted.english
|
||
|
||
elseif selected == 3 then
|
||
|
||
chosenText = common.GetNLS(user, statuses.default.german, statuses.default.english)
|
||
|
||
if common.IsNilOrEmpty(oldStatus) then
|
||
noChange = true
|
||
end
|
||
|
||
newStatus = ""
|
||
end
|
||
|
||
if noChange then
|
||
user:inform("Die Rechte von "..name..", die Werkzeuge der Stadt zu verwenden, sind bereit auf '"..chosenText.."' gesetzt.", name.."'s rights to use the town tools are already set to be "..chosenText)
|
||
else
|
||
townTool:setData("licence"..targetId, newStatus)
|
||
world:changeItem(townTool)
|
||
user:inform("Die Rechte von "..name..", die Werkzeuge der Stadt zu verwenden, wurde zu '"..chosenText.."' ge<67>ndert.", name.."'s rights to use the town tools have been changed to be "..chosenText..".")
|
||
end
|
||
end
|
||
|
||
--Check the status of the person, get confirmation for changing the status to the opposite status, save that new status in the townTool as item variable
|
||
|
||
local title = common.GetNLS(user, "W<EFBFBD>hle den neuen Status", "Select new status")
|
||
local text = common.GetNLS(user, "Bitte w<>hle den neuen Status aus, den du bez<65>glich der Lizenzen f<>r "..name.." festlegen m<>chtest.", "Please select the new status you want to set in regards to licences for "..name..".")
|
||
local dialog = SelectionDialog(title, text, callback)
|
||
|
||
dialog:addOption(0, common.GetNLS(user, "Erteilt", "Granted"))
|
||
dialog:addOption(0, common.GetNLS(user, "Eingeschr<EFBFBD>nkt", "Restricted"))
|
||
dialog:addOption(0, common.GetNLS(user, "Standard der Stadt", "The town default"))
|
||
|
||
dialog:setCloseOnMove()
|
||
|
||
user:requestSelectionDialog(dialog)
|
||
end
|
||
|
||
local function setIndividualsLicence(user, toolTown, townTool)
|
||
|
||
local callback = function(dialog)
|
||
if not dialog:getSuccess() then
|
||
return
|
||
end
|
||
|
||
local input = dialog:getInput()
|
||
|
||
local targetExists, targetId = world:getPlayerIdByName(input)
|
||
|
||
if not targetExists then
|
||
user:inform("Niemand in Illarion tr<74>gt diesen Namen.", "No one by that name exists, at least not within the realms of Illarion.")
|
||
return
|
||
end
|
||
|
||
statusCheckAndConfirmation(user, targetId, toolTown, townTool, input)
|
||
end
|
||
|
||
local dialog = InputDialog(common.GetNLS(user, "Namenseingabe", "Enter The Individuals Name"), common.GetNLS(user, "Gib den Namen der Person ein, f<>r die du den Lizenzstatus innerhalb der Stadt <20>ndern m<>chtest.", "Enter the name of the individual you wish to change the town's tool license status for."), false, 255, callback)
|
||
|
||
user:requestInputDialog(dialog)
|
||
end
|
||
|
||
function TownLicence(user,toolTown, townTool)
|
||
|
||
local factionIds = {0,1,2,3}
|
||
local FirstLicence = toolTown
|
||
local licenceStrings = {}
|
||
licenceStrings[licence.PERMISSION_NONE] = common.GetNLS(user, "Benutzung von statischen Werkzeugen ist verboten.", "Permission for static tools is restricted.")
|
||
licenceStrings[licence.PERMISSION_ACTIVE] = common.GetNLS(user, "Benutzung von statischen Werkzeugen ist erlaubt.", "Permission for static tools is granted.")
|
||
local TextWithRespctToA = common.GetNLS(user, " f<>r ", " with respect to ")
|
||
local TextWithRespctToB = common.GetNLS(user, " f<>r ...", " with respect to ...")
|
||
local TextSetLicenceOf = common.GetNLS(user, "Setze die Lizenz von ", "Set licence of ")
|
||
local TextTo = common.GetNLS(user, " auf ...", " to ...")
|
||
local TextLicence = common.GetNLS(user, "Lizenz", "Licence")
|
||
local TextSetLicence = common.GetNLS(user, "Setze Lizenz", "Set licence")
|
||
|
||
local licenceValues = {licence.PERMISSION_NONE, licence.PERMISSION_ACTIVE}
|
||
local cbSecondLicence = function (dialog)
|
||
if not dialog:getSuccess() then
|
||
return
|
||
end
|
||
local SecondLicence = factionIds[dialog:getSelectedIndex() + 1]
|
||
|
||
if dialog:getSelectedIndex() + 1 == 5 then
|
||
setIndividualsLicence(user, toolTown, townTool)
|
||
return
|
||
end
|
||
|
||
local cbSetLicence = function (subdialog)
|
||
if not subdialog:getSuccess() then
|
||
return
|
||
end
|
||
local newLicence = licenceValues[subdialog:getSelectedIndex() + 1]
|
||
licence.SetLicence(FirstLicence, SecondLicence, newLicence)
|
||
licenceStrings[licence.PERMISSION_NONE] = "restricted"
|
||
licenceStrings[licence.PERMISSION_ACTIVE] = "granted"
|
||
user:logAdmin("sets license of " .. factions.getTownNameByID(FirstLicence) .. " with respect to " .. factions.getTownNameByID(SecondLicence) .. " to " .. licenceStrings[newLicence] )
|
||
log(string.format("[Town Management] %s sets license of %s with respect to %s to " .. licenceStrings[newLicence],
|
||
character.LogText(user), factions.getTownNameByID(FirstLicence), factions.getTownNameByID(SecondLicence)));
|
||
end
|
||
local sd = SelectionDialog(TextSetLicence, TextSetLicenceOf .. factions.getTownNameByID(FirstLicence) .. TextWithRespctToA .. factions.getTownNameByID(SecondLicence) .. TextTo, cbSetLicence)
|
||
for _,m in ipairs(licenceValues) do
|
||
sd:addOption(0, licenceStrings[m])
|
||
end
|
||
|
||
sd:setCloseOnMove()
|
||
user:requestSelectionDialog(sd)
|
||
end
|
||
local sd = SelectionDialog(TextLicence, TextSetLicenceOf .. factions.getTownNameByID(FirstLicence) .. TextWithRespctToB, cbSecondLicence)
|
||
for _,f in ipairs(factionIds) do
|
||
sd:addOption(0,factions.getTownNameByID(f) .. ": " .. licenceStrings[licence.GetLicenceByFaction(FirstLicence, f)])
|
||
end
|
||
sd:addOption(0, common.GetNLS(user,"Setze Lizenz f<>r eine Person", "Set licence for individual"))
|
||
|
||
sd:setCloseOnMove()
|
||
user:requestSelectionDialog(sd)
|
||
end
|
||
|
||
|
||
local keyID = {}
|
||
keyID[1]={3054,3054,3054,2558,2558,2558,2558,2558}
|
||
keyID[2]={2558,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558}
|
||
keyID[3]={3056,3055,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558,2558}
|
||
|
||
local keydoorsID = {}
|
||
keydoorsID[1]={340,341,342,343,361,363,365,367}
|
||
keydoorsID[2]={240,241,242,251,211,210,236,233,235,234,230,231,243}
|
||
keydoorsID[3]={110,111,120,121,122,123,124,125,126,127,128,113,114,115,131,132,133}
|
||
|
||
local keydoorsnameDE = {}
|
||
local keydoorsnameEN = {}
|
||
keydoorsnameDE[1]={"Villa Annabeth","Villa Edward","Villa Reginald","Villa Annabeth Keller","Wohnungsquartier - Glaube & Gehorsam","Wohnungsquartier - Ehrlichkeit & Gerechtigkeit","Wohnungsquartier - Patriarchat","Schlangenturm"}
|
||
keydoorsnameEN[1]={"Villa Annabeth","Villa Edward","Villa Reginald","Villa Annabeth Basement","Flat quarter - Faith & Obedience","Flat quarter - Truth & Justice","Flat quarter - Patriarchy","Serpent Tower"}
|
||
keydoorsnameDE[2]={"Insel des Feuers Appartement 1","Insel des Feuers Appartement 2","Insel des Feuers Appartement 3","Landhaus","Insel der Luft Appartement 2","Insel der Luft Appartement 1","Insel der Erde Appartement 6","Insel der Erde Appartement 3","Insel der Erde Appartement 5","Insel der Erde Appartement 4","Insel der Erde Appartement 1","Insel der Erde Appartement 2","Insel des Feuers Appartement 4"}
|
||
keydoorsnameEN[2]={"Island of Fire Apartment 1","Island of Fire Apartment 2","Island of Fire Apartment 3","Cottage","Island of Air Apartment 2","Island of Air Apartment 1","Island of Earth Apartment 6","Island of Earth Apartment 3","Island of Earth Apartment 5","Island of Earth Apartment 4","Island of Earth Apartment 1","Island of Earth Apartment 2","Island of Fire Apartment 4"}
|
||
keydoorsnameDE[3]={"Malachite Haus","Villa Goldader","Wohnung Irmorom","Wohnung Elara","Wohnung Adron","Wohnung Malachin","Wohnung Oldra","Wohnung Nargun","Wohnung Ronagan","Wohnung Sirani","Wohnung Zhambra", "Gl<EFBFBD>ckskupfer", "Silberner Verdienst", "Goldener Abschluss","Wohnung Saphir","Wohnung Diamant","Wohnung Obsidian"}
|
||
keydoorsnameEN[3]={"House of Malachite","Villa Goldvein","Flat Irmorom","Flat Elara","Flat Adron","Flat Malachin","Flat Oldra","Flat Nargun","Flat Ronagan","Flat Sirani","Flat Zhambra", "Lucky Copper", "Silver Profit", "Golden Deal","Flat Sapphire", "Flat Diamond", "Flat Obisidian"}
|
||
|
||
|
||
function TownKey(User,toolTown)
|
||
local callback = function(dialog)
|
||
if not dialog:getSuccess() then
|
||
return
|
||
end
|
||
|
||
local selected = dialog:getSelectedIndex() + 1
|
||
common.CreateItem(User, keyID[toolTown][selected], 1, 999, {["lockId"]=keydoorsID[toolTown][selected],["descriptionDe"]=keydoorsnameDE[toolTown][selected],["descriptionEn"]=keydoorsnameEN[toolTown][selected]})
|
||
User:logAdmin("creates a key for " .. keydoorsnameEN[toolTown][selected])
|
||
log(string.format("[Town Management] %s creates a key for %s ",
|
||
character.LogText(User) , keydoorsnameEN[toolTown][selected]));
|
||
end
|
||
|
||
local dialogTitle = common.GetNLS(User, "Schl<EFBFBD>sselgenerator", "Key-Generator")
|
||
local dialogText = common.GetNLS(User, "Erstelle einen Schl<68>ssel f<>r folgende Türen.", "Create a key for following doors.")
|
||
local dialog = SelectionDialog(dialogTitle, dialogText, callback)
|
||
|
||
local keydoorsname = common.GetNLS(User, keydoorsnameDE[toolTown], keydoorsnameEN[toolTown])
|
||
for i = 1, #keydoorsname do
|
||
dialog:addOption(0, keydoorsname[i])
|
||
end
|
||
|
||
dialog:setCloseOnMove()
|
||
User:requestSelectionDialog(dialog)
|
||
end
|
||
|
||
function TownMaterial(User, townId)
|
||
collectionchest.manageCollections(User, townId)
|
||
end
|
||
return M
|