Bounty Hunter System

Status
Zamknięty.

Infinity

Senior User
Zarejestrowany
Dołączył
Maj 28, 2008
Posty
594
Liczba reakcji
101
The Forgotten Server 0.3+!

Z nud?w postanowi?em to wam zrobi?... ;)
Dzia?a to na zasadzie takiej, i? ja zamawiam hunta dla gracza o nicku np. Y na 100k (10cc). Zabija go znudzony X i w nagrod? dostaje automatycznie odebrane wcze?niej mi 10cc.
SQL:
Kod:
CREATE TABLE IF NOT EXISTS `bounty_hunters` (
  `id` int(11) NOT NULL auto_increment,
  `fp_id` int(11) NOT NULL,
  `sp_id` int(11) NOT NULL,
  `k_id` int(11) NOT NULL,
  `added` int(15) NOT NULL,
  `prize` bigint(20) NOT NULL,
  `killed` int(11) NOT NULL,
  `kill_time` int(15) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Plik bh-add.lua w talkactions/scripts
Kod:
function onSay(cid, words, param)
if(param == "") then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] Use: \"!hunt [prize],[nick]\" where prize is for example 1(k).")
		return TRUE
	end
	local t = string.explode(param, ",")
	if(not t[2]) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] Use: \"!hunt [prize],[nick]\" where prize is for example 1(k).")
		return TRUE
	end
	
	local sp_id = getPlayerGUIDByName(t[2])
	if sp_id == nil then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] This player doesn't exists.")		
		return TRUE
	end
	
    local result_plr = db.getResult("SELECT * FROM `bounty_hunters` WHERE `sp_id` = "..sp_id.." AND `killed` = 0;")
    if(result_plr:getID() ~= -1) then
		is = tonumber(result_plr:getDataInt("sp_id"))
		result_plr:free()
    else
		is = 0
    end
    prize = tonumber(t[1])

	if(prize == nil or prize < 1) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] Use: \"!hunt [prize],[nick]\" where prize is for example 1(k).")
		return TRUE
	end
	
	if(prize >= 100000000000000000000) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] Sorry, you typed too big number!")
		return TRUE
	end

	if is ~= 0 then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] This player has already hunted.")	
		return TRUE
	end
	
		if doPlayerRemoveMoney(cid, prize*1000) == TRUE then
		    db.executeQuery("INSERT INTO `bounty_hunters` VALUES (NULL,"..getPlayerGUID(cid)..","..sp_id..",0," .. os.time() .. ","..prize..",0,0);")
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] Hunt has been added!")			
		else
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] You haven't got enough money!")			
		end
	
	
	return 1
end
Otw?rz plik creaturescripts.xml w folderze creaturescripts, dodaj do niego:
Kod:
<event type="kill" name="BountyHunter" script="kill.lua"/>
Otw?rz plik login.lua w creaturescripts/scripts i dodaj do niego po
Kod:
	registerCreatureEvent(cid, "PlayerDeath")
wklej
Kod:
	registerCreatureEvent(cid, "BountyHunter")
Otw?rz plik kill.lua, b?d? go stw?rz w creaturescripts/scripts
wklej do niego
Kod:
function onKill(cid, target)
if isPlayer(target) == TRUE then
---- BOUNTY HUNTERS START -----
pid = cid
pid2 = getPlayerGUID(target)
    local result_plr = db.getResult("SELECT * FROM `bounty_hunters` WHERE `sp_id` = "..pid2.." AND `killed` = 0;")
    if(result_plr:getID() ~= -1) then
    prize = tonumber(result_plr:getDataInt("prize"))
    bid = tonumber(result_plr:getDataInt("id"))
	result_plr:free()
    else
    prize = 0
	bid = 0
    end

if (bid ~= 0 and prize ~= 0 and not(getTileInfo(getCreaturePosition(cid)).pvp)) then
    db.executeQuery("UPDATE `bounty_hunters` SET `killed` = 1, `k_id`="..getPlayerGUID(cid)..", `kill_time` = " .. os.time() .. " WHERE `id`  = "..bid..";")
	doPlayerAddMoney(cid,prize*1000)
	doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,'[BOUNTY HUNTERS] You killed hunted player, so you gained the reward!')
end	
---- BOUNTY HUNTERS END -----
end
return TRUE
end
Otw?rz plik talkactions.xml w folderze talkactions i wklej do niego
Kod:
<talkaction access="0" log="no" filter="word" words="!hunt" script="bh-add.lua" />

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Komendy:
!hunt [cena],[nick] - gdzie cena, liczba gp w tysi?cach (tzw. k), gdzie nick, po prostu nick gracza.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Bounty Hunters on WWW
UWAGA! Opisze wam tu instalacje do Account Maker by Gesior.
Stw?rz plik bounty-hunters.php i wklej do niego:
PHP:
   <?
mysql_connect("localhost","user","password");
mysql_select_db("database");

$main_content .= '<P ALIGN=CENTER>
    <br>
    <FONT SIZE=5 COLOR=#CFF00C>
        How to use...
    </FONT>
    <br>
    <br>
    <FONT SIZE=2 COLOR=#CFF00C>
    * !hunt [prize],[nick] :
        <FONT SIZE=1 COLOR=#FCC33F>
            Wysyla ogloszenie o huncie dla postaci. Cena w tysiacach.<br>
            Przyklad: !hunt 100,Infinity
        </FONT><br>
    </FONT>
</P>
<br>
<br>
    <center>
        <h1>
            Bounty Hunters
        </h1>
    </center>
        <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
            <TR BGCOLOR="#505050">
                <TD CLASS=white width=30%>
                    <center><B>Zlecil</B></center>
                </TD>
                <TD CLASS=white width=30%>
                    <center><B>Nagroda</B></center>
                </TD>
                <TD CLASS=white width=30%>
                    <center><B>Ofiara</B></center>
                </TD>
                <TD CLASS=white width=10%>
                    <center><B>Zabity przez</B></center>
                </TD>
            </TR>';
 $inv = mysql_query("SELECT * FROM `bounty_hunters` ORDER BY `added` DESC");
$num = 0;
$color=$config['site']['darkborder'];
while($tab = mysql_fetch_array($inv)){
if($num%2 == 0){$color=$config['site']['darkborder'];}else{$color=$config['site']['lightborder'];}
$pid = $tab['fp_id'];
$sid = $tab['sp_id'];
$kid = $tab['k_id'];
$killed = $tab['killed'];
$prize = $tab['prize']*1000;
if($killed == 0){
$kill = '<font color="red">Nobody!</font>';
}else{
$k = mysql_query("SELECT * FROM `players` WHERE `id` = ".$kid."");
$k1 = mysql_fetch_array($k);
$kill_name = $k1['name'];
$kill = '<a href="index.php?subtopic=characters&name='.$kill_name.'">'.$kill_name.'</a>';
}
$f = mysql_query("SELECT * FROM `players` WHERE `id` = ".$pid."");
$f1 = mysql_fetch_array($f);
$s = mysql_query("SELECT * FROM `players` WHERE `id` = ".$sid."");
$s1 = mysql_fetch_array($s);
$fn = $f1['name'];
$sn = $s1['name'];

$main_content .= '
        <TR BGCOLOR="'.$color.'">
            <TD>
                <center>
                    <b>
                        <a href="index.php?subtopic=characters&name='.$fn.'">'.$fn.'</a>
                    </b>
                </center>
            </TD>
            <TD>
                <center>
                    <b>
                        '.$prize.' gp
                    </b>
                </center>
            </TD>
            <TD>
                <center>
                    <b>
                        <a href="index.php?subtopic=characters&name='.$sn.'">'.$sn.'</a>
                    </b>
                </center>
            </TD>
            <TD>
                <center>
                    <b>
                        '.$kill.'
                    </b>
                </center>
            </TD>
        </TR>';
$num++;
}
if($num == 0){
        $main_content.='<TR BGCOLOR="'.$color.'">
            <TD colspan=4>
                <center>
                    Currently there are not any bounty hunter offer.
                </center>
            </TD>
        </TR>';
}
        $main_content .='</TABLE><div align="right">Copyright © <a href="http://otibia.net">oTibia.net</a>.</div>';
?>
Po czym otw?rz plik index.php i po
PHP:
	case "guilds";
		$topic = "Guilds";
		$subtopic = "guilds";
		include("guilds.php");
	break;
dopisz
PHP:
	case "bounty-hunters";
		$topic = "Bounty Hunters";
		$subtopic = "characters";
		include("bounty-hunters.php");
	break;
Jak wstawi? linki, to odsy?am do poradnik?w.
W pierwszym pliku nale?y zmieni? ustawienia po??czenia z MySQL!
Ze SQLite nie zadzia?a!

NPC Punisher - najlepszy na OTSy RPG
Ten NPC dodaje og?oszenia o huntach na stron? zamiast komendy!

data/npc/Punisher.xml
Kod:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Punisher" script="data/npc/scripts/bountyhunters.lua" walkinterval="2000" floorchange="3">
	<health now="150" max="150"/>
	<look type="9" head="0" body="0" legs="0" feet="0" addons="0"/>
	<parameters>
		<parameter key="message_greet" value="Hello! I can announce to other people some offers of hunting players. Of course you have to pay. Do you want to hunt somebody today?" />
	</parameters>
</npc>

data/npc/scripts/bountyhunters.lua
Kod:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
-- OTServ event handling functions start
function onCreatureAppear(cid)                npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid)             npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg)     npcHandler:onCreatureSay(cid, type, msg) end
function onThink()                         npcHandler:onThink() end
-- OTServ event handling functions end
local talkState = {}
local huntN = {}
local huntP = {}

local function checkName(player)
	local sp_id = getPlayerGUIDByName(player)
	if sp_id == nil then
		return FALSE
	end
	
	local id = 0
	local result_plr = db.getResult("SELECT * FROM `bounty_hunters` WHERE `sp_id` = "..sp_id.." AND `killed` = 0;")
    if(result_plr:getID() ~= -1) then
		id = tonumber(result_plr:getDataInt("sp_id"))
		result_plr:free()
    end
	
	if id ~= sp_id then
		return TRUE
	end
return FALSE
end

local function huntPlayer(cid,player,cost)
local guid = tonumber(getPlayerGUID(cid))
local player = tonumber(getPlayerGUIDByName(player))
local cost = tonumber(cost)

if guid == nil or player == nil or cost == nil then 
	return FALSE
end
	db.executeQuery("INSERT INTO `bounty_hunters` VALUES (NULL,"..guid..","..player..",0," .. os.time() .. ","..cost..",0,0);")
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[BOUNTY HUNTERS] Hunt has been added successfuly!")
	return TRUE
end

function creatureSayCallback(cid, type, msg)
    -- Place all your code in here. Remember that hi, bye and all that stuff is already handled by the npcsystem, so you do not have to take care of that yourself.
if(not(npcHandler:isFocused(cid))) then
	return false
end
	if talkState[cid] == nil then
		talkState[cid] = 0
	end
        if (msgcontains(msg, 'tak') or msgcontains(msg, 'yes') or msgcontains(msg, 'hunt')) and talkState[cid] == 0 then
			selfSay('Oh, you want to kill somebody, don`t you? Tell me, what is his name.',cid)
			talkState[cid] = 1
		elseif talkState[cid]==1 then
			talkState[cid] = 0
			if checkName(msg) == TRUE then
				huntN[cid] = msg
				selfSay('Okay. You can hunt him. Tell me, how much {thousands} {of} {gold} {coins} will you pay to the killer.',cid)
				talkState[cid] = 2
			else
				selfSay('Sorry, this player is already hunted or does not exist. Really sorry!',cid)
			end
		elseif talkState[cid] == 2 then
				talkState[cid] = 0
				kwota = tonumber(msg)
				if kwota == nil then
					selfSay('What? I don`t understand you.', cid)
				elseif kwota > 10000000 then
					selfSay('Sorry, the maximum amount of gold coins is 10 000 000K.', cid)
				elseif kwota < 1 then
					selfSay('Sorry, the minimum amount of gold coins is 1 000.', cid)
				else
					huntP[cid] =  kwota
					selfSay('Do you want to hunt the player {'..huntN[cid]..'} for {'..huntP[cid]..'K} gold coins?', cid)
					talkState[cid] = 3
				end
		elseif talkState[cid] == 3 then
					if msgcontains(msg, 'yes') then
						if doPlayerRemoveMoney(cid,huntP[cid]*1000) then
						
						if huntPlayer(cid,huntN[cid],huntP[cid]*1000) == TRUE then
							selfSay('You have added the hunt announcement of killing the player {'..huntN[cid]..'} for {'..huntP[cid]..'K} gold coins!', cid)
							else
								selfSay('Maybe next time.',cid)
							end

						else
							selfSay('Sorry, you do not have enough money. Maybe next time!',cid)
						end
					else
						selfSay('Maybe next time.',cid)
					end
					talkState[cid]=0
        end
    -- Place all your code in here. Remember that hi, bye and all that stuff is already handled by the npcsystem, so you do not have to take care of that yourself.
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Dzi?ki! ;)

[TODO]
Bounty Hunters in Account Maker (100%)
NPC Punisher (100%)
~~
Waiting for suggestions. :p
Jestem w stanie aktualizowa? to o kolejne mo?liwo?ci, funkcje itd. jednak nie jestem zbyt kreatywny ;) wi?c je?li jest taka potrzeba, prosz? dok?adnie j? opisa? w tym temacie.
Wasz,
Infinity

Autorem skryptu jestem ja - http://otibia.net
 
Ostatnia edycja:
Odp: Bounty Hunter System

masz za to plusa u mnie jescze tylko war tal bys i by bylo super a mala prozba jak bys mog to do klej jescze do strony skrypty na php
 
Ostatnia edycja:
Odp: Bounty Hunter System

W jakiej Tabeli wklei? te Sql ??? ;(
 
Odp: Bounty Hunter System

Wchodzisz w baze danych swojego OTSa, i klikasz na SQL. Tam to wklejasz i wciskasz OK. W kt?rej tabeli, to oboj?tnie :o
 
Odp: Bounty Hunter System

dobra dzieki jestes wielki po wpisaniu od powiednich dostepu do bazy wywala takie cos
PHP:
Fatal error: Call to undefined function mysql_fecth_array() in C:\xampp\htdocs\bounty-hunters.php on line 44
 
Ostatnia edycja:
Odp: Bounty Hunter System

B??d poprawiony, zamiast
PHP:
mysql_fecth_array

wpisz
PHP:
mysql_fetch_array
 
Odp: Bounty Hunter System

i przyokazij do creaturevent przed return jest potrzebne jeszcze jedno end
 
Odp: Bounty Hunter System

Poprawione ;) Ja to wycina?em z mojego zbioru funkcji, m.in. Guild Wars. Mog?em si? pomyli? huh;)

Poprawiony problem ze skryptem na stronie ;)
 
Ostatnia edycja:
Odp: Bounty Hunter System

BUMP xD Zreszt? to pierwszy i ostatni raz. Nie chcecie to nie ;)
 
Odp: Bounty Hunter System

widzia?em ten tw?j skrypt na otland.net :D
szkoda ?e nie na nicawa bo fajny :/
 
Odp: Bounty Hunter System

Przeczytaj ko?c?wk? mojego pierwszego postu. ;)
 
Odp: Bounty Hunter System

aha tez wajnie wiedziec w zlym momecie;)
 
Odp: Bounty Hunter System

Bardzo dobry skrypt , takie co? ju? widzia?em na jedynym OTS.
Mo?na go zastosowa? na jakim? warze i ots w stylu rpg-pvp.
Pozdrawiam,
Arts
 
Odp: Bounty Hunter System

Jak bede mia? czas, zrobie kopie tego systemu like WypasOTS. Taak Elf, nie tylko ty potrafisz takie co? zrobi? ;)
 
Odp: Bounty Hunter System

@up
Elf raczej nie robi tego na pokaz, tylko by przyciagnac graczy na jego serwer. Jezeli juz chcesz mu dorownac w LUA, to napisz inteligentne kolko i krzyzyk w tym jezyku (elf to zrobil).

Co do bounty hunter, przepisz talkaction na NPC. Z moich testow wynika ze gracze wola korzystac z NPC, poniewaz jest ciekawiej, oraz bardziej pasuje to do klimatu RPG.
 
Odp: Bounty Hunter System

15:30 [BOUNTY HUNTERS] This player doesn't exists.

A je?li mi ca?y czas wywala taki b??d?
 
Ostatnia edycja:
Odp: Bounty Hunter System

BuMp <short message>

#up
W 0.2 nie ma potrzebnych funkcji, sorry men!
 
Odp: Bounty Hunter System

No nie ?le... Teraz jaki? best lvl na otsie mo?e si? pobawi? ,czyli ?e kto? mu da Hunta na 200cc i ?eby go ludzi zabili ,bo b?dzie nagroda... :) ?al troche ,ale mo?e by? ,ale za to skrypt nie z?y ,bo widzia?em go na innych otsach i m?wie ,?e jest fajny ;)
 
Status
Zamknięty.
Back
Do góry