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

[Gęsior Acc] Guild War System

wizardis2

Mapper & Scripter
Joined
May 13, 2009
Messages
34
Reaction score
0
Location
Sweden
They immediately notice that the script for Guild War System.
Description:
The script is used to challenges lie ahead of other guilds to battle with the meter fragów, etc. The command can be moved to a place where he can gild fight. The war may end (win Those who have killed more people) or one of the guild leader may be discontinued (subject to loses the war).
Authors:
-Wizardis
-Jenzo
-Aeystin

1. Create a file GuildWar.lua where there is config.lua and paste it:
Code:
DelayToCancel = 24 * 60 * 60 --minut
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 --minut,gdy rozpoczyna sie walka
StopBattle = TRUE --zatrzymac walke po x czasu: TRUE/FALSE
TimeToStop = 60 --minut do zatrzymania jesli 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. Kill.lua Create a file in the folder data / creaturescripts / scripts and paste it:
Code:
dofile("./GuildWar.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
        end
	return TRUE
end
3. The file folder login.lua data / creaturescripts / scripts after:

Code:
registerCreatureEvent(cid, "PlayerDeath")

Add:

Code:
registerCreatureEvent(cid, "PlayerKill")

Your creaturescripts.xml add:

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

6. In globalevents.xml in data / globalevents add the line:

Code:
<globalevent name="wars" interval="1800" event="script" value="wars.lua"/> <!--1800 to 30 minut-->

7. GuildWar.lua Create a file in data / talkactions / scripts and paste it:

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

Talkactions.xml to add:

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" />

Part 2 in the next post.
 
9. To add to the database:

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 `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 ;
10. This is the script on this page wars.php (Account Maker), to copy what he appears to be a long text:
wklej.org - interleaf No 94486
11. In the index.php before:
case "buypoints";
$subtopic = "buypoints";
$topic = Buy Points";
include("buypoints.php");
break;
ADD:
case "wars";
$subtopic = "wars";
$topic = "Wars";
include("wars.php");
break;
12. In layouts / nazwa_layouta / layout.php after:
<a href='index.php?subtopic=guilds'>
<div id='submenu_guilds' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
<div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
<div id='ActiveSubmenuItemIcon_guilds' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
<div class='SubmenuitemLabel'>Guilds</div>
<div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
</div>
</a>
ADD:
<a href='index.php?subtopic=wars'>
<div id='submenu_guilds' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
<div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
<div id='ActiveSubmenuItemIcon_guilds' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
<div class='SubmenuitemLabel'>Guild Wars</div>
<div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
</div>
</a>
I hope that helped.
Edit
Edit:
To są pozycje open battle, czyli miejsca gdzie gildie staczają swoje wojny. Liderzy wysyłają komendę i członkowie gildii znajdujących się na polach bitwy.
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}
}
}

\\Wizardis
 

 
Theres like 3 threads that contain this Exact thing, and there threads are in the right section =O
 
it only possible to work with 0.3 right ?
what kind of function i need to work with 0.2 ?
 
...
This is a copy from my thread.
Refresh your credits ;)

Code:
[B][U]Real Credits[/U]:
· [COLOR="Red"]GeKirAh[/COLOR] [COLOR="Blue"][posting LUA scripts and tutorial][/COLOR]
· [COLOR="Red"]Nahruto[/COLOR][COLOR="Blue"] [make the scripts][/COLOR]
· [COLOR="Red"]christiandb[/COLOR] [COLOR="Blue"][helping Nahruto][/COLOR]
· [COLOR="Red"]Xampy[/COLOR][COLOR="Blue"] [fix: PHP file & creaturescript files][/COLOR][/B]
 
Hi, i have problems,
In step 3: The file folder login.lua data / creaturescripts / scripts after:
I don't have: registerCreatureEvent(cid, "PlayerDeath")
AND
In step 6: In globalevents.xml in data / globalevents add the line:
<globalevent name="wars" interval="1800" event="script" value="wars.lua"/> <!--1800 to 30 minut-->
I don't have script "wars.lua"

can you help me?, please
 
dude in creaturescript.xml i have this....

<?xml version="1.0" encoding="UTF-8"?>
<creaturescripts>

<!-- NOWE - INNE -->
<event type="kill" name="KilledMonstersCounter" event="script" value="counter.lua"/>
<event type="advance" name="Advance" event="script" value="advance.lua"/>
<event type="advance" name="levelpoints" event="script" value="levelpoints.lua"/>
<event type="login" name="logowanie" event="script" value="logowanie.lua"/>
<!-- <event type="login" name="firstpoints" event="script" value="firstpoints.lua"/> -->
<event type="advance" name="freepoints" event="script" value="freepoints.lua"/>

<!-- LVL I START ITEMS -->
<event type="advance" name="5cc" event="script" value="items/lvlitems2.lua"/>
<event type="advance" name="10cc" event="script" value="items/lvlitems2.lua"/>
<event type="advance" name="remover" event="script" value="items/lvlitems2.lua"/>
<event type="advance" name="bottrophy" event="script" value="items/lvlitems2.lua"/>
<event type="advance" name="lvlitems" event="script" value="items/lvlitems.lua"/>
<event type="login" name="FirstItems" event="script" value="items/firstitems.lua"/>

<!-- GUILD EVENTS -->
<event type="joinchannel" name="GuildMotd" event="script" value="guildmotd.lua"/>

<!-- BROADCAST -->
<event type="advance" name="advbr" event="script" value="broadcast/advbroadcast.lua"/>
<event type="login" name="supportlogin" event="script" value="broadcast/supportlogin.lua"/>

<!-- PODSTAWOWE -->
<event type="receivemail" name="Mail" event="script" value="podstawowe/mail.lua"/>
<event type="reportbug" name="SaveReportBug" script="podstawowe/reportbug.lua"/>
<event type="login" name="PlayerLogin" event="script" value="podstawowe/login.lua"/>
<event type="logout" name="demonOakLogout" event="script" value="podstawowe/demonOakLogout.lua"/>
<event type="death" name="demonOakDeath" event="script" value="podstawowe/demonOakDeath.lua"/>
<event type="death" name="inquisitionPortals" script="podstawowe/inquisitionPortals.lua"/>
<event type="advance" name="AdvanceSave" event="script" value="podstawowe/advancesave.lua"/>
<event type="think" name="Idle" event="script" value="podstawowe/idle.lua"/>
<event type="think" name="SkullCheck" event="script" value="podstawowe/skullcheck.lua"/>

</creaturescripts>

how can i add your

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

there ? ;/ its not possible.
 
Back
Top