• 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!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

[Released] Guild War For Count Frags in Site+Tables+Tutorial

GeKirAh

Banned User
Joined
Feb 14, 2009
Messages
163
Reaction score
0
Location
Brazil !!!
Hello Ot-land!!!

Credits:
*Nahruto
*Gekirah



I'm Here to release the guild war system!!!

Lets go!!! :}

IT work with TFS 0.3b3+


Give some reputation for me, or donations!!!
Donations with paypal to email:
[email protected]

Lets go to tutorial!!! :}


1.0Creat an file with name GuildWar.lua with your OT-Server folder {the same folder from distro}, and wrote that with this new lua archive!!!:
Code:
DelayToCancel = 24 * 60 * 60 --minutes

Maps = {
	["map 1"] = 
		{
			Guild1Pos = {x=998, y=1006, z=7},
			Guild2Pos = {x=1002, y=1006, z=7}
		},
	["map 2"] =
		{
			Guild1Pos = {x=994, y=1004, z=6},
			Guild2Pos = {x=1000, y=1003, z=6}			
		}
	}

TimeToTeleport = 1 --minutes, when star a challenge
StopBattle = TRUE --Stop battle after X time ? TRUE  /  FALSE
TimeToStop = 60 --Minutes Time to Stop if StopBattle = TRUE.

--Cancel messages~
CancelMessagesWar = {
	--Message when player try accept/reject/cancel a war but there is no a invitation.
	[1] = "Not pending invitations.",
	--Message when the player is not the guild leader.
	[2] = "Only Guild Leader can execute this command.",
	--Message when try Cancel the invitation but the war is already accepted.
	[3] = "The war is already accepted.",
	--MEssage when the invited guild name is not correct or does not exist.
	[4] = "Not correct guild name.",
	--Message when try invite any guild to a war but his guild already have a war or a pending invitation.
	[5] = "Your guild is already in war or have a pending invitation.",
	--Same of the cancel message 5 but the the enemy guild.
	[6] = "This guild is already in war or have a pending invitation.",
	--Message when use invite command but not write guild name.
	[7] = "Command needs param.",
	--Message when try invite his guild.
	[8] = "You can\´t invite you guild.",
	--Message when the map name is not correct.
	[9] = "Please write a correct name.",
	--Message when try go to any map but the guild is have no received/sent any war invitation
	[10] = "Your guild is not in any war.",
	--When try to cancel a war before the delay
	[11] = "You should wait ".. DelayToCancel .." minutes to cancel the war"
	}
	
--Broadcast messages when invite/accept/reject/cancel ~ Remember the Spaces.
BroadCast_Type = MESSAGE_EVENT_ADVANCE
BroadCast = {
	--Message when inviting
	[1] = 
		{
			"Guild ",
			--Here will be the guild name
			" have invited guild ",
			--Here will be the invited guild name
			" to have a war."
		},
	--Message when accept.
	[2] = 
		{
			"Guild ",
			--Here will be the guild name
			" have accepted the invitation of the guild " ,
			--Here will be the name of the guild who have invited em.
			" to have a war."
		},
	--Message when reject.
	[3] = 
		{
			"Guild ",
			--Here will be the guild name
			" have rejected the invitation of the guild " ,
			--Here will be the name of the guild who have invited em.
			" to have a war."
		},
	--Message when cancel.
	[4] = 
		{
			"Guild ",
			--Here will be the guild name
			" have canceled the invitation to the guild " ,
			--Here will be the name of the guild who have invited em.
			" to have a war."
		},
	--Message whenstar a battle..
	[5] = 
		{
			"Guild ",
			--Here will be the guild name
			" and guild " ,
			--Here will be the name of the guild who have invited em.
			" will have a battle in the map :"
		},
	--message when a battle ends.
	[6] = 
		{
			"The battle betwen guild ",
			--Here will be the guild name
			" and guild " ,
			--Here will be the name of the guild who have invited em.
			" its over."
		},
	}

--Functions ~.
function getGuildWarInfo(id)
	local Info = db.getResult("SELECT `invited_to`, `invited_by`, `in_war_with`,`war_time` FROM `guilds` WHERE `id` = " .. id .. "")
	if Info:getID() ~= LUA_ERROR then
		local invTo, invBy, warWith, Time = Info:getDataInt("invited_to"), Info:getDataInt("invited_by"), Info:getDataInt("in_war_with"), Info:getDataInt("war_time") 
		Info:free()
		return {To = invTo, By = invBy, With = warWith, T = Time}
	end
 	return LUA_ERROR
end

function getGuildNameById(id)
	local Info = db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. id .. "")
		if Info:getID() ~= LUA_ERROR then
		local Name = Info:getDataString("name")
		Info:free()
		return Name
	end
 	return LUA_ERROR
end

function GuildIsInPEace(id)
	local Info = getGuildWarInfo(id)
	return (Info.To == 0 and Info.By == 0 and Info.With == 0)
end

function doInviteToWar(myGuild, enemyGuild)
	db.executeQuery("UPDATE `guilds` SET `invited_to` = ".. enemyGuild .." WHERE `id` = ".. myGuild .."")
	db.executeQuery("UPDATE `guilds` SET `invited_by` = ".. myGuild .." WHERE `id` = ".. enemyGuild .."")
end

function WarAccept(myGuild, enemyGuild)
	local StartTime = os.time()
	db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = ".. StartTime ..", `in_war_with`  =  ".. myGuild ..", `kills` = 0, `show` = 1 WHERE `id` = ".. enemyGuild .."")
	db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = ".. StartTime ..", `in_war_with`  =  ".. enemyGuild ..", `kills` = 0, `show` = 0 WHERE `id` = ".. myGuild .."")
end

function cleanInfo(myGuild)
	db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = 0, `in_war_with`  =  0, `kills` = 0, `show` = 0 WHERE `id` = ".. myGuild .."")
end

function registerDeath(myGuild, enemyGuild, cid, target)
	db.executeQuery("INSERT INTO `deaths_in_wars` (`guild_id`, `player_id`, `killer_guild`, `killer`, `date`) VALUES ("..enemyGuild..", "..getPlayerGUID(target)..", "..myGuild..", "..getPlayerGUID(cid)..", " .. os.time() ..");")	
	db.executeQuery("UPDATE `guilds` SET `kills` = `kills` + 1 WHERE `id` = ".. myGuild .."")
end

function StopWar(myGuild, enemyGuild)
	cleanInfo(myGuild)
	cleanInfo(enemyGuild)
	removeDeaths(myGuild)
	removeDeaths(enemyGuild)
end

function removeDeaths(id)
	db.executeQuery("DELETE FROM `deaths_in_wars` WHERE `guild_id` = " ..id .. ";")
end

function WeAreInWar(myGuild, enemyGuild)
	local myGuildInfo = getGuildWarInfo(myGuild)
	local enemyGuildInfo = getGuildWarInfo(enemyGuild)
	if myGuild == enemyGuildInfo.With and enemyGuild ==  myGuildInfo.With then
		if enemyGuildInfo.ON == 1 and myGuildInfo.ON == 1 then
			return TRUE
		end		
	end
	return FALSE
end

function getOnlineMembers(id)
	local PlayersOnline = getPlayersOnline()
	local MembersOnline = {}
	for i, pid in ipairs(PlayersOnline) do
		if id == getPlayerGuildId(PlayersOnline[i]) then
			table.insert(MembersOnline, PlayersOnline[i])
		end
	end
	return MembersOnline
end

function teleportGuild(id, pos)
	local Members = getOnlineMembers(id)
	if #Members > 0 then
		for i = 1, #Members do
			if getTilePzInfo(getCreaturePosition(Members[i])) == TRUE then
				doTeleportThing(Members[i], pos, FALSE)
				doSendMagicEffect(pos, CONST_ME_TELEPORT)
				doSendMagicEffect(getCreaturePosition(Members[i]), CONST_ME_POFF)
			end
		end
	end
end

function removeFrag(cid)
	local FragTime = getConfigInfo('timeToDecreaseFrags')
	local myFragTime = getPlayerRedSkullTicks(cid)
	local Remo = (myFragTime - FragTime)
	if Remo < 0 then
		Remo = 0
	end
	doPlayerSetRedSkullTicks(cid, Remo)
end

function getGuildsWithWar()
	local res = db.getResult("SELECT `id` FROM `guilds` WHERE `in_war_with` > 0")
	local GuildW = {}
	if res:getID() ~= LUA_ERROR then
		while true do
			table.insert(GuildW, res:getDataInt "id")
			if not res:next() then
				break
			end
		end
		res:free()
	end
	return GuildW
end

function guildExist(nom)
	local Get = db.getResult("SELECT `id` FROM `guilds` WHERE `name` = " .. db.escapeString(nom) .. ";")
	if Get:getID() ~= LUA_ERROR then
		local ret = Get:getDataInt("id")
		Get:free()
		return ret
	end
 	return LUA_ERROR
end

function StarWar(x)
	teleportGuild(x.myGuild, Maps[x.map].Guild1Pos)
	teleportGuild(x.enemyGuild, Maps[x.map].Guild2Pos)
--[[	
	putWarOn(x.myGuild, x.enemyGuild)
	if StopBattle == TRUE then
		addEvent(StopWarNow, 60 * 1000, {myGuild = x.myGuild, enemyGuild = x.enemyGuild})
	end
]]
end	

--[[
function StopWarNow(c)
	StopWar(c.myGuild, c.enemyGuild)
	doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(c.myGuild).. BroadCast[6][2] ..getGuildNameById(c.enemyGuild).. BroadCast[6][3], BroadCast_Type)
end

function putWarOn(myGuild, enemyGuild)
	db.executeQuery("UPDATE `guilds` SET `war_time`  = 1 WHERE `id` = ".. myGuild .."")
	db.executeQuery("UPDATE `guilds` SET `war_time`  = 1 WHERE `id` = ".. enemyGuild .."")
end
]]

2.0Create an file with folder: data\creaturescripts\scripts with name: Kill.lua and wrote this:
Code:
dofile("./arena.lua")
dofile("./GuildWar.lua")
dofile("./bounty.lua")

local PZ = createConditionObject(CONDITION_INFIGHT)
setConditionParam(PZ, CONDITION_PARAM_TICKS, getConfigInfo('pzLocked'))

function onKill(cid, target)
	if isPlayer(cid) == TRUE and isPlayer(target) == TRUE then
		local myGuild = getPlayerGuildId(cid)
		local enemyGuild = getPlayerGuildId(target)
		if myGuild ~= 0 and enemyGuild ~= 0 then
			if enemyGuild == getGuildWarInfo(myGuild).With then
				removeFrag(cid)
				doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "This Frag will not count") --Remove this if you wish
				doAddCondition(cid, PZ)
				registerDeath(myGuild, enemyGuild, cid, target)
			end
		end
		local Target = getPlayerGUID(target)
		if IsHunted(Target) == TRUE then
			if isKilled(Target) == FALSE then
				doPlayerAddMoney(cid, GetReward(Target))
				doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Congratulations you received " .. GetReward(Target) .. " GPs for killing "..getCreatureName(target)..".")
				UpdateKiller(getPlayerGUID(target), getPlayerGUID(cid))
			end
		end
	end
	if getPlayerStorageValue(cid, isIN) == 1 then
		local Room = getArenaMonsterIdByName(getCreatureName(target))
		if Room ~= 0 then
			setPlayerStorageValue(cid, Room, 1)
			doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, Cancel[8])
		end
	end
	return TRUE
end

3.0 add to creaturescripts.xml {it are with creaturescripts folder}:
add a line with it:
Code:
	<event type="kill" name="PlayerKill" event="script" value="kill.lua"/>

4.0 Create an file with folder {data\globalevents\cripts} with name wars.lua, and write that!!!
Code:
dofile("./GuildWar.lua")

function onThink(interval, lastExecution)
	for _, id in ipairs(getGuildsWithWar()) do
		local Check = db.getResult("SELECT `name` FROM `guilds` WHERE id = ".. getGuildWarInfo(id).With .."")
		if Check:getID() == LUA_ERROR then
			cleanInfo(id)
		end
	end
	return TRUE
end

5.0add line with globalevents.xml {its with globalevents folder} and write that with this line:
<globalevent name="wars" interval="1800" event="script" value="wars.lua"/> <!--1800 is 30 minutes-->

6.0Create an file with data\talkactions\scripts, with a name GuildWar.lua and write that:
Code:
dofile("./GuildWar.lua")

function onSay(cid, words, param)
	if getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER then
		local myGuild = getPlayerGuildId(cid)
		if words == "/war-invite" then
			if GuildIsInPEace(myGuild) == true then
				if param ~= "" then
					if guildExist(param) ~= LUA_ERROR then
						local invitedGuild = getGuildId(param)
						if invitedGuild ~= LUA_ERROR then
							if invitedGuild ~= myGuild then
								if GuildIsInPEace(invitedGuild) == true then
									doInviteToWar(myGuild, invitedGuild)
									doBroadcastMessage(BroadCast[1][1] ..getPlayerGuildName(cid).. BroadCast[1][2] ..getGuildNameById(invitedGuild).. BroadCast[1][3], BroadCast_Type)
								else
									doPlayerSendCancel(cid, CancelMessagesWar[6])
								end
							else
								doPlayerSendCancel(cid, CancelMessagesWar[8])
							end
						else
							doPlayerSendCancel(cid, CancelMessagesWar[4])
						end
					else
						doPlayerSendCancel(cid, CancelMessagesWar[4])
					end
				else
					doPlayerSendCancel(cid, CancelMessagesWar[7])
				end
			else
				doPlayerSendCancel(cid, CancelMessagesWar[5])
			end
		elseif words == "/war-accept" then
			if getGuildWarInfo(myGuild).By ~= 0 then
				local enemyGuild = getGuildWarInfo(myGuild).By
				doBroadcastMessage(BroadCast[2][1] ..getPlayerGuildName(cid).. BroadCast[2][2] ..getGuildNameById(enemyGuild).. BroadCast[2][3], BroadCast_Type)
				WarAccept(myGuild, enemyGuild)
			else
				doPlayerSendCancel(cid, CancelMessagesWar[1])
			end
		elseif words == "/war-reject" then
			if getGuildWarInfo(myGuild).By ~= 0 then
				doBroadcastMessage(BroadCast[3][1] ..getPlayerGuildName(cid).. BroadCast[3][2] ..getGuildNameById(getGuildWarInfo(myGuild).By).. BroadCast[3][3], BroadCast_Type)
				cleanInfo(getGuildWarInfo(myGuild).By)
				cleanInfo(myGuild)
			else
				doPlayerSendCancel(cid, CancelMessagesWar[1])	
			end
		elseif words == "/war-cancel-invite" then
			if getGuildWarInfo(myGuild).To ~= 0 then
				if getGuildWarInfo(myGuild).With == 0 then
					doBroadcastMessage(BroadCast[4][1] ..getPlayerGuildName(cid).. BroadCast[4][2] ..getGuildNameById(getGuildWarInfo(myGuild).To).. BroadCast[4][3], BroadCast_Type)
					cleanInfo(getGuildWarInfo(myGuild).To)
					cleanInfo(myGuild)
				else
					doPlayerSendCancel(cid, CancelMessagesWar[3])
				end
			else
				doPlayerSendCancel(cid, CancelMessagesWar[1])	
			end
		elseif words == "/war-challenge" then
			local map = Maps[param]
			if map then
				if getGuildWarInfo(myGuild).With ~= 0 and getGuildWarInfo(myGuild).ON == 0 then
					local enemyGuild = getGuildWarInfo(myGuild).With
					addEvent(StarWar, 15 * 1000, {myGuild = myGuild, enemyGuild = enemyGuild, map = param})
					doBroadcastMessage(BroadCast[5][1] ..getPlayerGuildName(cid).. BroadCast[5][2] ..getGuildNameById(enemyGuild).. BroadCast[5][3] .. param ..".", BroadCast_Type)
				else
					doPlayerSendCancel(cid, CancelMessagesWar[10])
				end
			else
				doPlayerSendCancel(cid, CancelMessagesWar[9])
			end
		elseif words == "/war-cancel" then
			local enemy = getGuildWarInfo(myGuild).With
			if enemy ~= 0 then
				if (os.time() - getGuildWarInfo(myGuild).T) >= (60 * DelayToCancel) then
					StopWar(myGuild, enemy)
					doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(myGuild).. BroadCast[6][2] ..getGuildNameById(enemy).. BroadCast[6][3], BroadCast_Type)
				else
					doPlayerSendCancel(cid, CancelMessagesWar[11])
				end
			else
				doPlayerSendCancel(cid, CancelMessagesWar[10])
			end
		end
	else
		doPlayerSendCancel(cid, CancelMessagesWar[2])
	end
	local file = io.open("data/logs/Wars.txt", "a") 
	file:write("".. os.date("%d %B %Y %X ", os.time()) .." -->  "..getCreatureName(cid)..": "..words.." "..param.."\n") 
	file:close() 
	return TRUE
end

7.0Add line to talkactions.xml {its with talkactions folder} and add that:
Code:
	<!--Guilds Wars-->
	<talkaction words="/war-invite" script="GuildWar.lua" />	
	<talkaction words="/war-accept" script="GuildWar.lua" />	
	<talkaction words="/war-reject" script="GuildWar.lua" />
	<talkaction words="/war-cancel" script="GuildWar.lua" />	
	<talkaction words="/war-challenge" script="GuildWar.lua" />	
	<talkaction words="/war-cancel-invite" script="GuildWar.lua" />

THE THINGS FROM SERVER, ARE DONE, NOW LETS CONFIG THE WEBSITE!!!

8.0Create an file with name wars.php, with htdocs folder,
and write this:
Code:
<?PHP
//Litle Config
$MaxShow = 20;
//END

if($action == '')
{
$main_content .= '
<P ALIGN=CENTER>
	<br>
	<FONT SIZE=4 COLOR=#8A0808>
		How to use...
	</FONT>
	<br>
	<br>
	<FONT SIZE=2 COLOR=#DF0101>
	* /war-invite :
		<FONT SIZE=1 COLOR=#04B404>
			Send a invitation to start a war.<br>
			Example: /war-invite Pain Factory
		</FONT><br>
	* /war-accept :
		<FONT SIZE=1 COLOR=#04B404>
			Accept the invitation to start a war.
		</FONT><br>
	* /war-reject :
		<FONT SIZE=1 COLOR=#04B404>
			Reject the invitation to start a war.
		</FONT><br>
	* /war-cancel-invite :
		<FONT SIZE=1 COLOR=#04B404>
			Cancel the invitation already snet to star a war.
		</FONT><br>
	* /war-cancel :
		<FONT SIZE=1 COLOR=#04B404>
			Finish the currect war, can only be used after 1 day.
		</FONT><br>
	</FONT>
	<br>
	<FONT SIZE=2 COLOR=#8A0808>
		Those commands can only be executed by guild leaders.
	</FONT>
</P>
<br>
<br>
';
$wars = $SQL->query("
	SELECT g.name AS gname, wg.name AS wgname, g.war_time AS gtime, g.kills AS kills, wg.kills AS ekills, g.show AS s, g.id AS gid
		FROM guilds AS g
	INNER JOIN guilds AS wg
		ON wg.id = g.in_war_with
	ORDER BY s DESC LIMIT 50;
");
foreach ($wars as $k=>$v) {
if ($v[s] == 1) 
{
	$stats .="
		<TR BGCOLOR=\"".$config['site'][($k % 2 == 1 ? 'light' : 'dark').'border']."\">
			<TD>
				<center>
					<b>
						<a href='index.php?subtopic=guilds&action=show&guild=" . $v[gname] . "'>$v[gname]</a>
					</b>
				</center>
			</TD>
			<TD>V/s</TD>
			<TD>
				<center>
					<b>
						<a href='index.php?subtopic=guilds&action=show&guild=" . $v[wgname] . "'>$v[wgname]</a>
					</b>
				</center>
			</TD>
			<TD>
				<center>
					" . date("d/m/y   H:i:s", $v[gtime]) . "
				</center>
			</TD>
			<TD>
				<center>
					<a href='index.php?subtopic=wars&action=show&war=" . $v[gid] . "'>{$v[kills]} - {$v[ekills]}</a>
				</center>
			</TD>	
		</TR>
	";
}
}
$main_content .= '
	<center>
		<h1>
			Guilds Wars
		</h1>
	</center>
';
if(!$stats) {
	$main_content .= '
		<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
			<TR BGCOLOR="'.$config['site']['vdarkborder'].'">
				<TD CLASS=white>
				</TD>
			</TR>
			<TR BGCOLOR='.$config['site']['darkborder'].'>
				<TD>
					No guilds in war in '.$config['server']['serverName'].' yet.
				</TD>
			</TR>
		</TABLE>
	';
} else {
	$main_content .= "
		<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
			<TR BGCOLOR=\"{$config['site']['vdarkborder']}\">
				<TD CLASS=white width=25%>
					<center><B>Guild</B></center>
				</TD>
				<TD CLASS=white width=5%>
					<B>V/s</B>
				</TD>
				<TD CLASS=white width=25%>
					<center><B>Guild</B></center>
				</TD>
				<TD CLASS=white width=25%>
					<center><B>Started at</B></center>
				</TD>
				<TD CLASS=white width=20%>
					<center><B>Kills</B></center>
				</TD>
			</TR>
			$stats
		</TABLE>
	";	
}

?>

<?PHP
$invitations = $SQL->query("
	SELECT ig.name AS igname, i.name AS iname
		FROM guilds AS i
	INNER JOIN guilds AS ig
		ON ig.id = i.invited_to
	ORDER BY iname ASC LIMIT 50;	
");
foreach ($invitations as $k=>$v) {
	$invi .="
		<TR BGCOLOR=\"".$config['site'][($k % 2 == 1 ? 'light' : 'dark').'border']."\">
			<TD>
				<center>
					<b>
						<a href='index.php?subtopic=guilds&action=show&guild=" . $v[iname] . "'>$v[iname]</a>
					</b>
				</center>
			</TD>
			<TD>
				<center>
					<b>
						<a href='index.php?subtopic=guilds&action=show&guild=" . $v[igname] . "'>$v[igname]</a>
					</b>
				</center>
			</TD>
			<TD></TD>
		</TR>
	";
}
$main_content .= '
	<center>
		<h1>
			Pending invitatios
		</h1>
	</center>
';
if(!$invi) {
	$main_content .= '
		<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
			<TR BGCOLOR="'.$config['site']['vdarkborder'].'">
				<TD CLASS=white>
				</TD>
			</TR>
			<TR BGCOLOR='.$config['site']['darkborder'].'>
				<TD>
					No pending invitations in '.$config['server']['serverName'].'.
				</TD>
			</TR>
		</TABLE>
	';
} else {
	$main_content .= "
		<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
			<TR BGCOLOR=\"{$config['site']['vdarkborder']}\">
				<TD CLASS=white width=50%>
					<center><B>Guild</B></center>
				</TD>		
				<TD CLASS=white width=50%>
					<center><B>Invited guild</B></center>
				</TD>
				</TD>
			</TR>
			$invi
		</TABLE>
	";
}
}

//SHOW FRAGS ~~
if($action == 'show')
{
$guild = $ots->createObject('Guild'); 
$guild->load($_REQUEST['war']);
$ranks = $SQL->query("
	SELECT 
		*
	FROM 
		guild_ranks 
	WHERE 
		guild_id = ". $guild->getId() .";
	");

foreach ($ranks as $y)
{
	$Players = $SQL->query("
	SELECT 
		*
	FROM 
		players 
	WHERE 
		rank_id = ". $y[id] ." 
	ORDER BY
		name
	DESC;");
	foreach ($Players as $v)
	{
	$totDeaths = 0;
	$deaths = $SQL->query("
	SELECT  
		COUNT(player_id) AS n
	FROM 
		deaths_in_wars
	WHERE 
		player_id = ". $v[id] ." 
	GROUP BY 
		player_id
	DESC LIMIT 1;");
		foreach ($deaths as $q)
		{
			$totDeaths = $q[n];
		}
	$membersDeaths .="
		<center>
			<b>
				<a href='index.php?subtopic=characters&name=" . $v[name] . "'>$v[name]</a> ($totDeaths)
			</b>
		</center>
	";
	}
}

$guild2 = $ots->createObject('Guild'); 
$guild2->load($guild->getEnemy());
$ranks2 = $SQL->query("
	SELECT 
		*
	FROM 
		guild_ranks 
	WHERE 
		guild_id = ". $guild2->getId() .";
	");

foreach ($ranks2 as $y)
{
	$Players = $SQL->query("
	SELECT 
		*
	FROM 
		players 
	WHERE 
		rank_id = ". $y[id] ." 
	ORDER BY
		name
	DESC;");
	foreach ($Players as $v)
	{
	$totDeaths = 0;
	$deaths = $SQL->query("
	SELECT  
		COUNT(player_id) AS n
	FROM 
		deaths_in_wars
	WHERE 
		player_id = ". $v[id] ." 
	GROUP BY 
		player_id
	DESC LIMIT 1;");
		foreach ($deaths as $q)
		{
			$totDeaths2 = $q[n];
		}
	$membersDeaths2 .="
		<center>
			<b>
				<a href='index.php?subtopic=characters&name=" . $v[name] . "'>$v[name]</a> ($totDeaths)
			</b>
		</center>
	";
	}
}

$deathsG1 = $SQL->query("
	SELECT 
		* 
	FROM 
		deaths_in_wars 
	WHERE 
		killer_guild = ". $guild->getId() ." 
	ORDER BY 
		date 
	DESC LIMIT ". $MaxShow .";");

$deathsG2 = $SQL->query("
	SELECT 
		* 
	FROM 
		deaths_in_wars 
	WHERE 
		killer_guild = ". $guild2->getId() ." 
	ORDER BY 
		date
	DESC LIMIT ". $MaxShow .";");

$Topfragger1 = $SQL->query("
	SELECT 
		killer, COUNT(killer) maximo
	FROM 
		deaths_in_wars
	WHERE 
		killer_guild = 	". $guild->getId() ." 
	GROUP BY 
		killer
	ORDER BY 
		maximo 
	DESC LIMIT 1;");
	
	foreach ($Topfragger1 as $y) 
		{
			$name = $ots->createObject('Player');
			$name->load($y[killer]);
			$TopFraggerName = $name->getName();
			$numTop1 = $y[maximo];
		}
		
$Topfragger2 = $SQL->query("
	SELECT 
		killer, COUNT(killer) maximo
	FROM 
		deaths_in_wars
	WHERE 
		killer_guild = 	". $guild2->getId() ." 
	GROUP BY 
		killer
	ORDER BY 
		maximo 
	DESC LIMIT 1;");
	
	foreach ($Topfragger2 as $y) 
		{
			$name = $ots->createObject('Player');
			$name->load($y[killer]);
			$TopFraggerName2 = $name->getName();
			$numTop2 = $y[maximo];
		}
		
$mostDead = $SQL->query("
	SELECT 
		player_id, COUNT(player_id) maximo
	FROM 
		deaths_in_wars
	WHERE 
		killer_guild = 	". $guild->getId() ." 
	GROUP BY 
		player_id
	ORDER BY 
		maximo 
	DESC LIMIT 1;");
	
	foreach ($mostDead as $y) 
		{
			$name = $ots->createObject('Player');
			$name->load($y[player_id]);
			$mostDeadName = $name->getName();
			$mostDeadNum = $y[maximo];
		}

$mostDead2= $SQL->query("
	SELECT 
		player_id, COUNT(player_id) maximo
	FROM 
		deaths_in_wars
	WHERE 
		killer_guild = 	". $guild2->getId() ." 
	GROUP BY 
		player_id
	ORDER BY 
		maximo 
	DESC LIMIT 1;");
	
	foreach ($mostDead2 as $y) 
		{
			$name = $ots->createObject('Player');
			$name->load($y[player_id]);
			$mostDeadName2 = $name->getName();
			$mostDeadNum2= $y[maximo];
		}

foreach ($deathsG1 as $k=>$v) {
	
	$killed = $ots->createObject('Player');
	$killed->load($v[player_id]);
	$killedName = $killed->getName();

	$killer = $ots->createObject('Player');
	$killer->load($v[killer]);
	$killerName = $killer->getName();
	
	$kills .="
		<TR BGCOLOR=\"".$config['site'][($k % 2 == 1 ? 'light' : 'dark').'border']."\">
			<TD>
				<center>
					<b>
						<a href='index.php?subtopic=characters&name=" . $killedName . "'>$killedName</a>
					</b>
				</center>
			</TD>
			<TD>
				<center>
					<b>
						<a href='index.php?subtopic=characters&name=" . $killerName . "'>$killerName</a>
					</b>
				</center>
			</TD>
			<TD>
				<center>
					" . date("d/m/y   H:i:s", $v[date]) . "
				</center>
			</TD>
		</TR>
	";
}

foreach ($deathsG2 as $k=>$v) {
	
	$killed = $ots->createObject('Player');
	$killed->load($v[player_id]);
	$killedName = $killed->getName();

	$killer = $ots->createObject('Player');
	$killer->load($v[killer]);
	$killerName = $killer->getName();
	
	$kills2 .="
		<TR BGCOLOR=\"".$config['site'][($k % 2 == 1 ? 'light' : 'dark').'border']."\">
			<TD>
				<center>
					<b>
						<a href='index.php?subtopic=characters&name=" . $killedName . "'>$killedName</a>
					</b>
				</center>
			</TD>
			<TD>
				<center>
					<b>
						<a href='index.php?subtopic=characters&name=" . $killerName . "'>$killerName</a>
					</b>
				</center>
			</TD>
			<TD>
				<center>
					" . date("d/m/y   H:i:s", $v[gtime]) . "
				</center>
			</TD>
		</TR>
	";
}
$main_content .= "
	<center>
	<b>
		<h2>
		War betwen 
			<a href='index.php?subtopic=guilds&action=show&guild=" . $guild->getName() . "'>
				" . $guild->getName() . "</a> 
		and 
			<a href='index.php?subtopic=guilds&action=show&guild=" . $guild2->getName() . "'>
				" . $guild2->getName() . "</a>
		.
		</h2>
	<br>
	Started at : </b>" . date("d/m/y   H:i:s", $guild->getWarTime()) . "
	<br>
	<br>
	<b>
	Total Frags by " . $guild->getName() . " = " . $guild->getScore() . "
	<br>
	<br>
	Total Frags by " . $guild2->getName() . " = " . $guild2->getScore() . "
	<br>
	<br>
	Top fragger of " . $guild->getName() . " = <a href='index.php?subtopic=characters&name=" . $TopFraggerName  . "'>" . $TopFraggerName  . "</a> ($numTop1)
	<br>
	<br>
	Top fragger of " . $guild2->getName() . " = <a href='index.php?subtopic=characters&name=" . $TopFraggerName2  . "'>" . $TopFraggerName2  . "</a> ($numTop2)
	<br>
	<br>
	The most dead of  " . $guild->getName() . " = <a href='index.php?subtopic=characters&name=" . $mostDeadName  . "'>" . $mostDeadName  . "</a> ($mostDeadNum)
	<br>
	<br>
	The most dead of  " . $guild2->getName() . " = <a href='index.php?subtopic=characters&name=" . $mostDeadName2  . "'>" . $mostDeadName2  . "</a> ($mostDeadNum2)	
	</b>
	</center>
	<br>
	<br>
	<br>
	
";

$main_content .= "
	<center>
	<h1>
		Members Deaths
	</h1>
	<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
		<TR BGCOLOR=\"{$config['site']['vdarkborder']}\">
			<TD CLASS=white width=50%>
				<center>
					<B>
						". $guild->getName() ."
					</B>
				</center>
			</TD>
			<TD CLASS=white width=50%>
				<center>
					<B>
						". $guild2->getName() ."
					</B>
				</center>
			</TD>
		</TR>
		<TR BGCOLOR=\"".$config['site']['darkborder']."\">
			<TD>
				$membersDeaths
			</TD>
			<TD>
				$membersDeaths2
			</TD>
		</TR>


	</TABLE>
	</center>
	<br>
	<br>
	<br>
	<center>
		<h1>
			Latest frags by ". $guild->getName() ."
		</h1>
	</center>
	<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
		<TR BGCOLOR=\"{$config['site']['vdarkborder']}\">
			<TD CLASS=white width=35%>
				<center>
					<B>
						Player
					</B>
				</center>
			</TD>
			<TD CLASS=white width=35%>
				<center>
					<B>
						Killed by
					</B>
				</center>
			</TD>
			<TD CLASS=white width=30%>
				<center>
					<B>
						Date
					</B>
				</center>
			</TD>
		</TR>
		$kills
	</TABLE>
		<center>
		<h1>
			Latest frags by ". $guild2->getName() ."
		</h1>
	</center>
	<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
		<TR BGCOLOR=\"{$config['site']['vdarkborder']}\">
			<TD CLASS=white width=35%>
				<center>
					<B>
						Player
					</B>
				</center>
			</TD>
			<TD CLASS=white width=35%>
				<center>
					<B>
						Killed by
					</B>
				</center>
			</TD>
			<TD CLASS=white width=30%>
				<center>
					<B>
						Date
					</B>
				</center>
			</TD>
		</TR>
		$kills2
	</TABLE>
";
}
?>

9.0Add to database this:
Code:
ALTER TABLE `guilds` 
ADD `invited_to` INT( 11 ) NOT NULL ,
ADD `invited_by` INT( 11 ) NOT NULL ,
ADD `in_war_with` INT( 11 ) NOT NULL ,
ADD `kills` INT( 11 ) NOT NULL ,
ADD `show` SMALLINT( 1 ) NOT NULL ,
ADD `war_time` INT( 11 ) NOT NULL ;

 CREATE TABLE `hunts` (
`hunted` INT( 11 ) NOT NULL ,
`hunter` INT( 11 ) NOT NULL ,
`reward` INT( 11 ) NOT NULL ,
`killer` INT( 11 ) NOT NULL 
) TYPE = MYISAM 

 CREATE TABLE `deaths_in_wars` (
`guild_id` INT( 11 ) NOT NULL ,
`player_id` INT( 11 ) NOT NULL ,
`killer_guild` INT( 11 ) NOT NULL ,
`killer` INT( 11 ) NOT NULL ,
`date` INT( 11 ) NOT NULL 
) ENGINE = MYISAM 


ALTER TABLE `deaths_in_wars` ADD `date` INT( 11 ) NOT NULL ;


GUILD-WAR SYSTEM DONE!!!

ABOUT:
Its not only guild war system!!! It have too Bounty hunter system
and Arena system {Working with all TFS version!!!}
To it work with the 0.3.4 {tibia 8.4x client!!!} you need to add return!!!

I WILL RELEASE ARENA+BOUNTY HUNTER SYSTEM, IN SOME TIME!!!

PLEASE!!!
GIVE ME SOME DONATIONS!!!

Any problem?
Post here!!!

How to use?
to invite one guild to war:
/war-invite GUILDNAME
to accept war, invited from one enemy
/war-accept
to reject an convite to war!!!
/war-reject
to cancel the war
/war-cancel
to challange war
/war-challenge
to cancel invitation to war {when enemmy not accepted!!!}
/war-cancel-invite

THANKS A LOOT OT-LAND!!!

PLEASE GIVE ME SOME DONATIONS
TO MY PAYPAL EMAIL:

[email protected]



Rep++ please!!!:}



Thanks a loot, yours GeKirAh...
 
Last edited:
You asked +rep and donations 3-4 times, if people likes this thread they certainly will give you reputation so dont be a rep-whore ;)

I will try it, thanks :)
 
dofile("./arena.lua")
dofile("./GuildWar.lua")
dofile("./bounty.lua")

?? -.- You didn't gave files called arena.lua and bounty.lua

#Edit
haha, again you didn't gave all scripts and again you messed up everything ;s
 
Last edited:
@Up
Working now. Because i have too many lines etc. in my kill.lua and I don't have bounty hunter etc. I've done it by another way.

If you have kill.lua in your OT then leave it and create another file called war.lua and there put this:
dofile("./GuildWar.lua")

local PZ = createConditionObject(CONDITION_INFIGHT)
setConditionParam(PZ, CONDITION_PARAM_TICKS, getConfigInfo('pzLocked'))
local Target = getPlayerGUID(target)
function onKill(cid, target)
if isPlayer(cid) == TRUE and isPlayer(target) == TRUE then
local myGuild = getPlayerGuildId(cid)
local enemyGuild = getPlayerGuildId(target)
if myGuild ~= 0 and enemyGuild ~= 0 then
if enemyGuild == getGuildWarInfo(myGuild).With then
removeFrag(cid)
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "This Frag will not count") --Remove this if you wish
doAddCondition(cid, PZ)
registerDeath(myGuild, enemyGuild, cid, target)
end
end

return TRUE
end
end

Now in creaturescripts.xml put this:
<event type="kill" name="PlayerWar" script="war.lua"/>

and now in your login.lua under function onLogin(cid) put this:
registerCreatureEvent(cid, "PlayerWar")
 
All works fine but if I'm going to see the frags of each guild (by clicking on 0-0) I get this error:
Fatal error: Call to undefined method OTS_Guild::getEnemy() in C:\xampp\htdocs\wars.php on line 258
 
you ask for donation and you no make the script? :S Nahruto Rule...
if this work fot me, i will add you rep++
 
But nahruto, dont give it for ppl, him sell it for 50$+
I'm giving it, and you can give me 1~2$ :}
 
but narutho sold it with what licencion? you can relase it? or it's illegal piracy? hmmm?
 
Am 100% sure Narutho did not allow any noob to sell his script after he sold it to him/her..

The thread maker is just a sad kiddo
 
Any problem?
Post here!!!

So, Can you help me?

All works fine but if I'm going to see the frags of each guild (by clicking on 0-0) I get this error:

Fatal error: Call to undefined method OTS_Guild::getEnemy() in C:\xampp\htdocs\wars.php on line 258

Thanks.
 
Do not have to change as well?

Guild 10 /VS/ Guild 20
to
Guild 1 and Guild 2 /VS/ Guild 3 and Guild 4 and Guild 5 .....


possible?
 
Back
Top