Jump to content

SoundX

Advanced members
  • Content Count

    26
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by SoundX


  1. Hi all,

     

    just letting you know that if you add as email address a hotmail or outlook account, the confirmation email never sends. I tried change my email address to my current one and never received an email (not in spam either) since yesterday. I had to add google email to get back access to my account. Maybe it is something to check/fix if possible?


  2. Good morning, all, sorry if this is not the correct forum to post this topic.

     

    I want to try to play in the Russian server mordo.ru, but I have a problem with the client. All letters that are not hardcoded to image, or are not English letters, show as Greek letters. I don't use Windows a lot, and I don't know how to make it use the correct Russian characters instead of displaying non-sense with Greek letters.

     

    Here is what I mean:

    iJEkU8Mw.jpeg

     

    Loo2oDKi.jpg

     

    xLBTC3kL.jpg

     

    I installed Russian on my keyboard, but it didn't help. Anyone who knows about localisation in Windows could help? (I cannot remove Greek locale, but I should be able to display other UTF8 characters that are not English or Greek, normally?)

     

    Thank you in advance and sorry for my English. Also sorry for posting here, I cannot post to their forum cause I only know very little Russian, not enough to make a topic.


  3. Hi, you mean example if they are forged in boots to make them forge in gloves?

     

    This is done in "resource\script\calculate\variable.lua" file. You find the "StoneItemType" table and you change the values you want. The StoneItemType[xx] index of your gem you find it in "resource\stoneinfo.txt" and the values are:

     

    1 = 1 handed sword
    2 = 2 handed sword
    3 = Bow
    4 = Firegun
    7 = Daggers
    9 = Staff
    11 = Shield
    20 = Cap
    22 = Armor
    23 = Gloves
    24 = Boots
    27 = Tattoo

     

    So for example if you want to make Eye of Black Dragon forgeable in gloves and boots, you find in StoneInfo.txt that Eye of Black Dragon = 13 and then you change StoneItemType[13] in variable.lua to StoneItemType[13] = { 23,24,0 }

    • Like 1

  4. As two people have asked this, maybe this help the guide to be more complete:

     

    If you have custom quests in your server, and you don't register this quest on the client, you usually see the "Unknown quest" in an "Invalid type" section within the quest log:

     

    1wMTntl.jpg

     

    If you use the tweak described above, in some server files this might also reveal the Mission ID and see this as "Unknown Quest name ID [140]". This can be avoided easily though by adding the quest name to the client:

     

    Tales of Pirates Online\scripts\lua\mission\missioninfo.lua

     

    Add the quest name and type (1, normal, 2, story quest):

     

    -- AddMisData( <QUEST ID>	,	<QUEST NAME>,	<QUEST TYPE 1 or 2>)
    AddMisData( 140	,	"Revenge of the shrubs ",	1)

     

    And this should solve the problem

    u6WVnJi.jpg


  5. Hello, GTspeed,

     

    what exactly problem you have? To make a patch for the client, you must create a folder with structure like this:

     

    [PATCH DIRECTORY]
      -- [map]
         -- mymap1.map
         -- mymap1.obj
      -- [scripts]
         -- [table]
            -- iteminfo.bin
            -- StringSet.bin
      -- [texture]
         -- [minimap]
            -- [mymap1]
                -- mymap1.pk   

    so basically an folder structure exactly like your client structure. Then in your patch directory you copy the files you have changed in your client to the place it should be ^^ expl., above would be a patch with a new map <mymap1> and a different iteninfo and stringset

     

    Is this what you were asking?

     


  6. 7 hours ago, Tassadar said:

    and for the ip changer, if i dont have a site up yet do i leave the server reagion blank or put something random for now?

     

    Server region is like "Dream Island" and server name is like "Rainbow island". You can put anything random there, it doesn't have to do with site.

     

    The "IP Changer" program will edit the serverset.bit file for you, so you don't need to manually do it


  7. I don't know guides as you don't say a specific problem. You say your server files all work, can you connect the client to your server and play on your computer?

     

    To let people play in your server, you need serverset.bin (Tales of Pirates Client\scripts\table\serverset.bin) to point to correct IP. You can change the IP with IP changer tool I linked above and then copy serverset.bin into your patch directory

     

    PATCH DIRECTORY > scripts > table > serverset.bin

     

    Then any file you change, for example adding new items with iteminfo.txt in your server, you copy iteminfo.txt from your server to CLEINT > scripts > table > iteminfo.txt and compile the file to a bin file

    https://pkodev.net/index.php?/topic/26-client-txt-tables-compiling/

     

    Every file you change you copy it then to your Patch directory

    Then you can either make it all a zip file and send it to your users, or upload it to your website, so that htey can download and extract it, or use any autopatcher. Example this one: https://pkodev.net/index.php?/topic/1322-auto-updater-program, or any other patcher you have found should also have instructions

     

    if you still have problems please say the exact problem you have, what you did, what is the error, etc, as well s what server files you are using, what patcher/updater you are using, etc

     


  8. Hello, the first thing you need to do is to change your client IP to point to your server:

     

     

    Then for the patch create a similar directory structure as the client with the files that you have changed (ex if you changed iteminfo.bin create a directory tree MYPATCH > scripts > table > iteminfo.bin and either do it a zip/rar file that players can extract in their game folder or use the instruction in the autoupdater you found


  9. Hello everyone,

     

    was wondering if it is possible to change the colour of the name in common items (not ekipment). For example, for recovery type items, example HP or SP recovery is it possible to make it sothat they have different color than other common items? If it possible, should that be a client-side modification?

     

    Also, was wondering about the items types in ItemType.txt . It is a bit messy as it is, with chests, manu items, ami gloves, cook items, etc, all same type (31 - recovery items). If I separate items for their item type, does it affect anything else in the game?

     

    Sorry for my english, and thanks in advance for answers


  10. This is great idea, especially `ItemEffect.lua` can be reduced to 1/4 length by replacing repeated functions.

     

    Here is another snipet to replace the more than 1000 lines with skills (also so many skills unused by the game, anyone has try using them and see what they can do?)

     

    For example we have this function for "Dual Shot" skill:

     

    -- Dual shot skill book (iteminfo.txt ID = 3190)
    function Sk_Script_Lzj ( role , Item )
    										
    	local sk_add = SK_LZJ  
    	local form_sklv = GetSkillLv( role , sk_add ) 
    
    	if form_sklv ~= 0  then 
    		UseItemFailed ( role )  
    		return 
    	end 
    	a = AddChaSkill ( role , sk_add, 1 , 1 , 1 ) 
    	if a== 0 then 
    		UseItemFailed ( role )  
    		return 
    	end 
    end 

     

    we need to note down skill book ID in iteminfo.txt, and also the `local sk_add` value. The `sk_add` value is in `variable.lua` and correspond to the skill ID in `skillinfo.txt`. For example, `SK_LZJ` in variable.lua is `SK_LZJ        =    90`, which is the skill ID for Dual Shot in skillinfo.txt.

     

    So we can replace all the skill books with an array in `ItemEffect.lua`:

     

    Class_Skill_Book = {}
    -- Class_Skill_Book[<skill book ID in iteminfo.txt>] = <skill ID in skillinfo.txt> --
    Class_Skill_Book[3184] = 73		-- Shield Mastery (unknown)
    Class_Skill_Book[3190] = 90		-- Dual Shot
    Class_Skill_Book[3193] = 112	-- Meteor Shower
    -- etc... --

     

    and then replace all the skill book functions with the following:

     

    function Class_Skill_Books ( role , Item )
    	
    	local bk_ID = GetItemID(Item)
    	local sk_add = Class_Skill_Book[bk_ID]
    	local form_sklv = GetSkillLv( role , sk_add )
    	
    	if form_sklv ~= 0  then 
    		UseItemFailed ( role )  
    		return 
    	end 
    	a = AddChaSkill ( role , sk_add, 1 , 1 , 1 ) 
    
    	if a == 0 then 
    		UseItemFailed ( role )  
    		return 
    	end 
    end

     

    To use it, in `ItemInfo.txt` we have to replace the skill book's fnction with `Class_Skill_Books`

     

    ex.

    3190	Dual Shot	book2	10130005	0	0	0	0	0	00	34	0	0	0	0	0	1	1	1	1	1	0	1680	-1	0	-1	0	0	-1	-1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0,0	0	0	0,0	0	0	0	0	0	0	0	0	0	Class_Skill_Books	0	0	0	0	0	0	Class: Hunter Level Requirement: Lv 29 Prerequisite: Eagle Eye Lv 3, Archery Lv 3

     

    • Like 1

  11. Hi all. I am posting this here as it took me some time to figure it out and maybe someone else wants to use it as well.

     

    - What we want to achieve:

    xm5lwMC.png

     

    Mission shows a "[Completed]" flag in the quest log when we have collected all items - killed all mobs

     

    - In directory `/resource/script/MisSdk/`

     

    1. File: ScriptSdk.lua:

    We will start a variable called `MissionSid    = {}` in global variables definition, line ~=16 (below `Mission` variable):
     

    Spoiler

     

    
    -- Scripting system - Global Variables
    
    Page       = {}				-- global variable definition: NPC dialog Information
    Exchange  = {}
    ExchangeX = {}
    FuncList  = {}
    Trade     = {}				-- global variable definition: NPC Transaction Information 
    Goods	 = {}				-- global variable definition: NPC Cargo Transaction Information
    Mission    = {}				-- global variable definition: All mission information
    MissionSid	= {}			-- global variable definition: Mission ID corresponding to Task ID
    MisLogList = {}				-- global variable definition: Mission information saved to logs

     

     

     

     

    and in function `DefineMission` we will cal the MissionSid with a misid index:
     

    Spoiler

     

    
    -- Register  task profile
    function DefineMission( id, name, misid, show, mistp )
    	LG( "mission", "ID: "..id, " Name:"..name, " MisID:"..misid )
    	-- Set task profile
    	MissionSid[misid] = id
    	Mission[id] = {}
    	Mission[id].id = misid		-- Task Identification ID
    	Mission[id].sid = id 		-- Script Task Index ID
    	Mission[id].name = name

     

     

     

    1. File: MissionSdk.lua:

    Here we will use the function `RefreshCompleteFlag` (used normally by random class quests, "A hunter's life" etc).

     

    First in the `RefreshCompleteFlag` function itself: The function defines a local called: `local mission`. We will start this local with the value of `Mission[sid]`, so replace `local mission` with `local mission = Mission[sid]`:

     

    Spoiler
    
    -- Refresh task status if is completed
    function RefreshCompleteFlag( character, sid )
    	PRINT( "RefreshCompleteFlag" )
    	if sid == nil or Mission[sid] == nil then
    		PRINT( "RefreshCompleteFlag:incorrect quest script ID number,sid = "..sid )
    		SystemNotice( character, "RefreshCompleteFlag:incorrect quest script ID number,sid = "..sid )
    		return LUA_FALSE
    	end
    
    	local mission = Mission[sid]
    	if Mission[sid].tp == NOMAL_MISSION then
    		mission = Mission[sid]
    	elseif Mission[sid].tp == RAND_MISSION then
    		-- Random task has been accepted, check if can be deliver

     

     

    Then we need to use the `RefreshCompleteFlag` function in the `AddNextFlag` function: ( we added the line `RefreshCompleteFlag(character,MissionSid[id])` ):

     

    Spoiler
    
    function AddNextFlag( character, id, startflag, count )
    	if id == nil or startflag == nil or count == nil then
    		SystemNotice( character, "AddNextFlag:Function parameter error!" )
    	end
    	local num = 0
    	for i = 1, count, 1 do
    		local ret = IsFlag( character, id, startflag + num )
    		if ret == LUA_FALSE then
    			PRINT( "AddNextFlag: flag = ", startflag + num )
    			ret = SetFlag( character, id, startflag + num )
    			RefreshCompleteFlag(character,MissionSid[id])

     

     

    I hope this can help someone. Sorry for my English and if there are mistakes/bad scripting/better way, please let me know

    • Like 4

  12. 14 hours ago, Rinor said:

    Share the way you fixed it so if anyone will have the same problem in future he can search and find the solution here, just saying.

     

    Hi, of course, the reason I didn't was because the problem was caused not by the quest itself but from another modification I made. In `MissionSdk.lua`, I have was using the `RefreshCompleteFlag` function to mark as complete quests in the quest log and I think this conflicted with Eudemon quests. Without the "Complete" flag modification, the problem does not show in unmodified 1.38 script files.

     

    Plus I have not solved still the problem with timed quest, so for the moment I just removed the timer << This still happens even without any modifications to the files, trying to test if if only happens with Eudemon quests, if I find something Iwill add details here

     

    Edit: using the `RefreshCompleteFlag` function like this does not cause problem when killing mob (remaining to understand the time out problem)

     


  13. Hi all,

     

    Using PKO1.38 server files from MEGA archive and testing story quest: I have the following problem:

     

    There is a subquest, called "Lure Behemoth" that is timed and requires player to kill Behemoth within 60 mins from accepting the quest. Relevant functions:

     

    - MissionScript02.lua

    Spoiler
    
    DefineMission( 285, "Stolen Lunchbox", 253 )
    
    	MisBeginTalk( "<t>It was supposed to be a happy day today as Granny - Beldi has made me so many pastries. I happily packed them into my lunchbox and brought them to work but it was stolen the moment I turned away!<n><t>It was a <rNinja Mole>! I saw it too late, for it has already escaped into the Abandoned Mine. I dare not enter that scary place.<n><t>Can you please help me get my lunchbox back? Otherwise...I will not have enough energy to work...These creatures often appear at (229, 28). " )
    	MisBeginCondition(HasRecord, 252)
    	MisBeginCondition(NoMission, 253)
    	MisBeginCondition(NoRecord, 250)
    	MisBeginCondition(NoRecord, 253)  --暂时不许重复接
    	MisBeginCondition(NoMission, 4)
    	MisBeginAction(AddMission, 253)
    	MisBeginAction(AddTrigger, 2531, TE_GETITEM, 4084, 1 )		--便当x1
    	MisCancelAction(ClearMission, 253)
    
    	MisNeed(MIS_NEED_ITEM, 4084, 1, 10, 1)
    
    	MisPrize(MIS_PRIZE_ITEM, 3917, 1, 4)
    	MisPrizeSelAll()
    
    	MisResultTalk("<t> You are my saviour! Hohoho! Its my lunchbox! Thank you so much! This is great!<n><t>Come! This <yStrawberry Biscuit> is for you! Remember! Do not ever go to <pAbandoned Mine 2> to eat the biscuit! There is a monster residing at a corner who loves to attack anybody with tasty biscuit!!!")
    	MisHelpTalk("<t>Can't work…Too hungry…")
    	MisResultCondition(HasMission, 253 )
    	MisResultCondition(HasItem, 4084, 1 )
    	MisResultAction(TakeItem, 4084, 1 )
    	MisResultAction(ClearMission, 253 )
    	MisResultAction(SetRecord, 253 )
    	MisResultAction(ObligeAcceptMission, 4 )
    	MisResultAction(AddTrigger, 109, TE_KILL, 99, 1 )
    	MisResultAction(AddTrigger, 108, TE_GAMETIME, TT_MULTITIME, 60, 1 )
    	MisResultAction(AddExp,4500,4500)
    	MisResultAction(AddMoney,2000,2000)
    	MisResultAction(AddExpAndType,2,9035,9035)
    	MisResultBagNeed(1)
    
    
    	InitTrigger()
    	TriggerCondition( 1, IsItem, 4084 )	
    	TriggerAction( 1, AddNextFlag, 253, 10, 1 )
    	RegCurTrigger( 2531 )
    	InitTrigger()
    	TriggerCondition( 1, NoMisssionFailure, 4 )
    	TriggerCondition( 1, IsMonster, 99 )
    	TriggerAction( 1, AddNextFlag, 4, 10, 1 )
    	RegCurTrigger( 109 )
    	InitTrigger()
    	TriggerCondition( 1, NoFlag, 4, 10 )
    	TriggerAction( 1, SystemNotice, "Quest countdown is over. Lure Behemoth failed!" )
    	TriggerAction( 1, SetMissionFailure, 4 )
    	RegCurTrigger( 108 )

     

     

    - EudemonScript.lua

    Spoiler
    
    DefineWorldMission( 4, "Lure Behemoth", 4 )
    
    	MisBeginTalk( "<t>Proceed to <pAbandoned Mine 2> and find the lair of the Behemoth. When you reached the lair, use the <ySpecial Strawberry Biscuit> and see what happens.<n><t>Once you manage to lure the beast out, please kill him within the hour." )
    	MisHelpTalk( "<t>Proceed to <pAbandoned Mine 2> and find the lair of the Behemoth. When you reached the lair, use the <ySpecial Strawberry Biscuit> and see what happens.<n><t>Once you manage to lure the beast out, please kill him within the hour." )
    	MisBeginAction( AddMission, 4 )
    	MisBeginAction(SystemNotice, "Obtained Quest: 'Lure Behemoth'" )
    
    --	MisCancelAction(ClearMission, 4 )
    --	MisCancelAction(ClearTrigger, 109 )
    --	MisCancelAction(ClearTrigger, 108 )
    	MisCancelAction(SystemNotice, "This quest cannot be abandoned" )
    --	MisCancelAction(ClearMission, 4 )
    
    	MisNeed(MIS_NEED_DESP, "Use the Strawberry biscuit to lure the Behemoth" )
    	MisNeed(MIS_NEED_KILL, 99, 1, 10, 1)
    
    	MisResultCondition( AlwaysFailure )

     

     

    Here is my problems:

     

    - When kill Behemoth, an error with strange encoding appears:

    hLl9p3d.png

     

    - If I don't submit the quest within the hour, I get the following message:

    CCharMission: GetItem: quest manage function [TriggerProc]transfer return failed!

    I have tried all things I can think of:

    - Disable "MisResultAction(AddTrigger, 108, TE_GAMETIME, TT_MULTITIME, 60, 1 )" and its related trigger (as it seems to be in KOP2.4 files)

    - Change TRIGGER_ID to 2539 and 2538 from 109 and 108, as following the guide (and then to 49,48 as the eudemon quest ID is 4)

    - Even changed clients to see if problem was client side, but it is same with clean TOP1 client "Frozen relics" and KOP client War of Eternity from MEGA archive

     

    Anyone knows how can resolve this?

     

    Thanks in advance and sorry for my english


  14. Having looked at this more, it seems like the "item[n]" parametres correspond to probability for the item to fall, and cannot be set to determine the item's ID.

     

    So, I am wondering two things:

     

    - Is there any function that controls drop from monsters? I can achieve what I want with "GiveItem()", but I would rather the item to drop and not appear directly on inventory.

    - My initial question: Where are all these functions defined? Like the "SetItemFall", "GiveItem", etc? Are they lua functions, or are they somehow integrated with the server's code? Sorry for the rookie question, I don't know a lot about programming.

     

    Thanks for reading


  15. Hi, haven't tested if registration works with this edits, but to avoid the deprecated mssql_connect() you can edit this line in `index.php`:

    Edited: changed all calls to mssql_* functions, this should work for you:


     

    Spoiler

     

    Replace in index.php:

    
    <?php
    
    session_start();
    include 'config.php';
    include 'functions.php';
    if(!@include 'lang/'.$config['other']['lang'].'.php')
    	die('Не найдена языковая библиотека <b>'.$config['other']['lang'].'</b>./Not found language library <b>'.$config['other']['lang'].'.</b');
    $serverName = $config['db']['host'];
    $connectionInfo = array(
    	"UID" => $config['db']['user'],
    	"PWD" => $config['db']['password']
    );
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    
    
    if(isset($_POST['reg'])) {
    	if(empty($_POST['login'])) $page = "<span class=\"error\">".$lang_error1."</span>".$page;
    	else if(empty($_POST['password'])) $page = "<span class=\"error\">".$lang_error2."</span>".$page;
    	else if(empty($_POST['password2'])) $page = "<span class=\"error\">".$lang_error3."</span>".$page;
    	else if(empty($_POST['email'])) $page = "<span class=\"error\">".$lang_error4."</span>".$page;
    	else if(empty($_POST['email2'])) $page = "<span class=\"error\">".$lang_error5."</span>".$page;
    	else {
    		if($_POST['password'] == $_POST['password2']) {
    			$login = $_POST['login'];
    			$pass = $_POST['password'];
    			$email = $_POST['email'];
    			
    			if ((preg_match("/[^a-z0-9_-]/", $login)) || (preg_match("/[^a-z0-9_-]/", $pass)) ) {
    				$page = "<span class=\"error\">".$lang_error6."</span>".$page;
    			} else {
    				if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    					if(strlen($login) > 4 && strlen($pass) > 4) {
    						if(strlen($login) < 16 && strlen($pass) < 16)
    						{
    							$sql=("SELECT * FROM accountserver.dbo.account_login WHERE name='$login'");
    							$params = array();
    							$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    							$stmt = sqlsrv_query( $conn, $sql , $params, $options );
    							$row_count = sqlsrv_num_rows( $stmt );
    							if( $row_count > 0) $page = "<span class=\"error\">".$lang_error7."</span>".$page;
    							else if($_SESSION['captcha_keystring'] != htmlentities($_POST['captcha'])) $page .= "<span class=\"error\">".$lang_error8."</span>";
    							else {
    								if($email == $_POST['email2'])
    								{
    									if(strlen($email) < 26)
    									{
    										$encr_pass = strtoupper(md5($pass));
    										$sql=("INSERT INTO accountserver.dbo.account_login (name,password,originalPassword,email) VALUES ('$login','$encr_pass','$pass', '$email')");
    										$params = array();
    										$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    										sqlsrv_query( $conn, $sql , $params, $options );
    										$page = "<span class=\"complete\">".$lang_complete."</span>";
    									}
    									else $page = "<span class=\"error\">".$lang_error13."</span>";
    								}
    								else
    								{
    									$page = "<span class=\"error\">".$lang_error9."</span>";
    								}
    							}
    						}
    						else $page = "<span class=\"error\">".$lang_error12."</span>".$page;
    					} else $page = "<span class=\"error\">".$lang_error10."</span>".$page;
    				} else $page = "<span class=\"error\">".$lang_error14."</span>".$page;
    			}
    		} else $page = "<span class=\"error\">".$lang_error11."</span>".$page;
    	}
    	
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <meta http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT" /> 
    <meta http-equiv="Pragma" content="no-cache" /> 
    <title><?php echo $config['server']['name']." - ".$lang_register; ?></title>
    	<style type="text/css">
    		*{padding: 0; margin: 0;}
    		body {font: 12px/18px Arial, Tahoma, Verdana, sans-serif;background: #9de7fb;}
    		#title{background-image: url(./img/title.png); width: 651px; height: 80px; text-align: center; padding-top: 25px; font-size: 30px; font-weight: bold; margin: 0 auto; margin-top: 15px;font-family:'Monotype Corsiva';}
    		#button-register{width: 222px;height: 78px;display: block;background: url(./img/button-register-<?php echo $config['other']['lang'];?>.png) no-repeat;}	
    		#button-register:hover{background-position: 100% -78px;}
    		#button-clear{width: 222px;height: 78px;display: block;background: url(./img/button-clear-<?php echo $config['other']['lang'];?>.png) no-repeat;}
    		#button-clear:hover{background-position: 100% -78px;}
    		#image {border: 2px dotted;}
    		.label{float: right;padding-right: 5px;font-weight: bold;font-size: 15px;}
    		.edit1 {width: 180px;height: 33px;font-size: 20px;border:none;background: url(./img/edit1.png) 0 0 no-repeat;padding:1px 15px 1px 15px;outline: none;}
    		.edit2 {width: 126px;height:33px;border:none;font-size: 20px;background:url(./img/edit2.png) 0 0 no-repeat;padding:1px 15px 1px 15px;outline: none;}
    		.error{color: #ff0000}
    		.complete{color: #008000;}
    		#menu{height: auto; wigth: 100%; padding: 5px;  background:url(./img/grad.jpg) repeat-x #c0c0c0;}
    		#main_form{height: auto; width: 450px; margin: 0 auto;}
    		
    		.button-top_exp{height:26px;width:121px;display:block; background:url(./img/topexp-<?php echo $config['other']['lang'];?>.png) no-repeat;}
    		.button-top_exp:hover{background-position: 100% -26px;}
    		.button-top_exp_selected{height:26px;width:121px;display:block; background:url(./img/topexp-<?php echo $config['other']['lang'];?>.png) no-repeat;background-position: 100% -52px;}
    
    		.button-top_gold{height:26px;width:121px;display:block;background:url(./img/topgold-<?php echo $config['other']['lang'];?>.png) no-repeat;}
    		.button-top_gold:hover{background-position: 100% -26px;}
    		.button-top_gold_selected{height:26px;width:121px;display:block;background:url(./img/topgold-<?php echo $config['other']['lang'];?>.png) no-repeat;background-position: 100% -52px;}
    		
    		.button-register_menu{height:26px;width:121px;display:block;background:url(./img/register-<?php echo $config['other']['lang'];?>.png) no-repeat;}
    		.button-register_menu:hover{background-position: 100% -26px;}
    		.button-register_menu_selected{height:26px;width:121px;display:block;background:url(./img/register-<?php echo $config['other']['lang'];?>.png) no-repeat;background-position:100% -52px;}
    		
    		.button-top_guild{height:26px;width:121px;display:block;background:url(./img/topguild-<?php echo $config['other']['lang'];?>.png) no-repeat;}
    		.button-top_guild:hover{background-position:100% -26px;}
    		.button-top_guild_selected{height:26px;width:121px;display:block;background:url(./img/topguild-<?php echo $config['other']['lang'];?>.png) no-repeat;background-position:100% -26px;}
    		
    		.button-statistic_menu{height:26px;width:121px;display:block;background:url(./img/stats-<?php echo $config['other']['lang'];?>.png) no-repeat;}
    		.button-statistic_menu:hover{background-position: 100% -26px;}
    		.button-statistic_menu_selected{height:26px;width:121px;display:block;background:url(./img/stats-<?php echo $config['other']['lang'];?>.png) no-repeat;background-position: 100% -52px;}
    	</style>
    </head>
    
    <body>
    	<div id="menu">
    		<table>
    			<tr>
    				<th><a href="index.php" class="button-register_menu_selected"></a></th>
    				<th><a href="top.php?rank=exp" class="button-top_exp"></a></th>
    				<th><a href="top.php?rank=gold" class="button-top_gold"></a></th>
    				<th><a href="top.php?rank=guild" class="button-top_guild"></a></th>
    				<!--<th><a href="statistics.php" class="button-statistic_menu"></a></th> *-->
    			</tr>
    		</table>
    	</div>
    	
    	<div id="title"><?php echo $config['server']['name']?></div>
    	<div id="main_form">
    		<table>
    			<form action="<?php echo htmlentities($_SERVER['PHP_SELF'])?>" method="POST" name="main_form">
    				<input type="hidden" name="reg" value="reg">
    				
    					<tr><th colspan="2"><?php if(isset($_POST['reg'])) echo $page; else echo '&nbsp;';?></th></tr>
    					<tr><td><span class="label" id="label1"><?php echo $lang_login; ?>:</span></td><td><input type="text" name="login" class="edit1" onClick="document.getElementById('label1').style.color='#6f98cd';" onBlur="document.getElementById('label1').style.color='#000'" id="Edit1" maxlength="15" /></td></tr>
    					<tr><td><span class="label" id="label2"><?php echo $lang_password; ?>:</span></td><td><input type="password" name="password" class="edit1" onClick="document.getElementById('label2').style.color='#6f98cd'" onBlur="document.getElementById('label2').style.color='#000'" maxlength="15" /></td></tr>
    					<tr><td><span class="label" id="label3"><?php echo $lang_repassword; ?>:</span></td><td><input type="password" name="password2" class="edit1" onClick="document.getElementById('label3').style.color='#6f98cd'" onBlur="document.getElementById('label3').style.color='#000'" maxlength="15" /></td></tr>
    					<tr><td><span class="label" id="label4"><?php echo $lang_email; ?>:</span></td><td><input type="text" name="email" class="edit1" onClick="document.getElementById('label4').style.color='#6f98cd'" onBlur="document.getElementById('label4').style.color='#000'" maxlength="25" /></td></tr>
    					<tr><td><span class="label" id="label5"><?php echo $lang_reemail ?>:</span></td><td><input type="text" name="email2"  class="edit1" onClick="document.getElementById('label5').style.color='#6f98cd'" onBlur="document.getElementById('label5').style.color='#000'" maxlength="25" /></td></tr>
    					<tr><th colspan="2" id="label6"><?php echo $lang_code; ?>:</th></tr>
    					<tr><th colspan="2"><img src="kcaptcha/?<?php echo session_name()?>=<?php echo session_id()?>" id="image"></th></tr>
    					<tr><th colspan="2"><input type="text" name="captcha" class="edit2" onClick="document.getElementById('label6').style.color='#6f98cd';document.getElementById('image').style.border='2px dotted #6f98cd';" onBlur="document.getElementById('label6').style.color='#000';document.getElementById('image').style.border='2px dotted #000';" style="text-align: center;" maxlength="6" /></th></tr>
    					<tr><td><a href="#" onClick="main_form.submit();" id="button-register"></a></td><td><a href="#"  onClick="main_form.reset()" id="button-clear"></a></td></tr>
    				
    			</form>
    			<?php if($config['other']['show_strong']){?>
    				<tr>
    					<td>
    					<?php
    						$sql = "SELECT TOP 1 g.guild_id, c.cha_name, c.icon, c.degree, c.job, CASE WHEN (c.exp < 0) THEN (c.exp+4294967296) ELSE c.exp END AS exp, CASE WHEN (g.guild_id = 0) THEN '-' ELSE guild_name END AS guild_name FROM gamedb.dbo.character AS c LEFT JOIN gamedb.dbo.account AS a ON (a.act_id = c.act_id) LEFT JOIN gamedb.dbo.guild AS g ON ((c.guild_id = g.guild_id) AND (c.guild_stat = 0)) WHERE (ISNULL(c.deldate,0) = 0 AND (a.gm = 0)) ORDER BY CASE WHEN (c.exp < 0) THEN (c.exp+4294967296) ELSE c.exp END DESC";
    						$params = array();
    						$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    						$stmt = sqlsrv_query( $conn, $sql , $params, $options );
    						$row_count = sqlsrv_num_rows( $stmt );
    						
    						if( $row_count > 0)
    						{
    							$character = mssql_fetch_array($result);
    							
    							$picture = getCharPicture((int)$character['icon'], $character['job']);
    							$picture = (file_exists('img/chars/'.$picture)) ? $picture : 'unknown.gif';	
    					?>
    						<table style="margin-top: 15px;">
    						  <tr><th colspan="2" style="text-align: left;"><?php echo $lang_strong;?></th><tr>
    						  <tr><td rowspan="5" width="76" height="96"><img src="img/chars/<?php echo $picture; ?>" alt="<?php echo $picture; ?>" /></td><td style="border-bottom: 1px dotted #000;"><?php echo $character['cha_name']; ?></td></tr>
    						  <tr><td style="border-bottom: 1px dotted #000;"><?php echo $character['degree']; ?></td></tr>
    						  <tr><td style="border-bottom: 1px dotted #000;"><?php echo $character['job']; ?></td></tr>
    						  <tr><td style="border-bottom: 1px dotted #000;" valign="top"><?php echo $character['guild_name']; ?></td></tr>
    						  <tr><td valign="top">&nbsp;</td></tr>
    						</table>
    					<?php 
    						}
    						else
    						{
    							echo '<img src="img/none.jpg" alt="'.$lang_nostrong.'" style="margin-top: 15px;">';
    							echo '<p><b>'.$lang_nostrong.'</b></p>';
    						}
    					?>
    					</td>
    					<td>
    					<?php
    						$sql = "SELECT TOP 1 g.guild_id, c.gd, c.cha_name, c.icon, c.job, CASE WHEN (g.guild_id = 0) THEN '-' ELSE guild_name END AS guild_name FROM gamedb.dbo.character AS c LEFT JOIN gamedb.dbo.account AS a ON (a.act_id = c.act_id) LEFT JOIN gamedb.dbo.guild AS g ON ((c.guild_id = g.guild_id) AND (c.guild_stat = 0)) WHERE (ISNULL(c.deldate,0) = 0 AND (a.gm = 0)) ORDER BY gd DESC";
    						$params = array();
    						$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    						$stmt = sqlsrv_query( $conn, $sql , $params, $options );
    						$row_count = sqlsrv_num_rows( $stmt );
    						if( $row_count > 0)
    						{
    							$character = mssql_fetch_array($result);
    							
    							$picture = getCharPicture((int)$character['icon'], $character['job']);
    							$picture = (file_exists('img/chars/'.$picture)) ? $picture : 'unknown.gif';	
    					?>
    						<table align="right" style="margin-top: 15px; text-align: left;">
    						  <tr><th colspan="2"><?php echo $lang_rich;?></th><tr>
    						  <tr><td rowspan="5" width="76" height="96"><img src="img/chars/<?php echo $picture; ?>" alt="<?php echo $picture; ?>" /></td><td style="border-bottom: 1px dotted #000;"><?php echo $character['cha_name']; ?></td></tr>
    						  <tr><td style="border-bottom: 1px dotted #000;"><?php echo $character['gd']; ?></td></tr>
    						  <tr><td style="border-bottom: 1px dotted #000;"><?php echo $character['job']; ?></td></tr>
    						  <tr><td style="border-bottom: 1px dotted #000;"><?php echo $character['guild_name']; ?></td></tr>
    						  <tr><td valign="top">&nbsp;</td></tr>
    						</table>
    					<?php 
    						}
    						else
    						{
    							echo '<img src="img/none.jpg" alt="'.$lang_norich.'" style="margin-top: 15px;">';
    							echo '<p><b>'.$lang_norich.'</b></p>';
    						}
    					?>
    					</td>
    				</tr>
    			<?php }?>
    			</table>
    	</div>
    
    </body>
    </html>


     

     

    For me the captcha image did not work and did not have time to check it, so I just commented out line 41: "else if($_SESSION['captcha_keystring']"

     

    This only makes work the registration, to have rankings work you change the mssql_ functions with the respective sqlsrv_ functions. Hope this can help

    • Like 1

  16. Hello everyone,

     

    Sorry for the stupid question, I am novice in lua and am having a very big confusion regarding where some functions are defined.

     

    My question is: in the file "itemeffect.lua" inside the function: "function Check_Baoliao(ATKER, DEFER, ... )":

     

    There is this line repeated 3 times, for when player is killed in PVP, when monster is killed in PVE or when resource is used:

     

    SetItemFall ( count , item[1] , item[2] , item[3] , item[4] , item[5] , item[6], item[7] ,item[8],item[9],item[10] )

     

    I am trying to understand where the "SetItemFall" is defined, as I want to use it in another function in order to alter drops. However, it seems it cannot be used outside "Check_Baoliao"? However, it is not defined as a function in Check_Baoliao either, or in any other file inside the "calculate" directory.

     

    The reason I want to use it is because I am trying to add a drop for every mob in "exp_and_level.lua":


     

    Spoiler

     

    This works:

     

    
        -- >>> Add item dropping to every mob
        local ItemFallsMonster = GetChaAttrI( dead , ATTR_LV )
        if ValidCha (team_atker) == 0 then
            SystemNotice(atk,'A hidden Fairy Ration')
            GiveItem( atk ,  0 , 227 , 1, 4 )
        end
        -- <<< END Add item dropping to every mob

     

     

    But this does not:

     

    
    -- >>> Add item dropping to every mob
        local ItemFallsMonster = GetChaAttrI( dead , ATTR_LV )
        if ValidCha (team_atker) == 0 then
            SystemNotice(atk,'A hidden Fairy Ration')
            SetItemFall( 1, 227 )
        end
    
        -- <<< END Add item dropping to every mob

     

     

     

     

     

    Trying to get this working before start playing with dropping chance percentages (that I think depend on the "StateLv" and "MF_RAID_STATE"?)

     

    Sorry for my English and thanks in advance

×
×
  • Create New...