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

Guild Wars 0.3.6

freddzor11

Member
Joined
May 25, 2009
Messages
695
Reaction score
5
I can invite but not accept guild wars

Lua:
[Error - TalkAction Interface] 
[16/08/2013 22:13:43] data/talkactions/scripts/war.lua:onSay
[16/08/2013 22:13:43] Description: 
[16/08/2013 22:13:43] data/talkactions/scripts/war.lua:70: attempt to call global 'doGuildAddEnemy' (a nil value)
[16/08/2013 22:13:43] stack traceback:
[16/08/2013 22:13:43] 	data/talkactions/scripts/war.lua:70: in function <data/talkactions/scripts/war.lua:1>

Lua:
function onSay(cid, words, param, channel)
	local guild = getPlayerGuildId(cid)
	if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER)then
		doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You cannot execute this talkaction.")
		return true
	end

	local t = string.explode(param, ",")
	if(not t[2]) then
		doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Not enough param(s).")
		return true
	end

	local enemy = getGuildId(t[2])
	if(not enemy) then
		doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Guild \"" .. t[2] .. "\" does not exists.")
		return true
	end

	if(enemy == guild) then
		doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You cannot perform war action on your own guild.")
		return true
	end

	local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy)
	if(tmp:getID() ~= -1) then
		enemyName = tmp:getDataString("name")
		tmp:free()
	end

	if(isInArray({"accept", "reject", "cancel"}, t[1])) then
		local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild
		if(t[1] == "cancel") then
			query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy
		end

		tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0")
		if(tmp:getID() == -1) then
			doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Currently there's no pending invitation for a war with " .. enemyName .. ".")
			return true
		end

		if(t[1] == "accept") then
			local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)
			local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment")

			_tmp:free()
			if(state) then
				doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Your guild balance is too low to accept this invitation.")
				return true
			end

			db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild)
		end

		query = "UPDATE `guild_wars` SET "
		local msg = "accepted " .. enemyName .. " invitation to war."
		if(t[1] == "reject") then
			query = query .. "`end` = " .. os.time() .. ", `status` = 2"
			msg = "rejected " .. enemyName .. " invitation to war."
		elseif(t[1] == "cancel") then
			query = query .. "`end` = " .. os.time() .. ", `status` = 3"
			msg = "canceled invitation to a war with " .. enemyName .. "."
		else
			query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1"
		end

		query = query .. " WHERE `id` = " .. tmp:getDataInt("id")
		if(t[1] == "accept") then
			doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD)
			doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY)
		end

		tmp:free()
		db.executeQuery(query)
		doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE)
		return true
	end

	if(t[1] == "invite") then
		local str = ""
		tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)")
		if(tmp:getID() ~= -1) then
			if(tmp:getDataInt("status") == 0) then
				if(tmp:getDataInt("guild_id") == guild) then
					str = "You have already invited " .. enemyName .. " to war."
				else
					str = enemyName .. " have already invited you to war."
				end
			else
				str = "You are already on a war with " .. enemyName .. "."
			end

			tmp:free()
		end

		if(str ~= "") then
			doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, str)
			return true
		end

		local frags = tonumber(t[3])
		if(frags ~= nil) then
			frags = math.max(10, math.min(1000, frags))
		else
			frags = 100
		end

		local payment = tonumber(t[4])
		if(payment ~= nil) then
			payment = math.max(100000, math.min(1000000000, payment))
			tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

			local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment
			tmp:free()
			if(state) then
				doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Your guild balance is too low for such payment.")
				return true
			end

			db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild)
		else
			payment = 0
		end

		local begining, ending = os.time(), tonumber(t[5])
		if(ending ~= nil and ending ~= 0) then
			ending = begining + (ending * 86400)
		else
			ending = 0
		end

		db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");")
		doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)
		return true
	end

	if(not isInArray({"end", "finish"}, t[1])) then
		return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Unknown parameter.")
	end

	local status = (t[1] == "end" and 1 or 4)
	tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status)
	if(tmp:getID() ~= -1) then
		local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id")
		tmp:free()
		doGuildRemoveEnemy(guild, enemy)
		doGuildRemoveEnemy(enemy, guild)

		db.executeQuery(query)
		doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
		return true
	end

	if(status == 4) then
		doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Currently there's no pending war truce from " .. enemyName .. ".")
		return true
	end

	tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1")
	if(tmp:getID() ~= -1) then
		if(tmp:getDataInt("end") > 0) then
			tmp:free()
			doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You cannot request ending for war with " .. enemyName .. ".")
			return true
		end

		local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id")
		tmp:free()

		db.executeQuery(query)
		doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
		return true
	end

	doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Currently there's no active war with " .. enemyName .. ".")
	return true
end
 
the source codes is some files that you use it to compile your distro
like this ones Subversion
you have to compile your server with this optional flag "-D__WAR_SYSTEM__"
or get a distro that already got that flags before
 
the source codes is some files that you use it to compile your distro
like this ones Subversion
you have to compile your server with this optional flag "-D__WAR_SYSTEM__"
or get a distro that already got that flags before

I don't understans so much right now but maybe you could help me get that "distro" that already got that flags before (please tell me what distro is too)
 
On Windows machine to compile open project in Dev-Cpp, press ALT+P find there 'C++ Compiler' in one of the tabs and add there -D__WAR_SYSTEM__. Rebuild.
On a Linux open configure.ac find OPTIONAL_FLAGS="" and there add -D__WAR_SYSTEM__ so it looks like this: OPTIONAL_FLAGS="-D__WAR_SYSTEM__". Now type make clean && make -j 5.
Mail me back on success or for eventual help.
 
On Windows machine to compile open project in Dev-Cpp, press ALT+P find there 'C++ Compiler' in one of the tabs and add there -D__WAR_SYSTEM__. Rebuild.
On a Linux open configure.ac find OPTIONAL_FLAGS="" and there add -D__WAR_SYSTEM__ so it looks like this: OPTIONAL_FLAGS="-D__WAR_SYSTEM__". Now type make clean && make -j 5.
Mail me back on success or for eventual help.

Do I need to download "C++ Compiler" or should it already be there somewhere?

I just come here and now I don't know what to do more
xDez8.png
 
TFS 0.3.6 does not even have Elf's war system implemented in the source code so trying to compile with the parameter -D__WAR_SYSTEM__ is pointless. :p
 
Back
Top